Skip to content

Releases: skypjack/entt

EnTT v3.16.0

20 Nov 09:14

Choose a tag to compare

Changelog

  • config:

    • core/attribute.h was merged with config.h
  • core:

    • ⚠️ Huge performance improvements of the entt::any class due to large internal changes with no impact on the API
    • Deprecate basic_any<...>::type() in favor of basic_any<...>::info()
    • Make stripped_type_name return empty views if name is not available
    • Add a full_type_name function to type info API
    • Break the dependency between basic_hashed_string and string_view
    • Make const char * conversion operator explicit for basic_hashed_string
    • Add typed data overloads to basic_any<...>
    • Add has_value overloads to basic_any<...>
    • Make basic_any support self-assignment smoothly
    • attribute.h is no longer a thing, as it was merged with config/config.h
  • container:

    • Transparent lookup for dense_map<...>::at
    • Slightly improved perf of all functions based on dense_map::constrained_find
    • Slightly improved perf of all functions based on dense_set::constrained_find
  • entity:

    • Deprecate basic_sparse_set<...>::type() in favor of basic_sparse_set<...>::info()
    • Full support to swap-only policies for runtime views
    • A const registry is no longer a sync point for the basic_organizer class
    • Make it possible to clear() the registry context as needed
    • Support swapping entity storage objects
    • Quit accepting (and silently discarding) arguments for empty types when invoking ::emplace on a storage
    • Quit accepting (and silently discarding) arguments for empty types when invoking ::insert on a storage
  • graph:

    • Make the graph method of the organizer class const as it should be
  • meta:

    • ⚠️ Huge performance improvements overall due to large internal changes with no impact on the API
    • Introduce meta_dynamic_extent for meta sequence containers
    • Deprecate basic_meta_sequence_container_traits::fixed_size in favor of basic_meta_sequence_container_traits::extent
    • Expose the element type in the factory API
    • Built-in name support for meta types, data and functions
    • Forward declared meta_factory and meta_ctx as it should be
    • Drop meta destructors support for perf reasons
    • Break safe-mode when uninitialized for meta data and meta func
    • Remove operator== and operator!= for meta_handle
    • Strip context-only and context-aware copy constructors from meta_handle
    • Make meta_any support self-assignment smoothly
    • Make as_is_t policy match the constness of the returned type, if any
    • Introduce as_value_t policy to force a copy of the returned value (default)
    • Allow top-level only searches for meta data and meta functions
    • Deprecate const meta_handle::operator->
    • Allow unsetting flags from a meta factory
  • poly:

    • Deprecate basic_poly<...>::type() in favor of basic_poly<...>::info()
  • process:

    • ⚠️ Complete redesign of the module
  • signal

    • Make delegate tests work in release mode (disable comdat folding)
  • tools:

    • Introduce davey, an ImGUI based viewer for entities and components (work in progress)

Build system

  • Updated IWYU version
  • Prepared workflow and build system for testbed target
  • Renamed tools.yml to analyzer.yml
  • Natvis files are now part of the source tree
  • Install natvis files along with source files if requested

Any other business

  • Removed all previously deprecated methods

Natvis support

All natvis files have been updated where necessary.

Breaking changes

  • core:

    • Deprecated basic_any<...>::type(), use basic_any<...>::info() instea0d
    • const char * conversion operator is now explicit for basic_hashed_string
  • entity:

    • Deprecated basic_sparse_set<...>::type(), use basic_sparse_set<...>::info() instead
    • Arguments are no longer accepted when invoking ::emplace on a storage for empty types
    • Arguments are no longer accepted when invoking ::insert on a storage for empty types
  • meta:

    • Deprecated basic_meta_sequence_container_traits::fixed_size, use basic_meta_sequence_container_traits::extent instead
    • Meta destructors are no longer available for perf reasons, use C++ type destructors as it should be instead
    • Meta data and functions are no longer safe to use when uninitialized, check for validity before doing so
    • Removed operator== and operator!= for meta_handle, compare underlying objects instead
    • Removed context-only and context-aware copy constructors from meta_handle because they should not exist
    • Renamed policy as_is_t to as_value_t, as_is_t still exists but it has a different meaning and behavior now
    • Deprecated const meta_handle::operator->, use non-const handles as it should be
  • poly:

    • Deprecated basic_poly<...>::type(), use basic_poly<...>::info() instead
  • process:

    • ⚠️ Complete redesign of the module

