mirror of
https://github.com/thunderbrewhq/common.git
synced 2025-12-12 03:02:29 +00:00
feat(datamgr): add DataMgr functions
This commit is contained in:
parent
33be859acd
commit
ff3c28bbd9
10 changed files with 202 additions and 0 deletions
3
.gitmodules
vendored
3
.gitmodules
vendored
|
|
@ -4,3 +4,6 @@
|
|||
[submodule "lib/system"]
|
||||
path = lib/system
|
||||
url = https://github.com/whoahq/system
|
||||
[submodule "lib/typhoon"]
|
||||
path = lib/typhoon
|
||||
url = https://github.com/whoahq/typhoon
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
file(GLOB COMMON_SOURCES
|
||||
"*.cpp"
|
||||
"datamgr/*.cpp"
|
||||
"datastore/*.cpp"
|
||||
"mempool/*.cpp"
|
||||
"objectalloc/*.cpp"
|
||||
|
|
@ -22,4 +23,5 @@ target_link_libraries(common
|
|||
PUBLIC
|
||||
expat-2.0
|
||||
storm
|
||||
tempest
|
||||
)
|
||||
|
|
|
|||
68
common/DataMgr.cpp
Normal file
68
common/DataMgr.cpp
Normal 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
17
common/DataMgr.hpp
Normal 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
|
||||
33
common/datamgr/CBaseManaged.hpp
Normal file
33
common/datamgr/CBaseManaged.hpp
Normal 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
|
||||
24
common/datamgr/CDataMgr.cpp
Normal file
24
common/datamgr/CDataMgr.cpp
Normal 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
|
||||
}
|
||||
24
common/datamgr/CDataMgr.hpp
Normal file
24
common/datamgr/CDataMgr.hpp
Normal 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
|
||||
29
common/datamgr/TManaged.hpp
Normal file
29
common/datamgr/TManaged.hpp
Normal 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
|
||||
|
|
@ -1,2 +1,3 @@
|
|||
add_subdirectory(squall)
|
||||
add_subdirectory(system)
|
||||
add_subdirectory(typhoon)
|
||||
|
|
|
|||
1
lib/typhoon
Submodule
1
lib/typhoon
Submodule
|
|
@ -0,0 +1 @@
|
|||
Subproject commit 36d177759d273ae599e7c99920466e4886d57a41
|
||||
Loading…
Add table
Add a link
Reference in a new issue