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