ML Reference
MeVis/Foundation/Sources/MLMemoryManager/Include/mlWeakMemoryBlockHandle.h
Go to the documentation of this file.
00001 // **InsertLicense** code
00002 //-----------------------------------------------------------------------------
00003 // The weak handle of a memory block.
00004 //
00005 // \file    mlWeakMemoryBlockHandle.h
00006 // \author  Marcus Barann
00007 // \date    03/2008
00008 //
00009 //-----------------------------------------------------------------------------
00010 
00011 #ifndef MLWEAKMEMORYBLOCKHANDLE_H_INCLUDED
00012 #define MLWEAKMEMORYBLOCKHANDLE_H_INCLUDED
00013 
00014 
00015 #include "../mlMemoryManagerDllExport.h"
00016 
00017 class MLMemoryBlock;
00018 class MLMemoryBlockHandle;
00019 
00020 
00021 
00025 class MLMEMORYMANAGER_EXPORT MLWeakMemoryBlockHandle
00026 {
00027 public:
00029   MLWeakMemoryBlockHandle();
00030 
00034   MLWeakMemoryBlockHandle(const MLMemoryBlockHandle& memoryBlockHandle);
00035 
00037   MLWeakMemoryBlockHandle(const MLWeakMemoryBlockHandle& weakMemoryBlockHandle);
00038 
00041   ~MLWeakMemoryBlockHandle();
00042 
00047 
00048 
00049   MLWeakMemoryBlockHandle& operator=(const MLMemoryBlockHandle& memoryBlockHandle);
00050 
00053   MLWeakMemoryBlockHandle& operator=(const MLWeakMemoryBlockHandle& weakMemoryBlockHandle);
00054 
00056   bool isNull() const;
00057  // End of group ThreadSafe
00059 
00062   void clear();
00063 
00064 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00065 private:
00066   void memoryBlockIsDeleted();
00068   MLMemoryBlock* setMemoryBlock(MLMemoryBlock* memoryBlock);
00069   void setMemoryBlockFromStrongHandle(const MLMemoryBlockHandle& memoryBlockHandle);
00070   void setMemoryBlockFromWeakHandle(const MLWeakMemoryBlockHandle& weakMemoryBlockHandle);
00071 
00072 
00073 private:
00074   MLMemoryBlock*           _memoryBlock;
00075   MLWeakMemoryBlockHandle* _next;
00076   MLWeakMemoryBlockHandle* _previous;
00077 
00078   friend class MLMemoryBlock;
00079   friend class MLMemoryBlockHandle;
00080   friend class MLMemoryManager;
00081 #endif
00082 };
00083 
00084 #endif // MLWEAKMEMORYBLOCKHANDLE_H_INCLUDED