Any other business

The documentation is up-to-date and the library is battle-tested with 100% coverage as usual.

EnTT v3.15.0

19 Mar 14:24

Choose a tag to compare

Changelog

  • core

    • Skip most of vtable calls in any for references and dynamically allocated objects
    • Review any_policy values to better capture the nature of the elements stored with any
    • Added any::owner() because any_policy::owner is no longer available
    • Embedded-as-dynamic support for any (useful to transfer ownership of externally allocated objects)
    • is_iterator and is_equality_comparable review to refine them further
    • Self-moving an any puts it in a safe but unspecified state now
    • Introduce ENTT_CONSTEVAL config parameter
    • Apply consteval on appropriate hashed string related functions
  • entity:

    • deletion_policy::unspecified is now available and equal to swap_and_pop
    • Skip tombstone checks in more cases and improve performance of view iterators
    • Auto-disconnection support for reactive_mixin
    • Refined storage fallback mechanism for views to make it work across boundaries
    • Support joining views with storage objects directly
    • Introduce generate functions in the storage entity to replace emplace
    • Add generate functions to the sigh mixin to fully support storage entity
    • as_view and as_group are now copyable
    • Improved shrink_to_fit to also cleanup the sparse array of a sparse set
    • Extended basic_registry<...>::storage<T> const-correctness
    • Allow customizing component_traits based on the entity type
    • Default group template parameters for Get and Exclude lists
    • Make basic_organizer support groups too
    • Fix a bug on view packs when combining views with uninitialized filters
    • Make built-in storage mixins support custom private/protected registries
    • Support to reserved entities (see start_from on the entity storage)
    • Make to_entity work properly with stable types
  • meta:

    • meta_sequence_container::rebind is no longer available
    • meta_associative_container::rebind is no longer available
    • meta_any::base() to return a const reference to the underlying any
    • Deprecated meta_any_policy, meta_any::policy() and meta_any::data()
    • Self-contained meta_factory<T> to avoid having to go through meta<T>
    • Support taking ownership of passed in pointers on construction for meta_any
    • meta_type::from_void allows transferring ownership of elements too
    • Standalone meta_data and meta_func implementations
    • Make empty meta_data, meta_func and meta_type safe to use no matter what
    • Self-moving a meta_any puts it in a safe bug unspecified state now
    • Allow attaching const values of non-Type type to meta types
    • Make as_ref return valid objects when the underlying type is void
    • meta_any::context() returns the underling meta context
    • Deprecated multi-setters meta data support
    • Deprecated context-aware meta_getter utilities
    • Get the context from the instance in the remaining meta_getter utilities
    • Deprecated context-aware meta_invoke utilities
    • Get the context from the instance in the remaining meta_invoke utilities
    • Support deducing meta pointers like types directly
    • Early exit for typed allow_cast
  • signal:

    • Make it possible to create uninitialized sink objects
    • Updated definition for emitter::publish (no forwarding references)
    • Slightly review sink API (these changes should be backward compatible)

Build system

  • Updated IWYU version
  • Updated lcov configuration to make gtest work with lcov2
  • ENTT_INSTALL to enable/disable installation steps as needed

Any other business

  • Removed all previously deprecated methods

Natvis support

All natvis files have been updated where necessary.

