Adjusted workflow.
This commit is contained in:
154
src/BaseObj.cpp
Normal file
154
src/BaseObj.cpp
Normal file
@@ -0,0 +1,154 @@
|
||||
#include "ehs/BaseObj.h"
|
||||
|
||||
namespace ehs
|
||||
{
|
||||
BaseObj::~BaseObj()
|
||||
{
|
||||
delete[] hierarchy;
|
||||
}
|
||||
|
||||
BaseObj::BaseObj()
|
||||
: hierarchy(nullptr), hierarchySize(0)
|
||||
{
|
||||
AddType("BaseObj");
|
||||
}
|
||||
|
||||
BaseObj::BaseObj(BaseObj&& base) noexcept
|
||||
: hierarchy(base.hierarchy), hierarchySize(base.hierarchySize)
|
||||
{
|
||||
base.hierarchy = nullptr;
|
||||
base.hierarchySize = 0;
|
||||
}
|
||||
|
||||
BaseObj::BaseObj(const BaseObj& base)
|
||||
: hierarchy(new Type[base.hierarchySize]), hierarchySize(base.hierarchySize)
|
||||
{
|
||||
for (UInt_64 i = 0; i < hierarchySize; i++)
|
||||
hierarchy[i] = base.hierarchy[i];
|
||||
}
|
||||
|
||||
BaseObj& BaseObj::operator=(BaseObj&& base) noexcept
|
||||
{
|
||||
if (this == &base)
|
||||
return *this;
|
||||
|
||||
delete[] hierarchy;
|
||||
|
||||
hierarchy = base.hierarchy;
|
||||
hierarchySize = base.hierarchySize;
|
||||
|
||||
base.hierarchy = nullptr;
|
||||
base.hierarchySize = 0;
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
BaseObj& BaseObj::operator=(const BaseObj& base)
|
||||
{
|
||||
if (this == &base)
|
||||
return *this;
|
||||
|
||||
delete[] hierarchy;
|
||||
|
||||
hierarchy = new Type[base.hierarchySize];
|
||||
for (UInt_64 i = 0; i < base.hierarchySize; i++)
|
||||
hierarchy[i] = base.hierarchy[i];
|
||||
|
||||
hierarchySize = base.hierarchySize;
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
bool BaseObj::operator==(const BaseObj& base) const
|
||||
{
|
||||
if (hierarchySize != base.hierarchySize)
|
||||
return false;
|
||||
|
||||
for (UInt_64 i = 0; i < hierarchySize; i++)
|
||||
if (hierarchy[i] != base.hierarchy[i])
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool BaseObj::operator!=(const BaseObj& base) const
|
||||
{
|
||||
if (hierarchySize != base.hierarchySize)
|
||||
return true;
|
||||
|
||||
for (UInt_64 i = 0; i < hierarchySize; i++)
|
||||
if (hierarchy[i] != base.hierarchy[i])
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
const Type* BaseObj::GetHierarchy() const
|
||||
{
|
||||
return hierarchy;
|
||||
}
|
||||
|
||||
UInt_64 BaseObj::GetHierarchySize() const
|
||||
{
|
||||
return hierarchySize;
|
||||
}
|
||||
|
||||
bool BaseObj::HasType(UInt_64 typeHashId) const
|
||||
{
|
||||
for (UInt_64 i = 0; i < hierarchySize; i++)
|
||||
if (hierarchy[i] == typeHashId)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool BaseObj::HasType(const Char_8* typeId) const
|
||||
{
|
||||
return HasType(Type::GenHash(typeId, Type::CalcSize(typeId)));
|
||||
}
|
||||
|
||||
Type BaseObj::GetType() const
|
||||
{
|
||||
return hierarchy[0];
|
||||
}
|
||||
|
||||
UInt_64 BaseObj::GetTypeIdSize() const
|
||||
{
|
||||
return hierarchy[0].GetSize();
|
||||
}
|
||||
|
||||
const Char_8* BaseObj::GetTypeId() const
|
||||
{
|
||||
return hierarchy[0].GetId();
|
||||
}
|
||||
|
||||
UInt_64 BaseObj::GetTypeHashId() const
|
||||
{
|
||||
return hierarchy[0].GetHashId();
|
||||
}
|
||||
|
||||
BaseObj* BaseObj::Clone() const
|
||||
{
|
||||
return new BaseObj(*this);
|
||||
}
|
||||
|
||||
void BaseObj::AddType(const Char_8* const id)
|
||||
{
|
||||
Type newType(id);
|
||||
|
||||
for (UInt_64 i = 0; i < hierarchySize; i++)
|
||||
if (hierarchy[i] == newType)
|
||||
return;
|
||||
|
||||
Type* result = new Type[hierarchySize + 1];
|
||||
|
||||
result[0] = (Type&&)newType;
|
||||
|
||||
for (UInt_64 i = 0; i < hierarchySize; i++)
|
||||
result[i + 1] = (Type&&)hierarchy[i];
|
||||
|
||||
hierarchySize++;
|
||||
delete[] hierarchy;
|
||||
hierarchy = result;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user