Moved majority over to flint2 and updated sol2

This commit is contained in:
2020-05-06 22:32:30 +02:00
parent 748b9c76ef
commit 3b49c00df0
9 changed files with 188 additions and 44 deletions

View File

@@ -3,8 +3,8 @@
#pragma once
#include "ecs.h"
#include "iohelper/write.h"
#include "iohelper/read.h"
#include "io/write.h"
#include "io/read.h"
#include <iostream>
@@ -20,7 +20,7 @@ namespace ecs::serial {
template <typename T, typename M, typename... Args>
void serialize_member(std::ostream& os, T* t, M T::*m, Args... args) {
iohelper::write<M>(os, t->*m);
io::write<M>(os, t->*m);
serialize_member(os, t, args...);
}
@@ -32,7 +32,7 @@ namespace ecs::serial {
template <typename T, typename M, typename... Args>
void deserialize_member(std::istream& is, T* t, M T::*m, Args... args) {
t->*m = iohelper::read<M>(is);
t->*m = io::read<M>(is);
deserialize_member(is, t, args...);
}

View File

@@ -1,7 +1,5 @@
#include "ecs-serial.h"
#include "/home/tim/Projects/cpp/iohelper/iohelper/include/iohelper/read.h"
#include "/home/tim/Projects/cpp/iohelper/iohelper/include/iohelper/write.h"
#include "ecs.h"
#include <ostream>
@@ -16,10 +14,10 @@ namespace ecs::serial {
void serialize(std::ostream& os, Entity* entity) {
auto uuid_data = reinterpret_cast<const uint8_t*>(entity->uuid.as_bytes().data());
iohelper::write_vector<uint8_t>(os, std::vector<uint8_t>(uuid_data, uuid_data + 16), false);
io::write<std::vector<uint8_t>>(os, std::vector<uint8_t>(uuid_data, uuid_data + 16), false);
auto components = entity->get_components();
iohelper::write_length(os, components.size());
io::write<size_t>(os, components.size());
for (auto [id, component] : components) {
if (!component->_runtime) {
auto functions = internal::functions.find(id);
@@ -27,8 +25,8 @@ namespace ecs::serial {
throw std::runtime_error("No known serializer for id");
}
iohelper::write_length(os, id);
iohelper::write<bool>(os, false);
io::write<size_t>(os, id);
io::write<bool>(os, false);
std::get<0>(internal::functions[id])(os, component);
} else {
auto new_id = component->_id;
@@ -38,17 +36,17 @@ namespace ecs::serial {
throw std::runtime_error("No known serializer for id");
}
iohelper::write_length(os, new_id);
iohelper::write<bool>(os, true);
iohelper::write_length(os, id);
io::write<size_t>(os, new_id);
io::write<bool>(os, true);
io::write<size_t>(os, id);
std::get<0>(internal::functions[new_id])(os, component);
}
}
}
void deserialize(std::istream& is, Manager& manager) {
auto uuid_vector = iohelper::read_vector<uint8_t>(is, 16);
uuids::uuid uuid(uuid_vector.begin(), uuid_vector.end());
auto uuid_array = io::read<std::array<uint8_t, 16>>(is);
uuids::uuid uuid(uuid_array.begin(), uuid_array.end());
Entity* entity = nullptr;
if (manager.has_entity(uuid)) {
@@ -59,14 +57,14 @@ namespace ecs::serial {
entity = manager.create_entity(uuid);
}
size_t component_count = iohelper::read_length(is);
size_t component_count = io::read<size_t>(is);
// std::cout << "Updating " << component_count << " components in entity: " << uuid << '\n';
for (size_t i = 0; i < component_count; ++i) {
size_t new_id = conversion[iohelper::read_length(is)];
bool runtime = iohelper::read<bool>(is);
size_t new_id = conversion[io::read<size_t>(is)];
bool runtime = io::read<bool>(is);
size_t id = new_id;
if (runtime) {
id = conversion[iohelper::read_length(is)];
id = conversion[io::read<size_t>(is)];
}
// @todo We also need to be able to remove components
@@ -106,18 +104,18 @@ namespace ecs::serial {
void serialize_ids(std::ostream& os) {
auto& ids = ComponentID::_ids();
iohelper::write_length(os, ids.size());
io::write<size_t>(os, ids.size());
for (auto& [name, id] : ids) {
iohelper::write<std::string>(os, name);
iohelper::write_length(os, id);
io::write<std::string>(os, name);
io::write<size_t>(os, id);
}
}
void deserialize_ids(std::istream& is) {
size_t id_count = iohelper::read_length(is);
size_t id_count = io::read<size_t>(is);
for (size_t i = 0; i < id_count; ++i) {
std::string name = iohelper::read<std::string>(is);
size_t id = iohelper::read_length(is);
std::string name = io::read<std::string>(is);
size_t id = io::read<size_t>(is);
conversion[id] = ComponentID::get_id({name})[0];
}