Orocos Real-Time Toolkit 2.6.0
Smart pointer that allows safe sharing of data between multiple threads. More...
|ReadOnlyPointer (T *ptr=0)|
|traits::const_reference||operator* () const|
|T const *||operator-> () const|
|bool||valid () const|
|True if this refers to a non-NULL pointer. |
|T const *||get () const|
|void||reset (T *ptr)|
|Modifies the value referenced by this smart pointer. |
|T *||try_write_access ()|
|Gets write access to the pointed-to object if it does not require any copying. |
|T *||write_access ()|
|Gets write access to the pointed-to object. |
Smart pointer that allows safe sharing of data between multiple threads.
This smart pointer registers a memory area as being read-only. It can therefore be shared safely between threads without adding means of synchronization between the threads. Indeed: the value will *not* be changed between the threads.
If a thread wants to modify the value in-place (i.e. not do any copying), it can get ownership of the object referenced by the ReadOnlyPointer by calling ReadOnlyPointer::write_access. If this smart pointer if the only owner of the memory zone, then no copy will be done. Otherwise, one copy is done to satisfy the caller.
Modifies the value referenced by this smart pointer.
After this call,
ptr is owned by the smart pointer, and the caller should not modify the value referenced by
ptr (i.e. it should be treated as read-only by the caller).
This does not change the other instances of ReadOnlyPointer that were referencing the same memory zone as
this. I.e. after the following snippet, ptr2 refers to value2 and ptr1 to value1.
T* value1 = new T; T* value2 = new T; ReadOnlyPointer<T> ptr1(value1); ReadOnlyPointer<T> ptr2(ptr1); ptr2->reset(value2);
this is the only owner of the object it refers to, this object will be deleted.
Gets write access to the pointed-to object.
this is the only owner of that object, then no copy will be done *and* the pointer will be invalidated. Otherwise, the method returns a copy of the pointed-to object.
If the copy might be a problem, one can use try_write_access to get the object only when a copy is not needed.
It is the responsibility of the caller to delete the returned value.