Database is now working and functional.
This commit is contained in:
parent
d13fe81ac5
commit
72347ea9a2
@ -36,6 +36,8 @@ namespace ehs
|
|||||||
|
|
||||||
DbVar* GetVariable(UInt_64 hashId) const;
|
DbVar* GetVariable(UInt_64 hashId) const;
|
||||||
|
|
||||||
|
DbVar* GetVariable(const Str_8& id) const;
|
||||||
|
|
||||||
void Save() const;
|
void Save() const;
|
||||||
|
|
||||||
void Load();
|
void Load();
|
||||||
|
@ -46,10 +46,14 @@ namespace ehs
|
|||||||
|
|
||||||
bool CreateVariable(Str_8 id, DbType type, UInt_64 size, const Byte* defaultValue);
|
bool CreateVariable(Str_8 id, DbType type, UInt_64 size, const Byte* defaultValue);
|
||||||
|
|
||||||
|
bool CreateVariable(Str_8 id, DbType type);
|
||||||
|
|
||||||
DbObject *CreateObject();
|
DbObject *CreateObject();
|
||||||
|
|
||||||
|
DbObject *GetObject(UInt_64 id) const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
DbVarTmpl* GetVariableTemplate(UInt_64 hashId) const;
|
DbVarTmpl *GetVariableTemplate(UInt_64 hashId) const;
|
||||||
|
|
||||||
void Serialize(Serializer<UInt_64>& data) const;
|
void Serialize(Serializer<UInt_64>& data) const;
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@ namespace ehs
|
|||||||
|
|
||||||
DbVar();
|
DbVar();
|
||||||
|
|
||||||
DbVar(UInt_64 hashId, DbVarTmpl *master, UInt_64 size, const Byte *data);
|
DbVar(UInt_64 hashId, DbVarTmpl *master);
|
||||||
|
|
||||||
DbVar(DbVar &&var) noexcept;
|
DbVar(DbVar &&var) noexcept;
|
||||||
|
|
||||||
|
@ -32,6 +32,8 @@ namespace ehs
|
|||||||
|
|
||||||
DbVarTmpl(Str_8 id, DbType type, const Byte* def);
|
DbVarTmpl(Str_8 id, DbType type, const Byte* def);
|
||||||
|
|
||||||
|
DbVarTmpl(Str_8 id, DbType type);
|
||||||
|
|
||||||
DbVarTmpl(DbVarTmpl&& varTmpl) noexcept;
|
DbVarTmpl(DbVarTmpl&& varTmpl) noexcept;
|
||||||
|
|
||||||
DbVarTmpl(const DbVarTmpl& varTmpl);
|
DbVarTmpl(const DbVarTmpl& varTmpl);
|
||||||
|
@ -83,6 +83,11 @@ namespace ehs
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DbVar* DbObject::GetVariable(const Str_8& id) const
|
||||||
|
{
|
||||||
|
return GetVariable(id.Hash_64());
|
||||||
|
}
|
||||||
|
|
||||||
void DbObject::Save() const
|
void DbObject::Save() const
|
||||||
{
|
{
|
||||||
if (!IsLoaded())
|
if (!IsLoaded())
|
||||||
@ -95,7 +100,7 @@ namespace ehs
|
|||||||
for (UInt_64 i = 0; i < vars.Size(); ++i)
|
for (UInt_64 i = 0; i < vars.Size(); ++i)
|
||||||
vars[i].Serialize(data);
|
vars[i].Serialize(data);
|
||||||
|
|
||||||
File file(parent->GetId() + "/" + Str_8::FromNum(id), Mode::WRITE, Disposition::CREATE_PERSISTENT);
|
File file(parent->GetId() + "/" + Str_8::FromNum(id) + ".eho", Mode::WRITE, Disposition::CREATE_PERSISTENT);
|
||||||
file.WriteSerializer_64(data);
|
file.WriteSerializer_64(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -104,15 +109,18 @@ namespace ehs
|
|||||||
if (IsLoaded())
|
if (IsLoaded())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
File file(parent->GetId() + "/" + Str_8::FromNum(id), Mode::READ, Disposition::OPEN);
|
File file(parent->GetId() + "/" + Str_8::FromNum(id) + ".eho", Mode::READ, Disposition::OPEN);
|
||||||
Serializer<UInt_64> data = file.ReadSerializer_64(Endianness::LE, file.Size());
|
Serializer<UInt_64> data = file.ReadSerializer_64(Endianness::LE, file.Size());
|
||||||
file.Release();
|
file.Release();
|
||||||
|
|
||||||
vars.Resize(data.Read<UInt_64>());
|
vars.Resize(data.Read<UInt_64>());
|
||||||
|
|
||||||
for (UInt_64 i = 0; i < vars.Size(); ++i)
|
for (UInt_64 i = 0; i < vars.Size(); ++i)
|
||||||
|
{
|
||||||
|
vars[i].parent = this;
|
||||||
vars[i].Deserialize(data);
|
vars[i].Deserialize(data);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
bool DbObject::IsLoaded() const
|
bool DbObject::IsLoaded() const
|
||||||
{
|
{
|
||||||
@ -126,7 +134,7 @@ namespace ehs
|
|||||||
|
|
||||||
void DbObject::CreateVariable(DbVarTmpl* master)
|
void DbObject::CreateVariable(DbVarTmpl* master)
|
||||||
{
|
{
|
||||||
vars.Push(DbVar(master->GetHashId(), master, master->GetSize(), master->GetDefault()));
|
vars.Push(DbVar(master->GetHashId(), master));
|
||||||
vars[vars.End()].parent = this;
|
vars[vars.End()].parent = this;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -120,7 +120,22 @@ namespace ehs
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
DbObject* DbTable::CreateObject()
|
bool DbTable::CreateVariable(Str_8 id, const DbType type)
|
||||||
|
{
|
||||||
|
if (HasVariable(id))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
varTmpls.Push(DbVarTmpl((Str_8&&)id, type));
|
||||||
|
|
||||||
|
DbVarTmpl* var = &varTmpls[varTmpls.End()];
|
||||||
|
|
||||||
|
for (UInt_64 i = 0; i < objects.Size(); ++i)
|
||||||
|
objects[i].CreateVariable(var);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
DbObject *DbTable::CreateObject()
|
||||||
{
|
{
|
||||||
objects.Push(DbObject(objects.Size()));
|
objects.Push(DbObject(objects.Size()));
|
||||||
|
|
||||||
@ -134,7 +149,16 @@ namespace ehs
|
|||||||
return obj;
|
return obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
DbVarTmpl* DbTable::GetVariableTemplate(UInt_64 hashId) const
|
DbObject* DbTable::GetObject(const UInt_64 id) const
|
||||||
|
{
|
||||||
|
for (UInt_64 i = 0; i < objects.Size(); ++i)
|
||||||
|
if (objects[i].GetId() == id)
|
||||||
|
return &objects[i];
|
||||||
|
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
DbVarTmpl *DbTable::GetVariableTemplate(const UInt_64 hashId) const
|
||||||
{
|
{
|
||||||
for (UInt_64 i = 0; i < varTmpls.Size(); ++i)
|
for (UInt_64 i = 0; i < varTmpls.Size(); ++i)
|
||||||
if (varTmpls[i].GetHashId() == hashId)
|
if (varTmpls[i].GetHashId() == hashId)
|
||||||
|
@ -16,11 +16,11 @@ namespace ehs
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
DbVar::DbVar(const UInt_64 hashId, DbVarTmpl *master, const UInt_64 size, const Byte *const data)
|
DbVar::DbVar(const UInt_64 hashId, DbVarTmpl *master)
|
||||||
: hashId(hashId), parent(nullptr), master(master), size(size), data(new Byte[DbTypeToSize(master->GetType()) * size])
|
: hashId(hashId), parent(nullptr), master(master), size(master->GetSize()), data(new Byte[DbTypeToSize(master->GetType()) * size])
|
||||||
{
|
{
|
||||||
master->slaves.Push(this);
|
master->slaves.Push(this);
|
||||||
Util::Copy(this->data, data, DbTypeToSize(master->GetType()) * size);
|
Util::Copy(data, master->GetDefault(), DbTypeToSize(master->GetType()) * size);
|
||||||
}
|
}
|
||||||
|
|
||||||
DbVar::DbVar(DbVar &&var) noexcept
|
DbVar::DbVar(DbVar &&var) noexcept
|
||||||
|
@ -26,6 +26,11 @@ namespace ehs
|
|||||||
Util::Copy(this->def, def, DbTypeToSize(type));
|
Util::Copy(this->def, def, DbTypeToSize(type));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DbVarTmpl::DbVarTmpl(Str_8 id, DbType type)
|
||||||
|
: hashId(id.Hash_64()), id((Str_8&&)id), type(type), array(true), size(0), def(nullptr)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
DbVarTmpl::DbVarTmpl(DbVarTmpl &&varTmpl) noexcept
|
DbVarTmpl::DbVarTmpl(DbVarTmpl &&varTmpl) noexcept
|
||||||
: hashId(varTmpl.hashId), id((Str_8&&)varTmpl.id), type(varTmpl.type), array(varTmpl.array), size(varTmpl.size),
|
: hashId(varTmpl.hashId), id((Str_8&&)varTmpl.id), type(varTmpl.type), array(varTmpl.array), size(varTmpl.size),
|
||||||
def(varTmpl.def)
|
def(varTmpl.def)
|
||||||
|
Loading…
Reference in New Issue
Block a user