start refactoring in the name of object store
This commit is contained in:
parent
fd0b210bbb
commit
26d07b06db
@ -7,16 +7,20 @@ add_library(fragment_store
|
|||||||
./fragment_store/uuid_generator.hpp
|
./fragment_store/uuid_generator.hpp
|
||||||
./fragment_store/uuid_generator.cpp
|
./fragment_store/uuid_generator.cpp
|
||||||
|
|
||||||
./fragment_store/fragment_store_i.hpp
|
|
||||||
./fragment_store/fragment_store_i.cpp
|
|
||||||
./fragment_store/types.hpp
|
./fragment_store/types.hpp
|
||||||
./fragment_store/meta_components.hpp
|
./fragment_store/meta_components.hpp
|
||||||
./fragment_store/meta_components_id.inl
|
./fragment_store/meta_components_id.inl
|
||||||
./fragment_store/serializer.hpp
|
./fragment_store/serializer.hpp
|
||||||
./fragment_store/file2_stack.hpp
|
./fragment_store/file2_stack.hpp
|
||||||
./fragment_store/file2_stack.cpp
|
./fragment_store/file2_stack.cpp
|
||||||
|
#old
|
||||||
|
./fragment_store/fragment_store_i.hpp
|
||||||
|
./fragment_store/fragment_store_i.cpp
|
||||||
./fragment_store/fragment_store.hpp
|
./fragment_store/fragment_store.hpp
|
||||||
./fragment_store/fragment_store.cpp
|
./fragment_store/fragment_store.cpp
|
||||||
|
#new
|
||||||
|
./fragment_store/object_store.hpp
|
||||||
|
./fragment_store/object_store.cpp
|
||||||
|
|
||||||
./json/message_components.hpp # TODO: move
|
./json/message_components.hpp # TODO: move
|
||||||
./json/tox_message_components.hpp # TODO: move
|
./json/tox_message_components.hpp # TODO: move
|
||||||
|
88
src/fragment_store/object_store.cpp
Normal file
88
src/fragment_store/object_store.cpp
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
#include "./object_store.hpp"
|
||||||
|
|
||||||
|
#include "./meta_components.hpp"
|
||||||
|
|
||||||
|
#include <nlohmann/json.hpp> // this sucks
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
static bool serl_json_data_enc_type(const ObjectHandle oh, nlohmann::json& out) {
|
||||||
|
out = static_cast<std::underlying_type_t<Encryption>>(
|
||||||
|
oh.get<FragComp::DataEncryptionType>().enc
|
||||||
|
);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool deserl_json_data_enc_type(ObjectHandle oh, const nlohmann::json& in) {
|
||||||
|
oh.emplace_or_replace<FragComp::DataEncryptionType>(
|
||||||
|
static_cast<Encryption>(
|
||||||
|
static_cast<std::underlying_type_t<Encryption>>(in)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool serl_json_data_comp_type(const ObjectHandle oh, nlohmann::json& out) {
|
||||||
|
out = static_cast<std::underlying_type_t<Compression>>(
|
||||||
|
oh.get<FragComp::DataCompressionType>().comp
|
||||||
|
);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool deserl_json_data_comp_type(ObjectHandle oh, const nlohmann::json& in) {
|
||||||
|
oh.emplace_or_replace<FragComp::DataCompressionType>(
|
||||||
|
static_cast<Compression>(
|
||||||
|
static_cast<std::underlying_type_t<Compression>>(in)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
ObjectStore2::ObjectStore2(void) {
|
||||||
|
_sc.registerSerializerJson<FragComp::DataEncryptionType>(serl_json_data_enc_type);
|
||||||
|
_sc.registerDeSerializerJson<FragComp::DataEncryptionType>(deserl_json_data_enc_type);
|
||||||
|
_sc.registerSerializerJson<FragComp::DataCompressionType>(serl_json_data_comp_type);
|
||||||
|
_sc.registerDeSerializerJson<FragComp::DataCompressionType>(deserl_json_data_comp_type);
|
||||||
|
}
|
||||||
|
|
||||||
|
ObjectStore2::~ObjectStore2(void) {
|
||||||
|
}
|
||||||
|
|
||||||
|
ObjectRegistry& ObjectStore2::registry(void) {
|
||||||
|
return _reg;
|
||||||
|
}
|
||||||
|
|
||||||
|
ObjectHandle ObjectStore2::objectHandle(const Object o) {
|
||||||
|
return {_reg, o};
|
||||||
|
}
|
||||||
|
|
||||||
|
void ObjectStore2::throwEventConstruct(const Object o) {
|
||||||
|
std::cout << "OS debug: event construct " << entt::to_integral(o) << "\n";
|
||||||
|
dispatch(
|
||||||
|
ObjectStore_Event::object_construct,
|
||||||
|
ObjectStore::Events::ObjectConstruct{
|
||||||
|
ObjectHandle{_reg, o}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ObjectStore2::throwEventUpdate(const Object o) {
|
||||||
|
std::cout << "OS debug: event update " << entt::to_integral(o) << "\n";
|
||||||
|
dispatch(
|
||||||
|
ObjectStore_Event::object_update,
|
||||||
|
ObjectStore::Events::ObjectUpdate{
|
||||||
|
ObjectHandle{_reg, o}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ObjectStore2::throwEventDestroy(const Object o) {
|
||||||
|
std::cout << "OS debug: event destroy " << entt::to_integral(o) << "\n";
|
||||||
|
dispatch(
|
||||||
|
ObjectStore_Event::object_destroy,
|
||||||
|
ObjectStore::Events::ObjectUpdate{
|
||||||
|
ObjectHandle{_reg, o}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
67
src/fragment_store/object_store.hpp
Normal file
67
src/fragment_store/object_store.hpp
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <solanaceae/util/event_provider.hpp>
|
||||||
|
|
||||||
|
#include "./serializer.hpp" // TODO: get rid of the tight nljson integration
|
||||||
|
|
||||||
|
#include <entt/entity/registry.hpp>
|
||||||
|
#include <entt/entity/handle.hpp>
|
||||||
|
|
||||||
|
#include <cstdint>
|
||||||
|
|
||||||
|
// internal id
|
||||||
|
enum class Object : uint32_t {};
|
||||||
|
using ObjectRegistry = entt::basic_registry<Object>;
|
||||||
|
using ObjectHandle = entt::basic_handle<ObjectRegistry>;
|
||||||
|
|
||||||
|
namespace ObjectStore::Events {
|
||||||
|
|
||||||
|
struct ObjectConstruct {
|
||||||
|
const ObjectHandle e;
|
||||||
|
};
|
||||||
|
struct ObjectUpdate {
|
||||||
|
const ObjectHandle e;
|
||||||
|
};
|
||||||
|
struct ObjectDestory {
|
||||||
|
const ObjectHandle e;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // ObjectStore::Events
|
||||||
|
|
||||||
|
enum class ObjectStore_Event : uint16_t {
|
||||||
|
object_construct,
|
||||||
|
object_update,
|
||||||
|
object_destroy,
|
||||||
|
|
||||||
|
MAX
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ObjectStoreEventI {
|
||||||
|
using enumType = ObjectStore_Event;
|
||||||
|
|
||||||
|
virtual ~ObjectStoreEventI(void) {}
|
||||||
|
|
||||||
|
virtual bool onEvent(const ObjectStore::Events::ObjectConstruct&) { return false; }
|
||||||
|
virtual bool onEvent(const ObjectStore::Events::ObjectUpdate&) { return false; }
|
||||||
|
virtual bool onEvent(const ObjectStore::Events::ObjectDestory&) { return false; }
|
||||||
|
};
|
||||||
|
using ObjectStoreEventProviderI = EventProviderI<ObjectStoreEventI>;
|
||||||
|
|
||||||
|
struct ObjectStore2 : public ObjectStoreEventProviderI {
|
||||||
|
static constexpr const char* version {"2"};
|
||||||
|
|
||||||
|
ObjectRegistry _reg;
|
||||||
|
|
||||||
|
SerializerCallbacks<Object> _sc;
|
||||||
|
|
||||||
|
ObjectStore2(void);
|
||||||
|
virtual ~ObjectStore2(void);
|
||||||
|
|
||||||
|
ObjectRegistry& registry(void);
|
||||||
|
ObjectHandle objectHandle(const Object o);
|
||||||
|
|
||||||
|
void throwEventConstruct(const Object o);
|
||||||
|
void throwEventUpdate(const Object o);
|
||||||
|
void throwEventDestroy(const Object o);
|
||||||
|
};
|
||||||
|
|
Loading…
Reference in New Issue
Block a user