TODO 4.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. * long term feature: shared_ptr less locator and resource cache
  2. * custom allocators and EnTT allocator-aware in general (long term feature, I don't actually need it at the moment) - see #22
  3. * debugging tools (#60): the issue online already contains interesting tips on this, look at it
  4. * work stealing job system (see #100) + mt scheduler based on const awareness for types
  5. * meta: sort of meta view based on meta stuff to iterate entities, void * and meta info objects (remove runtime views, welcome reflection)
  6. * add opaque input iterators to views and groups that return tuples <entity, T &...> (proxy), multi-pass guaranteed
  7. * allow to replace std:: with custom implementations
  8. * custom (decoupled) pools ==> N-buffering, shared components, multi-model, hibitsets, and so on
  9. * add examples (and credits) from @alanjfs :)
  10. * static reflection, hint: template<> meta_type_t<Type>: meta_descriptor<name, func..., props..., etc...> (see #342)
  11. * can we write a bool conv func for entt::entity that silently compares it to null?
  12. * is it possible to make 0 the entity null?
  13. * update documentation for meta, it contains less than half of the actual feature
  14. Next:
  15. * make it easier to hook into the type system and describe how to do that to eg auto-generate meta types on first use
  16. * review multi component views to reduce instantiations once empty types are gone...
  17. * add observer functions aside observer class
  18. * WIP:
  19. - introduce the component iterators for non-contiguous collections of entities (multi component views, observers, user defined collections)
  20. * WIP: snapshot rework
  21. - snapshot: support for range-based archives
  22. - update documentation to describe alternatives
  23. * WIP:
  24. - meta: update doc
  25. - static constexpr -> inline constexpr
  26. - test: meta type seq/assoc traits, containers
  27. - document meta type traits
  28. - remove internal::find_if
  29. struct meta_view_node {
  30. using size_type = std::size_t;
  31. meta_type_node *(* const key_type)() ENTT_NOEXCEPT;
  32. meta_type_node *(* const value_type)() ENTT_NOEXCEPT;
  33. void(* const next)(meta_handle) ENTT_NOEXCEPT;
  34. void(* const prev)(meta_handle) ENTT_NOEXCEPT;
  35. bool(* const empty)(meta_handle) ENTT_NOEXCEPT;
  36. void(* const clear)(meta_handle);
  37. size_type(* const size)(meta_handle) ENTT_NOEXCEPT;
  38. meta_any(* const begin)(meta_handle) ENTT_NOEXCEPT;
  39. meta_any(* const end)(meta_handle) ENTT_NOEXCEPT;
  40. meta_any(* const erase)(meta_handle, meta_handle);
  41. meta_any(* const insert)(meta_handle, meta_any, meta_any);
  42. bool(* const set)(meta_handle, meta_any, meta_any);
  43. meta_any(* const get)(meta_handle, meta_any);
  44. };
  45. static meta_view_node * view() ENTT_NOEXCEPT {
  46. if constexpr(is_container_v<Type>) {
  47. static meta_view_node node{
  48. []() {
  49. if constexpr(is_sequence_container_v<Type>) {
  50. return &internal::meta_node<typename Type::size_type>::resolve;
  51. } else {
  52. return &internal::meta_node<typename Type::key_type>::resolve;
  53. }
  54. },
  55. &internal::meta_node<typename Type::value_type>::resolve,
  56. nullptr, // void(* const next)(meta_handle) ENTT_NOEXCEPT;
  57. nullptr, // void(* const prev)(meta_handle) ENTT_NOEXCEPT;
  58. nullptr, // bool(* const empty)(meta_handle) ENTT_NOEXCEPT;
  59. nullptr, // void(* const clear)(meta_handle);
  60. [](meta_handle instance) -> typename meta_view_node::size_type {
  61. return (*instance).cast<Type>().size();
  62. }, // size_type(* const size)(meta_handle) ENTT_NOEXCEPT;
  63. nullptr, // meta_any(* const begin)(meta_handle) ENTT_NOEXCEPT;
  64. nullptr, // meta_any(* const end)(meta_handle) ENTT_NOEXCEPT;
  65. nullptr, // meta_any(* const erase)(meta_handle, meta_handle);
  66. nullptr, // meta_any(* const insert)(meta_handle, meta_any, meta_any);
  67. nullptr, // bool(* const set)(meta_handle, meta_any, meta_any);
  68. nullptr // meta_any(* const get)(meta_handle, meta_any);
  69. };
  70. return &node;
  71. } else {
  72. return nullptr;
  73. }
  74. }