Simplified the database.
This commit is contained in:
@@ -1,42 +1,37 @@
|
||||
#include "ehs/db/DbVar.h"
|
||||
#include "ehs/Util.h"
|
||||
#include "ehs/db/DbObject.h"
|
||||
#include "ehs/db/DbTable.h"
|
||||
#include "ehs/db/DbVarTmpl.h"
|
||||
#include "ehs/db/DbObject.h"
|
||||
|
||||
namespace ehs
|
||||
{
|
||||
DbVar::~DbVar()
|
||||
{
|
||||
delete[] data;
|
||||
delete[] value;
|
||||
}
|
||||
|
||||
DbVar::DbVar()
|
||||
: hashId(0), parent(nullptr), master(nullptr), size(0), data(nullptr)
|
||||
: hashId(0), parent(nullptr), value(nullptr), size(0)
|
||||
{
|
||||
}
|
||||
|
||||
DbVar::DbVar(const UInt_64 hashId, DbVarTmpl *master)
|
||||
: hashId(hashId), parent(nullptr), master(master), size(master->GetSize()), data(new Byte[DbTypeToSize(master->GetType()) * size])
|
||||
DbVar::DbVar(const UInt_64 hashId, const DbVarTmpl * const master)
|
||||
: hashId(hashId), parent(nullptr), value(new Byte[master->GetSize()]), size(master->GetSize())
|
||||
{
|
||||
master->slaves.Push(this);
|
||||
Util::Copy(data, master->GetDefault(), DbTypeToSize(master->GetType()) * size);
|
||||
Util::Copy(value, &(*master)[0], size);
|
||||
}
|
||||
|
||||
DbVar::DbVar(DbVar &&var) noexcept
|
||||
: hashId(var.hashId), parent(var.parent), master(var.master), size(var.size), data(var.data)
|
||||
: hashId(var.hashId), parent(var.parent), value(var.value), size(var.size)
|
||||
{
|
||||
master->UpdateSlave(&var, this);
|
||||
|
||||
var.hashId = 0;
|
||||
var.parent = nullptr;
|
||||
var.master = nullptr;
|
||||
var.value = nullptr;
|
||||
var.size = 0;
|
||||
var.data = nullptr;
|
||||
}
|
||||
|
||||
DbVar::DbVar(const DbVar &var)
|
||||
: hashId(0), parent(nullptr), master(nullptr), size(0), data(nullptr)
|
||||
: hashId(0), parent(nullptr), value(nullptr), size(0)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -45,20 +40,16 @@ namespace ehs
|
||||
if (this == &var)
|
||||
return *this;
|
||||
|
||||
delete[] data;
|
||||
delete[] value;
|
||||
|
||||
hashId = var.hashId;
|
||||
parent = var.parent;
|
||||
master = var.master;
|
||||
value = var.value;
|
||||
size = var.size;
|
||||
data = var.data;
|
||||
|
||||
master->UpdateSlave(&var, this);
|
||||
|
||||
var.hashId = 0;
|
||||
var.master = nullptr;
|
||||
var.value = nullptr;
|
||||
var.size = 0;
|
||||
var.data = nullptr;
|
||||
|
||||
return *this;
|
||||
}
|
||||
@@ -68,20 +59,19 @@ namespace ehs
|
||||
if (this == &var)
|
||||
return *this;
|
||||
|
||||
delete[] data;
|
||||
delete[] value;
|
||||
|
||||
hashId = 0;
|
||||
parent = nullptr;
|
||||
master = nullptr;
|
||||
value = nullptr;
|
||||
size = 0;
|
||||
data = nullptr;
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
DbVar::operator Byte *() const
|
||||
{
|
||||
return data;
|
||||
return value;
|
||||
}
|
||||
|
||||
UInt_64 DbVar::GetHashId() const
|
||||
@@ -94,54 +84,19 @@ 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);
|
||||
data.WriteArray(value, 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);
|
||||
size = 0;
|
||||
data.ReadArray(value, &size);
|
||||
value = new Byte[size];
|
||||
data.ReadArray(value, &size);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user