// Ryzom - MMORPG Framework // Copyright (C) 2010 Winch Gate Property Limited // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as // published by the Free Software Foundation, either version 3 of the // License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Affero General Public License for more details. // // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . ///////////////////////////////////////////////////////////////// // WARNING : this is a generated file, don't change it ! ///////////////////////////////////////////////////////////////// #ifndef DATABASE_MAPPING #define DATABASE_MAPPING #include "nel/misc/types_nl.h" #include #include "nel/misc/hierarchical_timer.h" #include "nel/misc/string_conversion.h" #include "nel/net/message.h" #include "nel/net/module.h" #include "nel/net/module_builder_parts.h" #include "nel/net/module_message.h" #include "nel/net/module_gateway.h" #include "nel/misc/string_common.h" #include "server_share/mysql_wrapper.h" #include "ring_session_manager.h" #include "game_share/ring_session_manager_itf.h" #include "game_share/character_sync_itf.h" namespace RSMGR { class CKnownUser; class CKnownUserPtr; class CSessionParticipant; class CSessionParticipantPtr; class CCharacter; class CCharacterPtr; class CRingUser; class CRingUserPtr; class CSession; class CSessionPtr; class CShard; class CShardPtr; class CGuild; class CGuildPtr; class CGuildInvite; class CGuildInvitePtr; class CPlayerRating; class CPlayerRatingPtr; class CJournalEntry; class CJournalEntryPtr; class CFolder; class CFolderPtr; class CFolderAccess; class CFolderAccessPtr; class CScenario; class CScenarioPtr; class CSessionLog; class CSessionLogPtr; class CGmStatus; class CGmStatusPtr; class CKnownUserPtr { friend class CKnownUser; const char *_FileName; uint32 _LineNum; // linked list of smart ptr CKnownUserPtr *_NextPtr; CKnownUserPtr *_PrevPtr; CKnownUser *_Ptr; void linkPtr(); void unlinkPtr(); public: CKnownUserPtr() : _FileName(NULL), _LineNum(0), _NextPtr(NULL), _PrevPtr(NULL), _Ptr(NULL) { } CKnownUserPtr(const CKnownUserPtr &other, const char *filename, uint32 lineNum) : _FileName(filename), _LineNum(lineNum), _NextPtr(NULL), _PrevPtr(NULL) { // point the same object _Ptr = other._Ptr; // insert the pointer in the list linkPtr(); } CKnownUserPtr(const CKnownUserPtr &other) : _FileName(other._FileName), _LineNum(other._LineNum), _NextPtr(NULL), _PrevPtr(NULL) { // point the same object _Ptr = other._Ptr; // insert the pointer in the list linkPtr(); } CKnownUserPtr(CKnownUser *objectPtr, const char *filename, uint32 lineNum) : _FileName(filename), _LineNum(lineNum), _NextPtr(NULL), _PrevPtr(NULL) { _Ptr = objectPtr; linkPtr(); } CKnownUserPtr &assign(const CKnownUserPtr &other, const char *filename, uint32 lineNum) { _FileName = filename; _LineNum = lineNum; unlinkPtr(); _Ptr = other._Ptr; linkPtr(); return *this; } ~CKnownUserPtr() { unlinkPtr(); } CKnownUserPtr &assign(CKnownUser *objectPtr, const char *filename, uint32 lineNum) { _FileName = filename; _LineNum = lineNum; unlinkPtr(); _Ptr = objectPtr; linkPtr(); return *this; } CKnownUserPtr &operator =(const CKnownUserPtr &other) { return assign(other, __FILE__, __LINE__); } CKnownUser *operator ->() { return _Ptr; } const CKnownUser *operator ->() const { return _Ptr; } bool operator == (const CKnownUserPtr &other) const { return _Ptr == other._Ptr; } bool operator != (const CKnownUserPtr &other) const { return !operator ==(other); } bool operator == (const CKnownUser *object) const { return _Ptr == object; } bool operator != (const CKnownUser *object) const { return !operator ==(object); } /// Less then comparator : comparison on pointer object address bool operator < (const CKnownUserPtr &other) const { return _Ptr < other._Ptr; } /// Used to walk thrue the linked list of pointer CKnownUserPtr *getNextPtr() { return _NextPtr; } }; class CSessionParticipantPtr { friend class CSessionParticipant; const char *_FileName; uint32 _LineNum; // linked list of smart ptr CSessionParticipantPtr *_NextPtr; CSessionParticipantPtr *_PrevPtr; CSessionParticipant *_Ptr; void linkPtr(); void unlinkPtr(); public: CSessionParticipantPtr() : _FileName(NULL), _LineNum(0), _Ptr(NULL), _NextPtr(NULL), _PrevPtr(NULL) { } CSessionParticipantPtr(const CSessionParticipantPtr &other, const char *filename, uint32 lineNum) : _FileName(filename), _LineNum(lineNum), _NextPtr(NULL), _PrevPtr(NULL) { // point the same object _Ptr = other._Ptr; // insert the pointer in the list linkPtr(); } CSessionParticipantPtr(const CSessionParticipantPtr &other) : _FileName(other._FileName), _LineNum(other._LineNum), _NextPtr(NULL), _PrevPtr(NULL) { // point the same object _Ptr = other._Ptr; // insert the pointer in the list linkPtr(); } CSessionParticipantPtr(CSessionParticipant *objectPtr, const char *filename, uint32 lineNum) : _FileName(filename), _LineNum(lineNum), _NextPtr(NULL), _PrevPtr(NULL) { _Ptr = objectPtr; linkPtr(); } CSessionParticipantPtr &assign(const CSessionParticipantPtr &other, const char *filename, uint32 lineNum) { _FileName = filename; _LineNum = lineNum; unlinkPtr(); _Ptr = other._Ptr; linkPtr(); return *this; } ~CSessionParticipantPtr() { unlinkPtr(); } CSessionParticipantPtr &assign(CSessionParticipant *objectPtr, const char *filename, uint32 lineNum) { _FileName = filename; _LineNum = lineNum; unlinkPtr(); _Ptr = objectPtr; linkPtr(); return *this; } CSessionParticipantPtr &operator =(const CSessionParticipantPtr &other) { return assign(other, __FILE__, __LINE__); } CSessionParticipant *operator ->() { return _Ptr; } const CSessionParticipant *operator ->() const { return _Ptr; } bool operator == (const CSessionParticipantPtr &other) const { return _Ptr == other._Ptr; } bool operator != (const CSessionParticipantPtr &other) const { return !operator ==(other); } bool operator == (const CSessionParticipant *object) const { return _Ptr == object; } bool operator != (const CSessionParticipant *object) const { return !operator ==(object); } /// Less then comparator : comparison on pointer object address bool operator < (const CSessionParticipantPtr &other) const { return _Ptr < other._Ptr; } /// Used to walk thrue the linked list of pointer CSessionParticipantPtr *getNextPtr() { return _NextPtr; } }; class CCharacterPtr { friend class CCharacter; const char *_FileName; uint32 _LineNum; // linked list of smart ptr CCharacterPtr *_NextPtr; CCharacterPtr *_PrevPtr; CCharacter *_Ptr; void linkPtr(); void unlinkPtr(); public: CCharacterPtr() : _FileName(NULL), _LineNum(0), _Ptr(NULL), _NextPtr(NULL), _PrevPtr(NULL) { } CCharacterPtr(const CCharacterPtr &other, const char *filename, uint32 lineNum) : _FileName(filename), _LineNum(lineNum), _NextPtr(NULL), _PrevPtr(NULL) { // point the same object _Ptr = other._Ptr; // insert the pointer in the list linkPtr(); } CCharacterPtr(const CCharacterPtr &other) : _FileName(other._FileName), _LineNum(other._LineNum), _NextPtr(NULL), _PrevPtr(NULL) { // point the same object _Ptr = other._Ptr; // insert the pointer in the list linkPtr(); } CCharacterPtr(CCharacter *objectPtr, const char *filename, uint32 lineNum) : _FileName(filename), _LineNum(lineNum), _NextPtr(NULL), _PrevPtr(NULL) { _Ptr = objectPtr; linkPtr(); } CCharacterPtr &assign(const CCharacterPtr &other, const char *filename, uint32 lineNum) { _FileName = filename; _LineNum = lineNum; unlinkPtr(); _Ptr = other._Ptr; linkPtr(); return *this; } ~CCharacterPtr() { unlinkPtr(); } CCharacterPtr &assign(CCharacter *objectPtr, const char *filename, uint32 lineNum) { _FileName = filename; _LineNum = lineNum; unlinkPtr(); _Ptr = objectPtr; linkPtr(); return *this; } CCharacterPtr &operator =(const CCharacterPtr &other) { return assign(other, __FILE__, __LINE__); } CCharacter *operator ->() { return _Ptr; } const CCharacter *operator ->() const { return _Ptr; } bool operator == (const CCharacterPtr &other) const { return _Ptr == other._Ptr; } bool operator != (const CCharacterPtr &other) const { return !operator ==(other); } bool operator == (const CCharacter *object) const { return _Ptr == object; } bool operator != (const CCharacter *object) const { return !operator ==(object); } /// Less then comparator : comparison on pointer object address bool operator < (const CCharacterPtr &other) const { return _Ptr < other._Ptr; } /// Used to walk thrue the linked list of pointer CCharacterPtr *getNextPtr() { return _NextPtr; } }; class CRingUserPtr { friend class CRingUser; const char *_FileName; uint32 _LineNum; // linked list of smart ptr CRingUserPtr *_NextPtr; CRingUserPtr *_PrevPtr; CRingUser *_Ptr; void linkPtr(); void unlinkPtr(); public: CRingUserPtr() : _FileName(NULL), _LineNum(0), _Ptr(NULL), _NextPtr(NULL), _PrevPtr(NULL) { } CRingUserPtr(const CRingUserPtr &other, const char *filename, uint32 lineNum) : _FileName(filename), _LineNum(lineNum), _NextPtr(NULL), _PrevPtr(NULL) { // point the same object _Ptr = other._Ptr; // insert the pointer in the list linkPtr(); } CRingUserPtr(const CRingUserPtr &other) : _FileName(other._FileName), _LineNum(other._LineNum), _NextPtr(NULL), _PrevPtr(NULL) { // point the same object _Ptr = other._Ptr; // insert the pointer in the list linkPtr(); } CRingUserPtr(CRingUser *objectPtr, const char *filename, uint32 lineNum) : _FileName(filename), _LineNum(lineNum), _NextPtr(NULL), _PrevPtr(NULL) { _Ptr = objectPtr; linkPtr(); } CRingUserPtr &assign(const CRingUserPtr &other, const char *filename, uint32 lineNum) { _FileName = filename; _LineNum = lineNum; unlinkPtr(); _Ptr = other._Ptr; linkPtr(); return *this; } ~CRingUserPtr() { unlinkPtr(); } CRingUserPtr &assign(CRingUser *objectPtr, const char *filename, uint32 lineNum) { _FileName = filename; _LineNum = lineNum; unlinkPtr(); _Ptr = objectPtr; linkPtr(); return *this; } CRingUserPtr &operator =(const CRingUserPtr &other) { return assign(other, __FILE__, __LINE__); } CRingUser *operator ->() { return _Ptr; } const CRingUser *operator ->() const { return _Ptr; } bool operator == (const CRingUserPtr &other) const { return _Ptr == other._Ptr; } bool operator != (const CRingUserPtr &other) const { return !operator ==(other); } bool operator == (const CRingUser *object) const { return _Ptr == object; } bool operator != (const CRingUser *object) const { return !operator ==(object); } /// Less then comparator : comparison on pointer object address bool operator < (const CRingUserPtr &other) const { return _Ptr < other._Ptr; } /// Used to walk thrue the linked list of pointer CRingUserPtr *getNextPtr() { return _NextPtr; } }; class CSessionPtr { friend class CSession; const char *_FileName; uint32 _LineNum; // linked list of smart ptr CSessionPtr *_NextPtr; CSessionPtr *_PrevPtr; CSession *_Ptr; void linkPtr(); void unlinkPtr(); public: CSessionPtr() : _FileName(NULL), _LineNum(0), _Ptr(NULL), _NextPtr(NULL), _PrevPtr(NULL) { } CSessionPtr(const CSessionPtr &other, const char *filename, uint32 lineNum) : _FileName(filename), _LineNum(lineNum), _NextPtr(NULL), _PrevPtr(NULL) { // point the same object _Ptr = other._Ptr; // insert the pointer in the list linkPtr(); } CSessionPtr(const CSessionPtr &other) : _FileName(other._FileName), _LineNum(other._LineNum), _NextPtr(NULL), _PrevPtr(NULL) { // point the same object _Ptr = other._Ptr; // insert the pointer in the list linkPtr(); } CSessionPtr(CSession *objectPtr, const char *filename, uint32 lineNum) : _FileName(filename), _LineNum(lineNum), _NextPtr(NULL), _PrevPtr(NULL) { _Ptr = objectPtr; linkPtr(); } CSessionPtr &assign(const CSessionPtr &other, const char *filename, uint32 lineNum) { _FileName = filename; _LineNum = lineNum; unlinkPtr(); _Ptr = other._Ptr; linkPtr(); return *this; } ~CSessionPtr() { unlinkPtr(); } CSessionPtr &assign(CSession *objectPtr, const char *filename, uint32 lineNum) { _FileName = filename; _LineNum = lineNum; unlinkPtr(); _Ptr = objectPtr; linkPtr(); return *this; } CSessionPtr &operator =(const CSessionPtr &other) { return assign(other, __FILE__, __LINE__); } CSession *operator ->() { return _Ptr; } const CSession *operator ->() const { return _Ptr; } bool operator == (const CSessionPtr &other) const { return _Ptr == other._Ptr; } bool operator != (const CSessionPtr &other) const { return !operator ==(other); } bool operator == (const CSession *object) const { return _Ptr == object; } bool operator != (const CSession *object) const { return !operator ==(object); } /// Less then comparator : comparison on pointer object address bool operator < (const CSessionPtr &other) const { return _Ptr < other._Ptr; } /// Used to walk thrue the linked list of pointer CSessionPtr *getNextPtr() { return _NextPtr; } }; class CShardPtr { friend class CShard; const char *_FileName; uint32 _LineNum; // linked list of smart ptr CShardPtr *_NextPtr; CShardPtr *_PrevPtr; CShard *_Ptr; void linkPtr(); void unlinkPtr(); public: CShardPtr() : _FileName(NULL), _LineNum(0), _Ptr(NULL), _NextPtr(NULL), _PrevPtr(NULL) { } CShardPtr(const CShardPtr &other, const char *filename, uint32 lineNum) : _FileName(filename), _LineNum(lineNum), _NextPtr(NULL), _PrevPtr(NULL) { // point the same object _Ptr = other._Ptr; // insert the pointer in the list linkPtr(); } CShardPtr(const CShardPtr &other) : _FileName(other._FileName), _LineNum(other._LineNum), _NextPtr(NULL), _PrevPtr(NULL) { // point the same object _Ptr = other._Ptr; // insert the pointer in the list linkPtr(); } CShardPtr(CShard *objectPtr, const char *filename, uint32 lineNum) : _FileName(filename), _LineNum(lineNum), _NextPtr(NULL), _PrevPtr(NULL) { _Ptr = objectPtr; linkPtr(); } CShardPtr &assign(const CShardPtr &other, const char *filename, uint32 lineNum) { _FileName = filename; _LineNum = lineNum; unlinkPtr(); _Ptr = other._Ptr; linkPtr(); return *this; } ~CShardPtr() { unlinkPtr(); } CShardPtr &assign(CShard *objectPtr, const char *filename, uint32 lineNum) { _FileName = filename; _LineNum = lineNum; unlinkPtr(); _Ptr = objectPtr; linkPtr(); return *this; } CShardPtr &operator =(const CShardPtr &other) { return assign(other, __FILE__, __LINE__); } CShard *operator ->() { return _Ptr; } const CShard *operator ->() const { return _Ptr; } bool operator == (const CShardPtr &other) const { return _Ptr == other._Ptr; } bool operator != (const CShardPtr &other) const { return !operator ==(other); } bool operator == (const CShard *object) const { return _Ptr == object; } bool operator != (const CShard *object) const { return !operator ==(object); } /// Less then comparator : comparison on pointer object address bool operator < (const CShardPtr &other) const { return _Ptr < other._Ptr; } /// Used to walk thrue the linked list of pointer CShardPtr *getNextPtr() { return _NextPtr; } }; class CGuildPtr { friend class CGuild; const char *_FileName; uint32 _LineNum; // linked list of smart ptr CGuildPtr *_NextPtr; CGuildPtr *_PrevPtr; CGuild *_Ptr; void linkPtr(); void unlinkPtr(); public: CGuildPtr() : _FileName(NULL), _LineNum(0), _Ptr(NULL), _NextPtr(NULL), _PrevPtr(NULL) { } CGuildPtr(const CGuildPtr &other, const char *filename, uint32 lineNum) : _FileName(filename), _LineNum(lineNum), _NextPtr(NULL), _PrevPtr(NULL) { // point the same object _Ptr = other._Ptr; // insert the pointer in the list linkPtr(); } CGuildPtr(const CGuildPtr &other) : _FileName(other._FileName), _LineNum(other._LineNum), _NextPtr(NULL), _PrevPtr(NULL) { // point the same object _Ptr = other._Ptr; // insert the pointer in the list linkPtr(); } CGuildPtr(CGuild *objectPtr, const char *filename, uint32 lineNum) : _FileName(filename), _LineNum(lineNum), _NextPtr(NULL), _PrevPtr(NULL) { _Ptr = objectPtr; linkPtr(); } CGuildPtr &assign(const CGuildPtr &other, const char *filename, uint32 lineNum) { _FileName = filename; _LineNum = lineNum; unlinkPtr(); _Ptr = other._Ptr; linkPtr(); return *this; } ~CGuildPtr() { unlinkPtr(); } CGuildPtr &assign(CGuild *objectPtr, const char *filename, uint32 lineNum) { _FileName = filename; _LineNum = lineNum; unlinkPtr(); _Ptr = objectPtr; linkPtr(); return *this; } CGuildPtr &operator =(const CGuildPtr &other) { return assign(other, __FILE__, __LINE__); } CGuild *operator ->() { return _Ptr; } const CGuild *operator ->() const { return _Ptr; } bool operator == (const CGuildPtr &other) const { return _Ptr == other._Ptr; } bool operator != (const CGuildPtr &other) const { return !operator ==(other); } bool operator == (const CGuild *object) const { return _Ptr == object; } bool operator != (const CGuild *object) const { return !operator ==(object); } /// Less then comparator : comparison on pointer object address bool operator < (const CGuildPtr &other) const { return _Ptr < other._Ptr; } /// Used to walk thrue the linked list of pointer CGuildPtr *getNextPtr() { return _NextPtr; } }; class CGuildInvitePtr { friend class CGuildInvite; const char *_FileName; uint32 _LineNum; // linked list of smart ptr CGuildInvitePtr *_NextPtr; CGuildInvitePtr *_PrevPtr; CGuildInvite *_Ptr; void linkPtr(); void unlinkPtr(); public: CGuildInvitePtr() : _FileName(NULL), _LineNum(0), _NextPtr(NULL), _PrevPtr(NULL), _Ptr(NULL) { } CGuildInvitePtr(const CGuildInvitePtr &other, const char *filename, uint32 lineNum) : _FileName(filename), _LineNum(lineNum), _NextPtr(NULL), _PrevPtr(NULL) { // point the same object _Ptr = other._Ptr; // insert the pointer in the list linkPtr(); } CGuildInvitePtr(const CGuildInvitePtr &other) : _FileName(other._FileName), _LineNum(other._LineNum), _NextPtr(NULL), _PrevPtr(NULL) { // point the same object _Ptr = other._Ptr; // insert the pointer in the list linkPtr(); } CGuildInvitePtr(CGuildInvite *objectPtr, const char *filename, uint32 lineNum) : _FileName(filename), _LineNum(lineNum), _NextPtr(NULL), _PrevPtr(NULL) { _Ptr = objectPtr; linkPtr(); } CGuildInvitePtr &assign(const CGuildInvitePtr &other, const char *filename, uint32 lineNum) { _FileName = filename; _LineNum = lineNum; unlinkPtr(); _Ptr = other._Ptr; linkPtr(); return *this; } ~CGuildInvitePtr() { unlinkPtr(); } CGuildInvitePtr &assign(CGuildInvite *objectPtr, const char *filename, uint32 lineNum) { _FileName = filename; _LineNum = lineNum; unlinkPtr(); _Ptr = objectPtr; linkPtr(); return *this; } CGuildInvitePtr &operator =(const CGuildInvitePtr &other) { return assign(other, __FILE__, __LINE__); } CGuildInvite *operator ->() { return _Ptr; } const CGuildInvite *operator ->() const { return _Ptr; } bool operator == (const CGuildInvitePtr &other) const { return _Ptr == other._Ptr; } bool operator != (const CGuildInvitePtr &other) const { return !operator ==(other); } bool operator == (const CGuildInvite *object) const { return _Ptr == object; } bool operator != (const CGuildInvite *object) const { return !operator ==(object); } /// Less then comparator : comparison on pointer object address bool operator < (const CGuildInvitePtr &other) const { return _Ptr < other._Ptr; } /// Used to walk thrue the linked list of pointer CGuildInvitePtr *getNextPtr() { return _NextPtr; } }; class CPlayerRatingPtr { friend class CPlayerRating; const char *_FileName; uint32 _LineNum; // linked list of smart ptr CPlayerRatingPtr *_NextPtr; CPlayerRatingPtr *_PrevPtr; CPlayerRating *_Ptr; void linkPtr(); void unlinkPtr(); public: CPlayerRatingPtr() : _FileName(NULL), _LineNum(0), _NextPtr(NULL), _PrevPtr(NULL), _Ptr(NULL) { } CPlayerRatingPtr(const CPlayerRatingPtr &other, const char *filename, uint32 lineNum) : _FileName(filename), _LineNum(lineNum), _NextPtr(NULL), _PrevPtr(NULL) { // point the same object _Ptr = other._Ptr; // insert the pointer in the list linkPtr(); } CPlayerRatingPtr(const CPlayerRatingPtr &other) : _FileName(other._FileName), _LineNum(other._LineNum), _NextPtr(NULL), _PrevPtr(NULL) { // point the same object _Ptr = other._Ptr; // insert the pointer in the list linkPtr(); } CPlayerRatingPtr(CPlayerRating *objectPtr, const char *filename, uint32 lineNum) : _FileName(filename), _LineNum(lineNum), _NextPtr(NULL), _PrevPtr(NULL) { _Ptr = objectPtr; linkPtr(); } CPlayerRatingPtr &assign(const CPlayerRatingPtr &other, const char *filename, uint32 lineNum) { _FileName = filename; _LineNum = lineNum; unlinkPtr(); _Ptr = other._Ptr; linkPtr(); return *this; } ~CPlayerRatingPtr() { unlinkPtr(); } CPlayerRatingPtr &assign(CPlayerRating *objectPtr, const char *filename, uint32 lineNum) { _FileName = filename; _LineNum = lineNum; unlinkPtr(); _Ptr = objectPtr; linkPtr(); return *this; } CPlayerRatingPtr &operator =(const CPlayerRatingPtr &other) { return assign(other, __FILE__, __LINE__); } CPlayerRating *operator ->() { return _Ptr; } const CPlayerRating *operator ->() const { return _Ptr; } bool operator == (const CPlayerRatingPtr &other) const { return _Ptr == other._Ptr; } bool operator != (const CPlayerRatingPtr &other) const { return !operator ==(other); } bool operator == (const CPlayerRating *object) const { return _Ptr == object; } bool operator != (const CPlayerRating *object) const { return !operator ==(object); } /// Less then comparator : comparison on pointer object address bool operator < (const CPlayerRatingPtr &other) const { return _Ptr < other._Ptr; } /// Used to walk thrue the linked list of pointer CPlayerRatingPtr *getNextPtr() { return _NextPtr; } }; class CJournalEntryPtr { friend class CJournalEntry; const char *_FileName; uint32 _LineNum; // linked list of smart ptr CJournalEntryPtr *_NextPtr; CJournalEntryPtr *_PrevPtr; CJournalEntry *_Ptr; void linkPtr(); void unlinkPtr(); public: CJournalEntryPtr() : _FileName(NULL), _LineNum(0), _NextPtr(NULL), _PrevPtr(NULL), _Ptr(NULL) { } CJournalEntryPtr(const CJournalEntryPtr &other, const char *filename, uint32 lineNum) : _FileName(filename), _LineNum(lineNum), _NextPtr(NULL), _PrevPtr(NULL) { // point the same object _Ptr = other._Ptr; // insert the pointer in the list linkPtr(); } CJournalEntryPtr(const CJournalEntryPtr &other) : _FileName(other._FileName), _LineNum(other._LineNum), _NextPtr(NULL), _PrevPtr(NULL) { // point the same object _Ptr = other._Ptr; // insert the pointer in the list linkPtr(); } CJournalEntryPtr(CJournalEntry *objectPtr, const char *filename, uint32 lineNum) : _FileName(filename), _LineNum(lineNum), _NextPtr(NULL), _PrevPtr(NULL) { _Ptr = objectPtr; linkPtr(); } CJournalEntryPtr &assign(const CJournalEntryPtr &other, const char *filename, uint32 lineNum) { _FileName = filename; _LineNum = lineNum; unlinkPtr(); _Ptr = other._Ptr; linkPtr(); return *this; } ~CJournalEntryPtr() { unlinkPtr(); } CJournalEntryPtr &assign(CJournalEntry *objectPtr, const char *filename, uint32 lineNum) { _FileName = filename; _LineNum = lineNum; unlinkPtr(); _Ptr = objectPtr; linkPtr(); return *this; } CJournalEntryPtr &operator =(const CJournalEntryPtr &other) { return assign(other, __FILE__, __LINE__); } CJournalEntry *operator ->() { return _Ptr; } const CJournalEntry *operator ->() const { return _Ptr; } bool operator == (const CJournalEntryPtr &other) const { return _Ptr == other._Ptr; } bool operator != (const CJournalEntryPtr &other) const { return !operator ==(other); } bool operator == (const CJournalEntry *object) const { return _Ptr == object; } bool operator != (const CJournalEntry *object) const { return !operator ==(object); } /// Less then comparator : comparison on pointer object address bool operator < (const CJournalEntryPtr &other) const { return _Ptr < other._Ptr; } /// Used to walk thrue the linked list of pointer CJournalEntryPtr *getNextPtr() { return _NextPtr; } }; class CFolderPtr { friend class CFolder; const char *_FileName; uint32 _LineNum; // linked list of smart ptr CFolderPtr *_NextPtr; CFolderPtr *_PrevPtr; CFolder *_Ptr; void linkPtr(); void unlinkPtr(); public: CFolderPtr() : _FileName(NULL), _LineNum(0), _Ptr(NULL), _NextPtr(NULL), _PrevPtr(NULL) { } CFolderPtr(const CFolderPtr &other, const char *filename, uint32 lineNum) : _FileName(filename), _LineNum(lineNum), _NextPtr(NULL), _PrevPtr(NULL) { // point the same object _Ptr = other._Ptr; // insert the pointer in the list linkPtr(); } CFolderPtr(const CFolderPtr &other) : _FileName(other._FileName), _LineNum(other._LineNum), _NextPtr(NULL), _PrevPtr(NULL) { // point the same object _Ptr = other._Ptr; // insert the pointer in the list linkPtr(); } CFolderPtr(CFolder *objectPtr, const char *filename, uint32 lineNum) : _FileName(filename), _LineNum(lineNum), _NextPtr(NULL), _PrevPtr(NULL) { _Ptr = objectPtr; linkPtr(); } CFolderPtr &assign(const CFolderPtr &other, const char *filename, uint32 lineNum) { _FileName = filename; _LineNum = lineNum; unlinkPtr(); _Ptr = other._Ptr; linkPtr(); return *this; } ~CFolderPtr() { unlinkPtr(); } CFolderPtr &assign(CFolder *objectPtr, const char *filename, uint32 lineNum) { _FileName = filename; _LineNum = lineNum; unlinkPtr(); _Ptr = objectPtr; linkPtr(); return *this; } CFolderPtr &operator =(const CFolderPtr &other) { return assign(other, __FILE__, __LINE__); } CFolder *operator ->() { return _Ptr; } const CFolder *operator ->() const { return _Ptr; } bool operator == (const CFolderPtr &other) const { return _Ptr == other._Ptr; } bool operator != (const CFolderPtr &other) const { return !operator ==(other); } bool operator == (const CFolder *object) const { return _Ptr == object; } bool operator != (const CFolder *object) const { return !operator ==(object); } /// Less then comparator : comparison on pointer object address bool operator < (const CFolderPtr &other) const { return _Ptr < other._Ptr; } /// Used to walk thrue the linked list of pointer CFolderPtr *getNextPtr() { return _NextPtr; } }; class CFolderAccessPtr { friend class CFolderAccess; const char *_FileName; uint32 _LineNum; // linked list of smart ptr CFolderAccessPtr *_NextPtr; CFolderAccessPtr *_PrevPtr; CFolderAccess *_Ptr; void linkPtr(); void unlinkPtr(); public: CFolderAccessPtr() : _FileName(NULL), _LineNum(0), _Ptr(NULL), _NextPtr(NULL), _PrevPtr(NULL) { } CFolderAccessPtr(const CFolderAccessPtr &other, const char *filename, uint32 lineNum) : _FileName(filename), _LineNum(lineNum), _NextPtr(NULL), _PrevPtr(NULL) { // point the same object _Ptr = other._Ptr; // insert the pointer in the list linkPtr(); } CFolderAccessPtr(const CFolderAccessPtr &other) : _FileName(other._FileName), _LineNum(other._LineNum), _NextPtr(NULL), _PrevPtr(NULL) { // point the same object _Ptr = other._Ptr; // insert the pointer in the list linkPtr(); } CFolderAccessPtr(CFolderAccess *objectPtr, const char *filename, uint32 lineNum) : _FileName(filename), _LineNum(lineNum), _NextPtr(NULL), _PrevPtr(NULL) { _Ptr = objectPtr; linkPtr(); } CFolderAccessPtr &assign(const CFolderAccessPtr &other, const char *filename, uint32 lineNum) { _FileName = filename; _LineNum = lineNum; unlinkPtr(); _Ptr = other._Ptr; linkPtr(); return *this; } ~CFolderAccessPtr() { unlinkPtr(); } CFolderAccessPtr &assign(CFolderAccess *objectPtr, const char *filename, uint32 lineNum) { _FileName = filename; _LineNum = lineNum; unlinkPtr(); _Ptr = objectPtr; linkPtr(); return *this; } CFolderAccessPtr &operator =(const CFolderAccessPtr &other) { return assign(other, __FILE__, __LINE__); } CFolderAccess *operator ->() { return _Ptr; } const CFolderAccess *operator ->() const { return _Ptr; } bool operator == (const CFolderAccessPtr &other) const { return _Ptr == other._Ptr; } bool operator != (const CFolderAccessPtr &other) const { return !operator ==(other); } bool operator == (const CFolderAccess *object) const { return _Ptr == object; } bool operator != (const CFolderAccess *object) const { return !operator ==(object); } /// Less then comparator : comparison on pointer object address bool operator < (const CFolderAccessPtr &other) const { return _Ptr < other._Ptr; } /// Used to walk thrue the linked list of pointer CFolderAccessPtr *getNextPtr() { return _NextPtr; } }; class CScenarioPtr { friend class CScenario; const char *_FileName; uint32 _LineNum; // linked list of smart ptr CScenarioPtr *_NextPtr; CScenarioPtr *_PrevPtr; CScenario *_Ptr; void linkPtr(); void unlinkPtr(); public: CScenarioPtr() : _FileName(NULL), _LineNum(0), _Ptr(NULL), _NextPtr(NULL), _PrevPtr(NULL) { } CScenarioPtr(const CScenarioPtr &other, const char *filename, uint32 lineNum) : _FileName(filename), _LineNum(lineNum), _NextPtr(NULL), _PrevPtr(NULL) { // point the same object _Ptr = other._Ptr; // insert the pointer in the list linkPtr(); } CScenarioPtr(const CScenarioPtr &other) : _FileName(other._FileName), _LineNum(other._LineNum), _NextPtr(NULL), _PrevPtr(NULL) { // point the same object _Ptr = other._Ptr; // insert the pointer in the list linkPtr(); } CScenarioPtr(CScenario *objectPtr, const char *filename, uint32 lineNum) : _FileName(filename), _LineNum(lineNum), _NextPtr(NULL), _PrevPtr(NULL) { _Ptr = objectPtr; linkPtr(); } CScenarioPtr &assign(const CScenarioPtr &other, const char *filename, uint32 lineNum) { _FileName = filename; _LineNum = lineNum; unlinkPtr(); _Ptr = other._Ptr; linkPtr(); return *this; } ~CScenarioPtr() { unlinkPtr(); } CScenarioPtr &assign(CScenario *objectPtr, const char *filename, uint32 lineNum) { _FileName = filename; _LineNum = lineNum; unlinkPtr(); _Ptr = objectPtr; linkPtr(); return *this; } CScenarioPtr &operator =(const CScenarioPtr &other) { return assign(other, __FILE__, __LINE__); } CScenario *operator ->() { return _Ptr; } const CScenario *operator ->() const { return _Ptr; } bool operator == (const CScenarioPtr &other) const { return _Ptr == other._Ptr; } bool operator != (const CScenarioPtr &other) const { return !operator ==(other); } bool operator == (const CScenario *object) const { return _Ptr == object; } bool operator != (const CScenario *object) const { return !operator ==(object); } /// Less then comparator : comparison on pointer object address bool operator < (const CScenarioPtr &other) const { return _Ptr < other._Ptr; } /// Used to walk thrue the linked list of pointer CScenarioPtr *getNextPtr() { return _NextPtr; } }; class CSessionLogPtr { friend class CSessionLog; const char *_FileName; uint32 _LineNum; // linked list of smart ptr CSessionLogPtr *_NextPtr; CSessionLogPtr *_PrevPtr; CSessionLog *_Ptr; void linkPtr(); void unlinkPtr(); public: CSessionLogPtr() : _FileName(NULL), _LineNum(0), _Ptr(NULL), _NextPtr(NULL), _PrevPtr(NULL) { } CSessionLogPtr(const CSessionLogPtr &other, const char *filename, uint32 lineNum) : _FileName(filename), _LineNum(lineNum), _NextPtr(NULL), _PrevPtr(NULL) { // point the same object _Ptr = other._Ptr; // insert the pointer in the list linkPtr(); } CSessionLogPtr(const CSessionLogPtr &other) : _FileName(other._FileName), _LineNum(other._LineNum), _NextPtr(NULL), _PrevPtr(NULL) { // point the same object _Ptr = other._Ptr; // insert the pointer in the list linkPtr(); } CSessionLogPtr(CSessionLog *objectPtr, const char *filename, uint32 lineNum) : _FileName(filename), _LineNum(lineNum), _NextPtr(NULL), _PrevPtr(NULL) { _Ptr = objectPtr; linkPtr(); } CSessionLogPtr &assign(const CSessionLogPtr &other, const char *filename, uint32 lineNum) { _FileName = filename; _LineNum = lineNum; unlinkPtr(); _Ptr = other._Ptr; linkPtr(); return *this; } ~CSessionLogPtr() { unlinkPtr(); } CSessionLogPtr &assign(CSessionLog *objectPtr, const char *filename, uint32 lineNum) { _FileName = filename; _LineNum = lineNum; unlinkPtr(); _Ptr = objectPtr; linkPtr(); return *this; } CSessionLogPtr &operator =(const CSessionLogPtr &other) { return assign(other, __FILE__, __LINE__); } CSessionLog *operator ->() { return _Ptr; } const CSessionLog *operator ->() const { return _Ptr; } bool operator == (const CSessionLogPtr &other) const { return _Ptr == other._Ptr; } bool operator != (const CSessionLogPtr &other) const { return !operator ==(other); } bool operator == (const CSessionLog *object) const { return _Ptr == object; } bool operator != (const CSessionLog *object) const { return !operator ==(object); } /// Less then comparator : comparison on pointer object address bool operator < (const CSessionLogPtr &other) const { return _Ptr < other._Ptr; } /// Used to walk thrue the linked list of pointer CSessionLogPtr *getNextPtr() { return _NextPtr; } }; class CGmStatusPtr { friend class CGmStatus; const char *_FileName; uint32 _LineNum; // linked list of smart ptr CGmStatusPtr *_NextPtr; CGmStatusPtr *_PrevPtr; CGmStatus *_Ptr; void linkPtr(); void unlinkPtr(); public: CGmStatusPtr() : _FileName(NULL), _LineNum(0), _Ptr(NULL), _NextPtr(NULL), _PrevPtr(NULL) { } CGmStatusPtr(const CGmStatusPtr &other, const char *filename, uint32 lineNum) : _FileName(filename), _LineNum(lineNum), _NextPtr(NULL), _PrevPtr(NULL) { // point the same object _Ptr = other._Ptr; // insert the pointer in the list linkPtr(); } CGmStatusPtr(const CGmStatusPtr &other) : _FileName(other._FileName), _LineNum(other._LineNum), _NextPtr(NULL), _PrevPtr(NULL) { // point the same object _Ptr = other._Ptr; // insert the pointer in the list linkPtr(); } CGmStatusPtr(CGmStatus *objectPtr, const char *filename, uint32 lineNum) : _FileName(filename), _LineNum(lineNum), _NextPtr(NULL), _PrevPtr(NULL) { _Ptr = objectPtr; linkPtr(); } CGmStatusPtr &assign(const CGmStatusPtr &other, const char *filename, uint32 lineNum) { _FileName = filename; _LineNum = lineNum; unlinkPtr(); _Ptr = other._Ptr; linkPtr(); return *this; } ~CGmStatusPtr() { unlinkPtr(); } CGmStatusPtr &assign(CGmStatus *objectPtr, const char *filename, uint32 lineNum) { _FileName = filename; _LineNum = lineNum; unlinkPtr(); _Ptr = objectPtr; linkPtr(); return *this; } CGmStatusPtr &operator =(const CGmStatusPtr &other) { return assign(other, __FILE__, __LINE__); } CGmStatus *operator ->() { return _Ptr; } const CGmStatus *operator ->() const { return _Ptr; } bool operator == (const CGmStatusPtr &other) const { return _Ptr == other._Ptr; } bool operator != (const CGmStatusPtr &other) const { return !operator ==(other); } bool operator == (const CGmStatus *object) const { return _Ptr == object; } bool operator != (const CGmStatus *object) const { return !operator ==(object); } /// Less then comparator : comparison on pointer object address bool operator < (const CGmStatusPtr &other) const { return _Ptr < other._Ptr; } /// Used to walk thrue the linked list of pointer CGmStatusPtr *getNextPtr() { return _NextPtr; } }; struct TUserType { enum TValues { ut_character = 1, ut_pioneer, /// the highest valid value in the enum last_enum_item = ut_pioneer, /// a value equal to the last enum item +1 end_of_enum, invalid_val, /// Number of enumerated values nb_enum_items = 2 }; /// Index table to convert enum value to linear index table const std::map &getIndexTable() const { static std::map indexTable; static bool init = false; if (!init) { // fill the index table indexTable.insert(std::make_pair(ut_character, 0)); indexTable.insert(std::make_pair(ut_pioneer, 1)); init = true; } return indexTable; } static const NLMISC::CStringConversion &getConversionTable() { NL_BEGIN_STRING_CONVERSION_TABLE(TValues) NL_STRING_CONVERSION_TABLE_ENTRY(ut_character) NL_STRING_CONVERSION_TABLE_ENTRY(ut_pioneer) NL_STRING_CONVERSION_TABLE_ENTRY(invalid_val) }; static NLMISC::CStringConversion conversionTable(TValues_nl_string_conversion_table, sizeof(TValues_nl_string_conversion_table) / sizeof(TValues_nl_string_conversion_table[0]), invalid_val); return conversionTable; } TValues _Value; public: TUserType() : _Value(invalid_val) { } TUserType(TValues value) : _Value(value) { } TUserType(const std::string &str) { _Value = getConversionTable().fromString(str); } void serial(NLMISC::IStream &s) { s.serialEnum(_Value); } bool operator == (const TUserType &other) const { return _Value == other._Value; } bool operator != (const TUserType &other) const { return ! (_Value == other._Value); } bool operator < (const TUserType &other) const { return _Value < other._Value; } bool operator <= (const TUserType &other) const { return _Value <= other._Value; } bool operator > (const TUserType &other) const { return !(_Value <= other._Value); } bool operator >= (const TUserType &other) const { return !(_Value < other._Value); } const std::string &toString() const { return getConversionTable().toString(_Value); } static const std::string &toString(TValues value) { return getConversionTable().toString(value); } TValues getValue() const { return _Value; } // return true if the actual value of the enum is valid, otherwise false bool isValid() { if (_Value == invalid_val) return false; // not invalid, check other enum value return getConversionTable().isValid(_Value); } uint32 asIndex() { std::map::const_iterator it(getIndexTable().find(_Value)); nlassert(it != getIndexTable().end()); return it->second; } }; struct TKnownUserRelation { enum TValues { rt_friend = 1, rt_banned, rt_friend_dm, /// the highest valid value in the enum last_enum_item = rt_friend_dm, /// a value equal to the last enum item +1 end_of_enum, invalid_val, /// Number of enumerated values nb_enum_items = 3 }; /// Index table to convert enum value to linear index table const std::map &getIndexTable() const { static std::map indexTable; static bool init = false; if (!init) { // fill the index table indexTable.insert(std::make_pair(rt_friend, 0)); indexTable.insert(std::make_pair(rt_banned, 1)); indexTable.insert(std::make_pair(rt_friend_dm, 2)); init = true; } return indexTable; } static const NLMISC::CStringConversion &getConversionTable() { NL_BEGIN_STRING_CONVERSION_TABLE(TValues) NL_STRING_CONVERSION_TABLE_ENTRY(rt_friend) NL_STRING_CONVERSION_TABLE_ENTRY(rt_banned) NL_STRING_CONVERSION_TABLE_ENTRY(rt_friend_dm) NL_STRING_CONVERSION_TABLE_ENTRY(invalid_val) }; static NLMISC::CStringConversion conversionTable(TValues_nl_string_conversion_table, sizeof(TValues_nl_string_conversion_table) / sizeof(TValues_nl_string_conversion_table[0]), invalid_val); return conversionTable; } TValues _Value; public: TKnownUserRelation() : _Value(invalid_val) { } TKnownUserRelation(TValues value) : _Value(value) { } TKnownUserRelation(const std::string &str) { _Value = getConversionTable().fromString(str); } void serial(NLMISC::IStream &s) { s.serialEnum(_Value); } bool operator == (const TKnownUserRelation &other) const { return _Value == other._Value; } bool operator != (const TKnownUserRelation &other) const { return ! (_Value == other._Value); } bool operator < (const TKnownUserRelation &other) const { return _Value < other._Value; } bool operator <= (const TKnownUserRelation &other) const { return _Value <= other._Value; } bool operator > (const TKnownUserRelation &other) const { return !(_Value <= other._Value); } bool operator >= (const TKnownUserRelation &other) const { return !(_Value < other._Value); } const std::string &toString() const { return getConversionTable().toString(_Value); } static const std::string &toString(TValues value) { return getConversionTable().toString(value); } TValues getValue() const { return _Value; } // return true if the actual value of the enum is valid, otherwise false bool isValid() { if (_Value == invalid_val) return false; // not invalid, check other enum value return getConversionTable().isValid(_Value); } uint32 asIndex() { std::map::const_iterator it(getIndexTable().find(_Value)); nlassert(it != getIndexTable().end()); return it->second; } }; ///////////////////////////////////////////////////////////////// // WARNING : this is a generated file, don't change it ! ///////////////////////////////////////////////////////////////// class CKnownUser { protected: // uint32 _RelationId; // uint32 _OwnerId; // uint32 _TargetUser; // uint32 _TargetCharacter; // TKnownUserRelation _Relation; // std::string _Comments; public: // uint32 getOwnerId() const { return _OwnerId; } void setOwnerId(uint32 value) { if (_OwnerId != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _OwnerId = value; } } // uint32 getTargetUser() const { return _TargetUser; } void setTargetUser(uint32 value) { if (_TargetUser != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _TargetUser = value; } } // uint32 getTargetCharacter() const { return _TargetCharacter; } void setTargetCharacter(uint32 value) { if (_TargetCharacter != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _TargetCharacter = value; } } // TKnownUserRelation getRelation() const { return _Relation; } void setRelation(TKnownUserRelation value) { if (_Relation != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _Relation = value; } } // const std::string &getComments() const { return _Comments; } void setComments(const std::string &value) { if (_Comments != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _Comments = value; } } bool operator == (const CKnownUser &other) const { return _RelationId == other._RelationId && _OwnerId == other._OwnerId && _TargetUser == other._TargetUser && _TargetCharacter == other._TargetCharacter && _Relation == other._Relation && _Comments == other._Comments; } private: // private constructor, you must use 'createTransient' to get an instance CKnownUser() : _PtrList(NULL), _ObjectState(NOPE::os_transient), _RelationId(NOPE::INVALID_OBJECT_ID) { // register the cache for this class (if not already done) registerUpdatable(); } // Destructor, delete any children ~CKnownUser(); /// utility func to remove this object from the released object container void removeFromReleased(); public: /// Create a new instance in the transient space static CKnownUserPtr createTransient(const char *filename, uint32 lineNum) { return CKnownUserPtr(new CKnownUser(), filename, lineNum); } /** Create a new object in the database from the current object data. * The object MUST be in transient state (i.e, it must be a new * object created by user and not comming from the databse). * If identifier is autogenerated, the generated id can be read after * this call. */ bool create(MSW::CConnection &connection); /** Update the database with the current object state. * The object MUST be either in clean or dirty state. * Return true if the object has been effectively stored * in the database. * After this call, the object is in 'clean' state. */ bool update(MSW::CConnection &connection); /** Remove the current object from the persistent storage. * The object must be in clean or dirty state. * Return true if the object has been correctly * updated in the database. * After the call, the object is in 'clean' state. */ bool remove(MSW::CConnection &connection); /** Remove an object from the persistent storage by specifying * the id to remove. * Return true if an entry as been effectively removed from * the database. * After the call, the object is in 'removed' state and should * no more be used. A good pratice should be to delete * the transient object just after the remove call. */ static bool removeById(MSW::CConnection &connection, uint32 id); /** Load an instance from the database. * This call allocate a new object and load the property value * from the database. * Return NULL if the object id is not found. */ static CKnownUserPtr load(MSW::CConnection &connection, uint32 id, const char *filename, uint32 lineNum); /** Load all objects children of CRingUser and * return them by using the specified output iterator. */ static bool loadChildrenOfCRingUser(MSW::CConnection &connection, uint32 parentId, std::vector < CKnownUserPtr > &children, const char *filename, uint32 lineNum); /** Load all objects children of CCharacter and * return them by using the specified output iterator. */ static bool loadChildrenOfCCharacter(MSW::CConnection &connection, uint32 parentId, std::vector < CKnownUserPtr > &children, const char *filename, uint32 lineNum); private: private: friend class CPersistentCache; friend class CKnownUserPtr; typedef std::map TObjectCache; typedef std::set TObjectSet; typedef std::map TReleasedObject; /// The complete set of object currently in memory (either active or released) excluding transient instance static TObjectCache _ObjectCache; /// The set of object in memory ut released (no pointer on them) and waiting for decommit static TReleasedObject _ReleasedObject; /// The current object state NOPE::TObjectState _ObjectState; /// For object in released state, this is the release date (used to trigger deletion of the object from memory) time_t _ReleaseDate; /// The linked list of pointer on this object CKnownUserPtr *_PtrList; // Try to load the specified object from the memory cache, return NULL if the object is not in the cache static CKnownUser *loadFromCache(uint32 objectId, bool unrelease); // Receive and execute command from the cache manager. static uint32 cacheCmd(NOPE::TCacheCmd cmd); static void dump(); static void updateCache(); public: static void clearCache(); private: void registerUpdatable(); // set the pointer on the first pointer of the pointer list (set to null when there is no more pointer) void setFirstPtr(CKnownUserPtr *ptr); // return the first pointer of the pointer list (can be null) CKnownUserPtr *getFirstPtr() { return _PtrList; } public: /** Return the object identifier (witch is unique) * You can only call this method on a persistent instance. * (because transient instance can have invalid id) */ uint32 getObjectId() const { nlassert(getPersistentState() != NOPE::os_transient); return _RelationId; } /** Set the object unique ID. * You can only set the object id on a transient object * having a non autogenerated unique id. * Furthermore, you MUST set the id before calling create() * if the id is not autogenerated. */ void setObjectId(uint32 objectId) { // can only be set when in transient state nlassert(getPersistentState() == NOPE::os_transient); // can only be set once nlassert(_RelationId == NOPE::INVALID_OBJECT_ID); _RelationId = objectId; } /** Return the current persistent state of the object.*/ NOPE::TObjectState getPersistentState() const { return _ObjectState; } private: // Set the persistent state of the object and do some house keeping void setPersistentState(NOPE::TObjectState state); }; ///////////////////////////////////////////////////////////////// // WARNING : this is a generated file, don't change it ! ///////////////////////////////////////////////////////////////// class CSessionParticipant { protected: // uint32 _Id; // TSessionId _SessionId; // uint32 _CharId; // TSessionPartStatus _Status; // bool _Kicked; public: // TSessionId getSessionId() const { return _SessionId; } void setSessionId(TSessionId value) { if (_SessionId != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _SessionId = value; } } // uint32 getCharId() const { return _CharId; } void setCharId(uint32 value) { if (_CharId != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _CharId = value; } } // TSessionPartStatus getStatus() const { return _Status; } void setStatus(TSessionPartStatus value) { if (_Status != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _Status = value; } } // bool getKicked() const { return _Kicked; } void setKicked(bool value) { if (_Kicked != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _Kicked = value; } } bool operator == (const CSessionParticipant &other) const { return _Id == other._Id && _SessionId == other._SessionId && _CharId == other._CharId && _Status == other._Status && _Kicked == other._Kicked; } private: // private constructor, you must use 'createTransient' to get an instance CSessionParticipant() : _PtrList(NULL), _ObjectState(NOPE::os_transient), _Id(NOPE::INVALID_OBJECT_ID) { // Default initialisation _Kicked = false; // register the cache for this class (if not already done) registerUpdatable(); } // Destructor, delete any children ~CSessionParticipant(); /// utility func to remove this object from the released object container void removeFromReleased(); public: /// Create a new instance in the transient space static CSessionParticipantPtr createTransient(const char *filename, uint32 lineNum) { return CSessionParticipantPtr(new CSessionParticipant(), filename, lineNum); } /** Create a new object in the database from the current object data. * The object MUST be in transient state (i.e, it must be a new * object created by user and not comming from the databse). * If identifier is autogenerated, the generated id can be read after * this call. */ bool create(MSW::CConnection &connection); /** Update the database with the current object state. * The object MUST be either in clean or dirty state. * Return true if the object has been effectively stored * in the database. * After this call, the object is in 'clean' state. */ bool update(MSW::CConnection &connection); /** Remove the current object from the persistent storage. * The object must be in clean or dirty state. * Return true if the object has been correctly * updated in the database. * After the call, the object is in 'clean' state. */ bool remove(MSW::CConnection &connection); /** Remove an object from the persistent storage by specifying * the id to remove. * Return true if an entry as been effectively removed from * the database. * After the call, the object is in 'removed' state and should * no more be used. A good pratice should be to delete * the transient object just after the remove call. */ static bool removeById(MSW::CConnection &connection, uint32 id); /** Load an instance from the database. * This call allocate a new object and load the property value * from the database. * Return NULL if the object id is not found. */ static CSessionParticipantPtr load(MSW::CConnection &connection, uint32 id, const char *filename, uint32 lineNum); /** Load all objects children of CCharacter and * return them by using the specified output iterator. */ static bool loadChildrenOfCCharacter(MSW::CConnection &connection, uint32 parentId, std::vector < CSessionParticipantPtr > &children, const char *filename, uint32 lineNum); /** Load all objects children of CSession and * return them by using the specified output iterator. */ static bool loadChildrenOfCSession(MSW::CConnection &connection, uint32 parentId, std::vector < CSessionParticipantPtr > &children, const char *filename, uint32 lineNum); private: private: friend class CPersistentCache; friend class CSessionParticipantPtr; typedef std::map TObjectCache; typedef std::set TObjectSet; typedef std::map TReleasedObject; /// The complete set of object currently in memory (either active or released) excluding transient instance static TObjectCache _ObjectCache; /// The set of object in memory ut released (no pointer on them) and waiting for decommit static TReleasedObject _ReleasedObject; /// The current object state NOPE::TObjectState _ObjectState; /// For object in released state, this is the release date (used to trigger deletion of the object from memory) time_t _ReleaseDate; /// The linked list of pointer on this object CSessionParticipantPtr *_PtrList; // Try to load the specified object from the memory cache, return NULL if the object is not in the cache static CSessionParticipant *loadFromCache(uint32 objectId, bool unrelease); // Receive and execute command from the cache manager. static uint32 cacheCmd(NOPE::TCacheCmd cmd); static void dump(); static void updateCache(); public: static void clearCache(); private: void registerUpdatable(); // set the pointer on the first pointer of the pointer list (set to null when there is no more pointer) void setFirstPtr(CSessionParticipantPtr *ptr); // return the first pointer of the pointer list (can be null) CSessionParticipantPtr *getFirstPtr() { return _PtrList; } public: /** Return the object identifier (witch is unique) * You can only call this method on a persistent instance. * (because transient instance can have invalid id) */ uint32 getObjectId() const { nlassert(getPersistentState() != NOPE::os_transient); return _Id; } /** Set the object unique ID. * You can only set the object id on a transient object * having a non autogenerated unique id. * Furthermore, you MUST set the id before calling create() * if the id is not autogenerated. */ void setObjectId(uint32 objectId) { // can only be set when in transient state nlassert(getPersistentState() == NOPE::os_transient); // can only be set once nlassert(_Id == NOPE::INVALID_OBJECT_ID); _Id = objectId; } /** Return the current persistent state of the object.*/ NOPE::TObjectState getPersistentState() const { return _ObjectState; } private: // Set the persistent state of the object and do some house keeping void setPersistentState(NOPE::TObjectState state); }; ///////////////////////////////////////////////////////////////// // WARNING : this is a generated file, don't change it ! ///////////////////////////////////////////////////////////////// class CCharacter { protected: // uint32 _CharId; // std::string _CharName; // uint32 _UserId; // uint32 _GuildId; // uint32 _BestCombatLevel; // uint32 _HomeMainlandSessionId; // std::string _RingAccess; // CHARSYNC::TRace _Race; // CHARSYNC::TCivilisation _Civilisation; // CHARSYNC::TCult _Cult; // uint32 _CurrentSession; // uint32 _RRPAM; // uint32 _RRPMasterless; // uint32 _RRPAuthor; // bool _Newcomer; // uint32 _CreationDate; // uint32 _LastPlayedDate; friend class CSession; std::vector < CSessionPtr > *_Sessions; friend class CSessionParticipant; std::vector < CSessionParticipantPtr > *_SessionParticipants; friend class CKnownUser; std::vector < CKnownUserPtr > *_KnownBy; friend class CPlayerRating; std::vector < CPlayerRatingPtr > *_PlayerRatings; public: // const std::string &getCharName() const { return _CharName; } void setCharName(const std::string &value) { if (_CharName != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _CharName = value; } } // uint32 getUserId() const { return _UserId; } void setUserId(uint32 value) { if (_UserId != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _UserId = value; } } // uint32 getGuildId() const { return _GuildId; } void setGuildId(uint32 value) { if (_GuildId != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _GuildId = value; } } // uint32 getBestCombatLevel() const { return _BestCombatLevel; } void setBestCombatLevel(uint32 value) { if (_BestCombatLevel != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _BestCombatLevel = value; } } // uint32 getHomeMainlandSessionId() const { return _HomeMainlandSessionId; } void setHomeMainlandSessionId(uint32 value) { if (_HomeMainlandSessionId != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _HomeMainlandSessionId = value; } } // const std::string &getRingAccess() const { return _RingAccess; } void setRingAccess(const std::string &value) { if (_RingAccess != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _RingAccess = value; } } // CHARSYNC::TRace getRace() const { return _Race; } void setRace(CHARSYNC::TRace value) { if (_Race != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _Race = value; } } // CHARSYNC::TCivilisation getCivilisation() const { return _Civilisation; } void setCivilisation(CHARSYNC::TCivilisation value) { if (_Civilisation != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _Civilisation = value; } } // CHARSYNC::TCult getCult() const { return _Cult; } void setCult(CHARSYNC::TCult value) { if (_Cult != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _Cult = value; } } // uint32 getCurrentSession() const { return _CurrentSession; } void setCurrentSession(uint32 value) { if (_CurrentSession != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _CurrentSession = value; } } // uint32 getRRPAM() const { return _RRPAM; } void setRRPAM(uint32 value) { if (_RRPAM != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _RRPAM = value; } } // uint32 getRRPMasterless() const { return _RRPMasterless; } void setRRPMasterless(uint32 value) { if (_RRPMasterless != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _RRPMasterless = value; } } // uint32 getRRPAuthor() const { return _RRPAuthor; } void setRRPAuthor(uint32 value) { if (_RRPAuthor != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _RRPAuthor = value; } } // bool getNewcomer() const { return _Newcomer; } void setNewcomer(bool value) { if (_Newcomer != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _Newcomer = value; } } // uint32 getCreationDate() const { return _CreationDate; } void setCreationDate(uint32 value) { if (_CreationDate != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _CreationDate = value; } } // uint32 getLastPlayedDate() const { return _LastPlayedDate; } void setLastPlayedDate(uint32 value) { if (_LastPlayedDate != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _LastPlayedDate = value; } } /** Return a const reference to the vector of child. * If you want to modify the element inside, you need to * use on of the two following methods who return non const pointer * on contained elements. */ const std::vector &getSessions() const; /** Return the ith element of the child vector * index must be valid (ie less than size of the vector) */ CSessionPtr &getSessionsByIndex(uint32 index) const; /** Return the identified element by looking in the vector * If no element match the id, NULL pointer is returned */ CSessionPtr &getSessionsById(uint32 id) const; /** Return a const reference to the vector of child. * If you want to modify the element inside, you need to * use on of the two following methods who return non const pointer * on contained elements. */ const std::vector &getSessionParticipants() const; /** Return the ith element of the child vector * index must be valid (ie less than size of the vector) */ CSessionParticipantPtr &getSessionParticipantsByIndex(uint32 index) const; /** Return the identified element by looking in the vector * If no element match the id, NULL pointer is returned */ CSessionParticipantPtr &getSessionParticipantsById(uint32 id) const; /** Return a const reference to the vector of child. * If you want to modify the element inside, you need to * use on of the two following methods who return non const pointer * on contained elements. */ const std::vector &getKnownBy() const; /** Return the ith element of the child vector * index must be valid (ie less than size of the vector) */ CKnownUserPtr &getKnownByByIndex(uint32 index) const; /** Return the identified element by looking in the vector * If no element match the id, NULL pointer is returned */ CKnownUserPtr &getKnownByById(uint32 id) const; /** Return a const reference to the vector of child. * If you want to modify the element inside, you need to * use on of the two following methods who return non const pointer * on contained elements. */ const std::vector &getPlayerRatings() const; /** Return the ith element of the child vector * index must be valid (ie less than size of the vector) */ CPlayerRatingPtr &getPlayerRatingsByIndex(uint32 index) const; /** Return the identified element by looking in the vector * If no element match the id, NULL pointer is returned */ CPlayerRatingPtr &getPlayerRatingsById(uint32 id) const; bool operator == (const CCharacter &other) const { return _CharId == other._CharId && _CharName == other._CharName && _UserId == other._UserId && _GuildId == other._GuildId && _BestCombatLevel == other._BestCombatLevel && _HomeMainlandSessionId == other._HomeMainlandSessionId && _RingAccess == other._RingAccess && _Race == other._Race && _Civilisation == other._Civilisation && _Cult == other._Cult && _CurrentSession == other._CurrentSession && _RRPAM == other._RRPAM && _RRPMasterless == other._RRPMasterless && _RRPAuthor == other._RRPAuthor && _Newcomer == other._Newcomer && _CreationDate == other._CreationDate && _LastPlayedDate == other._LastPlayedDate; } private: // private constructor, you must use 'createTransient' to get an instance CCharacter() : _PtrList(NULL), _ObjectState(NOPE::os_transient), _CharId(NOPE::INVALID_OBJECT_ID) { // Default initialisation _GuildId = 0; _BestCombatLevel = 0; _HomeMainlandSessionId = 0; _CurrentSession = 0; _RRPAM = 0; _RRPMasterless = 0; _RRPAuthor = 0; _Newcomer = 1; _LastPlayedDate = 0; _Sessions = NULL; _SessionParticipants = NULL; _KnownBy = NULL; _PlayerRatings = NULL; // register the cache for this class (if not already done) registerUpdatable(); } // Destructor, delete any children ~CCharacter(); /// utility func to remove this object from the released object container void removeFromReleased(); public: /// Create a new instance in the transient space static CCharacterPtr createTransient(const char *filename, uint32 lineNum) { return CCharacterPtr(new CCharacter(), filename, lineNum); } /** Create a new object in the database from the current object data. * The object MUST be in transient state (i.e, it must be a new * object created by user and not comming from the databse). * If identifier is autogenerated, the generated id can be read after * this call. */ bool create(MSW::CConnection &connection); /** Update the database with the current object state. * The object MUST be either in clean or dirty state. * Return true if the object has been effectively stored * in the database. * After this call, the object is in 'clean' state. */ bool update(MSW::CConnection &connection); /** Remove the current object from the persistent storage. * The object must be in clean or dirty state. * Return true if the object has been correctly * updated in the database. * After the call, the object is in 'clean' state. */ bool remove(MSW::CConnection &connection); /** Remove an object from the persistent storage by specifying * the id to remove. * Return true if an entry as been effectively removed from * the database. * After the call, the object is in 'removed' state and should * no more be used. A good pratice should be to delete * the transient object just after the remove call. */ static bool removeById(MSW::CConnection &connection, uint32 id); /** Load an instance from the database. * This call allocate a new object and load the property value * from the database. * Return NULL if the object id is not found. */ static CCharacterPtr load(MSW::CConnection &connection, uint32 id, const char *filename, uint32 lineNum); /** Load all objects children of CRingUser and * return them by using the specified output iterator. */ static bool loadChildrenOfCRingUser(MSW::CConnection &connection, uint32 parentId, std::map < uint32, CCharacterPtr > &children, const char *filename, uint32 lineNum); /** Load all objects children of CGuild and * return them by using the specified output iterator. */ static bool loadChildrenOfCGuild(MSW::CConnection &connection, uint32 parentId, std::vector < CCharacterPtr > &children, const char *filename, uint32 lineNum); /// Load Sessions child(ren) object(s). bool loadSessions(MSW::CConnection &connection, const char *filename, uint32 lineNum); /// Load SessionParticipants child(ren) object(s). bool loadSessionParticipants(MSW::CConnection &connection, const char *filename, uint32 lineNum); /// Load KnownBy child(ren) object(s). bool loadKnownBy(MSW::CConnection &connection, const char *filename, uint32 lineNum); /// Load PlayerRatings child(ren) object(s). bool loadPlayerRatings(MSW::CConnection &connection, const char *filename, uint32 lineNum); private: private: friend class CPersistentCache; friend class CCharacterPtr; typedef std::map TObjectCache; typedef std::set TObjectSet; typedef std::map TReleasedObject; /// The complete set of object currently in memory (either active or released) excluding transient instance static TObjectCache _ObjectCache; /// The set of object in memory ut released (no pointer on them) and waiting for decommit static TReleasedObject _ReleasedObject; /// The current object state NOPE::TObjectState _ObjectState; /// For object in released state, this is the release date (used to trigger deletion of the object from memory) time_t _ReleaseDate; /// The linked list of pointer on this object CCharacterPtr *_PtrList; // Try to load the specified object from the memory cache, return NULL if the object is not in the cache static CCharacter *loadFromCache(uint32 objectId, bool unrelease); // Receive and execute command from the cache manager. static uint32 cacheCmd(NOPE::TCacheCmd cmd); static void dump(); static void updateCache(); public: static void clearCache(); private: void registerUpdatable(); // set the pointer on the first pointer of the pointer list (set to null when there is no more pointer) void setFirstPtr(CCharacterPtr *ptr); // return the first pointer of the pointer list (can be null) CCharacterPtr *getFirstPtr() { return _PtrList; } public: /** Return the object identifier (witch is unique) * You can only call this method on a persistent instance. * (because transient instance can have invalid id) */ uint32 getObjectId() const { return _CharId; } /** Set the object unique ID. * You can only set the object id on a transient object * having a non autogenerated unique id. * Furthermore, you MUST set the id before calling create() * if the id is not autogenerated. */ void setObjectId(uint32 objectId) { // can only be set when in transient state nlassert(getPersistentState() == NOPE::os_transient); // can only be set once nlassert(_CharId == NOPE::INVALID_OBJECT_ID); _CharId = objectId; } /** Return the current persistent state of the object.*/ NOPE::TObjectState getPersistentState() const { return _ObjectState; } private: // Set the persistent state of the object and do some house keeping void setPersistentState(NOPE::TObjectState state); }; struct TCurrentActivity { enum TValues { ca_none = 1, ca_play, ca_edit, ca_anim, /// the highest valid value in the enum last_enum_item = ca_anim, /// a value equal to the last enum item +1 end_of_enum, invalid_val, /// Number of enumerated values nb_enum_items = 4 }; /// Index table to convert enum value to linear index table const std::map &getIndexTable() const { static std::map indexTable; static bool init = false; if (!init) { // fill the index table indexTable.insert(std::make_pair(ca_none, 0)); indexTable.insert(std::make_pair(ca_play, 1)); indexTable.insert(std::make_pair(ca_edit, 2)); indexTable.insert(std::make_pair(ca_anim, 3)); init = true; } return indexTable; } static const NLMISC::CStringConversion &getConversionTable() { NL_BEGIN_STRING_CONVERSION_TABLE(TValues) NL_STRING_CONVERSION_TABLE_ENTRY(ca_none) NL_STRING_CONVERSION_TABLE_ENTRY(ca_play) NL_STRING_CONVERSION_TABLE_ENTRY(ca_edit) NL_STRING_CONVERSION_TABLE_ENTRY(ca_anim) NL_STRING_CONVERSION_TABLE_ENTRY(invalid_val) }; static NLMISC::CStringConversion conversionTable(TValues_nl_string_conversion_table, sizeof(TValues_nl_string_conversion_table) / sizeof(TValues_nl_string_conversion_table[0]), invalid_val); return conversionTable; } TValues _Value; public: TCurrentActivity() : _Value(invalid_val) { } TCurrentActivity(TValues value) : _Value(value) { } TCurrentActivity(const std::string &str) { _Value = getConversionTable().fromString(str); } void serial(NLMISC::IStream &s) { s.serialEnum(_Value); } bool operator == (const TCurrentActivity &other) const { return _Value == other._Value; } bool operator != (const TCurrentActivity &other) const { return ! (_Value == other._Value); } bool operator < (const TCurrentActivity &other) const { return _Value < other._Value; } bool operator <= (const TCurrentActivity &other) const { return _Value <= other._Value; } bool operator > (const TCurrentActivity &other) const { return !(_Value <= other._Value); } bool operator >= (const TCurrentActivity &other) const { return !(_Value < other._Value); } const std::string &toString() const { return getConversionTable().toString(_Value); } static const std::string &toString(TValues value) { return getConversionTable().toString(value); } TValues getValue() const { return _Value; } // return true if the actual value of the enum is valid, otherwise false bool isValid() { if (_Value == invalid_val) return false; // not invalid, check other enum value return getConversionTable().isValid(_Value); } uint32 asIndex() { std::map::const_iterator it(getIndexTable().find(_Value)); nlassert(it != getIndexTable().end()); return it->second; } }; struct TCurrentStatus { enum TValues { cs_offline = 1, cs_logged, cs_online, /// the highest valid value in the enum last_enum_item = cs_online, /// a value equal to the last enum item +1 end_of_enum, invalid_val, /// Number of enumerated values nb_enum_items = 3 }; /// Index table to convert enum value to linear index table const std::map &getIndexTable() const { static std::map indexTable; static bool init = false; if (!init) { // fill the index table indexTable.insert(std::make_pair(cs_offline, 0)); indexTable.insert(std::make_pair(cs_logged, 1)); indexTable.insert(std::make_pair(cs_online, 2)); init = true; } return indexTable; } static const NLMISC::CStringConversion &getConversionTable() { NL_BEGIN_STRING_CONVERSION_TABLE(TValues) NL_STRING_CONVERSION_TABLE_ENTRY(cs_offline) NL_STRING_CONVERSION_TABLE_ENTRY(cs_logged) NL_STRING_CONVERSION_TABLE_ENTRY(cs_online) NL_STRING_CONVERSION_TABLE_ENTRY(invalid_val) }; static NLMISC::CStringConversion conversionTable(TValues_nl_string_conversion_table, sizeof(TValues_nl_string_conversion_table) / sizeof(TValues_nl_string_conversion_table[0]), invalid_val); return conversionTable; } TValues _Value; public: TCurrentStatus() : _Value(invalid_val) { } TCurrentStatus(TValues value) : _Value(value) { } TCurrentStatus(const std::string &str) { _Value = getConversionTable().fromString(str); } void serial(NLMISC::IStream &s) { s.serialEnum(_Value); } bool operator == (const TCurrentStatus &other) const { return _Value == other._Value; } bool operator != (const TCurrentStatus &other) const { return ! (_Value == other._Value); } bool operator < (const TCurrentStatus &other) const { return _Value < other._Value; } bool operator <= (const TCurrentStatus &other) const { return _Value <= other._Value; } bool operator > (const TCurrentStatus &other) const { return !(_Value <= other._Value); } bool operator >= (const TCurrentStatus &other) const { return !(_Value < other._Value); } const std::string &toString() const { return getConversionTable().toString(_Value); } static const std::string &toString(TValues value) { return getConversionTable().toString(value); } TValues getValue() const { return _Value; } // return true if the actual value of the enum is valid, otherwise false bool isValid() { if (_Value == invalid_val) return false; // not invalid, check other enum value return getConversionTable().isValid(_Value); } uint32 asIndex() { std::map::const_iterator it(getIndexTable().find(_Value)); nlassert(it != getIndexTable().end()); return it->second; } }; struct TPublicLevel { enum TValues { ul_none = 1, ul_public, /// the highest valid value in the enum last_enum_item = ul_public, /// a value equal to the last enum item +1 end_of_enum, invalid_val, /// Number of enumerated values nb_enum_items = 2 }; /// Index table to convert enum value to linear index table const std::map &getIndexTable() const { static std::map indexTable; static bool init = false; if (!init) { // fill the index table indexTable.insert(std::make_pair(ul_none, 0)); indexTable.insert(std::make_pair(ul_public, 1)); init = true; } return indexTable; } static const NLMISC::CStringConversion &getConversionTable() { NL_BEGIN_STRING_CONVERSION_TABLE(TValues) NL_STRING_CONVERSION_TABLE_ENTRY(ul_none) NL_STRING_CONVERSION_TABLE_ENTRY(ul_public) NL_STRING_CONVERSION_TABLE_ENTRY(invalid_val) }; static NLMISC::CStringConversion conversionTable(TValues_nl_string_conversion_table, sizeof(TValues_nl_string_conversion_table) / sizeof(TValues_nl_string_conversion_table[0]), invalid_val); return conversionTable; } TValues _Value; public: TPublicLevel() : _Value(invalid_val) { } TPublicLevel(TValues value) : _Value(value) { } TPublicLevel(const std::string &str) { _Value = getConversionTable().fromString(str); } void serial(NLMISC::IStream &s) { s.serialEnum(_Value); } bool operator == (const TPublicLevel &other) const { return _Value == other._Value; } bool operator != (const TPublicLevel &other) const { return ! (_Value == other._Value); } bool operator < (const TPublicLevel &other) const { return _Value < other._Value; } bool operator <= (const TPublicLevel &other) const { return _Value <= other._Value; } bool operator > (const TPublicLevel &other) const { return !(_Value <= other._Value); } bool operator >= (const TPublicLevel &other) const { return !(_Value < other._Value); } const std::string &toString() const { return getConversionTable().toString(_Value); } static const std::string &toString(TValues value) { return getConversionTable().toString(value); } TValues getValue() const { return _Value; } // return true if the actual value of the enum is valid, otherwise false bool isValid() { if (_Value == invalid_val) return false; // not invalid, check other enum value return getConversionTable().isValid(_Value); } uint32 asIndex() { std::map::const_iterator it(getIndexTable().find(_Value)); nlassert(it != getIndexTable().end()); return it->second; } }; struct TAccountType { enum TValues { at_normal = 1, at_gold, /// the highest valid value in the enum last_enum_item = at_gold, /// a value equal to the last enum item +1 end_of_enum, invalid_val, /// Number of enumerated values nb_enum_items = 2 }; /// Index table to convert enum value to linear index table const std::map &getIndexTable() const { static std::map indexTable; static bool init = false; if (!init) { // fill the index table indexTable.insert(std::make_pair(at_normal, 0)); indexTable.insert(std::make_pair(at_gold, 1)); init = true; } return indexTable; } static const NLMISC::CStringConversion &getConversionTable() { NL_BEGIN_STRING_CONVERSION_TABLE(TValues) NL_STRING_CONVERSION_TABLE_ENTRY(at_normal) NL_STRING_CONVERSION_TABLE_ENTRY(at_gold) NL_STRING_CONVERSION_TABLE_ENTRY(invalid_val) }; static NLMISC::CStringConversion conversionTable(TValues_nl_string_conversion_table, sizeof(TValues_nl_string_conversion_table) / sizeof(TValues_nl_string_conversion_table[0]), invalid_val); return conversionTable; } TValues _Value; public: TAccountType() : _Value(invalid_val) { } TAccountType(TValues value) : _Value(value) { } TAccountType(const std::string &str) { _Value = getConversionTable().fromString(str); } void serial(NLMISC::IStream &s) { s.serialEnum(_Value); } bool operator == (const TAccountType &other) const { return _Value == other._Value; } bool operator != (const TAccountType &other) const { return ! (_Value == other._Value); } bool operator < (const TAccountType &other) const { return _Value < other._Value; } bool operator <= (const TAccountType &other) const { return _Value <= other._Value; } bool operator > (const TAccountType &other) const { return !(_Value <= other._Value); } bool operator >= (const TAccountType &other) const { return !(_Value < other._Value); } const std::string &toString() const { return getConversionTable().toString(_Value); } static const std::string &toString(TValues value) { return getConversionTable().toString(value); } TValues getValue() const { return _Value; } // return true if the actual value of the enum is valid, otherwise false bool isValid() { if (_Value == invalid_val) return false; // not invalid, check other enum value return getConversionTable().isValid(_Value); } uint32 asIndex() { std::map::const_iterator it(getIndexTable().find(_Value)); nlassert(it != getIndexTable().end()); return it->second; } }; struct TLanguage { enum TValues { lang_en = 1, lang_fr, lang_de, lang_other, /// the highest valid value in the enum last_enum_item = lang_other, /// a value equal to the last enum item +1 end_of_enum, invalid_val, /// Number of enumerated values nb_enum_items = 4 }; /// Index table to convert enum value to linear index table const std::map &getIndexTable() const { static std::map indexTable; static bool init = false; if (!init) { // fill the index table indexTable.insert(std::make_pair(lang_en, 0)); indexTable.insert(std::make_pair(lang_fr, 1)); indexTable.insert(std::make_pair(lang_de, 2)); indexTable.insert(std::make_pair(lang_other, 3)); init = true; } return indexTable; } static const NLMISC::CStringConversion &getConversionTable() { NL_BEGIN_STRING_CONVERSION_TABLE(TValues) NL_STRING_CONVERSION_TABLE_ENTRY(lang_en) NL_STRING_CONVERSION_TABLE_ENTRY(lang_fr) NL_STRING_CONVERSION_TABLE_ENTRY(lang_de) NL_STRING_CONVERSION_TABLE_ENTRY(lang_other) NL_STRING_CONVERSION_TABLE_ENTRY(invalid_val) }; static NLMISC::CStringConversion conversionTable(TValues_nl_string_conversion_table, sizeof(TValues_nl_string_conversion_table) / sizeof(TValues_nl_string_conversion_table[0]), invalid_val); return conversionTable; } TValues _Value; public: TLanguage() : _Value(invalid_val) { } TLanguage(TValues value) : _Value(value) { } TLanguage(const std::string &str) { _Value = getConversionTable().fromString(str); } void serial(NLMISC::IStream &s) { s.serialEnum(_Value); } bool operator == (const TLanguage &other) const { return _Value == other._Value; } bool operator != (const TLanguage &other) const { return ! (_Value == other._Value); } bool operator < (const TLanguage &other) const { return _Value < other._Value; } bool operator <= (const TLanguage &other) const { return _Value <= other._Value; } bool operator > (const TLanguage &other) const { return !(_Value <= other._Value); } bool operator >= (const TLanguage &other) const { return !(_Value < other._Value); } const std::string &toString() const { return getConversionTable().toString(_Value); } static const std::string &toString(TValues value) { return getConversionTable().toString(value); } TValues getValue() const { return _Value; } // return true if the actual value of the enum is valid, otherwise false bool isValid() { if (_Value == invalid_val) return false; // not invalid, check other enum value return getConversionTable().isValid(_Value); } uint32 asIndex() { std::map::const_iterator it(getIndexTable().find(_Value)); nlassert(it != getIndexTable().end()); return it->second; } }; ///////////////////////////////////////////////////////////////// // WARNING : this is a generated file, don't change it ! ///////////////////////////////////////////////////////////////// class CRingUser { protected: // uint32 _UserId; // std::string _UserName; // uint32 _CurrentCharacter; // uint32 _CurrentSession; // TCurrentActivity _CurrentActivity; // TCurrentStatus _CurrentStatus; // TPublicLevel _PublicLevel; // TAccountType _AccountType; // std::string _ContentAccessLevel; // std::string _Description; // TLanguage _Lang; // std::string _Cookie; // sint32 _CurrentDomainId; // std::string _AddedPrivileges; friend class CKnownUser; std::vector < CKnownUserPtr > *_KnownUsers; friend class CCharacter; std::map < uint32, CCharacterPtr > *_Characters; friend class CFolder; std::vector < CFolderPtr > *_Folders; friend class CFolderAccess; std::vector < CFolderAccessPtr > *_FolderAccess; friend class CGmStatus; bool _GMStatusLoaded; CGmStatusPtr _GMStatus; public: // const std::string &getUserName() const { return _UserName; } void setUserName(const std::string &value) { if (_UserName != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _UserName = value; } } // uint32 getCurrentCharacter() const { return _CurrentCharacter; } void setCurrentCharacter(uint32 value) { if (_CurrentCharacter != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _CurrentCharacter = value; } } // uint32 getCurrentSession() const { return _CurrentSession; } void setCurrentSession(uint32 value) { if (_CurrentSession != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _CurrentSession = value; } } // TCurrentActivity getCurrentActivity() const { return _CurrentActivity; } void setCurrentActivity(TCurrentActivity value) { if (_CurrentActivity != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _CurrentActivity = value; } } // TCurrentStatus getCurrentStatus() const { return _CurrentStatus; } void setCurrentStatus(TCurrentStatus value) { if (_CurrentStatus != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _CurrentStatus = value; } } // TPublicLevel getPublicLevel() const { return _PublicLevel; } void setPublicLevel(TPublicLevel value) { if (_PublicLevel != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _PublicLevel = value; } } // TAccountType getAccountType() const { return _AccountType; } void setAccountType(TAccountType value) { if (_AccountType != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _AccountType = value; } } // const std::string &getContentAccessLevel() const { return _ContentAccessLevel; } void setContentAccessLevel(const std::string &value) { if (_ContentAccessLevel != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _ContentAccessLevel = value; } } // const std::string &getDescription() const { return _Description; } void setDescription(const std::string &value) { if (_Description != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _Description = value; } } // TLanguage getLang() const { return _Lang; } void setLang(TLanguage value) { if (_Lang != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _Lang = value; } } // const std::string &getCookie() const { return _Cookie; } void setCookie(const std::string &value) { if (_Cookie != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _Cookie = value; } } // sint32 getCurrentDomainId() const { return _CurrentDomainId; } void setCurrentDomainId(sint32 value) { if (_CurrentDomainId != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _CurrentDomainId = value; } } // const std::string &getAddedPrivileges() const { return _AddedPrivileges; } void setAddedPrivileges(const std::string &value) { if (_AddedPrivileges != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _AddedPrivileges = value; } } /** Return a const reference to the vector of child. * If you want to modify the element inside, you need to * use on of the two following methods who return non const pointer * on contained elements. */ const std::vector &getKnownUsers() const; /** Return the ith element of the child vector * index must be valid (ie less than size of the vector) */ CKnownUserPtr &getKnownUsersByIndex(uint32 index) const; /** Return the identified element by looking in the vector * If no element match the id, NULL pointer is returned */ CKnownUserPtr &getKnownUsersById(uint32 id) const; /** Return a const reference to the map of child. * If you want to modify the element inside, you need to * use on of the two following method who return non const pointer * on contained elements. */ const std::map &getCharacters() const; /** Return the identified element by looking in the map * If no element match the id, NULL pointer is returned */ CCharacterPtr &getCharactersById(uint32 id) const; /** Return a const reference to the vector of child. * If you want to modify the element inside, you need to * use on of the two following methods who return non const pointer * on contained elements. */ const std::vector &getFolders() const; /** Return the ith element of the child vector * index must be valid (ie less than size of the vector) */ CFolderPtr &getFoldersByIndex(uint32 index) const; /** Return the identified element by looking in the vector * If no element match the id, NULL pointer is returned */ CFolderPtr &getFoldersById(uint32 id) const; /** Return a const reference to the vector of child. * If you want to modify the element inside, you need to * use on of the two following methods who return non const pointer * on contained elements. */ const std::vector &getFolderAccess() const; /** Return the ith element of the child vector * index must be valid (ie less than size of the vector) */ CFolderAccessPtr &getFolderAccessByIndex(uint32 index) const; /** Return the identified element by looking in the vector * If no element match the id, NULL pointer is returned */ CFolderAccessPtr &getFolderAccessById(uint32 id) const; /** Return the one child object (or null if not) */ CGmStatusPtr getGMStatus(); bool operator == (const CRingUser &other) const { return _UserId == other._UserId && _UserName == other._UserName && _CurrentCharacter == other._CurrentCharacter && _CurrentSession == other._CurrentSession && _CurrentActivity == other._CurrentActivity && _CurrentStatus == other._CurrentStatus && _PublicLevel == other._PublicLevel && _AccountType == other._AccountType && _ContentAccessLevel == other._ContentAccessLevel && _Description == other._Description && _Lang == other._Lang && _Cookie == other._Cookie && _CurrentDomainId == other._CurrentDomainId && _AddedPrivileges == other._AddedPrivileges; } private: // private constructor, you must use 'createTransient' to get an instance CRingUser() : _PtrList(NULL), _ObjectState(NOPE::os_transient), _UserId(NOPE::INVALID_OBJECT_ID) { _KnownUsers = NULL; _Characters = NULL; _Folders = NULL; _FolderAccess = NULL; _GMStatusLoaded = false; // register the cache for this class (if not already done) registerUpdatable(); } // Destructor, delete any children ~CRingUser(); /// utility func to remove this object from the released object container void removeFromReleased(); public: /// Create a new instance in the transient space static CRingUserPtr createTransient(const char *filename, uint32 lineNum) { return CRingUserPtr(new CRingUser(), filename, lineNum); } /** Create a new object in the database from the current object data. * The object MUST be in transient state (i.e, it must be a new * object created by user and not comming from the databse). * If identifier is autogenerated, the generated id can be read after * this call. */ bool create(MSW::CConnection &connection); /** Update the database with the current object state. * The object MUST be either in clean or dirty state. * Return true if the object has been effectively stored * in the database. * After this call, the object is in 'clean' state. */ bool update(MSW::CConnection &connection); /** Remove the current object from the persistent storage. * The object must be in clean or dirty state. * Return true if the object has been correctly * updated in the database. * After the call, the object is in 'clean' state. */ bool remove(MSW::CConnection &connection); /** Remove an object from the persistent storage by specifying * the id to remove. * Return true if an entry as been effectively removed from * the database. * After the call, the object is in 'removed' state and should * no more be used. A good pratice should be to delete * the transient object just after the remove call. */ static bool removeById(MSW::CConnection &connection, uint32 id); /** Load an instance from the database. * This call allocate a new object and load the property value * from the database. * Return NULL if the object id is not found. */ static CRingUserPtr load(MSW::CConnection &connection, uint32 id, const char *filename, uint32 lineNum); /// Load KnownUsers child(ren) object(s). bool loadKnownUsers(MSW::CConnection &connection, const char *filename, uint32 lineNum); /// Load Characters child(ren) object(s). bool loadCharacters(MSW::CConnection &connection, const char *filename, uint32 lineNum); /// Load Folders child(ren) object(s). bool loadFolders(MSW::CConnection &connection, const char *filename, uint32 lineNum); /// Load FolderAccess child(ren) object(s). bool loadFolderAccess(MSW::CConnection &connection, const char *filename, uint32 lineNum); /// Load GMStatus child(ren) object(s). bool loadGMStatus(MSW::CConnection &connection, const char *filename, uint32 lineNum); private: private: friend class CPersistentCache; friend class CRingUserPtr; typedef std::map TObjectCache; typedef std::set TObjectSet; typedef std::map TReleasedObject; /// The complete set of object currently in memory (either active or released) excluding transient instance static TObjectCache _ObjectCache; /// The set of object in memory ut released (no pointer on them) and waiting for decommit static TReleasedObject _ReleasedObject; /// The current object state NOPE::TObjectState _ObjectState; /// For object in released state, this is the release date (used to trigger deletion of the object from memory) time_t _ReleaseDate; /// The linked list of pointer on this object CRingUserPtr *_PtrList; // Try to load the specified object from the memory cache, return NULL if the object is not in the cache static CRingUser *loadFromCache(uint32 objectId, bool unrelease); // Receive and execute command from the cache manager. static uint32 cacheCmd(NOPE::TCacheCmd cmd); static void dump(); static void updateCache(); public: static void clearCache(); private: void registerUpdatable(); // set the pointer on the first pointer of the pointer list (set to null when there is no more pointer) void setFirstPtr(CRingUserPtr *ptr); // return the first pointer of the pointer list (can be null) CRingUserPtr *getFirstPtr() { return _PtrList; } public: /** Return the object identifier (witch is unique) * You can only call this method on a persistent instance. * (because transient instance can have invalid id) */ uint32 getObjectId() const { return _UserId; } /** Set the object unique ID. * You can only set the object id on a transient object * having a non autogenerated unique id. * Furthermore, you MUST set the id before calling create() * if the id is not autogenerated. */ void setObjectId(uint32 objectId) { // can only be set when in transient state nlassert(getPersistentState() == NOPE::os_transient); // can only be set once nlassert(_UserId == NOPE::INVALID_OBJECT_ID); _UserId = objectId; } /** Return the current persistent state of the object.*/ NOPE::TObjectState getPersistentState() const { return _ObjectState; } private: // Set the persistent state of the object and do some house keeping void setPersistentState(NOPE::TObjectState state); }; struct TRelationToParent { enum TValues { rtp_same = 1, rtp_variant, rtp_different, /// the highest valid value in the enum last_enum_item = rtp_different, /// a value equal to the last enum item +1 end_of_enum, invalid_val, /// Number of enumerated values nb_enum_items = 3 }; /// Index table to convert enum value to linear index table const std::map &getIndexTable() const { static std::map indexTable; static bool init = false; if (!init) { // fill the index table indexTable.insert(std::make_pair(rtp_same, 0)); indexTable.insert(std::make_pair(rtp_variant, 1)); indexTable.insert(std::make_pair(rtp_different, 2)); init = true; } return indexTable; } static const NLMISC::CStringConversion &getConversionTable() { NL_BEGIN_STRING_CONVERSION_TABLE(TValues) NL_STRING_CONVERSION_TABLE_ENTRY(rtp_same) NL_STRING_CONVERSION_TABLE_ENTRY(rtp_variant) NL_STRING_CONVERSION_TABLE_ENTRY(rtp_different) NL_STRING_CONVERSION_TABLE_ENTRY(invalid_val) }; static NLMISC::CStringConversion conversionTable(TValues_nl_string_conversion_table, sizeof(TValues_nl_string_conversion_table) / sizeof(TValues_nl_string_conversion_table[0]), invalid_val); return conversionTable; } TValues _Value; public: TRelationToParent() : _Value(invalid_val) { } TRelationToParent(TValues value) : _Value(value) { } TRelationToParent(const std::string &str) { _Value = getConversionTable().fromString(str); } void serial(NLMISC::IStream &s) { s.serialEnum(_Value); } bool operator == (const TRelationToParent &other) const { return _Value == other._Value; } bool operator != (const TRelationToParent &other) const { return ! (_Value == other._Value); } bool operator < (const TRelationToParent &other) const { return _Value < other._Value; } bool operator <= (const TRelationToParent &other) const { return _Value <= other._Value; } bool operator > (const TRelationToParent &other) const { return !(_Value <= other._Value); } bool operator >= (const TRelationToParent &other) const { return !(_Value < other._Value); } const std::string &toString() const { return getConversionTable().toString(_Value); } static const std::string &toString(TValues value) { return getConversionTable().toString(value); } TValues getValue() const { return _Value; } // return true if the actual value of the enum is valid, otherwise false bool isValid() { if (_Value == invalid_val) return false; // not invalid, check other enum value return getConversionTable().isValid(_Value); } uint32 asIndex() { std::map::const_iterator it(getIndexTable().find(_Value)); nlassert(it != getIndexTable().end()); return it->second; } }; struct TPlayType { enum TValues { pt_rp = 1, pt_pvp, /// the highest valid value in the enum last_enum_item = pt_pvp, /// a value equal to the last enum item +1 end_of_enum, invalid_val, /// Number of enumerated values nb_enum_items = 2 }; /// Index table to convert enum value to linear index table const std::map &getIndexTable() const { static std::map indexTable; static bool init = false; if (!init) { // fill the index table indexTable.insert(std::make_pair(pt_rp, 0)); indexTable.insert(std::make_pair(pt_pvp, 1)); init = true; } return indexTable; } static const NLMISC::CStringConversion &getConversionTable() { NL_BEGIN_STRING_CONVERSION_TABLE(TValues) NL_STRING_CONVERSION_TABLE_ENTRY(pt_rp) NL_STRING_CONVERSION_TABLE_ENTRY(pt_pvp) NL_STRING_CONVERSION_TABLE_ENTRY(invalid_val) }; static NLMISC::CStringConversion conversionTable(TValues_nl_string_conversion_table, sizeof(TValues_nl_string_conversion_table) / sizeof(TValues_nl_string_conversion_table[0]), invalid_val); return conversionTable; } TValues _Value; public: TPlayType() : _Value(invalid_val) { } TPlayType(TValues value) : _Value(value) { } TPlayType(const std::string &str) { _Value = getConversionTable().fromString(str); } void serial(NLMISC::IStream &s) { s.serialEnum(_Value); } bool operator == (const TPlayType &other) const { return _Value == other._Value; } bool operator != (const TPlayType &other) const { return ! (_Value == other._Value); } bool operator < (const TPlayType &other) const { return _Value < other._Value; } bool operator <= (const TPlayType &other) const { return _Value <= other._Value; } bool operator > (const TPlayType &other) const { return !(_Value <= other._Value); } bool operator >= (const TPlayType &other) const { return !(_Value < other._Value); } const std::string &toString() const { return getConversionTable().toString(_Value); } static const std::string &toString(TValues value) { return getConversionTable().toString(value); } TValues getValue() const { return _Value; } // return true if the actual value of the enum is valid, otherwise false bool isValid() { if (_Value == invalid_val) return false; // not invalid, check other enum value return getConversionTable().isValid(_Value); } uint32 asIndex() { std::map::const_iterator it(getIndexTable().find(_Value)); nlassert(it != getIndexTable().end()); return it->second; } }; ///////////////////////////////////////////////////////////////// // WARNING : this is a generated file, don't change it ! ///////////////////////////////////////////////////////////////// class CSession { protected: // TSessionId _SessionId; // TSessionType _SessionType; // std::string _Title; // uint32 _OwnerId; // uint32 _PlanDate; // uint32 _StartDate; // std::string _Description; // TSessionOrientation _Orientation; // R2::TSessionLevel _Level; // TRuleType _RuleType; // TAccessType _AccessType; // TSessionState _State; // uint32 _HostShardId; // uint32 _SubscriptionSlots; // uint32 _ReservedSlots; // TEstimatedDuration _EstimatedDuration; // uint32 _FinalDuration; // uint32 _FolderId; // std::string _Lang; // std::string _Icone; // TAnimMode _AnimMode; // TRaceFilter _RaceFilter; // TReligionFilter _ReligionFilter; // TGuildFilter _GuildFilter; // TShardFilter _ShardFilter; // TLevelFilter _LevelFilter; // bool _SubscriptionClosed; // bool _Newcomer; friend class CSessionParticipant; std::vector < CSessionParticipantPtr > *_SessionParticipants; friend class CGuildInvite; std::vector < CGuildInvitePtr > *_GuildInvites; friend class CJournalEntry; std::vector < CJournalEntryPtr > *_JournalEntries; public: // TSessionType getSessionType() const { return _SessionType; } void setSessionType(TSessionType value) { if (_SessionType != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _SessionType = value; } } // const std::string &getTitle() const { return _Title; } void setTitle(const std::string &value) { if (_Title != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _Title = value; } } // uint32 getOwnerId() const { return _OwnerId; } void setOwnerId(uint32 value) { if (_OwnerId != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _OwnerId = value; } } // uint32 getPlanDate() const { return _PlanDate; } void setPlanDate(uint32 value) { if (_PlanDate != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _PlanDate = value; } } // uint32 getStartDate() const { return _StartDate; } void setStartDate(uint32 value) { if (_StartDate != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _StartDate = value; } } // const std::string &getDescription() const { return _Description; } void setDescription(const std::string &value) { if (_Description != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _Description = value; } } // TSessionOrientation getOrientation() const { return _Orientation; } void setOrientation(TSessionOrientation value) { if (_Orientation != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _Orientation = value; } } // R2::TSessionLevel getLevel() const { return _Level; } void setLevel(R2::TSessionLevel value) { if (_Level != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _Level = value; } } // TRuleType getRuleType() const { return _RuleType; } void setRuleType(TRuleType value) { if (_RuleType != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _RuleType = value; } } // TAccessType getAccessType() const { return _AccessType; } void setAccessType(TAccessType value) { if (_AccessType != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _AccessType = value; } } // TSessionState getState() const { return _State; } void setState(TSessionState value) { if (_State != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _State = value; } } // uint32 getHostShardId() const { return _HostShardId; } void setHostShardId(uint32 value) { if (_HostShardId != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _HostShardId = value; } } // uint32 getSubscriptionSlots() const { return _SubscriptionSlots; } void setSubscriptionSlots(uint32 value) { if (_SubscriptionSlots != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _SubscriptionSlots = value; } } // uint32 getReservedSlots() const { return _ReservedSlots; } void setReservedSlots(uint32 value) { if (_ReservedSlots != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _ReservedSlots = value; } } // TEstimatedDuration getEstimatedDuration() const { return _EstimatedDuration; } void setEstimatedDuration(TEstimatedDuration value) { if (_EstimatedDuration != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _EstimatedDuration = value; } } // uint32 getFinalDuration() const { return _FinalDuration; } void setFinalDuration(uint32 value) { if (_FinalDuration != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _FinalDuration = value; } } // uint32 getFolderId() const { return _FolderId; } void setFolderId(uint32 value) { if (_FolderId != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _FolderId = value; } } // const std::string &getLang() const { return _Lang; } void setLang(const std::string &value) { if (_Lang != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _Lang = value; } } // const std::string &getIcone() const { return _Icone; } void setIcone(const std::string &value) { if (_Icone != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _Icone = value; } } // TAnimMode getAnimMode() const { return _AnimMode; } void setAnimMode(TAnimMode value) { if (_AnimMode != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _AnimMode = value; } } // TRaceFilter getRaceFilter() const { return _RaceFilter; } void setRaceFilter(TRaceFilter value) { if (_RaceFilter != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _RaceFilter = value; } } // TReligionFilter getReligionFilter() const { return _ReligionFilter; } void setReligionFilter(TReligionFilter value) { if (_ReligionFilter != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _ReligionFilter = value; } } // TGuildFilter getGuildFilter() const { return _GuildFilter; } void setGuildFilter(TGuildFilter value) { if (_GuildFilter != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _GuildFilter = value; } } // TShardFilter getShardFilter() const { return _ShardFilter; } void setShardFilter(TShardFilter value) { if (_ShardFilter != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _ShardFilter = value; } } // TLevelFilter getLevelFilter() const { return _LevelFilter; } void setLevelFilter(TLevelFilter value) { if (_LevelFilter != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _LevelFilter = value; } } // bool getSubscriptionClosed() const { return _SubscriptionClosed; } void setSubscriptionClosed(bool value) { if (_SubscriptionClosed != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _SubscriptionClosed = value; } } // bool getNewcomer() const { return _Newcomer; } void setNewcomer(bool value) { if (_Newcomer != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _Newcomer = value; } } /** Return a const reference to the vector of child. * If you want to modify the element inside, you need to * use on of the two following methods who return non const pointer * on contained elements. */ const std::vector &getSessionParticipants() const; /** Return the ith element of the child vector * index must be valid (ie less than size of the vector) */ CSessionParticipantPtr &getSessionParticipantsByIndex(uint32 index) const; /** Return the identified element by looking in the vector * If no element match the id, NULL pointer is returned */ CSessionParticipantPtr &getSessionParticipantsById(uint32 id) const; /** Return a const reference to the vector of child. * If you want to modify the element inside, you need to * use on of the two following methods who return non const pointer * on contained elements. */ const std::vector &getGuildInvites() const; /** Return the ith element of the child vector * index must be valid (ie less than size of the vector) */ CGuildInvitePtr &getGuildInvitesByIndex(uint32 index) const; /** Return the identified element by looking in the vector * If no element match the id, NULL pointer is returned */ CGuildInvitePtr &getGuildInvitesById(uint32 id) const; /** Return a const reference to the vector of child. * If you want to modify the element inside, you need to * use on of the two following methods who return non const pointer * on contained elements. */ const std::vector &getJournalEntries() const; /** Return the ith element of the child vector * index must be valid (ie less than size of the vector) */ CJournalEntryPtr &getJournalEntriesByIndex(uint32 index) const; /** Return the identified element by looking in the vector * If no element match the id, NULL pointer is returned */ CJournalEntryPtr &getJournalEntriesById(uint32 id) const; bool operator == (const CSession &other) const { return _SessionId == other._SessionId && _SessionType == other._SessionType && _Title == other._Title && _OwnerId == other._OwnerId && _PlanDate == other._PlanDate && _StartDate == other._StartDate && _Description == other._Description && _Orientation == other._Orientation && _Level == other._Level && _RuleType == other._RuleType && _AccessType == other._AccessType && _State == other._State && _HostShardId == other._HostShardId && _SubscriptionSlots == other._SubscriptionSlots && _ReservedSlots == other._ReservedSlots && _EstimatedDuration == other._EstimatedDuration && _FinalDuration == other._FinalDuration && _FolderId == other._FolderId && _Lang == other._Lang && _Icone == other._Icone && _AnimMode == other._AnimMode && _RaceFilter == other._RaceFilter && _ReligionFilter == other._ReligionFilter && _GuildFilter == other._GuildFilter && _ShardFilter == other._ShardFilter && _LevelFilter == other._LevelFilter && _SubscriptionClosed == other._SubscriptionClosed && _Newcomer == other._Newcomer; } private: // private constructor, you must use 'createTransient' to get an instance CSession() : _PtrList(NULL), _ObjectState(NOPE::os_transient), _SessionId(NOPE::INVALID_OBJECT_ID) { // Default initialisation _AccessType = TAccessType::at_private; _Newcomer = 1; _SessionParticipants = NULL; _GuildInvites = NULL; _JournalEntries = NULL; // register the cache for this class (if not already done) registerUpdatable(); } // Destructor, delete any children ~CSession(); /// utility func to remove this object from the released object container void removeFromReleased(); public: /// Create a new instance in the transient space static CSessionPtr createTransient(const char *filename, uint32 lineNum) { return CSessionPtr(new CSession(), filename, lineNum); } /** Create a new object in the database from the current object data. * The object MUST be in transient state (i.e, it must be a new * object created by user and not comming from the databse). * If identifier is autogenerated, the generated id can be read after * this call. */ bool create(MSW::CConnection &connection); /** Update the database with the current object state. * The object MUST be either in clean or dirty state. * Return true if the object has been effectively stored * in the database. * After this call, the object is in 'clean' state. */ bool update(MSW::CConnection &connection); /** Remove the current object from the persistent storage. * The object must be in clean or dirty state. * Return true if the object has been correctly * updated in the database. * After the call, the object is in 'clean' state. */ bool remove(MSW::CConnection &connection); /** Remove an object from the persistent storage by specifying * the id to remove. * Return true if an entry as been effectively removed from * the database. * After the call, the object is in 'removed' state and should * no more be used. A good pratice should be to delete * the transient object just after the remove call. */ static bool removeById(MSW::CConnection &connection, uint32 id); /** Load an instance from the database. * This call allocate a new object and load the property value * from the database. * Return NULL if the object id is not found. */ static CSessionPtr load(MSW::CConnection &connection, uint32 id, const char *filename, uint32 lineNum); /** Load all objects children of CCharacter and * return them by using the specified output iterator. */ static bool loadChildrenOfCCharacter(MSW::CConnection &connection, uint32 parentId, std::vector < CSessionPtr > &children, const char *filename, uint32 lineNum); /** Load all objects children of CFolder and * return them by using the specified output iterator. */ static bool loadChildrenOfCFolder(MSW::CConnection &connection, uint32 parentId, std::vector < CSessionPtr > &children, const char *filename, uint32 lineNum); /// Load SessionParticipants child(ren) object(s). bool loadSessionParticipants(MSW::CConnection &connection, const char *filename, uint32 lineNum); /// Load GuildInvites child(ren) object(s). bool loadGuildInvites(MSW::CConnection &connection, const char *filename, uint32 lineNum); /// Load JournalEntries child(ren) object(s). bool loadJournalEntries(MSW::CConnection &connection, const char *filename, uint32 lineNum); private: private: friend class CPersistentCache; friend class CSessionPtr; typedef std::map TObjectCache; typedef std::set TObjectSet; typedef std::map TReleasedObject; /// The complete set of object currently in memory (either active or released) excluding transient instance static TObjectCache _ObjectCache; /// The set of object in memory ut released (no pointer on them) and waiting for decommit static TReleasedObject _ReleasedObject; /// The current object state NOPE::TObjectState _ObjectState; /// For object in released state, this is the release date (used to trigger deletion of the object from memory) time_t _ReleaseDate; /// The linked list of pointer on this object CSessionPtr *_PtrList; // Try to load the specified object from the memory cache, return NULL if the object is not in the cache static CSession *loadFromCache(uint32 objectId, bool unrelease); // Receive and execute command from the cache manager. static uint32 cacheCmd(NOPE::TCacheCmd cmd); static void dump(); static void updateCache(); public: static void clearCache(); private: void registerUpdatable(); // set the pointer on the first pointer of the pointer list (set to null when there is no more pointer) void setFirstPtr(CSessionPtr *ptr); // return the first pointer of the pointer list (can be null) CSessionPtr *getFirstPtr() { return _PtrList; } public: /** Return the object identifier (witch is unique) * You can only call this method on a persistent instance. * (because transient instance can have invalid id) */ uint32 getObjectId() const { nlassert(getPersistentState() != NOPE::os_transient); return _SessionId; } /** Set the object unique ID. * You can only set the object id on a transient object * having a non autogenerated unique id. * Furthermore, you MUST set the id before calling create() * if the id is not autogenerated. */ void setObjectId(uint32 objectId) { // can only be set when in transient state nlassert(getPersistentState() == NOPE::os_transient); // can only be set once nlassert(_SessionId == NOPE::INVALID_OBJECT_ID); _SessionId = objectId; } /** Return the current persistent state of the object.*/ NOPE::TObjectState getPersistentState() const { return _ObjectState; } private: // Set the persistent state of the object and do some house keeping void setPersistentState(NOPE::TObjectState state); }; struct TAccessLevel { enum TValues { ds_close, ds_dev, ds_restricted, ds_open, /// the highest valid value in the enum last_enum_item = ds_open, /// a value equal to the last enum item +1 end_of_enum, invalid_val, /// Number of enumerated values nb_enum_items = 4 }; /// Index table to convert enum value to linear index table const std::map &getIndexTable() const { static std::map indexTable; static bool init = false; if (!init) { // fill the index table indexTable.insert(std::make_pair(ds_close, 0)); indexTable.insert(std::make_pair(ds_dev, 1)); indexTable.insert(std::make_pair(ds_restricted, 2)); indexTable.insert(std::make_pair(ds_open, 3)); init = true; } return indexTable; } static const NLMISC::CStringConversion &getConversionTable() { NL_BEGIN_STRING_CONVERSION_TABLE(TValues) NL_STRING_CONVERSION_TABLE_ENTRY(ds_close) NL_STRING_CONVERSION_TABLE_ENTRY(ds_dev) NL_STRING_CONVERSION_TABLE_ENTRY(ds_restricted) NL_STRING_CONVERSION_TABLE_ENTRY(ds_open) NL_STRING_CONVERSION_TABLE_ENTRY(invalid_val) }; static NLMISC::CStringConversion conversionTable(TValues_nl_string_conversion_table, sizeof(TValues_nl_string_conversion_table) / sizeof(TValues_nl_string_conversion_table[0]), invalid_val); return conversionTable; } TValues _Value; public: TAccessLevel() : _Value(invalid_val) { } TAccessLevel(TValues value) : _Value(value) { } TAccessLevel(const std::string &str) { _Value = getConversionTable().fromString(str); } void serial(NLMISC::IStream &s) { s.serialEnum(_Value); } bool operator == (const TAccessLevel &other) const { return _Value == other._Value; } bool operator != (const TAccessLevel &other) const { return ! (_Value == other._Value); } bool operator < (const TAccessLevel &other) const { return _Value < other._Value; } bool operator <= (const TAccessLevel &other) const { return _Value <= other._Value; } bool operator > (const TAccessLevel &other) const { return !(_Value <= other._Value); } bool operator >= (const TAccessLevel &other) const { return !(_Value < other._Value); } const std::string &toString() const { return getConversionTable().toString(_Value); } static const std::string &toString(TValues value) { return getConversionTable().toString(value); } TValues getValue() const { return _Value; } // return true if the actual value of the enum is valid, otherwise false bool isValid() { if (_Value == invalid_val) return false; // not invalid, check other enum value return getConversionTable().isValid(_Value); } uint32 asIndex() { std::map::const_iterator it(getIndexTable().find(_Value)); nlassert(it != getIndexTable().end()); return it->second; } }; ///////////////////////////////////////////////////////////////// // WARNING : this is a generated file, don't change it ! ///////////////////////////////////////////////////////////////// class CShard { protected: // uint32 _ShardId; // bool _WSOnline; // TAccessLevel _RequiredState; // std::string _MOTD; friend class CGuild; std::map < uint32, CGuildPtr > *_Guilds; public: // bool getWSOnline() const { return _WSOnline; } void setWSOnline(bool value) { if (_WSOnline != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _WSOnline = value; } } // const TAccessLevel &getRequiredState() const { return _RequiredState; } void setRequiredState(const TAccessLevel &value) { if (_RequiredState != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _RequiredState = value; } } // const std::string &getMOTD() const { return _MOTD; } void setMOTD(const std::string &value) { if (_MOTD != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _MOTD = value; } } /** Return a const reference to the map of child. * If you want to modify the element inside, you need to * use on of the two following method who return non const pointer * on contained elements. */ const std::map &getGuilds() const; /** Return the identified element by looking in the map * If no element match the id, NULL pointer is returned */ CGuildPtr &getGuildsById(uint32 id) const; bool operator == (const CShard &other) const { return _ShardId == other._ShardId && _WSOnline == other._WSOnline && _RequiredState == other._RequiredState && _MOTD == other._MOTD; } private: // private constructor, you must use 'createTransient' to get an instance CShard() : _PtrList(NULL), _ObjectState(NOPE::os_transient), _ShardId(NOPE::INVALID_OBJECT_ID) { // Default initialisation _WSOnline = false; _Guilds = NULL; // register the cache for this class (if not already done) registerUpdatable(); } // Destructor, delete any children ~CShard(); /// utility func to remove this object from the released object container void removeFromReleased(); public: /// Create a new instance in the transient space static CShardPtr createTransient(const char *filename, uint32 lineNum) { return CShardPtr(new CShard(), filename, lineNum); } /** Create a new object in the database from the current object data. * The object MUST be in transient state (i.e, it must be a new * object created by user and not comming from the databse). * If identifier is autogenerated, the generated id can be read after * this call. */ bool create(MSW::CConnection &connection); /** Update the database with the current object state. * The object MUST be either in clean or dirty state. * Return true if the object has been effectively stored * in the database. * After this call, the object is in 'clean' state. */ bool update(MSW::CConnection &connection); /** Remove the current object from the persistent storage. * The object must be in clean or dirty state. * Return true if the object has been correctly * updated in the database. * After the call, the object is in 'clean' state. */ bool remove(MSW::CConnection &connection); /** Remove an object from the persistent storage by specifying * the id to remove. * Return true if an entry as been effectively removed from * the database. * After the call, the object is in 'removed' state and should * no more be used. A good pratice should be to delete * the transient object just after the remove call. */ static bool removeById(MSW::CConnection &connection, uint32 id); /** Load an instance from the database. * This call allocate a new object and load the property value * from the database. * Return NULL if the object id is not found. */ static CShardPtr load(MSW::CConnection &connection, uint32 id, const char *filename, uint32 lineNum); /// Load Guilds child(ren) object(s). bool loadGuilds(MSW::CConnection &connection, const char *filename, uint32 lineNum); private: private: friend class CPersistentCache; friend class CShardPtr; typedef std::map TObjectCache; typedef std::set TObjectSet; typedef std::map TReleasedObject; /// The complete set of object currently in memory (either active or released) excluding transient instance static TObjectCache _ObjectCache; /// The set of object in memory ut released (no pointer on them) and waiting for decommit static TReleasedObject _ReleasedObject; /// The current object state NOPE::TObjectState _ObjectState; /// For object in released state, this is the release date (used to trigger deletion of the object from memory) time_t _ReleaseDate; /// The linked list of pointer on this object CShardPtr *_PtrList; // Try to load the specified object from the memory cache, return NULL if the object is not in the cache static CShard *loadFromCache(uint32 objectId, bool unrelease); // Receive and execute command from the cache manager. static uint32 cacheCmd(NOPE::TCacheCmd cmd); static void dump(); static void updateCache(); public: static void clearCache(); private: void registerUpdatable(); // set the pointer on the first pointer of the pointer list (set to null when there is no more pointer) void setFirstPtr(CShardPtr *ptr); // return the first pointer of the pointer list (can be null) CShardPtr *getFirstPtr() { return _PtrList; } public: /** Return the object identifier (witch is unique) * You can only call this method on a persistent instance. * (because transient instance can have invalid id) */ uint32 getObjectId() const { return _ShardId; } /** Set the object unique ID. * You can only set the object id on a transient object * having a non autogenerated unique id. * Furthermore, you MUST set the id before calling create() * if the id is not autogenerated. */ void setObjectId(uint32 objectId) { // can only be set when in transient state nlassert(getPersistentState() == NOPE::os_transient); // can only be set once nlassert(_ShardId == NOPE::INVALID_OBJECT_ID); _ShardId = objectId; } /** Return the current persistent state of the object.*/ NOPE::TObjectState getPersistentState() const { return _ObjectState; } private: // Set the persistent state of the object and do some house keeping void setPersistentState(NOPE::TObjectState state); }; ///////////////////////////////////////////////////////////////// // WARNING : this is a generated file, don't change it ! ///////////////////////////////////////////////////////////////// class CGuild { protected: // uint32 _GuildId; // std::string _GuildName; // uint32 _ShardId; friend class CCharacter; std::vector < CCharacterPtr > *_Characters; friend class CGuildInvite; std::vector < CGuildInvitePtr > *_Invites; public: // const std::string &getGuildName() const { return _GuildName; } void setGuildName(const std::string &value) { if (_GuildName != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _GuildName = value; } } // uint32 getShardId() const { return _ShardId; } void setShardId(uint32 value) { if (_ShardId != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _ShardId = value; } } /** Return a const reference to the vector of child. * If you want to modify the element inside, you need to * use on of the two following methods who return non const pointer * on contained elements. */ const std::vector &getCharacters() const; /** Return the ith element of the child vector * index must be valid (ie less than size of the vector) */ CCharacterPtr &getCharactersByIndex(uint32 index) const; /** Return the identified element by looking in the vector * If no element match the id, NULL pointer is returned */ CCharacterPtr &getCharactersById(uint32 id) const; /** Return a const reference to the vector of child. * If you want to modify the element inside, you need to * use on of the two following methods who return non const pointer * on contained elements. */ const std::vector &getInvites() const; /** Return the ith element of the child vector * index must be valid (ie less than size of the vector) */ CGuildInvitePtr &getInvitesByIndex(uint32 index) const; /** Return the identified element by looking in the vector * If no element match the id, NULL pointer is returned */ CGuildInvitePtr &getInvitesById(uint32 id) const; bool operator == (const CGuild &other) const { return _GuildId == other._GuildId && _GuildName == other._GuildName && _ShardId == other._ShardId; } private: // private constructor, you must use 'createTransient' to get an instance CGuild() : _PtrList(NULL), _ObjectState(NOPE::os_transient), _GuildId(NOPE::INVALID_OBJECT_ID) { _Characters = NULL; _Invites = NULL; // register the cache for this class (if not already done) registerUpdatable(); } // Destructor, delete any children ~CGuild(); /// utility func to remove this object from the released object container void removeFromReleased(); public: /// Create a new instance in the transient space static CGuildPtr createTransient(const char *filename, uint32 lineNum) { return CGuildPtr(new CGuild(), filename, lineNum); } /** Create a new object in the database from the current object data. * The object MUST be in transient state (i.e, it must be a new * object created by user and not comming from the databse). * If identifier is autogenerated, the generated id can be read after * this call. */ bool create(MSW::CConnection &connection); /** Update the database with the current object state. * The object MUST be either in clean or dirty state. * Return true if the object has been effectively stored * in the database. * After this call, the object is in 'clean' state. */ bool update(MSW::CConnection &connection); /** Remove the current object from the persistent storage. * The object must be in clean or dirty state. * Return true if the object has been correctly * updated in the database. * After the call, the object is in 'clean' state. */ bool remove(MSW::CConnection &connection); /** Remove an object from the persistent storage by specifying * the id to remove. * Return true if an entry as been effectively removed from * the database. * After the call, the object is in 'removed' state and should * no more be used. A good pratice should be to delete * the transient object just after the remove call. */ static bool removeById(MSW::CConnection &connection, uint32 id); /** Load an instance from the database. * This call allocate a new object and load the property value * from the database. * Return NULL if the object id is not found. */ static CGuildPtr load(MSW::CConnection &connection, uint32 id, const char *filename, uint32 lineNum); /** Load all objects children of CShard and * return them by using the specified output iterator. */ static bool loadChildrenOfCShard(MSW::CConnection &connection, uint32 parentId, std::map < uint32, CGuildPtr > &children, const char *filename, uint32 lineNum); /// Load Characters child(ren) object(s). bool loadCharacters(MSW::CConnection &connection, const char *filename, uint32 lineNum); /// Load Invites child(ren) object(s). bool loadInvites(MSW::CConnection &connection, const char *filename, uint32 lineNum); private: private: friend class CPersistentCache; friend class CGuildPtr; typedef std::map TObjectCache; typedef std::set TObjectSet; typedef std::map TReleasedObject; /// The complete set of object currently in memory (either active or released) excluding transient instance static TObjectCache _ObjectCache; /// The set of object in memory ut released (no pointer on them) and waiting for decommit static TReleasedObject _ReleasedObject; /// The current object state NOPE::TObjectState _ObjectState; /// For object in released state, this is the release date (used to trigger deletion of the object from memory) time_t _ReleaseDate; /// The linked list of pointer on this object CGuildPtr *_PtrList; // Try to load the specified object from the memory cache, return NULL if the object is not in the cache static CGuild *loadFromCache(uint32 objectId, bool unrelease); // Receive and execute command from the cache manager. static uint32 cacheCmd(NOPE::TCacheCmd cmd); static void dump(); static void updateCache(); public: static void clearCache(); private: void registerUpdatable(); // set the pointer on the first pointer of the pointer list (set to null when there is no more pointer) void setFirstPtr(CGuildPtr *ptr); // return the first pointer of the pointer list (can be null) CGuildPtr *getFirstPtr() { return _PtrList; } public: /** Return the object identifier (witch is unique) * You can only call this method on a persistent instance. * (because transient instance can have invalid id) */ uint32 getObjectId() const { return _GuildId; } /** Set the object unique ID. * You can only set the object id on a transient object * having a non autogenerated unique id. * Furthermore, you MUST set the id before calling create() * if the id is not autogenerated. */ void setObjectId(uint32 objectId) { // can only be set when in transient state nlassert(getPersistentState() == NOPE::os_transient); // can only be set once nlassert(_GuildId == NOPE::INVALID_OBJECT_ID); _GuildId = objectId; } /** Return the current persistent state of the object.*/ NOPE::TObjectState getPersistentState() const { return _ObjectState; } private: // Set the persistent state of the object and do some house keeping void setPersistentState(NOPE::TObjectState state); }; ///////////////////////////////////////////////////////////////// // WARNING : this is a generated file, don't change it ! ///////////////////////////////////////////////////////////////// class CGuildInvite { protected: // uint32 _Id; // uint32 _GuildId; // TSessionId _SessionId; public: // uint32 getGuildId() const { return _GuildId; } void setGuildId(uint32 value) { if (_GuildId != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _GuildId = value; } } // TSessionId getSessionId() const { return _SessionId; } void setSessionId(TSessionId value) { if (_SessionId != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _SessionId = value; } } bool operator == (const CGuildInvite &other) const { return _Id == other._Id && _GuildId == other._GuildId && _SessionId == other._SessionId; } private: // private constructor, you must use 'createTransient' to get an instance CGuildInvite() : _PtrList(NULL), _ObjectState(NOPE::os_transient), _Id(NOPE::INVALID_OBJECT_ID) { // register the cache for this class (if not already done) registerUpdatable(); } // Destructor, delete any children ~CGuildInvite(); /// utility func to remove this object from the released object container void removeFromReleased(); public: /// Create a new instance in the transient space static CGuildInvitePtr createTransient(const char *filename, uint32 lineNum) { return CGuildInvitePtr(new CGuildInvite(), filename, lineNum); } /** Create a new object in the database from the current object data. * The object MUST be in transient state (i.e, it must be a new * object created by user and not comming from the databse). * If identifier is autogenerated, the generated id can be read after * this call. */ bool create(MSW::CConnection &connection); /** Update the database with the current object state. * The object MUST be either in clean or dirty state. * Return true if the object has been effectively stored * in the database. * After this call, the object is in 'clean' state. */ bool update(MSW::CConnection &connection); /** Remove the current object from the persistent storage. * The object must be in clean or dirty state. * Return true if the object has been correctly * updated in the database. * After the call, the object is in 'clean' state. */ bool remove(MSW::CConnection &connection); /** Remove an object from the persistent storage by specifying * the id to remove. * Return true if an entry as been effectively removed from * the database. * After the call, the object is in 'removed' state and should * no more be used. A good pratice should be to delete * the transient object just after the remove call. */ static bool removeById(MSW::CConnection &connection, uint32 id); /** Load an instance from the database. * This call allocate a new object and load the property value * from the database. * Return NULL if the object id is not found. */ static CGuildInvitePtr load(MSW::CConnection &connection, uint32 id, const char *filename, uint32 lineNum); /** Load all objects children of CGuild and * return them by using the specified output iterator. */ static bool loadChildrenOfCGuild(MSW::CConnection &connection, uint32 parentId, std::vector < CGuildInvitePtr > &children, const char *filename, uint32 lineNum); /** Load all objects children of CSession and * return them by using the specified output iterator. */ static bool loadChildrenOfCSession(MSW::CConnection &connection, uint32 parentId, std::vector < CGuildInvitePtr > &children, const char *filename, uint32 lineNum); private: private: friend class CPersistentCache; friend class CGuildInvitePtr; typedef std::map TObjectCache; typedef std::set TObjectSet; typedef std::map TReleasedObject; /// The complete set of object currently in memory (either active or released) excluding transient instance static TObjectCache _ObjectCache; /// The set of object in memory ut released (no pointer on them) and waiting for decommit static TReleasedObject _ReleasedObject; /// The current object state NOPE::TObjectState _ObjectState; /// For object in released state, this is the release date (used to trigger deletion of the object from memory) time_t _ReleaseDate; /// The linked list of pointer on this object CGuildInvitePtr *_PtrList; // Try to load the specified object from the memory cache, return NULL if the object is not in the cache static CGuildInvite *loadFromCache(uint32 objectId, bool unrelease); // Receive and execute command from the cache manager. static uint32 cacheCmd(NOPE::TCacheCmd cmd); static void dump(); static void updateCache(); public: static void clearCache(); private: void registerUpdatable(); // set the pointer on the first pointer of the pointer list (set to null when there is no more pointer) void setFirstPtr(CGuildInvitePtr *ptr); // return the first pointer of the pointer list (can be null) CGuildInvitePtr *getFirstPtr() { return _PtrList; } public: /** Return the object identifier (witch is unique) * You can only call this method on a persistent instance. * (because transient instance can have invalid id) */ uint32 getObjectId() const { nlassert(getPersistentState() != NOPE::os_transient); return _Id; } /** Set the object unique ID. * You can only set the object id on a transient object * having a non autogenerated unique id. * Furthermore, you MUST set the id before calling create() * if the id is not autogenerated. */ void setObjectId(uint32 objectId) { // can only be set when in transient state nlassert(getPersistentState() == NOPE::os_transient); // can only be set once nlassert(_Id == NOPE::INVALID_OBJECT_ID); _Id = objectId; } /** Return the current persistent state of the object.*/ NOPE::TObjectState getPersistentState() const { return _ObjectState; } private: // Set the persistent state of the object and do some house keeping void setPersistentState(NOPE::TObjectState state); }; ///////////////////////////////////////////////////////////////// // WARNING : this is a generated file, don't change it ! ///////////////////////////////////////////////////////////////// class CPlayerRating { protected: // uint32 _Id; // uint32 _ScenarioId; // uint32 _Author; // uint32 _RateFun; // uint32 _RateDifficulty; // uint32 _RateAccessibility; // uint32 _RateOriginality; // uint32 _RateDirection; public: // uint32 getScenarioId() const { return _ScenarioId; } void setScenarioId(uint32 value) { if (_ScenarioId != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _ScenarioId = value; } } // uint32 getAuthor() const { return _Author; } void setAuthor(uint32 value) { if (_Author != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _Author = value; } } // uint32 getRateFun() const { return _RateFun; } void setRateFun(uint32 value) { if (_RateFun != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _RateFun = value; } } // uint32 getRateDifficulty() const { return _RateDifficulty; } void setRateDifficulty(uint32 value) { if (_RateDifficulty != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _RateDifficulty = value; } } // uint32 getRateAccessibility() const { return _RateAccessibility; } void setRateAccessibility(uint32 value) { if (_RateAccessibility != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _RateAccessibility = value; } } // uint32 getRateOriginality() const { return _RateOriginality; } void setRateOriginality(uint32 value) { if (_RateOriginality != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _RateOriginality = value; } } // uint32 getRateDirection() const { return _RateDirection; } void setRateDirection(uint32 value) { if (_RateDirection != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _RateDirection = value; } } bool operator == (const CPlayerRating &other) const { return _Id == other._Id && _ScenarioId == other._ScenarioId && _Author == other._Author && _RateFun == other._RateFun && _RateDifficulty == other._RateDifficulty && _RateAccessibility == other._RateAccessibility && _RateOriginality == other._RateOriginality && _RateDirection == other._RateDirection; } private: // private constructor, you must use 'createTransient' to get an instance CPlayerRating() : _PtrList(NULL), _ObjectState(NOPE::os_transient), _Id(NOPE::INVALID_OBJECT_ID) { // register the cache for this class (if not already done) registerUpdatable(); } // Destructor, delete any children ~CPlayerRating(); /// utility func to remove this object from the released object container void removeFromReleased(); public: /// Create a new instance in the transient space static CPlayerRatingPtr createTransient(const char *filename, uint32 lineNum) { return CPlayerRatingPtr(new CPlayerRating(), filename, lineNum); } /** Create a new object in the database from the current object data. * The object MUST be in transient state (i.e, it must be a new * object created by user and not comming from the databse). * If identifier is autogenerated, the generated id can be read after * this call. */ bool create(MSW::CConnection &connection); /** Update the database with the current object state. * The object MUST be either in clean or dirty state. * Return true if the object has been effectively stored * in the database. * After this call, the object is in 'clean' state. */ bool update(MSW::CConnection &connection); /** Remove the current object from the persistent storage. * The object must be in clean or dirty state. * Return true if the object has been correctly * updated in the database. * After the call, the object is in 'clean' state. */ bool remove(MSW::CConnection &connection); /** Remove an object from the persistent storage by specifying * the id to remove. * Return true if an entry as been effectively removed from * the database. * After the call, the object is in 'removed' state and should * no more be used. A good pratice should be to delete * the transient object just after the remove call. */ static bool removeById(MSW::CConnection &connection, uint32 id); /** Load an instance from the database. * This call allocate a new object and load the property value * from the database. * Return NULL if the object id is not found. */ static CPlayerRatingPtr load(MSW::CConnection &connection, uint32 id, const char *filename, uint32 lineNum); /** Load all objects children of CScenario and * return them by using the specified output iterator. */ static bool loadChildrenOfCScenario(MSW::CConnection &connection, uint32 parentId, std::vector < CPlayerRatingPtr > &children, const char *filename, uint32 lineNum); /** Load all objects children of CCharacter and * return them by using the specified output iterator. */ static bool loadChildrenOfCCharacter(MSW::CConnection &connection, uint32 parentId, std::vector < CPlayerRatingPtr > &children, const char *filename, uint32 lineNum); private: private: friend class CPersistentCache; friend class CPlayerRatingPtr; typedef std::map TObjectCache; typedef std::set TObjectSet; typedef std::map TReleasedObject; /// The complete set of object currently in memory (either active or released) excluding transient instance static TObjectCache _ObjectCache; /// The set of object in memory ut released (no pointer on them) and waiting for decommit static TReleasedObject _ReleasedObject; /// The current object state NOPE::TObjectState _ObjectState; /// For object in released state, this is the release date (used to trigger deletion of the object from memory) time_t _ReleaseDate; /// The linked list of pointer on this object CPlayerRatingPtr *_PtrList; // Try to load the specified object from the memory cache, return NULL if the object is not in the cache static CPlayerRating *loadFromCache(uint32 objectId, bool unrelease); // Receive and execute command from the cache manager. static uint32 cacheCmd(NOPE::TCacheCmd cmd); static void dump(); static void updateCache(); public: static void clearCache(); private: void registerUpdatable(); // set the pointer on the first pointer of the pointer list (set to null when there is no more pointer) void setFirstPtr(CPlayerRatingPtr *ptr); // return the first pointer of the pointer list (can be null) CPlayerRatingPtr *getFirstPtr() { return _PtrList; } public: /** Return the object identifier (witch is unique) * You can only call this method on a persistent instance. * (because transient instance can have invalid id) */ uint32 getObjectId() const { nlassert(getPersistentState() != NOPE::os_transient); return _Id; } /** Set the object unique ID. * You can only set the object id on a transient object * having a non autogenerated unique id. * Furthermore, you MUST set the id before calling create() * if the id is not autogenerated. */ void setObjectId(uint32 objectId) { // can only be set when in transient state nlassert(getPersistentState() == NOPE::os_transient); // can only be set once nlassert(_Id == NOPE::INVALID_OBJECT_ID); _Id = objectId; } /** Return the current persistent state of the object.*/ NOPE::TObjectState getPersistentState() const { return _ObjectState; } private: // Set the persistent state of the object and do some house keeping void setPersistentState(NOPE::TObjectState state); }; struct TJournalEntryType { enum TValues { jet_credits = 1, jet_notes, /// the highest valid value in the enum last_enum_item = jet_notes, /// a value equal to the last enum item +1 end_of_enum, invalid_val, /// Number of enumerated values nb_enum_items = 2 }; /// Index table to convert enum value to linear index table const std::map &getIndexTable() const { static std::map indexTable; static bool init = false; if (!init) { // fill the index table indexTable.insert(std::make_pair(jet_credits, 0)); indexTable.insert(std::make_pair(jet_notes, 1)); init = true; } return indexTable; } static const NLMISC::CStringConversion &getConversionTable() { NL_BEGIN_STRING_CONVERSION_TABLE(TValues) NL_STRING_CONVERSION_TABLE_ENTRY(jet_credits) NL_STRING_CONVERSION_TABLE_ENTRY(jet_notes) NL_STRING_CONVERSION_TABLE_ENTRY(invalid_val) }; static NLMISC::CStringConversion conversionTable(TValues_nl_string_conversion_table, sizeof(TValues_nl_string_conversion_table) / sizeof(TValues_nl_string_conversion_table[0]), invalid_val); return conversionTable; } TValues _Value; public: TJournalEntryType() : _Value(invalid_val) { } TJournalEntryType(TValues value) : _Value(value) { } TJournalEntryType(const std::string &str) { _Value = getConversionTable().fromString(str); } void serial(NLMISC::IStream &s) { s.serialEnum(_Value); } bool operator == (const TJournalEntryType &other) const { return _Value == other._Value; } bool operator != (const TJournalEntryType &other) const { return ! (_Value == other._Value); } bool operator < (const TJournalEntryType &other) const { return _Value < other._Value; } bool operator <= (const TJournalEntryType &other) const { return _Value <= other._Value; } bool operator > (const TJournalEntryType &other) const { return !(_Value <= other._Value); } bool operator >= (const TJournalEntryType &other) const { return !(_Value < other._Value); } const std::string &toString() const { return getConversionTable().toString(_Value); } static const std::string &toString(TValues value) { return getConversionTable().toString(value); } TValues getValue() const { return _Value; } // return true if the actual value of the enum is valid, otherwise false bool isValid() { if (_Value == invalid_val) return false; // not invalid, check other enum value return getConversionTable().isValid(_Value); } uint32 asIndex() { std::map::const_iterator it(getIndexTable().find(_Value)); nlassert(it != getIndexTable().end()); return it->second; } }; ///////////////////////////////////////////////////////////////// // WARNING : this is a generated file, don't change it ! ///////////////////////////////////////////////////////////////// class CJournalEntry { protected: // uint32 _Id; // TSessionId _SessionId; // uint32 _Author; // TJournalEntryType _Type; // std::string _Text; // uint32 _TimeStamp; public: // TSessionId getSessionId() const { return _SessionId; } void setSessionId(TSessionId value) { if (_SessionId != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _SessionId = value; } } // uint32 getAuthor() const { return _Author; } void setAuthor(uint32 value) { if (_Author != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _Author = value; } } // TJournalEntryType getType() const { return _Type; } void setType(TJournalEntryType value) { if (_Type != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _Type = value; } } // const std::string &getText() const { return _Text; } void setText(const std::string &value) { if (_Text != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _Text = value; } } // uint32 getTimeStamp() const { return _TimeStamp; } void setTimeStamp(uint32 value) { if (_TimeStamp != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _TimeStamp = value; } } bool operator == (const CJournalEntry &other) const { return _Id == other._Id && _SessionId == other._SessionId && _Author == other._Author && _Type == other._Type && _Text == other._Text && _TimeStamp == other._TimeStamp; } private: // private constructor, you must use 'createTransient' to get an instance CJournalEntry() : _PtrList(NULL), _ObjectState(NOPE::os_transient), _Id(NOPE::INVALID_OBJECT_ID) { // register the cache for this class (if not already done) registerUpdatable(); } // Destructor, delete any children ~CJournalEntry(); /// utility func to remove this object from the released object container void removeFromReleased(); public: /// Create a new instance in the transient space static CJournalEntryPtr createTransient(const char *filename, uint32 lineNum) { return CJournalEntryPtr(new CJournalEntry(), filename, lineNum); } /** Create a new object in the database from the current object data. * The object MUST be in transient state (i.e, it must be a new * object created by user and not comming from the databse). * If identifier is autogenerated, the generated id can be read after * this call. */ bool create(MSW::CConnection &connection); /** Update the database with the current object state. * The object MUST be either in clean or dirty state. * Return true if the object has been effectively stored * in the database. * After this call, the object is in 'clean' state. */ bool update(MSW::CConnection &connection); /** Remove the current object from the persistent storage. * The object must be in clean or dirty state. * Return true if the object has been correctly * updated in the database. * After the call, the object is in 'clean' state. */ bool remove(MSW::CConnection &connection); /** Remove an object from the persistent storage by specifying * the id to remove. * Return true if an entry as been effectively removed from * the database. * After the call, the object is in 'removed' state and should * no more be used. A good pratice should be to delete * the transient object just after the remove call. */ static bool removeById(MSW::CConnection &connection, uint32 id); /** Load an instance from the database. * This call allocate a new object and load the property value * from the database. * Return NULL if the object id is not found. */ static CJournalEntryPtr load(MSW::CConnection &connection, uint32 id, const char *filename, uint32 lineNum); /** Load all objects children of CSession and * return them by using the specified output iterator. */ static bool loadChildrenOfCSession(MSW::CConnection &connection, uint32 parentId, std::vector < CJournalEntryPtr > &children, const char *filename, uint32 lineNum); private: private: friend class CPersistentCache; friend class CJournalEntryPtr; typedef std::map TObjectCache; typedef std::set TObjectSet; typedef std::map TReleasedObject; /// The complete set of object currently in memory (either active or released) excluding transient instance static TObjectCache _ObjectCache; /// The set of object in memory ut released (no pointer on them) and waiting for decommit static TReleasedObject _ReleasedObject; /// The current object state NOPE::TObjectState _ObjectState; /// For object in released state, this is the release date (used to trigger deletion of the object from memory) time_t _ReleaseDate; /// The linked list of pointer on this object CJournalEntryPtr *_PtrList; // Try to load the specified object from the memory cache, return NULL if the object is not in the cache static CJournalEntry *loadFromCache(uint32 objectId, bool unrelease); // Receive and execute command from the cache manager. static uint32 cacheCmd(NOPE::TCacheCmd cmd); static void dump(); static void updateCache(); public: static void clearCache(); private: void registerUpdatable(); // set the pointer on the first pointer of the pointer list (set to null when there is no more pointer) void setFirstPtr(CJournalEntryPtr *ptr); // return the first pointer of the pointer list (can be null) CJournalEntryPtr *getFirstPtr() { return _PtrList; } public: /** Return the object identifier (witch is unique) * You can only call this method on a persistent instance. * (because transient instance can have invalid id) */ uint32 getObjectId() const { nlassert(getPersistentState() != NOPE::os_transient); return _Id; } /** Set the object unique ID. * You can only set the object id on a transient object * having a non autogenerated unique id. * Furthermore, you MUST set the id before calling create() * if the id is not autogenerated. */ void setObjectId(uint32 objectId) { // can only be set when in transient state nlassert(getPersistentState() == NOPE::os_transient); // can only be set once nlassert(_Id == NOPE::INVALID_OBJECT_ID); _Id = objectId; } /** Return the current persistent state of the object.*/ NOPE::TObjectState getPersistentState() const { return _ObjectState; } private: // Set the persistent state of the object and do some house keeping void setPersistentState(NOPE::TObjectState state); }; ///////////////////////////////////////////////////////////////// // WARNING : this is a generated file, don't change it ! ///////////////////////////////////////////////////////////////// class CFolder { protected: // uint32 _Id; // uint32 _Author; // std::string _Title; // std::string _Comments; friend class CFolderAccess; std::vector < CFolderAccessPtr > *_FolderAccess; friend class CSession; std::vector < CSessionPtr > *_Sessions; public: // uint32 getAuthor() const { return _Author; } void setAuthor(uint32 value) { if (_Author != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _Author = value; } } // const std::string &getTitle() const { return _Title; } void setTitle(const std::string &value) { if (_Title != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _Title = value; } } // const std::string &getComments() const { return _Comments; } void setComments(const std::string &value) { if (_Comments != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _Comments = value; } } /** Return a const reference to the vector of child. * If you want to modify the element inside, you need to * use on of the two following methods who return non const pointer * on contained elements. */ const std::vector &getFolderAccess() const; /** Return the ith element of the child vector * index must be valid (ie less than size of the vector) */ CFolderAccessPtr &getFolderAccessByIndex(uint32 index) const; /** Return the identified element by looking in the vector * If no element match the id, NULL pointer is returned */ CFolderAccessPtr &getFolderAccessById(uint32 id) const; /** Return a const reference to the vector of child. * If you want to modify the element inside, you need to * use on of the two following methods who return non const pointer * on contained elements. */ const std::vector &getSessions() const; /** Return the ith element of the child vector * index must be valid (ie less than size of the vector) */ CSessionPtr &getSessionsByIndex(uint32 index) const; /** Return the identified element by looking in the vector * If no element match the id, NULL pointer is returned */ CSessionPtr &getSessionsById(uint32 id) const; bool operator == (const CFolder &other) const { return _Id == other._Id && _Author == other._Author && _Title == other._Title && _Comments == other._Comments; } private: // private constructor, you must use 'createTransient' to get an instance CFolder() : _PtrList(NULL), _ObjectState(NOPE::os_transient), _Id(NOPE::INVALID_OBJECT_ID) { _FolderAccess = NULL; _Sessions = NULL; // register the cache for this class (if not already done) registerUpdatable(); } // Destructor, delete any children ~CFolder(); /// utility func to remove this object from the released object container void removeFromReleased(); public: /// Create a new instance in the transient space static CFolderPtr createTransient(const char *filename, uint32 lineNum) { return CFolderPtr(new CFolder(), filename, lineNum); } /** Create a new object in the database from the current object data. * The object MUST be in transient state (i.e, it must be a new * object created by user and not comming from the databse). * If identifier is autogenerated, the generated id can be read after * this call. */ bool create(MSW::CConnection &connection); /** Update the database with the current object state. * The object MUST be either in clean or dirty state. * Return true if the object has been effectively stored * in the database. * After this call, the object is in 'clean' state. */ bool update(MSW::CConnection &connection); /** Remove the current object from the persistent storage. * The object must be in clean or dirty state. * Return true if the object has been correctly * updated in the database. * After the call, the object is in 'clean' state. */ bool remove(MSW::CConnection &connection); /** Remove an object from the persistent storage by specifying * the id to remove. * Return true if an entry as been effectively removed from * the database. * After the call, the object is in 'removed' state and should * no more be used. A good pratice should be to delete * the transient object just after the remove call. */ static bool removeById(MSW::CConnection &connection, uint32 id); /** Load an instance from the database. * This call allocate a new object and load the property value * from the database. * Return NULL if the object id is not found. */ static CFolderPtr load(MSW::CConnection &connection, uint32 id, const char *filename, uint32 lineNum); /** Load all objects children of CRingUser and * return them by using the specified output iterator. */ static bool loadChildrenOfCRingUser(MSW::CConnection &connection, uint32 parentId, std::vector < CFolderPtr > &children, const char *filename, uint32 lineNum); /// Load FolderAccess child(ren) object(s). bool loadFolderAccess(MSW::CConnection &connection, const char *filename, uint32 lineNum); /// Load Sessions child(ren) object(s). bool loadSessions(MSW::CConnection &connection, const char *filename, uint32 lineNum); private: private: friend class CPersistentCache; friend class CFolderPtr; typedef std::map TObjectCache; typedef std::set TObjectSet; typedef std::map TReleasedObject; /// The complete set of object currently in memory (either active or released) excluding transient instance static TObjectCache _ObjectCache; /// The set of object in memory ut released (no pointer on them) and waiting for decommit static TReleasedObject _ReleasedObject; /// The current object state NOPE::TObjectState _ObjectState; /// For object in released state, this is the release date (used to trigger deletion of the object from memory) time_t _ReleaseDate; /// The linked list of pointer on this object CFolderPtr *_PtrList; // Try to load the specified object from the memory cache, return NULL if the object is not in the cache static CFolder *loadFromCache(uint32 objectId, bool unrelease); // Receive and execute command from the cache manager. static uint32 cacheCmd(NOPE::TCacheCmd cmd); static void dump(); static void updateCache(); public: static void clearCache(); private: void registerUpdatable(); // set the pointer on the first pointer of the pointer list (set to null when there is no more pointer) void setFirstPtr(CFolderPtr *ptr); // return the first pointer of the pointer list (can be null) CFolderPtr *getFirstPtr() { return _PtrList; } public: /** Return the object identifier (witch is unique) * You can only call this method on a persistent instance. * (because transient instance can have invalid id) */ uint32 getObjectId() const { nlassert(getPersistentState() != NOPE::os_transient); return _Id; } /** Set the object unique ID. * You can only set the object id on a transient object * having a non autogenerated unique id. * Furthermore, you MUST set the id before calling create() * if the id is not autogenerated. */ void setObjectId(uint32 objectId) { // can only be set when in transient state nlassert(getPersistentState() == NOPE::os_transient); // can only be set once nlassert(_Id == NOPE::INVALID_OBJECT_ID); _Id = objectId; } /** Return the current persistent state of the object.*/ NOPE::TObjectState getPersistentState() const { return _ObjectState; } private: // Set the persistent state of the object and do some house keeping void setPersistentState(NOPE::TObjectState state); }; ///////////////////////////////////////////////////////////////// // WARNING : this is a generated file, don't change it ! ///////////////////////////////////////////////////////////////// class CFolderAccess { protected: // uint32 _Id; // uint32 _FolderId; // uint32 _UserId; public: // uint32 getFolderId() const { return _FolderId; } void setFolderId(uint32 value) { if (_FolderId != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _FolderId = value; } } // uint32 getUserId() const { return _UserId; } void setUserId(uint32 value) { if (_UserId != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _UserId = value; } } bool operator == (const CFolderAccess &other) const { return _Id == other._Id && _FolderId == other._FolderId && _UserId == other._UserId; } private: // private constructor, you must use 'createTransient' to get an instance CFolderAccess() : _PtrList(NULL), _ObjectState(NOPE::os_transient), _Id(NOPE::INVALID_OBJECT_ID) { // register the cache for this class (if not already done) registerUpdatable(); } // Destructor, delete any children ~CFolderAccess(); /// utility func to remove this object from the released object container void removeFromReleased(); public: /// Create a new instance in the transient space static CFolderAccessPtr createTransient(const char *filename, uint32 lineNum) { return CFolderAccessPtr(new CFolderAccess(), filename, lineNum); } /** Create a new object in the database from the current object data. * The object MUST be in transient state (i.e, it must be a new * object created by user and not comming from the databse). * If identifier is autogenerated, the generated id can be read after * this call. */ bool create(MSW::CConnection &connection); /** Update the database with the current object state. * The object MUST be either in clean or dirty state. * Return true if the object has been effectively stored * in the database. * After this call, the object is in 'clean' state. */ bool update(MSW::CConnection &connection); /** Remove the current object from the persistent storage. * The object must be in clean or dirty state. * Return true if the object has been correctly * updated in the database. * After the call, the object is in 'clean' state. */ bool remove(MSW::CConnection &connection); /** Remove an object from the persistent storage by specifying * the id to remove. * Return true if an entry as been effectively removed from * the database. * After the call, the object is in 'removed' state and should * no more be used. A good pratice should be to delete * the transient object just after the remove call. */ static bool removeById(MSW::CConnection &connection, uint32 id); /** Load an instance from the database. * This call allocate a new object and load the property value * from the database. * Return NULL if the object id is not found. */ static CFolderAccessPtr load(MSW::CConnection &connection, uint32 id, const char *filename, uint32 lineNum); /** Load all objects children of CRingUser and * return them by using the specified output iterator. */ static bool loadChildrenOfCRingUser(MSW::CConnection &connection, uint32 parentId, std::vector < CFolderAccessPtr > &children, const char *filename, uint32 lineNum); /** Load all objects children of CFolder and * return them by using the specified output iterator. */ static bool loadChildrenOfCFolder(MSW::CConnection &connection, uint32 parentId, std::vector < CFolderAccessPtr > &children, const char *filename, uint32 lineNum); private: private: friend class CPersistentCache; friend class CFolderAccessPtr; typedef std::map TObjectCache; typedef std::set TObjectSet; typedef std::map TReleasedObject; /// The complete set of object currently in memory (either active or released) excluding transient instance static TObjectCache _ObjectCache; /// The set of object in memory ut released (no pointer on them) and waiting for decommit static TReleasedObject _ReleasedObject; /// The current object state NOPE::TObjectState _ObjectState; /// For object in released state, this is the release date (used to trigger deletion of the object from memory) time_t _ReleaseDate; /// The linked list of pointer on this object CFolderAccessPtr *_PtrList; // Try to load the specified object from the memory cache, return NULL if the object is not in the cache static CFolderAccess *loadFromCache(uint32 objectId, bool unrelease); // Receive and execute command from the cache manager. static uint32 cacheCmd(NOPE::TCacheCmd cmd); static void dump(); static void updateCache(); public: static void clearCache(); private: void registerUpdatable(); // set the pointer on the first pointer of the pointer list (set to null when there is no more pointer) void setFirstPtr(CFolderAccessPtr *ptr); // return the first pointer of the pointer list (can be null) CFolderAccessPtr *getFirstPtr() { return _PtrList; } public: /** Return the object identifier (witch is unique) * You can only call this method on a persistent instance. * (because transient instance can have invalid id) */ uint32 getObjectId() const { nlassert(getPersistentState() != NOPE::os_transient); return _Id; } /** Set the object unique ID. * You can only set the object id on a transient object * having a non autogenerated unique id. * Furthermore, you MUST set the id before calling create() * if the id is not autogenerated. */ void setObjectId(uint32 objectId) { // can only be set when in transient state nlassert(getPersistentState() == NOPE::os_transient); // can only be set once nlassert(_Id == NOPE::INVALID_OBJECT_ID); _Id = objectId; } /** Return the current persistent state of the object.*/ NOPE::TObjectState getPersistentState() const { return _ObjectState; } private: // Set the persistent state of the object and do some house keeping void setPersistentState(NOPE::TObjectState state); }; ///////////////////////////////////////////////////////////////// // WARNING : this is a generated file, don't change it ! ///////////////////////////////////////////////////////////////// class CScenario { protected: // uint32 _Id; // NLMISC::CHashKeyMD5 _MD5; // std::string _Title; // std::string _Description; // std::string _Author; // uint32 _RRPTotal; // TAnimMode _AnimMode; // std::string _Language; // TSessionOrientation _Orientation; // R2::TSessionLevel _Level; // bool _AllowFreeTrial; friend class CSessionLog; std::vector < CSessionLogPtr > *_SessionLogs; friend class CPlayerRating; std::vector < CPlayerRatingPtr > *_PlayerRatings; public: // const NLMISC::CHashKeyMD5 &getMD5() const { return _MD5; } void setMD5(const NLMISC::CHashKeyMD5 &value) { if (_MD5 != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _MD5 = value; } } // const std::string &getTitle() const { return _Title; } void setTitle(const std::string &value) { if (_Title != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _Title = value; } } // const std::string &getDescription() const { return _Description; } void setDescription(const std::string &value) { if (_Description != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _Description = value; } } // const std::string &getAuthor() const { return _Author; } void setAuthor(const std::string &value) { if (_Author != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _Author = value; } } // uint32 getRRPTotal() const { return _RRPTotal; } void setRRPTotal(uint32 value) { if (_RRPTotal != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _RRPTotal = value; } } // TAnimMode getAnimMode() const { return _AnimMode; } void setAnimMode(TAnimMode value) { if (_AnimMode != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _AnimMode = value; } } // const std::string &getLanguage() const { return _Language; } void setLanguage(const std::string &value) { if (_Language != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _Language = value; } } // TSessionOrientation getOrientation() const { return _Orientation; } void setOrientation(TSessionOrientation value) { if (_Orientation != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _Orientation = value; } } // R2::TSessionLevel getLevel() const { return _Level; } void setLevel(R2::TSessionLevel value) { if (_Level != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _Level = value; } } // bool getAllowFreeTrial() const { return _AllowFreeTrial; } void setAllowFreeTrial(bool value) { if (_AllowFreeTrial != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _AllowFreeTrial = value; } } /** Return a const reference to the vector of child. * If you want to modify the element inside, you need to * use on of the two following methods who return non const pointer * on contained elements. */ const std::vector &getSessionLogs() const; /** Return the ith element of the child vector * index must be valid (ie less than size of the vector) */ CSessionLogPtr &getSessionLogsByIndex(uint32 index) const; /** Return the identified element by looking in the vector * If no element match the id, NULL pointer is returned */ CSessionLogPtr &getSessionLogsById(uint32 id) const; /** Return a const reference to the vector of child. * If you want to modify the element inside, you need to * use on of the two following methods who return non const pointer * on contained elements. */ const std::vector &getPlayerRatings() const; /** Return the ith element of the child vector * index must be valid (ie less than size of the vector) */ CPlayerRatingPtr &getPlayerRatingsByIndex(uint32 index) const; /** Return the identified element by looking in the vector * If no element match the id, NULL pointer is returned */ CPlayerRatingPtr &getPlayerRatingsById(uint32 id) const; bool operator == (const CScenario &other) const { return _Id == other._Id && _MD5 == other._MD5 && _Title == other._Title && _Description == other._Description && _Author == other._Author && _RRPTotal == other._RRPTotal && _AnimMode == other._AnimMode && _Language == other._Language && _Orientation == other._Orientation && _Level == other._Level && _AllowFreeTrial == other._AllowFreeTrial; } private: // private constructor, you must use 'createTransient' to get an instance CScenario() : _PtrList(NULL), _ObjectState(NOPE::os_transient), _Id(NOPE::INVALID_OBJECT_ID) { // Default initialisation _RRPTotal = 0; _AllowFreeTrial = false; _SessionLogs = NULL; _PlayerRatings = NULL; // register the cache for this class (if not already done) registerUpdatable(); } // Destructor, delete any children ~CScenario(); /// utility func to remove this object from the released object container void removeFromReleased(); public: /// Create a new instance in the transient space static CScenarioPtr createTransient(const char *filename, uint32 lineNum) { return CScenarioPtr(new CScenario(), filename, lineNum); } /** Create a new object in the database from the current object data. * The object MUST be in transient state (i.e, it must be a new * object created by user and not comming from the databse). * If identifier is autogenerated, the generated id can be read after * this call. */ bool create(MSW::CConnection &connection); /** Update the database with the current object state. * The object MUST be either in clean or dirty state. * Return true if the object has been effectively stored * in the database. * After this call, the object is in 'clean' state. */ bool update(MSW::CConnection &connection); /** Remove the current object from the persistent storage. * The object must be in clean or dirty state. * Return true if the object has been correctly * updated in the database. * After the call, the object is in 'clean' state. */ bool remove(MSW::CConnection &connection); /** Remove an object from the persistent storage by specifying * the id to remove. * Return true if an entry as been effectively removed from * the database. * After the call, the object is in 'removed' state and should * no more be used. A good pratice should be to delete * the transient object just after the remove call. */ static bool removeById(MSW::CConnection &connection, uint32 id); /** Load an instance from the database. * This call allocate a new object and load the property value * from the database. * Return NULL if the object id is not found. */ static CScenarioPtr load(MSW::CConnection &connection, uint32 id, const char *filename, uint32 lineNum); /// Load SessionLogs child(ren) object(s). bool loadSessionLogs(MSW::CConnection &connection, const char *filename, uint32 lineNum); /// Load PlayerRatings child(ren) object(s). bool loadPlayerRatings(MSW::CConnection &connection, const char *filename, uint32 lineNum); private: private: friend class CPersistentCache; friend class CScenarioPtr; typedef std::map TObjectCache; typedef std::set TObjectSet; typedef std::map TReleasedObject; /// The complete set of object currently in memory (either active or released) excluding transient instance static TObjectCache _ObjectCache; /// The set of object in memory ut released (no pointer on them) and waiting for decommit static TReleasedObject _ReleasedObject; /// The current object state NOPE::TObjectState _ObjectState; /// For object in released state, this is the release date (used to trigger deletion of the object from memory) time_t _ReleaseDate; /// The linked list of pointer on this object CScenarioPtr *_PtrList; // Try to load the specified object from the memory cache, return NULL if the object is not in the cache static CScenario *loadFromCache(uint32 objectId, bool unrelease); // Receive and execute command from the cache manager. static uint32 cacheCmd(NOPE::TCacheCmd cmd); static void dump(); static void updateCache(); public: static void clearCache(); private: void registerUpdatable(); // set the pointer on the first pointer of the pointer list (set to null when there is no more pointer) void setFirstPtr(CScenarioPtr *ptr); // return the first pointer of the pointer list (can be null) CScenarioPtr *getFirstPtr() { return _PtrList; } public: /** Return the object identifier (witch is unique) * You can only call this method on a persistent instance. * (because transient instance can have invalid id) */ uint32 getObjectId() const { nlassert(getPersistentState() != NOPE::os_transient); return _Id; } /** Set the object unique ID. * You can only set the object id on a transient object * having a non autogenerated unique id. * Furthermore, you MUST set the id before calling create() * if the id is not autogenerated. */ void setObjectId(uint32 objectId) { // can only be set when in transient state nlassert(getPersistentState() == NOPE::os_transient); // can only be set once nlassert(_Id == NOPE::INVALID_OBJECT_ID); _Id = objectId; } /** Return the current persistent state of the object.*/ NOPE::TObjectState getPersistentState() const { return _ObjectState; } private: // Set the persistent state of the object and do some house keeping void setPersistentState(NOPE::TObjectState state); }; ///////////////////////////////////////////////////////////////// // WARNING : this is a generated file, don't change it ! ///////////////////////////////////////////////////////////////// class CSessionLog { protected: // uint32 _Id; // uint32 _ScenarioId; // uint32 _RRPScored; // uint32 _ScenarioPointScored; // uint32 _TimeTaken; // std::string _Participants; // uint32 _LaunchDate; // std::string _Owner; // std::string _GuildName; public: // uint32 getScenarioId() const { return _ScenarioId; } void setScenarioId(uint32 value) { if (_ScenarioId != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _ScenarioId = value; } } // uint32 getRRPScored() const { return _RRPScored; } void setRRPScored(uint32 value) { if (_RRPScored != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _RRPScored = value; } } // uint32 getScenarioPointScored() const { return _ScenarioPointScored; } void setScenarioPointScored(uint32 value) { if (_ScenarioPointScored != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _ScenarioPointScored = value; } } // uint32 getTimeTaken() const { return _TimeTaken; } void setTimeTaken(uint32 value) { if (_TimeTaken != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _TimeTaken = value; } } // const std::string &getParticipants() const { return _Participants; } void setParticipants(const std::string &value) { if (_Participants != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _Participants = value; } } // uint32 getLaunchDate() const { return _LaunchDate; } void setLaunchDate(uint32 value) { if (_LaunchDate != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _LaunchDate = value; } } // const std::string &getOwner() const { return _Owner; } void setOwner(const std::string &value) { if (_Owner != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _Owner = value; } } // const std::string &getGuildName() const { return _GuildName; } void setGuildName(const std::string &value) { if (_GuildName != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _GuildName = value; } } bool operator == (const CSessionLog &other) const { return _Id == other._Id && _ScenarioId == other._ScenarioId && _RRPScored == other._RRPScored && _ScenarioPointScored == other._ScenarioPointScored && _TimeTaken == other._TimeTaken && _Participants == other._Participants && _LaunchDate == other._LaunchDate && _Owner == other._Owner && _GuildName == other._GuildName; } private: // private constructor, you must use 'createTransient' to get an instance CSessionLog() : _PtrList(NULL), _ObjectState(NOPE::os_transient), _Id(NOPE::INVALID_OBJECT_ID) { // Default initialisation _RRPScored = 0; _ScenarioPointScored = 0; _TimeTaken = 0; // register the cache for this class (if not already done) registerUpdatable(); } // Destructor, delete any children ~CSessionLog(); /// utility func to remove this object from the released object container void removeFromReleased(); public: /// Create a new instance in the transient space static CSessionLogPtr createTransient(const char *filename, uint32 lineNum) { return CSessionLogPtr(new CSessionLog(), filename, lineNum); } /** Create a new object in the database from the current object data. * The object MUST be in transient state (i.e, it must be a new * object created by user and not comming from the databse). * If identifier is autogenerated, the generated id can be read after * this call. */ bool create(MSW::CConnection &connection); /** Update the database with the current object state. * The object MUST be either in clean or dirty state. * Return true if the object has been effectively stored * in the database. * After this call, the object is in 'clean' state. */ bool update(MSW::CConnection &connection); /** Remove the current object from the persistent storage. * The object must be in clean or dirty state. * Return true if the object has been correctly * updated in the database. * After the call, the object is in 'clean' state. */ bool remove(MSW::CConnection &connection); /** Remove an object from the persistent storage by specifying * the id to remove. * Return true if an entry as been effectively removed from * the database. * After the call, the object is in 'removed' state and should * no more be used. A good pratice should be to delete * the transient object just after the remove call. */ static bool removeById(MSW::CConnection &connection, uint32 id); /** Load an instance from the database. * This call allocate a new object and load the property value * from the database. * Return NULL if the object id is not found. */ static CSessionLogPtr load(MSW::CConnection &connection, uint32 id, const char *filename, uint32 lineNum); /** Load all objects children of CScenario and * return them by using the specified output iterator. */ static bool loadChildrenOfCScenario(MSW::CConnection &connection, uint32 parentId, std::vector < CSessionLogPtr > &children, const char *filename, uint32 lineNum); private: private: friend class CPersistentCache; friend class CSessionLogPtr; typedef std::map TObjectCache; typedef std::set TObjectSet; typedef std::map TReleasedObject; /// The complete set of object currently in memory (either active or released) excluding transient instance static TObjectCache _ObjectCache; /// The set of object in memory ut released (no pointer on them) and waiting for decommit static TReleasedObject _ReleasedObject; /// The current object state NOPE::TObjectState _ObjectState; /// For object in released state, this is the release date (used to trigger deletion of the object from memory) time_t _ReleaseDate; /// The linked list of pointer on this object CSessionLogPtr *_PtrList; // Try to load the specified object from the memory cache, return NULL if the object is not in the cache static CSessionLog *loadFromCache(uint32 objectId, bool unrelease); // Receive and execute command from the cache manager. static uint32 cacheCmd(NOPE::TCacheCmd cmd); static void dump(); static void updateCache(); public: static void clearCache(); private: void registerUpdatable(); // set the pointer on the first pointer of the pointer list (set to null when there is no more pointer) void setFirstPtr(CSessionLogPtr *ptr); // return the first pointer of the pointer list (can be null) CSessionLogPtr *getFirstPtr() { return _PtrList; } public: /** Return the object identifier (witch is unique) * You can only call this method on a persistent instance. * (because transient instance can have invalid id) */ uint32 getObjectId() const { return _Id; } /** Set the object unique ID. * You can only set the object id on a transient object * having a non autogenerated unique id. * Furthermore, you MUST set the id before calling create() * if the id is not autogenerated. */ void setObjectId(uint32 objectId) { // can only be set when in transient state nlassert(getPersistentState() == NOPE::os_transient); // can only be set once nlassert(_Id == NOPE::INVALID_OBJECT_ID); _Id = objectId; } /** Return the current persistent state of the object.*/ NOPE::TObjectState getPersistentState() const { return _ObjectState; } private: // Set the persistent state of the object and do some house keeping void setPersistentState(NOPE::TObjectState state); }; ///////////////////////////////////////////////////////////////// // WARNING : this is a generated file, don't change it ! ///////////////////////////////////////////////////////////////// class CGmStatus { protected: // uint32 _UserId; // bool _Available; public: // bool getAvailable() const { return _Available; } void setAvailable(bool value) { if (_Available != value) { if (getPersistentState() != NOPE::os_transient) setPersistentState(NOPE::os_dirty); _Available = value; } } bool operator == (const CGmStatus &other) const { return _UserId == other._UserId && _Available == other._Available; } private: // private constructor, you must use 'createTransient' to get an instance CGmStatus() : _PtrList(NULL), _ObjectState(NOPE::os_transient), _UserId(NOPE::INVALID_OBJECT_ID) { // Default initialisation _Available = 1; // register the cache for this class (if not already done) registerUpdatable(); } // Destructor, delete any children ~CGmStatus(); /// utility func to remove this object from the released object container void removeFromReleased(); public: /// Create a new instance in the transient space static CGmStatusPtr createTransient(const char *filename, uint32 lineNum) { return CGmStatusPtr(new CGmStatus(), filename, lineNum); } /** Create a new object in the database from the current object data. * The object MUST be in transient state (i.e, it must be a new * object created by user and not comming from the databse). * If identifier is autogenerated, the generated id can be read after * this call. */ bool create(MSW::CConnection &connection); /** Update the database with the current object state. * The object MUST be either in clean or dirty state. * Return true if the object has been effectively stored * in the database. * After this call, the object is in 'clean' state. */ bool update(MSW::CConnection &connection); /** Remove the current object from the persistent storage. * The object must be in clean or dirty state. * Return true if the object has been correctly * updated in the database. * After the call, the object is in 'clean' state. */ bool remove(MSW::CConnection &connection); /** Remove an object from the persistent storage by specifying * the id to remove. * Return true if an entry as been effectively removed from * the database. * After the call, the object is in 'removed' state and should * no more be used. A good pratice should be to delete * the transient object just after the remove call. */ static bool removeById(MSW::CConnection &connection, uint32 id); /** Load an instance from the database. * This call allocate a new object and load the property value * from the database. * Return NULL if the object id is not found. */ static CGmStatusPtr load(MSW::CConnection &connection, uint32 id, const char *filename, uint32 lineNum); /** Load the object child of CRingUser and * return true if no error, false in case of error (in SQL maybe). * If no such object is found, fill the child pointer with NULL. */ static bool loadChildOfCRingUser(MSW::CConnection &connection, uint32 parentId, CGmStatusPtr &childPtr, const char *filename, uint32 lineNum); private: private: friend class CPersistentCache; friend class CGmStatusPtr; typedef std::map TObjectCache; typedef std::set TObjectSet; typedef std::map TReleasedObject; /// The complete set of object currently in memory (either active or released) excluding transient instance static TObjectCache _ObjectCache; /// The set of object in memory ut released (no pointer on them) and waiting for decommit static TReleasedObject _ReleasedObject; /// The current object state NOPE::TObjectState _ObjectState; /// For object in released state, this is the release date (used to trigger deletion of the object from memory) time_t _ReleaseDate; /// The linked list of pointer on this object CGmStatusPtr *_PtrList; // Try to load the specified object from the memory cache, return NULL if the object is not in the cache static CGmStatus *loadFromCache(uint32 objectId, bool unrelease); // Receive and execute command from the cache manager. static uint32 cacheCmd(NOPE::TCacheCmd cmd); static void dump(); static void updateCache(); public: static void clearCache(); private: void registerUpdatable(); // set the pointer on the first pointer of the pointer list (set to null when there is no more pointer) void setFirstPtr(CGmStatusPtr *ptr); // return the first pointer of the pointer list (can be null) CGmStatusPtr *getFirstPtr() { return _PtrList; } public: /** Return the object identifier (witch is unique) * You can only call this method on a persistent instance. * (because transient instance can have invalid id) */ uint32 getObjectId() const { return _UserId; } /** Set the object unique ID. * You can only set the object id on a transient object * having a non autogenerated unique id. * Furthermore, you MUST set the id before calling create() * if the id is not autogenerated. */ void setObjectId(uint32 objectId) { // can only be set when in transient state nlassert(getPersistentState() == NOPE::os_transient); // can only be set once nlassert(_UserId == NOPE::INVALID_OBJECT_ID); _UserId = objectId; } /** Return the current persistent state of the object.*/ NOPE::TObjectState getPersistentState() const { return _ObjectState; } private: // Set the persistent state of the object and do some house keeping void setPersistentState(NOPE::TObjectState state); }; } #endif