#ifndef LOCKABLE_DOBJECT_H
#define LOCKABLE_DOBJECT_H

#include "DObject.h"
#include <mutex>

/**
 * @file LockableDObject.h
 * @brief A lightweight wrapper for DObject that adds locking capabilities.
 *
 * This class allows safe concurrent access to a DObject by providing
 * locking and unlocking methods.
 */

/**
 * @class LockableDObject
 * @brief Wrapper for DObject with thread-safe access.
 */
class LockableDObject {
public:
    /**
     * @brief Default constructor.
     */
    LockableDObject() = default;

    /**
     * @brief Access the underlying DObject.
     * @return A reference to the wrapped DObject.
     */
    DObject& get();

    /**
     * @brief Locks the mutex to ensure thread-safe access.
     */
    void lock();

    /**
     * @brief Unlocks the mutex after thread-safe access.
     */
    void unlock();

private:
    DObject object_;        ///< The underlying DObject instance.
    std::mutex mutex_;      ///< Mutex for thread-safe access.
};

#endif // LOCKABLE_DOBJECT_H