Database implementation mostly complete.
This commit is contained in:
@@ -1,22 +1,29 @@
|
||||
#include "ehs/db/DbObject.h"
|
||||
#include "ehs/db/DbTable.h"
|
||||
#include "ehs/Serializer.h"
|
||||
#include "ehs/io/File.h"
|
||||
|
||||
namespace ehs
|
||||
{
|
||||
DbObject::DbObject()
|
||||
: id(0), loaded(false), parent(nullptr)
|
||||
: id(0), parent(nullptr)
|
||||
{
|
||||
}
|
||||
|
||||
DbObject::DbObject(const UInt_64 id)
|
||||
: id(id), parent(nullptr)
|
||||
{
|
||||
}
|
||||
|
||||
DbObject::DbObject(DbObject&& obj) noexcept
|
||||
: id(obj.id), vars((Array<DbVar>&&)obj.vars), loaded(obj.loaded), parent(obj.parent)
|
||||
: id(obj.id), parent(obj.parent), vars((Array<DbVar>&&)obj.vars)
|
||||
{
|
||||
obj.id = 0;
|
||||
obj.loaded = false;
|
||||
obj.parent = nullptr;
|
||||
}
|
||||
|
||||
DbObject::DbObject(const DbObject& obj)
|
||||
: id(obj.id), vars(obj.vars), loaded(obj.loaded), parent(obj.parent)
|
||||
: id(obj.id), parent(obj.parent), vars(obj.vars)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -26,12 +33,13 @@ namespace ehs
|
||||
return *this;
|
||||
|
||||
id = obj.id;
|
||||
vars = (Array<DbVar>&&)obj.vars;
|
||||
loaded = obj.loaded;
|
||||
parent = obj.parent;
|
||||
vars = (Array<DbVar>&&)obj.vars;
|
||||
|
||||
for (UInt_64 i = 0; i < vars.Size(); ++i)
|
||||
vars[i].parent = this;
|
||||
|
||||
obj.id = 0;
|
||||
obj.loaded = false;
|
||||
obj.parent = nullptr;
|
||||
|
||||
return *this;
|
||||
@@ -43,19 +51,21 @@ namespace ehs
|
||||
return *this;
|
||||
|
||||
id = obj.id;
|
||||
vars = obj.vars;
|
||||
loaded = obj.loaded;
|
||||
parent = obj.parent;
|
||||
vars = obj.vars;
|
||||
|
||||
for (UInt_64 i = 0; i < vars.Size(); ++i)
|
||||
vars[i].parent = this;
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
UInt_64 DbObject::GetId()
|
||||
UInt_64 DbObject::GetId() const
|
||||
{
|
||||
return id;
|
||||
}
|
||||
|
||||
bool DbObject::HasVariable(UInt_64 hashId)
|
||||
bool DbObject::HasVariable(const UInt_64 hashId) const
|
||||
{
|
||||
for (UInt_64 i = 0; i < vars.Size(); ++i)
|
||||
if (vars[i].GetHashId() == hashId)
|
||||
@@ -64,7 +74,7 @@ namespace ehs
|
||||
return false;
|
||||
}
|
||||
|
||||
DbVar* DbObject::GetVariable(UInt_64 hashId) const
|
||||
DbVar* DbObject::GetVariable(const UInt_64 hashId) const
|
||||
{
|
||||
for (UInt_64 i = 0; i < vars.Size(); ++i)
|
||||
if (vars[i].GetHashId() == hashId)
|
||||
@@ -73,17 +83,40 @@ namespace ehs
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
void DbObject::Save()
|
||||
void DbObject::Save() const
|
||||
{
|
||||
if (!IsLoaded())
|
||||
return;
|
||||
|
||||
Serializer<UInt_64> data(Endianness::LE);
|
||||
|
||||
data.Write(vars.Size());
|
||||
|
||||
for (UInt_64 i = 0; i < vars.Size(); ++i)
|
||||
vars[i].Serialize(data);
|
||||
|
||||
File file(parent->GetId() + "/" + Str_8::FromNum(id), Mode::WRITE, Disposition::CREATE_PERSISTENT);
|
||||
file.WriteSerializer_64(data);
|
||||
}
|
||||
|
||||
void DbObject::Load()
|
||||
{
|
||||
if (IsLoaded())
|
||||
return;
|
||||
|
||||
File file(parent->GetId() + "/" + Str_8::FromNum(id), Mode::READ, Disposition::OPEN);
|
||||
Serializer<UInt_64> data = file.ReadSerializer_64(Endianness::LE, file.Size());
|
||||
file.Release();
|
||||
|
||||
vars.Resize(data.Read<UInt_64>());
|
||||
|
||||
for (UInt_64 i = 0; i < vars.Size(); ++i)
|
||||
vars[i].Deserialize(data);
|
||||
}
|
||||
|
||||
bool DbObject::IsLoaded() const
|
||||
{
|
||||
return loaded;
|
||||
return vars.Size();
|
||||
}
|
||||
|
||||
void DbObject::Free()
|
||||
@@ -91,8 +124,9 @@ namespace ehs
|
||||
vars.Clear();
|
||||
}
|
||||
|
||||
DbTable* DbObject::GetParent() const
|
||||
void DbObject::CreateVariable(DbVarTmpl* master)
|
||||
{
|
||||
return parent;
|
||||
vars.Push(DbVar(master->GetHashId(), master, master->GetSize(), master->GetDefault()));
|
||||
vars[vars.End()].parent = this;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user