1 #ifndef _SIGX_LOCKABLE_H_
2 #define _SIGX_LOCKABLE_H_
29 #include <tr1/type_traits>
50 template<
typename T_mutex>
56 mutex_type&
mutex()
const throw()
90 template<
typename T_type,
typename T_mutex>
94 template<locking_policy I_policy,
typename T_type1,
typename T_mutex1,
typename T_islockable>
friend class lock_acquirer;
104 typedef typename std::tr1::add_reference<typename volatile_trait<acquired_type>::remove>::type
reference_type;
110 typedef typename std::tr1::add_reference<typename const_trait<reference_type>::add>::type
const_reference_type;
113 typedef typename std::tr1::add_reference<typename const_trait<volatile_type>::add>::type
cv_reference_type;
148 return const_cast<reference_type
>(m_obj);
163 return const_cast<const_reference_type
>(m_obj);
176 template<
typename T_type,
typename T_mutex>
194 parent_type(_a_value)
204 #if 0 // specializations for pointers
214 template<
typename T_mutex>
215 struct lockable<void*, T_mutex>:
public lockable_base<T_mutex>
217 typedef void* acquired_type;
218 typedef T_mutex mutex_type;
219 typedef lockable_base<mutex_type> parent_type;
220 typedef lockable<acquired_type, mutex_type> type;
222 typedef typename std::tr1::add_reference<typename volatile_trait<acquired_type>::remove>::type reference_type;
223 typedef typename std::tr1::add_reference<typename volatile_trait<acquired_type>::add>::type volatile_reference_type;
224 typedef typename std::tr1::add_reference<typename std::tr1::add_const<acquired_type>::type>::type take_type;
231 lockable(take_type _a_value = 0):
238 volatile_reference_type access_volatile()
245 reference_type access_nonvolatile()
248 return const_cast<reference_type
>(m_obj);
270 template<
typename T_type,
typename T_mutex>
271 struct lockable<T_type*, T_mutex>:
public lockable<void*, T_mutex>
273 typedef lockable<void*, T_mutex> parent_type;
274 typedef T_type* acquired_type;
275 typedef lockable<acquired_type, mutex_type> type;
277 typedef typename std::tr1::add_reference<typename volatile_trait<acquired_type>::remove>::type reference_type;
278 typedef typename std::tr1::add_reference<typename volatile_trait<acquired_type>::add>::type volatile_reference_type;
279 typedef typename std::tr1::add_reference<typename std::tr1::add_const<acquired_type>::type>::type take_type;
286 lockable(take_type _a_value = 0):
287 parent_type((void*&) _a_value)
295 volatile_reference_type access_volatile()
297 return (volatile_reference_type) parent_type::access_volatile();
302 reference_type access_acquiree()
304 return (reference_type) parent_type::access_acquiree();
318 #endif // end file guard
mutex_type m_mutex
Definition: lockable.h:69
T_mutex mutex_type
Definition: lockable.h:53
safe_lockable(toplevel_const_reference_type _a_value)
Constructs a lockable initializing T_type with _a_value.
Definition: lockable.h:129
safe_lockable< T_type, T_mutex > parent_type
Definition: lockable.h:179
T_type acquired_type
Definition: lockable.h:98
lockable(toplevel_const_reference_type _a_value)
Constructs a lockable initializing T_type with _a_value.
Definition: lockable.h:193
lockable_base< T_mutex > parent_type
Definition: lockable.h:96
std::tr1::add_reference< volatile_type >::type volatile_reference_type
Definition: lockable.h:107
std::tr1::add_reference< typename volatile_trait< acquired_type >::remove >::type reference_type
Definition: lockable.h:104
volatile_trait< acquired_type >::add volatile_type
Definition: lockable.h:101
Makes T_type lockable.
Definition: lockable.h:91
Traits for adding/removing the volatile qualifier from a type.
Definition: volatile_trait.h:40
volatile_reference_type access_volatile()
Definition: lockable.h:138
std::tr1::add_reference< typename const_trait< volatile_type >::add >::type cv_reference_type
Definition: lockable.h:113
std::tr1::add_reference< typename std::tr1::add_const< acquired_type >::type >::type toplevel_const_reference_type
Definition: lockable.h:115
Refinement of safe_lockable, open access to mutex and locked type.
Definition: lockable.h:177
The base for all lockables, template specialized for a specific lock, e.g. a boost::mutex.
Definition: lockable.h:51
lockable()
Default constructor.
Definition: lockable.h:187
Definition: auto_dispatchable.h:27
reference_type access_nonvolatile()
Definition: lockable.h:145
const_reference_type access_nonvolatile() const
Definition: lockable.h:160
mutex_type & mutex() const
Definition: lockable.h:56
lockable_base()
Definition: lockable.h:62
std::tr1::add_reference< typename const_trait< reference_type >::add >::type const_reference_type
Definition: lockable.h:110
cv_reference_type access_volatile() const
Definition: lockable.h:153
parent_type::toplevel_const_reference_type toplevel_const_reference_type
Definition: lockable.h:180
safe_lockable()
Default constructor.
Definition: lockable.h:122
volatile acquired_type add
Definition: volatile_trait.h:42
Private copy constructor and copy assignment ensure derived classes cannot be copied.
Definition: noncopyable.h:37
Locks the given mutex and ensures threadsafe write access to the given locked type.
Definition: lock_acquirer.h:88