mirror of
https://bitbucket.org/seefoe/src.git
synced 2026-07-31 01:15:45 -04:00
123 lines
3.5 KiB
C++
Executable File
123 lines
3.5 KiB
C++
Executable File
// ======================================================================
|
|
//
|
|
// ObjvarBuffer.h
|
|
// copyright (c) 2001 Sony Online Entertainment
|
|
//
|
|
// ======================================================================
|
|
|
|
#ifndef INCLUDED_ObjvarBuffer_H
|
|
#define INCLUDED_ObjvarBuffer_H
|
|
|
|
// ======================================================================
|
|
|
|
#include "SwgDatabaseServer/ObjectTableBuffer.h"
|
|
#include "SwgDatabaseServer/ObjectVariableQueries.h"
|
|
#include "serverDatabase/AbstractTableBuffer.h"
|
|
#include "sharedFoundation/DynamicVariableList.h"
|
|
#include <map>
|
|
#include <string>
|
|
#include <memory>
|
|
// ======================================================================
|
|
|
|
class ObjectTableBuffer;
|
|
namespace DBSchema
|
|
{
|
|
struct ObjvarRow;
|
|
}
|
|
|
|
// ======================================================================
|
|
|
|
/**
|
|
* ObjvarBuffer is a table buffer customized to the job of loading and
|
|
* saving object variables.
|
|
*
|
|
* Differences from standard table buffers:
|
|
*
|
|
* 1) Objvars are keyed by object_id and name
|
|
*
|
|
* 2) When loading, only the object_id is specified, and all objvars
|
|
* are loaded for that object.
|
|
*/
|
|
|
|
class ObjvarBuffer : public AbstractTableBuffer
|
|
{
|
|
public:
|
|
explicit ObjvarBuffer(DB::ModeQuery::Mode mode, ObjectTableBuffer *objectTableBuffer, bool useGoldNames);
|
|
virtual ~ObjvarBuffer(void);
|
|
|
|
virtual bool load(DB::Session *session,const DB::TagSet &tags, const std::string &schema, bool usingGoldDatabase);
|
|
virtual bool save(DB::Session *session);
|
|
virtual void removeObject(const NetworkId &object);
|
|
|
|
DBSchema::ObjectVariableRow *findRowByIndex(const NetworkId &objectId, const std::string &name);
|
|
|
|
void updateObjvars(const NetworkId &objectId, const std::vector<DynamicVariableList::MapType::Command> &commands);
|
|
void getObjvarsForObject(const NetworkId &objectId, std::vector<DynamicVariableList::MapType::Command> &commands) const;
|
|
|
|
private:
|
|
struct IndexKey
|
|
{
|
|
NetworkId m_objectId;
|
|
int m_nameId;
|
|
|
|
IndexKey(const NetworkId &objectId, int nameId);
|
|
bool operator==(const IndexKey &rhs) const;
|
|
bool operator<(const IndexKey &rhs) const;
|
|
};
|
|
|
|
struct ObjvarValue
|
|
{
|
|
int m_type;
|
|
std::string m_value;
|
|
bool m_detached;
|
|
bool m_inDatabase;
|
|
};
|
|
|
|
typedef std::map<IndexKey,ObjvarValue> DataType;
|
|
|
|
DB::ModeQuery::Mode m_mode;
|
|
DataType m_data;
|
|
DataType m_overrides;
|
|
ObjectTableBuffer *m_objectTableBuffer;
|
|
bool m_useGoldNames;
|
|
|
|
// typedef std::map<NetworkId,std::vector<DBSchema::ObjectVariableRow*> > LoadIndexType;
|
|
// LoadIndexType m_loadIndex;
|
|
|
|
private:
|
|
ObjvarBuffer(); //disable
|
|
ObjvarBuffer(const ObjvarBuffer&); //disable
|
|
ObjvarBuffer & operator=(const ObjvarBuffer&); //disable
|
|
}; //lint !e1712 // IndexKey has no default constructor
|
|
|
|
// ======================================================================
|
|
|
|
inline ObjvarBuffer::IndexKey::IndexKey(const NetworkId &objectId, int nameId) :
|
|
m_objectId(objectId),
|
|
m_nameId(nameId)
|
|
{
|
|
}
|
|
|
|
// ----------------------------------------------------------------------
|
|
|
|
inline bool ObjvarBuffer::IndexKey::operator==(const IndexKey &rhs) const
|
|
{
|
|
return ((m_objectId == rhs.m_objectId) && (m_nameId == rhs.m_nameId));
|
|
}
|
|
|
|
// ----------------------------------------------------------------------
|
|
|
|
inline bool ObjvarBuffer::IndexKey::operator<(const IndexKey &rhs) const
|
|
{
|
|
if (m_objectId < rhs.m_objectId)
|
|
return true;
|
|
else if (m_objectId == rhs.m_objectId)
|
|
return (m_nameId < rhs.m_nameId);
|
|
else
|
|
return false;
|
|
}
|
|
|
|
// ======================================================================
|
|
|
|
#endif
|