From 28449ce459900bd88527ed424c4297b4cd936fe6 Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Fri, 18 Nov 2022 15:55:10 +0100 Subject: entity/field: add field name to erased accessor --- entity/accessor.hpp | 11 +++++------ entity/field.hpp | 15 ++++++++------- 2 files changed, 13 insertions(+), 13 deletions(-) (limited to 'entity') diff --git a/entity/accessor.hpp b/entity/accessor.hpp index a097afd4..b88b6686 100644 --- a/entity/accessor.hpp +++ b/entity/accessor.hpp @@ -13,17 +13,16 @@ struct erased_accessor final { const erased_reader_t* reader; const erased_writer_t* writer; - StringView object_name, field_type_name; + StringView field_name, object_type, field_type; void(*read_fun)(const Object*, const erased_reader_t*, Value*); void(*write_fun)(Object*, const erased_writer_t*, Value*); constexpr erased_accessor(const erased_accessor&) = default; - constexpr erased_accessor(erased_reader_t* reader, erased_writer_t * writer, + constexpr erased_accessor(erased_reader_t* reader, erased_writer_t * writer, StringView field_name, StringView object_name, StringView field_type_name, void(*read_fun)(const Object*, const erased_reader_t*, Value*), void(*write_fun)(Object*, const erased_writer_t*, Value*)) : - reader{reader}, writer{writer}, - object_name{object_name}, field_type_name{field_type_name}, + reader{reader}, writer{writer}, field_name{field_name}, object_type{object_name}, field_type{field_type_name}, read_fun{read_fun}, write_fun{write_fun} {} @@ -55,8 +54,8 @@ constexpr bool erased_accessor::check_name() const noexcept { static_assert(check_name_static()); constexpr auto obj = name_of, field = name_of; - return (obj.data() == object_name.data() && field.data() == field_type_name.data()) || - obj == object_name && field == field_type_name; + return (obj.data() == object_type.data() && field.data() == field_type.data()) || + obj == object_type && field == field_type; } template diff --git a/entity/field.hpp b/entity/field.hpp index 9b64da56..4e18493d 100644 --- a/entity/field.hpp +++ b/entity/field.hpp @@ -4,11 +4,9 @@ #include "util.hpp" #include #include -#include #include #include #include -#include #include #include #include @@ -178,24 +176,27 @@ constexpr erased_accessor entity_field::erased() const using writer_t = typename erased_accessor::erased_writer_t; constexpr auto obj_name = name_of, field_name = name_of; - constexpr auto reader_fn = [](const void* obj, const reader_t* reader, void* value) - { + constexpr auto reader_fn = [](const void* obj, const reader_t* reader, void* value) { const auto& obj_ = *reinterpret_cast(obj); const auto& reader_ = *reinterpret_cast(reader); auto& value_ = *reinterpret_cast(value); value_ = read(reader_, obj_); }; - constexpr auto writer_fn = [](void* obj, const writer_t* writer, void* value) - { + constexpr auto writer_fn = [](void* obj, const writer_t* writer, void* value) { auto& obj_ = *reinterpret_cast(obj); const auto& writer_ = *reinterpret_cast(writer); move_qualified value_ = std::move(*reinterpret_cast(value)); write(writer_, obj_, value_); }; + constexpr auto writer_stub_fn = [](void*, const writer_t*, void*) { + fm_abort("no writer for this accessor"); + }; + return erased_accessor { (void*)&reader, writer ? (void*)&writer : nullptr, + name, obj_name, field_name, - reader_fn, writer_fn, + reader_fn, writer ? writer_fn : writer_stub_fn, }; } -- cgit v1.2.3