00001 00020 #ifndef ARXX_REFERENCE_H 00021 #define ARXX_REFERENCE_H 00022 00023 #include "Common.h" 00024 00031 namespace Arxx 00032 { 00033 class Item; 00034 00035 class Archive; 00036 00037 class ReferenceImplementation; 00038 00046 class Reference 00047 { 00048 public: 00055 Reference(Arxx::Item & Item); 00056 00064 Reference(Arxx::u4byte u4UniqueID, Arxx::Archive * pArchive = 0); 00065 00072 Reference(const Arxx::Reference & Reference); 00073 00079 virtual ~Reference(void); 00080 00086 Arxx::u4byte u4GetUniqueID(void) const; 00087 00097 Arxx::Item * pGetItem(void); 00098 00108 const Arxx::Item * pGetItem(void) const; 00109 00117 Arxx::u4byte u4GetReferenceCount(void) const; 00118 00127 void vResolve(Arxx::Item & Item); 00128 00136 void vUnresolve(void); 00137 00148 bool bAttach(Arxx::Reference & Reference); 00149 00159 bool bDetach(void); 00160 00166 void vDecoupleFromArchive(void); 00167 00168 bool operator<(const Arxx::Reference & Reference) const 00169 { 00170 return u4GetUniqueID() < Reference.u4GetUniqueID(); 00171 } 00172 private: 00176 void vChangeReference(Arxx::ReferenceImplementation * pReference); 00177 00178 Arxx::ReferenceImplementation * m_pReference; 00179 }; 00180 } 00181 00182 #endif