(file) Return to Lockable.h CVS log (file) (dir) Up to [Pegasus] / pegasus / src / Pegasus / ProviderManager2

 1 karl  1.2 //%2003////////////////////////////////////////////////////////////////////////
 2 chip  1.1 //
 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

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2