summaryrefslogtreecommitdiffhomepage
path: root/src/entity.hpp
diff options
context:
space:
mode:
authorStanislaw Halik <sthalik@misaki.pl>2022-11-18 08:59:51 +0100
committerStanislaw Halik <sthalik@misaki.pl>2022-11-18 09:00:00 +0100
commit4cf0ac3bcd8a2aa480a29ef43f2cca88c190d874 (patch)
tree249f93f044229dd010ae631a728fd068e202c6f6 /src/entity.hpp
parentba000273212cbfc26fb7fe9459d6c3814ec88a2d (diff)
pick a less awkward name for type's name
Diffstat (limited to 'src/entity.hpp')
-rw-r--r--src/entity.hpp25
1 files changed, 17 insertions, 8 deletions
diff --git a/src/entity.hpp b/src/entity.hpp
index 573529b1..c73f6721 100644
--- a/src/entity.hpp
+++ b/src/entity.hpp
@@ -16,10 +16,13 @@
#define FM_PRETTY_FUNCTION __PRETTY_FUNCTION__
#endif
-namespace floormat::entities::detail { template<typename T> static constexpr StringView typename_of_(); }
+namespace floormat::entities::detail {
+template<typename T> static constexpr StringView type_name();
+template<typename T> struct type_name_helper;
+}
namespace floormat {
-template<typename T> constexpr inline StringView typename_of = entities::detail::typename_of_<T>();
+template<typename T> constexpr inline StringView name_of = entities::detail::type_name_helper<T>::name;
} // namespace floormat
namespace floormat::entities {
@@ -80,13 +83,19 @@ concept FieldWriter = requires {
namespace detail {
template<typename T>
-static constexpr StringView typename_of_() {
+static constexpr StringView type_name() {
using namespace Corrade::Containers;
using SVF = StringViewFlag;
constexpr const char* str = FM_PRETTY_FUNCTION;
return StringView { str, Implementation::strlen_(str), SVF::Global|SVF::NullTerminated };
}
+template<typename T>
+struct type_name_helper final
+{
+ static constexpr const StringView name = type_name<T>();
+};
+
template<typename Obj, typename Type, FieldReader<Obj, Type> R>
struct read_field {
static constexpr Type read(const Obj& x, R r) { return r(x); }
@@ -183,17 +192,17 @@ struct erased_accessor final {
const erased_reader_t* reader;
const erased_writer_t* writer;
- StringView object_name, type_name;
+ StringView object_name, field_type_name;
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,
- StringView object_name, StringView type_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}, type_name{type_name},
+ object_name{object_name}, field_type_name{field_type_name},
read_fun{read_fun}, write_fun{write_fun}
{}
};
@@ -222,7 +231,7 @@ struct entity_field : entity_field_base<Obj, Type> {
constexpr erased_accessor erased() const {
using reader_t = typename erased_accessor::erased_reader_t;
using writer_t = typename erased_accessor::erased_writer_t;
- constexpr auto obj_name = typename_of<Obj>, field_name = typename_of<Type>;
+ constexpr auto obj_name = name_of<Obj>, field_name = name_of<Type>;
constexpr auto reader_fn = [](const void* obj, const reader_t* reader, void* value)
{
@@ -324,7 +333,7 @@ class entity_metadata final {
return array;
}
public:
- static constexpr StringView class_name = typename_of<T>;
+ static constexpr StringView class_name = name_of<T>;
static constexpr std::size_t size = std::tuple_size_v<entities::detail::accessors_for<T>>;
static constexpr entities::detail::accessors_for<T> accessors = T::accessors();
static constexpr auto erased_accessors = erased_helper(accessors);