Breaking changes

  • core:

    • Reviewed any_policy values with breaking changes in names to avoid subtle errors on user side
  • entity:

    • Deprecated emplace in the storage entity, use generate instead
    • component_traits accepts entity types (possibly breaking if specialized when using a custom entity type), refine specializations
  • meta:

    • meta_sequence_container::rebind was removed, use the constructor instead
    • meta_associative_container::rebind was removed, use the constructor instead
    • Deprecated meta_any_policy, use any_policy instead
    • Deprecated meta_any::policy(), use .base().policy() instead
    • Deprecated meta_any::data(), use .base().data()
    • Deprecated meta<T>, use meta_factory<T> directly instead
    • Deprecated multi-setters meta data support, use variant or convertible types instead
    • Deprecated context-aware meta_getter utilities, rebind the handle as needed instead
    • Deprecated context-aware meta_invoke utilities, rebind the handle as needed instead

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 some changes in this regard. Still a work in progress though.

EnTT v3.14.0

23 Oct 12:57

Choose a tag to compare

Changelog

  • config:

    • ENTT_NO_MIXIN to disable the sigh mixin by default
    • Print assertion messages upon failure
  • core:

    • Avoid uninitialized length in all (corner) cases
    • Export more types as forward declarations (see fwd.hpp)
    • Lambda support for nth_argument
    • Class level new/delete support for any
    • Class level new/delete support for uninitialized_construct_using_allocator
    • Make the monostate return *this from operator=
    • Enable enable_borrowed_range/enable_view for a few types
    • Make popcount public (waiting for C++20)
    • Rename is_power_of_two to has_single_bit (waiting for C++20)
    • Introduce bit.hpp and move a few functions there (ie has_single_bit)
    • Self assignment support for basic_any<...>
  • entity:

    • Avoid unchecked refresh loops on single type views
    • Refine empty registry check in the snapshot loader constructor
    • Stop groups from swapping observed types in their pools
    • Make sparse set sort_as function return an iterator past the last shared element
    • Update registry destroy function to use sparse set sort_as internally
    • Add operator bool to runtime views
    • Assert when emplacing invalid entities through a registry
    • Improved registry valid function
    • Decouple size and next identifier in the storage entity
    • Faster and memory-friendly storage entity create-with-hint function
    • Update the tombstone class to support zero-sized versions
    • Update entity traits the fully support zero-sized versions
    • Return the correct value from sparse set push functions
    • Drop sparse set scoped iterators (ie begin(N)/end(N))
    • Add element_type to the storage class as opposed to value_type
    • Make registry traits_type type member private
    • Make sparse set traits_type type member private
    • Make storage traits_type type member private
    • Avoid using weak ranges twice in the sigh_mixin class
    • Support comparisons between basic_handle<...> and null_t
    • Reliable valid function for empty basic_handle<...>s
    • Add pointer stable types support to the snapshot loader class
    • Branch-less sparse set sort and sort_as functions
    • Branch-less centralized swap-only mode check for views
    • Refine storage log messages to avoid ambiguity
    • Introduce the new basic_table and table classes
    • In/Out edges support for basic_organizer
    • Single type view ::operator-> to get access to the underlying storage
    • All registry now assert on custom user defined entity storage
    • Add storage_policy constexpr member to all storage classes
    • Enable enable_borrowed_range/enable_view for a few types
    • Decouple all types except basic_storage from component_traits
    • Drop the Mask parameter of the basic_observer class
    • View specialization and improvements for swap-only storage
    • View specialization and improvements for swap-and-pop storage
    • View specialization and improvements for in-place storage
    • Avoid checking for filter validity when iterating views
    • Allow resetting a storage in the registry via the reset function
    • sigh_mixin automatic signal registration support for components
    • Generic bind function in the basic_sparse_set class
    • Reactive mixin and storage (designed to replace the observer class)
    • operator bool and registry functions for sigh_mixin
    • sigh_mixin transparent support to derived registries
  • graph:

    • Add an empty method to the flow class
    • Add an empty method to the adjacency_matrix class
  • meta:

    • Add is_pointer meta traits
    • Updated meta type is_pointer function to make it faster and more reliable
    • User defined traits for meta objects
    • Self assignment support for meta_any
    • User defined arbitrary data support for meta types, meta data and meta functions
    • Guaranteed execution/iteration order on overlaoded meta functions
    • Support for creating different meta types from different factories concurrently
    • Support noexcept functions whenever a free or member function is allowed
    • Improve lookup time of member objects and reduce their compile-time cost
  • poly:

    • Improve support for inherited concepts
  • resource:

    • Add reset functions to resource class
    • Support swap-ping resources
  • signal:

    • Support for free and member noexcept functions to the delegate class

