template<class Resource, class Lock = Mutex>
Rodin::Threads::Mutable class

A thread-safe mutable wrapper for a resource.

Template parameters
Resource The type of the resource to be encapsulated.
Lock The type of the lock to use for thread-safety (default is Mutex).

The Mutable class encapsulates a resource and provides both read and write access with optional thread-safety. When RODIN_THREAD_SAFE is defined, all modifying and accessing operations are protected by a lock of type Lock (defaulting to Mutex).

Constructors, destructors, conversion operators

Mutable() constexpr
Default constructor.
Mutable(const Resource& resource) constexpr
Constructs a Mutable object from a const reference.
Mutable(Resource&& resource) constexpr
Constructs a Mutable object by moving a resource.
Mutable(Mutable&& other) constexpr
Move constructor.
Mutable(const Mutable& other) constexpr
Copy constructor.

Public functions

auto operator=(const Resource& resource) -> Mutable& constexpr
Assignment operator from a Resource.
auto operator=(Resource&& resource) -> Mutable& constexpr
Move assignment operator from a Resource.
auto operator=(const Mutable& other) -> Mutable& constexpr
Copy assignment operator.
auto operator=(Mutable&& other) -> Mutable& constexpr
Move assignment operator.
auto write() -> Resource& constexpr
Provides non-const (write) access to the encapsulated resource.
auto read() const -> const Resource& constexpr
Provides read-only access to the encapsulated resource.
template<class F>
auto read(F&& f) const -> Mutable& constexpr
Executes a callable with read-only access to the resource.
template<class F>
auto write(F&& f) -> Mutable& constexpr
Executes a callable with write access to the resource.

Function documentation

template<class Resource, class Lock>
Rodin::Threads::Mutable<Resource, Lock>::Mutable() constexpr

Default constructor.

Constructs an empty Mutable object.

template<class Resource, class Lock>
Rodin::Threads::Mutable<Resource, Lock>::Mutable(const Resource& resource) constexpr

Constructs a Mutable object from a const reference.

Parameters
resource The resource to be encapsulated.

template<class Resource, class Lock>
Rodin::Threads::Mutable<Resource, Lock>::Mutable(Resource&& resource) constexpr

Constructs a Mutable object by moving a resource.

Parameters
resource The resource to be encapsulated.

template<class Resource, class Lock>
Rodin::Threads::Mutable<Resource, Lock>::Mutable(Mutable&& other) constexpr

Move constructor.

Parameters
other The Mutable object to move from.

Transfers the encapsulated resource from another Mutable object.

template<class Resource, class Lock>
Rodin::Threads::Mutable<Resource, Lock>::Mutable(const Mutable& other) constexpr

Copy constructor.

Parameters
other The Mutable object to copy from.

Copies the encapsulated resource from another Mutable object.

template<class Resource, class Lock>
Mutable& Rodin::Threads::Mutable<Resource, Lock>::operator=(const Resource& resource) constexpr

Assignment operator from a Resource.

Parameters
resource The new value to assign to the resource.
Returns A reference to this Mutable object.

Assigns a new value to the encapsulated resource. In thread-safe builds, the assignment is performed under lock protection.

template<class Resource, class Lock>
Mutable& Rodin::Threads::Mutable<Resource, Lock>::operator=(Resource&& resource) constexpr

Move assignment operator from a Resource.

Parameters
resource The resource to move into this object.
Returns A reference to this Mutable object.

Moves a new value into the encapsulated resource. In thread-safe builds, the assignment is performed under lock protection.

template<class Resource, class Lock>
Mutable& Rodin::Threads::Mutable<Resource, Lock>::operator=(const Mutable& other) constexpr

Copy assignment operator.

Parameters
other The Mutable object to copy from.
Returns A reference to this Mutable object.

Assigns the resource from another Mutable object. In thread-safe builds, the assignment is performed under lock protection.

template<class Resource, class Lock>
Mutable& Rodin::Threads::Mutable<Resource, Lock>::operator=(Mutable&& other) constexpr

Move assignment operator.

Parameters
other The Mutable object to move from.
Returns A reference to this Mutable object.

Transfers the resource from another Mutable object into this one. In thread-safe builds, the assignment is performed under lock protection.

template<class Resource, class Lock>
Resource& Rodin::Threads::Mutable<Resource, Lock>::write() constexpr

Provides non-const (write) access to the encapsulated resource.

Returns A reference to the resource.

template<class Resource, class Lock>
const Resource& Rodin::Threads::Mutable<Resource, Lock>::read() const constexpr

Provides read-only access to the encapsulated resource.

Returns A const reference to the resource.

template<class Resource, class Lock> template<class F>
Mutable& Rodin::Threads::Mutable<Resource, Lock>::read(F&& f) const constexpr

Executes a callable with read-only access to the resource.

Template parameters
F The type of the callable.
Parameters
f The callable to execute.
Returns A reference to this Mutable object.

The callable is invoked with a const reference to the resource. Note: The parameter name for the callable is intentionally omitted.

template<class Resource, class Lock> template<class F>
Mutable& Rodin::Threads::Mutable<Resource, Lock>::write(F&& f) constexpr

Executes a callable with write access to the resource.

Template parameters
F The type of the callable.
Parameters
f The callable to execute.
Returns A reference to this Mutable object.

The callable is invoked with a non-const reference to the resource. In thread-safe builds, the operation is performed under lock protection.