00001 00020 #ifndef ARXX_REFERENCEIMPLEMENTATION_H 00021 #define ARXX_REFERENCEIMPLEMENTATION_H 00022 00023 #include "../Include/Common.h" 00024 00025 namespace Arxx 00026 { 00027 class Item; 00028 00029 class Archive; 00030 00034 class ReferenceImplementation 00035 { 00036 public: 00043 static Arxx::ReferenceImplementation * pGetReference(Arxx::Item & Item); 00044 00052 static Arxx::ReferenceImplementation * pGetReference(Arxx::u4byte u4UniqueID, Arxx::Archive * pArchive = 0); 00053 00060 static Arxx::ReferenceImplementation * pGetReference(Arxx::ReferenceImplementation * pReference); 00061 00069 static bool bRelease(Arxx::ReferenceImplementation * pReference); 00070 00076 Arxx::u4byte u4GetUniqueID(void) const; 00077 00083 Arxx::Item * pGetItem(void); 00084 00090 const Arxx::Item * pGetItem(void) const; 00091 00095 Arxx::u4byte u4GetReferenceCount(void) const; 00096 00107 void vResolve(Arxx::Item & Item); 00108 00112 void vUnresolve(void); 00113 00117 void vDecoupleFromArchive(void); 00118 private: 00124 ReferenceImplementation(void); 00125 00131 ~ReferenceImplementation(void); 00132 00136 ReferenceImplementation(const Arxx::ReferenceImplementation & Reference); 00137 00141 Arxx::ReferenceImplementation & operator=(const Arxx::ReferenceImplementation & Reference); 00142 00143 Arxx::u4byte m_u4UniqueID; 00144 Arxx::Item * m_pItem; 00145 Arxx::u4byte m_u4ReferenceCount; 00146 Arxx::Archive * m_pArchive; 00147 }; 00148 } 00149 00150 #endif