DynaMix
1.3.7
A new take on polymorphism in C++
|
#include <common_mutation_rules.hpp>
Public Member Functions | |
virtual void | apply_to (object_type_mutation &mutation) override |
Applies the rule to a mutation. | |
Private Member Functions | |
template<typename Mixin > | |
bool | has () const |
Checks if a mixin type is present in the collection. | |
bool | has (mixin_id id) const |
template<typename Mixin > | |
void | add () |
Adds a mixin type is to the collection. | |
void | add (mixin_id id) |
template<typename Mixin > | |
void | remove () |
Removes a mixin type from the collection. | |
void | remove (mixin_id id) |
template<typename Feature > | |
bool | implements (const Feature *f) const |
Checks if a feature is implemented by any mixin in the collection. | |
template<typename Feature > | |
void | clear_all_implementing (const Feature *f) |
Clears all mixins implementing a feature from the collection. | |
void | rebuild_from_compact_mixins () |
void | check_valid_mixin (const internal::mixin_type_info &mixin_info) |
void | clear () |
Removes all elements from the collection. | |
bool | empty () const |
Checks if a collection is empty. | |
Private Attributes | |
internal::available_mixins_bitset | _mixins |
internal::mixin_type_info_vector | _compact_mixins |
A mutation rule for a bundle of mixins
If active, such rule will cause a mutation that adds one of the bundled mixins, to add all others. And mutations that remove one of them, to remove all others, respectively.
For example, if a
, b
, and c
are bundled exclusive mixins, any mutation that adds, say a
, to an object, will automatically add b
and c
to it. Respectively any mutation which removes, say, c
, will also remove a
and b
.