Skip to content

EnTT v3.13.0

Compare
Choose a tag to compare
@skypjack skypjack released this 16 Jan 15:04
· 1045 commits to master since this release

Changelog

  • config:

    • Provide coverage for user defined ENTT_ID_TYPE in the std namespace
  • container:

    • Added reverse iterators to dense_set
    • Added iterator_concept to dense map iterators
  • core:

    • Introduce any_policy
    • Add basic_any<...>::policy() member function
    • Improved is_equality_comparable[_v] to fully support optional types
    • Type-based nth_argument
    • Reduce compilation cost of type_list_unique
  • entity:

    • Reintroduced support for storage listeners in snapshot
    • Make basic_registry<...>::valid fully backward compatible
    • Specialization for single type views with exclusion lists
    • Introduced deletion_policy::swap_only mode directly managed at sparse set level
    • Added basic_sparse_set<...>::free_list to set/get the head of the free list if allowed
    • Introduced basic_sparse_set<...>::swap_only pop protected function
    • Updated entity storage to make it use swap-only deletion policy directly
    • Drop view specialization for single type with exclusion list
    • Returns scoped iterators from basic_sparse_set<...> (only useful with swap-only deletion policy)
    • Entity storage use scoped iterators with its iterable objects
    • View each function use scoped iterators from sparse sets
    • View iterators (begin/end) are scoped if needed (ie entity storage view or the like)
    • basic_storage<void>::get_allocator() works fine too
    • Storage based to_entity function to get entities from components
    • Iterator-based sort_as for sparse sets
    • Iterator-based sort_as for groups
    • basic_registry<...>::try_get doesn't create storage anymore
    • value_type for storage entity is void
    • sigh_mixin support to custom registry types
    • Added iterator_concept to view iterators
    • Added iterator_concept to groups iterators
    • Added iterator_concept to registry iterators
    • Added iterator_concept to handle iterators
    • Added iterator_concept to storage iterators
    • Full support to reserved bits on entity identifiers (ie for disabling components)
    • Shared implementation for all types of views
    • Explicit iterable and const_iterable types exposed by the registry class
    • Index based view iterators (internal change)
    • Removed basic_view::operator[] for size types to avoid forcing non-integral entity types
  • graph:

    • Added iterator_concept to adjacency matrix iterators
  • meta:

    • Introduce meta_any_policy
    • Add meta_any::policy() member function
    • Meta container support to ::reserve
    • Make basic meta container traits publicly available (with revised aPI)
    • Add meta_type::can_cast member function
    • Add meta_type::can_convert member function
    • Meta container ::rebind accepts a value rather than an any object
    • Meta container iterator support to ::rebind
    • meta_sequence_container::resize support to non default constructible types
    • basic_meta_sequence_container_traits::fixed_size available to final users
    • Correctly initialize all members of meta container wrappers
    • Added iterator_concept to meta iterators
    • Improved meta containers performance
  • process:

    • basic_scheduler<...> was fully redesigned for the better
    • In-line .then support for basic_scheduler<...>
    • Allocator-aware basic_scheduler<...>
  • resource:

    • Added iterator_concept to cache iterators

Build system

  • Make the debug build suitable for SizeBench
  • Enable more warnings on the CI
  • bzlmod support with tests

Any other business

  • Removed all previously deprecated methods
  • Updated IWYU entt.imp file
  • Make the library more C++20-friendly
  • Added a test/example on how to use reserved bits on entity identifiers
  • Clang tidy config (and cleanup, still a work-in-progress though)

Natvis support

All natvis files have been updated where necessary.

Breaking changes

  • core:

    • nth_argument accepts a type rather than a function, use decltype as needed
  • entity:

    • basic_sparse_set<...>::swap_at is now private
    • basic_storage<...>::in_use is deprecated, use basic_sparse_set<...>::free_list instead
    • Entity storage no longer has a type_traits type member
    • Sorting functions of basic_sparse_set<...> don't invoke compact automatically anymore
    • Registry based to_entity function is deprecated, use the storage based version instead
    • basic_sparse_set<...>::sort_as is deprecated, use iterator-based overload of the same function instead
    • basic_group<...>::sort_as is deprecated, use iterator-based overload of the same function instead
    • Storage entity ::pack function is deprecated, use iterator-based sort_as instead
    • basic_view::operator[] no longer available for size types to avoid forcing non-integral entity types
    • basic_sparse_set<...>::at is deprecated as ambiguous, use operator[] instead
  • meta:

    • Meta container ::rebind accepts a value rather than an any object
    • Meta container iterators no longer accept underlying iterators on construction, use rebind instead
    • basic_meta_sequence_container_traits::fixed_size required for explicit specializations

Any other business

The documentation is up-to-date and the library is battle-tested with 100% coverage as usual.
I started a long term process to reduce the number of instantiations and also speed up the compilation.
This release contains MANY changes and great improvements in this regard. Still a work in progress though.