3 karl 1.3 // Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development
4 // Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems.
5 // Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.;
|
13 chip 1.1 //
14 // Permission is hereby granted, free of charge, to any person obtaining a copy
15 // of this software and associated documentation files (the "Software"), to
16 // deal in the Software without restriction, including without limitation the
17 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
18 // sell copies of the Software, and to permit persons to whom the Software is
19 // furnished to do so, subject to the following conditions:
20 //
21 // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
22 // ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
23 // "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
24 // LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
25 // PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
26 // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
27 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
28 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
29 //
30 //==============================================================================
31 //
32 // Author: Chip Vincent (cvincent@us.ibm.com)
33 //
34 chip 1.1 // Modified By:
35 //
36 //%/////////////////////////////////////////////////////////////////////////////
37
38 #ifndef Pegasus_Lockable_h
39 #define Pegasus_Lockable_h
40
41 #include <Pegasus/Common/Config.h>
42 #include <Pegasus/Common/IPC.h>
43
44 PEGASUS_NAMESPACE_BEGIN
45
46 template<class T>
47 class Lockable
48 {
49 public:
50 Lockable(void);
51 virtual ~Lockable(void);
52
53 operator const T &(void) const;
54 operator T &(void);
55 chip 1.1
56 void lock(void);
57 void unlock(void);
58
59 protected:
60 T _object;
61 Mutex _mutex;
62
63 };
64
65 template<class T>
66 inline Lockable<T>::Lockable(void)
67 {
68 }
69
70 template<class T>
71 inline Lockable<T>::~Lockable(void)
72 {
73 }
74
75 template<class T>
76 chip 1.1 inline Lockable<T>::operator const T &(void) const
77 {
78 return(_object);
79 }
80
81 template<class T>
82 inline Lockable<T>::operator T &(void)
83 {
84 return(_object);
85 }
86
87 template<class T>
88 inline void Lockable<T>::lock(void)
89 {
90 _mutex.lock(pegasus_thread_self());
91 }
92
93 template<class T>
94 inline void Lockable<T>::unlock(void)
95 {
96 _mutex.unlock();
97 chip 1.1 }
98
99 PEGASUS_NAMESPACE_END
100
101 #endif
|