summaryrefslogtreecommitdiffhomepage
path: root/entity/accessor.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'entity/accessor.hpp')
-rw-r--r--entity/accessor.hpp10
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>;