1 #ifndef _SIGX_LOCKABLE_H_
2 #define _SIGX_LOCKABLE_H_
29 #include <tr1/type_traits>
50 template<
typename T_mutex>
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;
176 template<
typename T_type,
typename T_mutex>
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