Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Class Members | File Members | Related Pages

PhxAccessors.h

Go to the documentation of this file.
00001 #ifndef PHX_ACCESSORS_H
00002 #define PHX_ACCESSORS_H
00003 
00004 #include <Phx/PhxTypes.h>
00005 #include <Phx/Util/PhxLocks.h>
00006 
00014 namespace Phx {
00015   
00016   
00077   template<class T>
00078   class LockedAccessor : public LockedPtrInterface<LockedAccessor<T> > {
00079   public:
00100     LockedAccessor(const T& data, Lock* lock) :
00101       mHolder(lock), mData(data) {}
00102 
00116     LockedAccessor(const T& data, LockHolder* lockHolder) :
00117       mHolder(lockHolder), mData(data) {}
00118 
00148     T& data() { return mData; }
00149 
00150   private:
00151     // no copy or assignment
00152     LockedAccessor(LockedAccessor<T>&);
00153     LockedAccessor<T>& operator=(LockedAccessor<T>&);
00154 
00155     LockHolder mHolder;
00156     T mData;
00157   };
00158 
00159 
00186   template<class T>
00187   class ReadLockedAccessor : public LockedPtrInterface<ReadLockedAccessor<T> > {
00188   public:
00208     ReadLockedAccessor(const T& data, ReadWriteLock* lock) :
00209       mHolder(lock), mData(data) {}
00210 
00225     ReadLockedAccessor(const T& data, ReadLockHolder* lockHolder) :
00226       mHolder(lockHolder), mData(data) {}
00227 
00243     T& data() { return mData; }
00244 
00245   private:
00246     // no copy or assignment
00247     ReadLockedAccessor(ReadLockedAccessor<T>&);
00248     ReadLockedAccessor<T>& operator=(ReadLockedAccessor<T>&);
00249 
00250     ReadLockHolder mHolder;
00251     T mData;
00252   };
00253 
00254 
00281   template<class T>
00282   class WriteLockedAccessor : public LockedPtrInterface<WriteLockedAccessor<T> > {
00283   public:
00303     WriteLockedAccessor(const T& data, ReadWriteLock* lock) :
00304       mHolder(lock), mData(data) {}
00305 
00320     WriteLockedAccessor(const T& data, WriteLockHolder* lockHolder) :
00321       mHolder(lockHolder), mData(data) {}
00322 
00338     T& data() { return mData; }
00339 
00340   private:
00341     // no copy or assignment
00342     WriteLockedAccessor(WriteLockedAccessor<T>&);
00343     WriteLockedAccessor<T>& operator=(WriteLockedAccessor<T>&);
00344 
00345     WriteLockHolder mHolder;
00346     T mData;
00347   };
00348 
00349 }; // namespace Phx
00350 
00351 #endif /* PHX_ACCESSORS_H */

Generated on Wed Dec 21 22:05:37 2005 for Phoenix OSFS by  doxygen 1.4.2