Build system

  • Avoid installing include/BUILD.bazel
  • Updated IWYU version

Any other business

  • Removed all previously deprecated methods
  • Shared types in the test suite to avoid duplication
  • Full review to reduce NOLINT directives as much as possible
  • Refine linter configuration and address as many warnings as possible
  • Updated IWYU entt.imp as needed
  • Drop support to Android NDK r17
  • Drop support to MSVC toolset v141

Natvis support

All natvis files have been updated where necessary. New entries:

  • Natvis view for basic_handle class
  • Natvis view for meta_ctx class
  • Natvis view for meta_type_descriptor class
  • Natvis view for meta_custom_node class

Breaking changes

  • Sparse set scoped iterators are no longer a thing, check the deletion policy and use the free list value as needed instead
  • Registry traits_type is private, use entt_traits class and entity_type type member instead
  • Sparse set traits_type is private, use entt_traits class and entity_type type member instead
  • Storage traits_type is private, use component_traits class and value_type type member instead
  • The basic_observer class doesn't accept anymore a Mask template parameter
  • Renamed is_power_of_two to has_single_bit and moved it to bit.hpp
  • Removed support to empty each callbacks for single non-empty type views
  • Deprecate meta properties, use the new custom data support for meta types, data and functions instead
  • basic_sparse_set doesn't require anymore to wrap objects with anys when passing them to bind
  • The observer class is now deprecated, use the reactive mixin and storage instead

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 some changes in this regard. Still a work in progress though.

EnTT v3.13.2

10 Apr 06:57

Choose a tag to compare

Changelog

  • Fix an issue on the range-insert in the sigh_mixin class
  • Add full support to empty types in the snapshot classes
  • Suppress an annoying warning by clang in the snapshot classes

Any other business

The documentation is up-to-date and the library is battle-tested with 100% coverage as usual.

EnTT v3.13.1

02 Feb 09:15

Choose a tag to compare

Changelog

  • Refine the check in the constructor of the snapshot loader class
  • Avoid swapping observed types from groups
  • Don't install include/BUILD.bazel anymore

Any other business

The documentation is up-to-date and the library is battle-tested with 100% coverage as usual.

EnTT v3.13.0

16 Jan 15:04

Choose a tag to compare

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.

EnTT v3.12.2

23 Jun 08:44

Choose a tag to compare

Changelog

  • Avoid warnings due to deprecated functions in the snapshot classes
  • Make basic_registry<...>::valid fully backward compatible

Any other business

The documentation is up-to-date and the library is battle-tested with 100% coverage as usual.

EnTT v3.12.1

20 Jun 09:33

Choose a tag to compare

Changelog

  • Reintroduce support to storage listeners for snapshot classes
  • Add some tests to avoid future regressions on the snapshot classes
  • Update the single include file to the last version as it ought to be

Any other business

The documentation is up-to-date and the library is battle-tested with 100% coverage as usual.

EnTT v3.12.0

15 Jun 09:49

Choose a tag to compare

