|
|
@@ -23,3 +23,60 @@ Next:
|
|
|
* WIP: snapshot rework
|
|
|
- snapshot: support for range-based archives
|
|
|
- update documentation to describe alternatives
|
|
|
+
|
|
|
+* WIP:
|
|
|
+ - meta: update doc
|
|
|
+ - static constexpr -> inline constexpr
|
|
|
+ - test: meta type seq/assoc traits, containers
|
|
|
+ - document meta type traits
|
|
|
+ - remove internal::find_if
|
|
|
+
|
|
|
+
|
|
|
+struct meta_view_node {
|
|
|
+ using size_type = std::size_t;
|
|
|
+ meta_type_node *(* const key_type)() ENTT_NOEXCEPT;
|
|
|
+ meta_type_node *(* const value_type)() ENTT_NOEXCEPT;
|
|
|
+ void(* const next)(meta_handle) ENTT_NOEXCEPT;
|
|
|
+ void(* const prev)(meta_handle) ENTT_NOEXCEPT;
|
|
|
+ bool(* const empty)(meta_handle) ENTT_NOEXCEPT;
|
|
|
+ void(* const clear)(meta_handle);
|
|
|
+ size_type(* const size)(meta_handle) ENTT_NOEXCEPT;
|
|
|
+ meta_any(* const begin)(meta_handle) ENTT_NOEXCEPT;
|
|
|
+ meta_any(* const end)(meta_handle) ENTT_NOEXCEPT;
|
|
|
+ meta_any(* const erase)(meta_handle, meta_handle);
|
|
|
+ meta_any(* const insert)(meta_handle, meta_any, meta_any);
|
|
|
+ bool(* const set)(meta_handle, meta_any, meta_any);
|
|
|
+ meta_any(* const get)(meta_handle, meta_any);
|
|
|
+};
|
|
|
+
|
|
|
+static meta_view_node * view() ENTT_NOEXCEPT {
|
|
|
+ if constexpr(is_container_v<Type>) {
|
|
|
+ static meta_view_node node{
|
|
|
+ []() {
|
|
|
+ if constexpr(is_sequence_container_v<Type>) {
|
|
|
+ return &internal::meta_node<typename Type::size_type>::resolve;
|
|
|
+ } else {
|
|
|
+ return &internal::meta_node<typename Type::key_type>::resolve;
|
|
|
+ }
|
|
|
+ },
|
|
|
+ &internal::meta_node<typename Type::value_type>::resolve,
|
|
|
+ nullptr, // void(* const next)(meta_handle) ENTT_NOEXCEPT;
|
|
|
+ nullptr, // void(* const prev)(meta_handle) ENTT_NOEXCEPT;
|
|
|
+ nullptr, // bool(* const empty)(meta_handle) ENTT_NOEXCEPT;
|
|
|
+ nullptr, // void(* const clear)(meta_handle);
|
|
|
+ [](meta_handle instance) -> typename meta_view_node::size_type {
|
|
|
+ return (*instance).cast<Type>().size();
|
|
|
+ }, // size_type(* const size)(meta_handle) ENTT_NOEXCEPT;
|
|
|
+ nullptr, // meta_any(* const begin)(meta_handle) ENTT_NOEXCEPT;
|
|
|
+ nullptr, // meta_any(* const end)(meta_handle) ENTT_NOEXCEPT;
|
|
|
+ nullptr, // meta_any(* const erase)(meta_handle, meta_handle);
|
|
|
+ nullptr, // meta_any(* const insert)(meta_handle, meta_any, meta_any);
|
|
|
+ nullptr, // bool(* const set)(meta_handle, meta_any, meta_any);
|
|
|
+ nullptr // meta_any(* const get)(meta_handle, meta_any);
|
|
|
+ };
|
|
|
+
|
|
|
+ return &node;
|
|
|
+ } else {
|
|
|
+ return nullptr;
|
|
|
+ }
|
|
|
+}
|