ML Reference
|
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