feat(datamgr): add DataMgr functions

This commit is contained in:
fallenoak 2023-01-01 23:27:44 -06:00 committed by GitHub
parent 33be859acd
commit ff3c28bbd9
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
10 changed files with 202 additions and 0 deletions

3
.gitmodules vendored
View file

@ -4,3 +4,6 @@
[submodule "lib/system"] [submodule "lib/system"]
path = lib/system path = lib/system
url = https://github.com/whoahq/system url = https://github.com/whoahq/system
[submodule "lib/typhoon"]
path = lib/typhoon
url = https://github.com/whoahq/typhoon

View file

@ -1,5 +1,6 @@
file(GLOB COMMON_SOURCES file(GLOB COMMON_SOURCES
"*.cpp" "*.cpp"
"datamgr/*.cpp"
"datastore/*.cpp" "datastore/*.cpp"
"mempool/*.cpp" "mempool/*.cpp"
"objectalloc/*.cpp" "objectalloc/*.cpp"
@ -22,4 +23,5 @@ target_link_libraries(common
PUBLIC PUBLIC
expat-2.0 expat-2.0
storm storm
tempest
) )

68
common/DataMgr.cpp Normal file
View file

@ -0,0 +1,68 @@
#include "common/DataMgr.hpp"
#include <storm/Error.hpp>
void DataMgrGetCoord(HDATAMGR mgr, uint32_t fieldId, C3Vector* coord) {
auto mgrPtr = reinterpret_cast<CDataMgr*>(mgr);
STORM_ASSERT(mgrPtr);
STORM_ASSERT(fieldId < mgrPtr->m_managedArray.Count());
STORM_ASSERT(mgrPtr->m_managedArray[fieldId]);
STORM_ASSERT(CBaseManaged::COORD == mgrPtr->m_managedArray[fieldId]->m_dataTypeId);
auto field = static_cast<TManaged<C3Vector>*>(mgrPtr->m_managedArray[fieldId]);
if (field->m_flags & CBaseManaged::REQUIRESUPDATE) {
if (field->m_flags & CBaseManaged::READONLY) {
// TODO
} else {
// TODO
}
}
*coord = field->m_data;
}
void DataMgrSetCoord(HDATAMGR mgr, uint32_t fieldId, const C3Vector& coord, uint32_t coordFlags) {
auto dataMgr = reinterpret_cast<CDataMgr*>(mgr);
auto typeId = CBaseManaged::COORD;
C3Vector cur = { 0.0f, 0.0f, 0.0f };
DataMgrGetCoord(mgr, fieldId, &cur);
C3Vector setTo = {
(coordFlags & 0x1) ? cur.x : coord.x,
(coordFlags & 0x2) ? cur.y : coord.y,
(coordFlags & 0x4) ? cur.z : coord.z
};
STORM_ASSERT(dataMgr);
STORM_ASSERT(fieldId < dataMgr->m_managedArray.Count());
STORM_ASSERT(dataMgr->m_managedArray[fieldId]);
STORM_ASSERT(typeId == dataMgr->m_managedArray[fieldId]->m_dataTypeId);
STORM_ASSERT(!(dataMgr->m_managedArray[fieldId]->m_flags & CBaseManaged::READONLY));
auto field = static_cast<TManaged<C3Vector>*>(dataMgr->m_managedArray[fieldId]);
field->m_updateFcn = nullptr;
field->m_updateData = nullptr;
field->m_updatePriority = 0.0f;
field->Set(setTo);
}
void DataMgrSetFloat(HDATAMGR mgr, uint32_t fieldId, float val) {
auto dataMgr = reinterpret_cast<CDataMgr*>(mgr);
auto typeId = CBaseManaged::FLOAT;
STORM_ASSERT(dataMgr);
STORM_ASSERT(fieldId < dataMgr->m_managedArray.Count());
STORM_ASSERT(dataMgr->m_managedArray[fieldId]);
STORM_ASSERT(typeId == dataMgr->m_managedArray[fieldId]->m_dataTypeId);
STORM_ASSERT(!(dataMgr->m_managedArray[fieldId]->m_flags & CBaseManaged::READONLY));
auto field = static_cast<TManaged<float>*>(dataMgr->m_managedArray[fieldId]);
field->m_updateFcn = nullptr;
field->m_updateData = nullptr;
field->m_updatePriority = 0.0f;
field->Set(val);
}

17
common/DataMgr.hpp Normal file
View file

@ -0,0 +1,17 @@
#ifndef COMMON_DATA_MGR_HPP
#define COMMON_DATA_MGR_HPP
#include "common/Handle.hpp"
#include "common/datamgr/CDataMgr.hpp"
typedef HOBJECT HDATAMGR;
class C3Vector;
void DataMgrGetCoord(HDATAMGR mgr, uint32_t fieldId, C3Vector* coord);
void DataMgrSetCoord(HDATAMGR mgr, uint32_t fieldId, const C3Vector& coord, uint32_t coordFlags);
void DataMgrSetFloat(HDATAMGR mgr, uint32_t fieldId, float val);
#endif

View file

@ -0,0 +1,33 @@
#ifndef COMMON_DATAMGR_C_BASE_MANAGED_HPP
#define COMMON_DATAMGR_C_BASE_MANAGED_HPP
#include <cstdint>
#include <storm/List.hpp>
class CBaseManaged {
public:
// Types
enum ManagedTypeIds {
// TODO
COORD = 3,
FLOAT = 6,
DATATYPEIDS = 7,
};
enum ManagedFlags {
ALWAYSUPDATE = 0x1,
READONLY = 0x2,
REQUIRESUPDATE = 0x4,
UPDATED = 0x8,
};
// Member variables
TSLink<CBaseManaged> m_link;
uint8_t m_dataTypeId = 0;
uint8_t m_flags = 0;
void (*m_updateFcn)(float, void*, void*) = nullptr;
void* m_updateData = nullptr;
float m_updatePriority = 0.0f;
};
#endif

View file

@ -0,0 +1,24 @@
#include "common/datamgr/CDataMgr.hpp"
void CDataMgr::AddManaged(CBaseManaged* managed, uint32_t fieldId, uint32_t flags, uint32_t dataTypeId) {
managed->m_flags = flags;
managed->m_dataTypeId = dataTypeId;
this->m_managedArray[fieldId] = managed;
if (flags & CBaseManaged::ALWAYSUPDATE) {
this->LinkManaged(managed);
}
}
void CDataMgr::AddManaged(TManaged<C3Vector>* managed, uint32_t fieldId, uint32_t flags) {
this->AddManaged(managed, fieldId, flags, CBaseManaged::COORD);
}
void CDataMgr::AddManaged(TManaged<float>* managed, uint32_t fieldId, uint32_t flags) {
this->AddManaged(managed, fieldId, flags, CBaseManaged::FLOAT);
}
void CDataMgr::LinkManaged(CBaseManaged* managed) {
// TODO
}

View file

@ -0,0 +1,24 @@
#ifndef COMMON_DATAMGR_C_DATA_MGR_HPP
#define COMMON_DATAMGR_C_DATA_MGR_HPP
#include "common/Handle.hpp"
#include "common/datamgr/CBaseManaged.hpp"
#include "common/datamgr/TManaged.hpp"
#include <storm/Array.hpp>
#include <storm/List.hpp>
#include <tempest/Vector.hpp>
class CDataMgr : public CHandleObject {
public:
// Member variables
TSFixedArray<CBaseManaged*> m_managedArray;
STORM_EXPLICIT_LIST(CBaseManaged, m_link) m_updateList;
// Member functions
void AddManaged(CBaseManaged* managed, uint32_t fieldId, uint32_t flags, uint32_t dataTypeId);
void AddManaged(TManaged<C3Vector>* managed, uint32_t fieldId, uint32_t flags);
void AddManaged(TManaged<float>* managed, uint32_t fieldId, uint32_t flags);
void LinkManaged(CBaseManaged* managed);
};
#endif

View file

@ -0,0 +1,29 @@
#ifndef COMMON_DATAMGR_T_MANAGED_HPP
#define COMMON_DATAMGR_T_MANAGED_HPP
#include "common/datamgr/CBaseManaged.hpp"
template <class T>
class TManaged : public CBaseManaged {
public:
// Member variables
T m_data;
// Virtual member functions
virtual void Set(const T& val);
// Member functions
TManaged() = default;
TManaged(const T& val)
: m_data(val) {};
};
template <class T>
void TManaged<T>::Set(const T& val) {
if (this->m_data != val) {
this->m_data = val;
this->m_flags |= CBaseManaged::UPDATED;
}
}
#endif

View file

@ -1,2 +1,3 @@
add_subdirectory(squall) add_subdirectory(squall)
add_subdirectory(system) add_subdirectory(system)
add_subdirectory(typhoon)

1
lib/typhoon Submodule

@ -0,0 +1 @@
Subproject commit 36d177759d273ae599e7c99920466e4886d57a41