|
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.