Changelog

  • config:

    • ENTT_FAIL(msg) as an alias of ENTT_ASSERT(false, msg)
  • core:

    • is_equality_comparable also detects C-style arrays
    • Added value_list_index[_v], value_list_unique[_t], value_list_contains[_v] and value_list_diff[_t]
    • std::tuple traits specialization for entt::type_list and entt::value_list
  • entity:

    • All group types are copyable and movable
    • View filter storage classes are now available (see ::storage)
    • Group filter storage classes are now available (see ::storage)
    • Propagate the allocator to the registry context
    • sigh_helper utility to simplify connecting multiple listeners to a registry
    • Public basic_sparse_set<...>::traits_type type member
    • Public basic_storage<...>::traits_type type member
    • Public basic_registry<...>::traits_type type member
    • component_traits treat void properly as any other component type
    • Split entt_traits and basic_entt_traits to simplify specializing the former
    • Make entity_mask and version_mask available through entt_traits
    • Add entt_traits::base_type for the final user (not used internally)
    • Make basic_registry work properly with void component type
    • Handles discard their entities on destruction
    • Improved removing/erasing elements when a sigh_mixin is attached to a storage
    • Added internal, opaque data function to sparse set iterators
    • Additional internal virtual clear_all function available in the basic_sparse_set<...> class
    • Improved performance of sparse set remove, erase and clear functions
    • Improved performance of registry remove, erase, clear and destroy functions
    • deletion_policy is now publicly available via entity/fwd.hpp
    • Added basic_sparse_set<...>::contiguous function
    • extended_storage_iterator::base makes the underlying iterator available
    • extended_view_iterator::base makes the underlying iterator available
    • extended_group_iterator::base makes the underlying iterator available
    • Added a specialization of basic_storage when the value type is also the entity type (entity storage)
    • Entities have their own storage in a registry and it's accessible as storage<entity_type>()
    • Sigh mixin also supports entity storage types (to send signals on entity creation/destruction/update)
    • Exclude-only like views are also supported because of the entity storage
    • added basic_entt_traits::next returns the next valid version of an identifier
    • Refined transparent aggregate support for storage types
    • Deprecated the following functions in the registry class:
      • basic_registry<...>::size() (use .storage<E>().size() instead)
      • basic_registry<...>::alive() (use .storage<E>().in_use() instead)
      • basic_registry<...>::reserve(cap) (use .storage<E>().reserve(cap) instead)
      • basic_registry<...>::capacity() (use .storage<E>().capacity() instead)
      • basic_registry<...>::empty() (use .storage<E>().in_use() instead)
      • basic_registry<...>::data() (use .storage<E>().data() instead)
      • basic_registry<...>::released() (use .storage<E>().in_use() and .storage<E>().size() instead)
      • basic_registry<...>::release(args...) (use .storage<E>().erase(args) and .storage<E>().bump(entt) instead)
      • basic_registry<...>::assign(args...) (use .storage<Entity>().push(first, last) and .storage<Entity>().in_use(len) instead)
      • basic_registry<...>::each(args...) (use .storage<Entity>().each() instead)
    • basic_sparse_set<...>::bump returns the version in use
    • basic_storage<...>::insert returns an iterator to the range of inserted elements
    • Storage based groups fully support multiple storage of the same type now
    • Huge internal rework to reduce the dependencies between the registry and the group classes/handlers
    • All group types have a .handle() function to return a reference to the leading storage
    • basic_registry<...>::group is no longer [[nodiscard]]
    • Configurable mask type for basic_observer
    • Allocator support for basic_observer
    • get_t, owned_t and exclude_t are (constexpr constructible) types now rather than aliases of type_list
    • basic_storage uses allocator_traits::destroy now rather than std::destroy_at (to allow specializations if needed)
    • Make basic_registry<...>::storage_for_type<...> available to the final user
    • basic_view<..>::operator bool returns true only for fully initialized views
    • Uninitialized views behave correctly in all circumstances, returning the expected result on each call
    • Views support swapping their storage or setting them lazily
    • View packs fully support empty views finally
    • basic_registry<...> doesn't instantiate temporary static storage on const function anymore
    • on_construct/on_update/on_destroy of basic_registry<...> also support named pools
    • Added a reverse each function (reach, worst name ever) to all storage classes
    • basic_registry<...>::erase_if to conditionally erase elements from their storage
    • Deprecated the following functions in the snapshot classes:
      • entities() (use get<Entity>() instead)
      • component<...>(...) (use get<T>(...) instead)
      • shrink, no longer required
    • General purpose ::get<T>(...) function for snapshot classes that works with storage types
    • Runtime pools support for snapshot classes (see ::get<T>(...) for further details)
    • Drop multi-type archive function requirement for snapshot classes
  • graph:

    • Allocator type propagates to the graph type returned by flow::graph() calls
  • locator:

    • Support for opaque structures
  • meta:

    • It's now possible to update the value of a meta property at any time (non-const meta_any ref)
    • Full support to meta member functions for primitive types
    • operator==/!= for meta_handle
    • operator==/!= for meta_data
    • operator==/!= for meta_prop
    • operator==/!= for meta_func
  • process:

    • Introduced basic_scheduler with default delta type for common cases
    • Turn scheduler into an alias for basic_scheduler<std::uint32_t>
  • signal:

    • Added delegate::target to get a pointer to the stored callable function
    • Refined transparent aggregate support for the dispatcher class
    • delegate also supports functions that skip first elements (on second attempt only)
    • Allow disconnecting listeners during iterations over the sigh class

