ICE 3.4.2
[php5-ice-freebsdport.git] / cpp / include / IceUtil / AbstractMutex.h
blobf97fb4efd93b9061cf49a9239d33def87ba94076
1 // **********************************************************************
2 //
3 // Copyright (c) 2003-2011 ZeroC, Inc. All rights reserved.
4 //
5 // This copy of Ice is licensed to you under the terms described in the
6 // ICE_LICENSE file included in this distribution.
7 //
8 // **********************************************************************
10 #ifndef ICE_UTIL_ABSTRACT_MUTEX_H
11 #define ICE_UTIL_ABSTRACT_MUTEX_H
13 #include <IceUtil/Config.h>
14 #include <IceUtil/Lock.h>
16 namespace IceUtil
19 class AbstractMutex
21 public:
23 typedef LockT<AbstractMutex> Lock;
24 typedef TryLockT<AbstractMutex> TryLock;
26 virtual ~AbstractMutex()
27 {};
29 virtual void lock() const = 0;
30 virtual void unlock() const = 0;
31 virtual bool tryLock() const = 0;
34 template <typename T>
35 class AbstractMutexI : public AbstractMutex, public T
37 public:
39 #ifndef __BCPLUSPLUS__
40 typedef LockT<AbstractMutexI> Lock;
41 typedef TryLockT<AbstractMutexI> TryLock;
42 #endif
44 virtual void lock() const
46 T::lock();
49 virtual void unlock() const
51 T::unlock();
54 virtual bool tryLock() const
56 return T::tryLock();
59 virtual ~AbstractMutexI()
63 template <typename T>
64 class AbstractMutexReadI : public AbstractMutex, public T
66 public:
68 #ifndef __BCPLUSPLUS__
69 typedef LockT<AbstractMutexReadI> Lock;
70 typedef TryLockT<AbstractMutexReadI> TryLock;
71 #endif
73 virtual void lock() const
75 T::readLock();
78 virtual void unlock() const
80 T::unlock();
83 virtual bool tryLock() const
85 return T::tryReadLock();
88 virtual ~AbstractMutexReadI()
92 template <typename T>
93 class AbstractMutexWriteI : public AbstractMutex, public T
95 public:
97 #ifndef __BCPLUSPLUS__
98 typedef LockT<AbstractMutexWriteI> Lock;
99 typedef TryLockT<AbstractMutexWriteI> TryLock;
100 #endif
102 virtual void lock() const
104 T::writeLock();
107 virtual void unlock() const
109 T::unlock();
112 virtual bool tryLock() const
114 return T::tryWriteLock();
117 virtual ~AbstractMutexWriteI()
124 #endif