Database implementation mostly complete.

This commit is contained in:
2024-04-09 01:44:15 -07:00
parent beba947c69
commit d13fe81ac5
20 changed files with 768 additions and 106 deletions

View File

@@ -1,4 +1,8 @@
#include "ehs/db/DbVar.h"
#include "ehs/Util.h"
#include "ehs/db/DbObject.h"
#include "ehs/db/DbTable.h"
#include "ehs/db/DbVarTmpl.h"
namespace ehs
{
@@ -8,29 +12,35 @@ namespace ehs
}
DbVar::DbVar()
: hashId(0), size(0), data(nullptr)
: hashId(0), parent(nullptr), master(nullptr), size(0), data(nullptr)
{
}
DbVar::DbVar(UInt_64 hashId, UInt_64 size, Byte* data)
: hashId(hashId), size(size), data(data)
DbVar::DbVar(const UInt_64 hashId, DbVarTmpl *master, const UInt_64 size, const Byte *const data)
: hashId(hashId), parent(nullptr), master(master), size(size), data(new Byte[DbTypeToSize(master->GetType()) * size])
{
master->slaves.Push(this);
Util::Copy(this->data, data, DbTypeToSize(master->GetType()) * size);
}
DbVar::DbVar(DbVar&& var) noexcept
: hashId(var.hashId), size(var.size), data(var.data)
DbVar::DbVar(DbVar &&var) noexcept
: hashId(var.hashId), parent(var.parent), master(var.master), size(var.size), data(var.data)
{
master->UpdateSlave(&var, this);
var.hashId = 0;
var.parent = nullptr;
var.master = nullptr;
var.size = 0;
var.data = nullptr;
}
DbVar::DbVar(const DbVar& var)
: hashId(0), size(0), data(nullptr)
DbVar::DbVar(const DbVar &var)
: hashId(0), parent(nullptr), master(nullptr), size(0), data(nullptr)
{
}
DbVar& DbVar::operator=(DbVar&& var) noexcept
DbVar &DbVar::operator=(DbVar &&var) noexcept
{
if (this == &var)
return *this;
@@ -38,17 +48,22 @@ namespace ehs
delete[] data;
hashId = var.hashId;
parent = var.parent;
master = var.master;
size = var.size;
data = var.data;
master->UpdateSlave(&var, this);
var.hashId = 0;
var.master = nullptr;
var.size = 0;
var.data = nullptr;
return *this;
}
DbVar& DbVar::operator=(const DbVar& var)
DbVar &DbVar::operator=(const DbVar &var)
{
if (this == &var)
return *this;
@@ -56,13 +71,15 @@ namespace ehs
delete[] data;
hashId = 0;
parent = nullptr;
master = nullptr;
size = 0;
data = nullptr;
return *this;
}
DbVar::operator Byte*() const
DbVar::operator Byte *() const
{
return data;
}
@@ -77,8 +94,54 @@ namespace ehs
return size;
}
void DbVar::SetData(const UInt_64 newSize, const Byte* const newData)
{
if (!master->IsArray())
return;
size = newSize;
const UInt_64 byteSize = DbTypeToSize(master->GetType()) * newSize;
data = new Byte[byteSize];
Util::Copy(data, newData, byteSize);
}
void DbVar::SetData(const Byte* newData)
{
size = 1;
const UInt_64 byteSize = DbTypeToSize(master->GetType());
data = new Byte[byteSize];
Util::Copy(data, newData, byteSize);
}
Byte* DbVar::GetData() const
{
return data;
}
void DbVar::Serialize(Serializer<UInt_64> &data) const
{
data.Write(hashId);
data.Write(size);
data.WriteArray(this->data, DbTypeToSize(master->GetType()) * size);
}
void DbVar::Deserialize(Serializer<UInt_64> &data)
{
hashId = data.Read<UInt_64>();
master = parent->parent->GetVariableTemplate(hashId);
size = data.Read<UInt_64>();
UInt_64 byteSize = 0;
data.ReadArray(this->data, &byteSize);
this->data = new Byte[byteSize];
data.ReadArray(this->data, &byteSize);
}
}