Build system

  • Bump IWYU version to 0.19
  • Bump CMake version to 3.15.7
  • Enable documentation diagnostic for Clang
  • Increase CI warning level to /W1 on Windows
  • Add GCC11 to the list of compilers directly checked by the CI

Any other business

  • Suppress a few warnings due to unused variables in corner cases
  • More [[nodiscard]] where it makes sense (i.e. any_cast or meta_type::from_void)
  • Better allocator support with additional runtime checks for corner cases

Natvis support

All natvis files have been updated where necessary.

Breaking changes

  • entity:

    • ignore_as_empty_v doesn't exist anymore, use component_traits<...>::page_size instead
    • entt_traits::reserved is no longer available, combine entity_mask and version_mask instead
    • basic_sparse_set<...>::swap_at is now a protected function, override swap_or_move as needed instead
    • basic_sparse_set<...>::move_element doesn't exist anymore, use swap_or_move instead (with checks on to if needed)
    • sigh_storage_mixin was renamed into sigh_mixin
    • basic_sparse_set<...>::emplace was renamed to push
    • basic_sparse_set<...>::insert was renamed to push
    • basic_sparse_set<...>::get was renamed to value
    • basic_sparse_set<...>::sort was renamed to sort_as
    • basic_group<...>::sort (no callback overload) was renamed to sort_as
    • basic_registry<...>::base_type was renamed to common_type
    • basic_group<...>::base_type was renamed to common_type
    • runtime_view<...>::base_type was renamed to common_type
    • basic_view<...>::base_type was renamed to common_type
    • Nested groups are no longer supported (the pain is not worth the gain)
    • basic_view<...>::storage<...>() returns a (possibly null) pointer rather than a reference
    • basic_view<...>::handle() returns a (possibly null) pointer rather than a reference
    • basic_group<...>::storage<...>() returns a (possibly null) pointer rather than a reference
    • basic_view<...>::refresh() is a self-contained, non-const function that changes the view in-place
    • basic_view<...>::use<T>() is a self-contained, non-const function that changes the view in-place
  • process:

    • scheduler no longer requires a template parameter, use basic_scheduler if std::uint32_t isn't a good enough delta type
  • signal:

    • disconnect by reference is no longer available on the sink class, use the overload that accepts a pointer instead
    • sink<...>::before is no longer supported, no alternative provided

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.

EnTT v3.11.1

02 Dec 08:35

Choose a tag to compare

Changelog

  • Suppress a bunch of warnings due to unused variables or the like in corner cases
  • Avoid requiring to include storage.hpp when forward declaring a view

Any other business

The documentation is up-to-date and the library is battle-tested with 100% coverage as usual.