45 #ifndef LIB_DIFF_TREE_MUTATOR_DIFFMUTABLE_BINDING_H 46 #define LIB_DIFF_TREE_MUTATOR_DIFFMUTABLE_BINDING_H 79 typename SEL = decltype(std::declval<GenNode::ID>() == std::declval<X>().getID())>
86 static No_t check(...);
89 static const bool value = (
sizeof(Yes_t)==
sizeof(check<TY>(0)));
104 : __and_< meta::Unwrap<T>
105 , Is_DiffMutable<typename meta::Unwrap<T>::Type>>
110 : __or_< Is_DiffMutable<T>
111 , Is_wrapped_DiffMutable<T>>
119 template<
class TAR,
typename SEL =
void>
125 throw error::Logic (
"TreeMutator::build() .attach(collection...) : Unable to access the target element's object ID. " 126 "Please define a »Matcher« explicitly by invoking the builder function \"matchElement\".");
133 getID (ELM
const& target)
135 return meta::unwrap(target).getID();
155 attachTo (COLL& coll)
157 return _EmptyBinding<ELM>::attachTo(coll)
158 .matchElement([](
GenNode const& spec, ELM
const& elm)
type erased baseclass for building a combined hash and symbolic ID.
Abstraction or descriptor interface for a data structure exposing the ability for mutation by receivi...
virtual void buildMutator(TreeMutator::Handle buffer)=0
build a custom implementation of the TreeMutator interface, suitably wired to cause appropriate chang...
< Metafunction: does the target implement the DiffMutable interface?
Implementation namespace for support and library code.
Derived specific exceptions within Lumiera's exception hierarchy.
A handle to allow for safe »remote implantation« of an unknown subclass into a given opaque InPlaceBu...
< Metafunction: is this a DiffMutable wrapped into a smart-ptr?
Generic building block for tree shaped (meta)data structures.
Metaprogramming helper to detect if the given target class allows us to build a default »Matcher« aut...
Helpers for type detection, type rewriting and metaprogramming.
Lumiera error handling (C++ interface).
Customisable intermediary to abstract generic tree mutation operations.
Special binding implementation for lib::diff::TreeMutator, allowing to map tree diff operations onto ...
Metaprogramming helper to retrieve the object identity, whenever the target object for the diff defin...
generic data element node within a tree
Marker or capability interface: an otherwise not further disclosed data structure, which can be transformed through "tree diff messages".