DynaMix  1.3.7
A new take on polymorphism in C++
Revision History

DynaMix 1.3.7

Released: 2018 Nov 11

  • Properly fixed problems with messages to methods from parent classes, removing the need for from_parent
  • User config macro DYNAMIX_NO_BAD_MULTICASTS allowing safe mutlicasts (no throwing if there's no implementation)
  • Optional split-message macros to allow message implementations to be hidden for faster compilation.
  • Renamed internal macros to start with I_ instead of underscore and capital letter

DynaMix 1.3.6

Released: 2018 Jul 07

  • New mixin feature mixin_name allows custom mixin names
  • Fixed short message macros
  • The metric object_type_info::num_objects is always on
  • Domain has a method which frees resources for unused object type infos
  • Allowed using the legacy message macros since clang and gcc may suffer increased compilation time with the new ones
  • Fixed a variable shadowing warning in domain.hpp
  • Added multi-threaded and mixin-in-namespace tests
  • Added a compiler performance benchmark
  • Improved build time of tests

DynaMix 1.3.5

Released: 2018 Mar 26

  • Fixed a leak with gcc and clang when reloading plugins

DynaMix 1.3.4

Released: 2018 Feb 26

  • Exceptions are no longer derived from std::exception
  • Added a way to refere to a message for a parent as a workaround to issue #20
  • Fixed visibility for clang builds on macOS
  • Added an optional header with message macros with short names
  • Removed noncopyable class
  • CI tests of DynaMix as a static library

DynaMix 1.3.3

Released: 2018 Feb 06

  • Added checks whether a message is implemented by a default implementation

DynaMix 1.3.2

Released: 2018 Jan 16

  • Fixed clang compilation

DynaMix 1.3.1

Released: 2018 Jan 16

  • Reduced macro-generated code by message declaration macros. Messages are now easier to debug with only a single line in the macro when stepping.
  • Fixed a bug which didn't allow message overloads on constness alone
  • Added a getter for the mutation from mutator classes
  • Improved performance tests

DynaMix 1.3.0

Released: 2017 Dec 20

  • Redesign of allocators. The new allocators are not backwards compatible.
    • Added per-object allocators which can allocate mixins for a specific object. This can be useful if you want all mixins for an object to be in a single contiguous memory block.
    • New allocators have much more flexibility as they receive more information when allocating, including a pointer to the associated object
    • New allocators can construct and destroy mixins
  • Added methods to object which allow users to replace mixins within objects
  • Split mixin_type_info into a public and private part
  • Added noexcept specifiers to some methods where appropriate

DynaMix 1.2.3

Released: 2017 Oct 28

  • Added possibility to change the library configuration via a custom config header file without editing config.hpp in the source

DynaMix 1.2.2

Released: 2017 Oct 18

  • Fixed a bug which caused a memory corruption when moving an empty object into another object

DynaMix 1.2.1

Released: 2017 Oct 15

  • Improved mutation rules: They can now be added, removed and persisted via shared pointers
  • Added object::has and object::get with const char* to query mixins by name
  • add_new_mutation_rule is now deprecated
  • Fixed library version header

DynaMix 1.2.0

Released: 2017 Aug 17

  • Introduced a new feature: Message bids
    • Overriding multicast functions is now possible
    • Added DYNAMIX_CALL_NEXT_BIDDER which works for unicasts and multicasts
    • Added bids tutorial
  • Dropped CMake 2.x support. Transition to modern CMake (3.2+)
  • Fixed a bug which caused a leak when defining an invalid type (when a mutation causes an exception to be thrown)

DynaMix 1.1.0

Released: 2017 Apr 07

  • Dropped support for an obscure optimization feature which allowed for the same mixins and messages to be defined multiple times in multiple modules (i.e. in a static library linked to those modules)
  • Fixed bug with crashes when unloading and then reloading a plugin which defines a message.
  • Fixed various bugs with unused (which no mixin features) messages:
    • obj.implements(unused_msg) caused a crash
    • unused(obj ...) cause a crash (instead of exception)
    • Crash when only a plugin uses the message
  • Added (optional) mutation thread safety; in that mutating two different objects in two different threads is now safe.
  • Added optional additional metrics to object and mixin type data to show the number of objects and mixins, respectively, of a given type.

DynaMix 1.0.4

Released: 2017 Feb 25

  • Added check for object copy safety.
  • Added two new common mutation rules bundled_mixins and dependent_mixins.

DynaMix 1.0.3

Released: 2017 Jan 26

  • Added a optional header with message macros with no arity. Its use is not recommended because it breaks all known code-completion tools.
  • Optimized around local static variables in feature registration and the domain singleton. As a result mutation is about 5% faster and, more importantly, message calls are about 12% faster.
  • Fixed some bugs in the allocator tutorial.
  • global_allocator::mixin_data_size is now constexpr

DynaMix 1.0.2

Released: 2017 Jan 16

  • Added copying of objects
  • Added num_implementers to object to check the number of mixins which implement a message
  • Added optional call to set_num_results to multicast result combinators

DynaMix 1.0.1

Released: 2016

  • Removed build tools other than CMake
  • Removed C++98/03 support. Switch to C++11 only.
  • Added default message implementations.
  • Library rebranded

DynaMix 1.0.0

Released: 2013

First official release of the library (as Boost.Mixin)