diff options
Diffstat (limited to 'entity/accessor.hpp')
-rw-r--r-- | entity/accessor.hpp | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/entity/accessor.hpp b/entity/accessor.hpp index 08f5ddaf..f069cb5b 100644 --- a/entity/accessor.hpp +++ b/entity/accessor.hpp @@ -5,6 +5,8 @@ namespace floormat::entities { +enum class field_status : unsigned char { enabled, hidden, readonly, }; + struct erased_accessor final { using erased_reader_t = void; using erased_writer_t = void; @@ -18,14 +20,14 @@ struct erased_accessor final { 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*); - bool(*predicate_fun)(const Object*, const erased_predicate_t*); + field_status(*predicate_fun)(const Object*, const erased_predicate_t*); constexpr erased_accessor(const erased_accessor&) = default; constexpr erased_accessor(const erased_reader_t* reader, const erased_writer_t* writer, const erased_predicate_t* predicate, 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*), - bool(*predicate_fun)(const Object*, const erased_predicate_t*)) : + field_status(*predicate_fun)(const Object*, const erased_predicate_t*)) : reader{reader}, writer{writer}, predicate{predicate}, field_name{field_name}, object_type{object_name}, field_type{field_type_name}, read_fun{read_fun}, write_fun{write_fun}, predicate_fun{predicate_fun} @@ -44,7 +46,7 @@ struct erased_accessor final { template<typename Obj, typename FieldType> requires std::is_default_constructible_v<FieldType> FieldType read(const Obj& x) const noexcept; template<typename Obj, typename FieldType> void read(const Obj& x, FieldType& value) const noexcept; template<typename Obj, typename FieldType> void write(Obj& x, move_qualified<FieldType> value) const noexcept; - template<typename Obj> bool is_enabled(const Obj& x) const noexcept; + template<typename Obj> field_status is_enabled(const Obj& x) const noexcept; constexpr bool can_write() const noexcept { return writer != nullptr; } }; @@ -116,7 +118,7 @@ void erased_accessor::write(Obj& x, move_qualified<FieldType> value) const noexc } template<typename Obj> -bool erased_accessor::is_enabled(const Obj& x) const noexcept +field_status erased_accessor::is_enabled(const Obj& x) const noexcept { static_assert(!std::is_pointer_v<Obj> && !std::is_reference_v<Obj>); constexpr auto obj = name_of<Obj>; |