9326 lines
206 KiB
C++
9326 lines
206 KiB
C++
// Ryzom - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
|
|
// 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 <http://www.gnu.org/licenses/>.
|
|
|
|
/////////////////////////////////////////////////////////////////
|
|
// WARNING : this is a generated file, don't change it !
|
|
/////////////////////////////////////////////////////////////////
|
|
|
|
#ifndef DATABASE_MAPPING
|
|
#define DATABASE_MAPPING
|
|
#include "nel/misc/types_nl.h"
|
|
#include <memory>
|
|
#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<TValues, uint32> &getIndexTable() const
|
|
{
|
|
static std::map<TValues, uint32> 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<TValues> &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<TValues>
|
|
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<TValues, uint32>::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<TValues, uint32> &getIndexTable() const
|
|
{
|
|
static std::map<TValues, uint32> 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<TValues> &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<TValues>
|
|
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<TValues, uint32>::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<uint32, CKnownUser*> TObjectCache;
|
|
typedef std::set<CKnownUser*> TObjectSet;
|
|
typedef std::map<time_t, TObjectSet> 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<uint32, CSessionParticipant*> TObjectCache;
|
|
typedef std::set<CSessionParticipant*> TObjectSet;
|
|
typedef std::map<time_t, TObjectSet> 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<CSessionPtr> &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<CSessionParticipantPtr> &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<CKnownUserPtr> &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<CPlayerRatingPtr> &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<uint32, CCharacter*> TObjectCache;
|
|
typedef std::set<CCharacter*> TObjectSet;
|
|
typedef std::map<time_t, TObjectSet> 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<TValues, uint32> &getIndexTable() const
|
|
{
|
|
static std::map<TValues, uint32> 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<TValues> &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<TValues>
|
|
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<TValues, uint32>::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<TValues, uint32> &getIndexTable() const
|
|
{
|
|
static std::map<TValues, uint32> 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<TValues> &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<TValues>
|
|
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<TValues, uint32>::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<TValues, uint32> &getIndexTable() const
|
|
{
|
|
static std::map<TValues, uint32> 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<TValues> &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<TValues>
|
|
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<TValues, uint32>::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<TValues, uint32> &getIndexTable() const
|
|
{
|
|
static std::map<TValues, uint32> 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<TValues> &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<TValues>
|
|
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<TValues, uint32>::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<TValues, uint32> &getIndexTable() const
|
|
{
|
|
static std::map<TValues, uint32> 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<TValues> &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<TValues>
|
|
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<TValues, uint32>::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<CKnownUserPtr> &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<uint32, CCharacterPtr> &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<CFolderPtr> &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<CFolderAccessPtr> &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<uint32, CRingUser*> TObjectCache;
|
|
typedef std::set<CRingUser*> TObjectSet;
|
|
typedef std::map<time_t, TObjectSet> 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<TValues, uint32> &getIndexTable() const
|
|
{
|
|
static std::map<TValues, uint32> 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<TValues> &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<TValues>
|
|
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<TValues, uint32>::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<TValues, uint32> &getIndexTable() const
|
|
{
|
|
static std::map<TValues, uint32> 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<TValues> &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<TValues>
|
|
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<TValues, uint32>::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<CSessionParticipantPtr> &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<CGuildInvitePtr> &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<CJournalEntryPtr> &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<uint32, CSession*> TObjectCache;
|
|
typedef std::set<CSession*> TObjectSet;
|
|
typedef std::map<time_t, TObjectSet> 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<TValues, uint32> &getIndexTable() const
|
|
{
|
|
static std::map<TValues, uint32> 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<TValues> &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<TValues>
|
|
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<TValues, uint32>::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<uint32, CGuildPtr> &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<uint32, CShard*> TObjectCache;
|
|
typedef std::set<CShard*> TObjectSet;
|
|
typedef std::map<time_t, TObjectSet> 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<CCharacterPtr> &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<CGuildInvitePtr> &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<uint32, CGuild*> TObjectCache;
|
|
typedef std::set<CGuild*> TObjectSet;
|
|
typedef std::map<time_t, TObjectSet> 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<uint32, CGuildInvite*> TObjectCache;
|
|
typedef std::set<CGuildInvite*> TObjectSet;
|
|
typedef std::map<time_t, TObjectSet> 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<uint32, CPlayerRating*> TObjectCache;
|
|
typedef std::set<CPlayerRating*> TObjectSet;
|
|
typedef std::map<time_t, TObjectSet> 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<TValues, uint32> &getIndexTable() const
|
|
{
|
|
static std::map<TValues, uint32> 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<TValues> &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<TValues>
|
|
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<TValues, uint32>::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<uint32, CJournalEntry*> TObjectCache;
|
|
typedef std::set<CJournalEntry*> TObjectSet;
|
|
typedef std::map<time_t, TObjectSet> 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<CFolderAccessPtr> &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<CSessionPtr> &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<uint32, CFolder*> TObjectCache;
|
|
typedef std::set<CFolder*> TObjectSet;
|
|
typedef std::map<time_t, TObjectSet> 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<uint32, CFolderAccess*> TObjectCache;
|
|
typedef std::set<CFolderAccess*> TObjectSet;
|
|
typedef std::map<time_t, TObjectSet> 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<CSessionLogPtr> &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<CPlayerRatingPtr> &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<uint32, CScenario*> TObjectCache;
|
|
typedef std::set<CScenario*> TObjectSet;
|
|
typedef std::map<time_t, TObjectSet> 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<uint32, CSessionLog*> TObjectCache;
|
|
typedef std::set<CSessionLog*> TObjectSet;
|
|
typedef std::map<time_t, TObjectSet> 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<uint32, CGmStatus*> TObjectCache;
|
|
typedef std::set<CGmStatus*> TObjectSet;
|
|
typedef std::map<time_t, TObjectSet> 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
|