86#ifndef LIB_DIFF_TREE_MUTATOR_H
87#define LIB_DIFF_TREE_MUTATOR_H
117 class TestMutationTarget;
270 static Builder<TreeMutator>
build();
297 : PAR{forward<PAR> (par)}
300 template<
typename BIN,
typename...ARGS>
304 return Builder<BIN> (BIN{forward<ARGS>(args)..., move(*
this)});
332 template<
typename CLO>
351 template<
typename CLO>
358 template<
typename CLO>
406 template<
typename BIN>
407 auto attach (BIN&& collectionBindingSetup);
430 auto ignoreAllChanges();
442 template<
typename LIS>
450 template<
typename LIS>
457 inline Builder<TreeMutator>
A handle to allow for safe »remote implantation« of an unknown subclass into a given opaque InPlaceBu...
Token or Atom with distinct identity.
Test adapter to watch and verify how the TreeMutator binds to custom tree data structures.
Customisable intermediary to abstract mutating operations on arbitrary, hierarchical object-like data...
virtual ~TreeMutator()
this is an interface
static Builder< TreeMutator > build()
DSL: start building a custom adapted tree mutator, where the operations are tied by closures or wrapp...
virtual bool accept_until(GenNode const &spec)
repeatedly accept, until after the designated location
virtual bool injectNew(GenNode const &)
establish new element at current position
virtual bool findSrc(GenNode const &)
locate designated element and accept it at current position
virtual bool completeScope()
ensure the scope addressed by this TreeMutator was processed and exhausted without mismatch
virtual bool assignElm(GenNode const &)
locate the designated target element (must be already accepted into the target sequence).
virtual bool acceptSrc(GenNode const &)
accept existing element, when matching the given spec
virtual void init()
initialisation immediately before start of diff application
TreeMutator(TreeMutator &&)=default
virtual bool mutateChild(GenNode const &, Handle)
locate the designated target element and build a suitable sub-mutator for this element into the provi...
virtual bool matchSrc(GenNode const &)
ensure the next source element matches with given spec
virtual void skipSrc(GenNode const &)
skip next src element and advance abstract source position.
type erased baseclass for building a combined hash and symbolic ID.
Types marked with this mix-in may be moved but not copied.
A front-end for using printf-style formatting.
Bare symbolic and hash ID used for accounting of asset like entries.
Lumiera error handling (C++ interface).
Generic building block for tree shaped (meta)data structures.
Preconfigured adapters for some STL container standard usage situations.
Implementation namespace for support and library code.
Mix-Ins to allow or prohibit various degrees of copying and cloning.
Helper allowing type erasure while holding the actual object inline.
generic data element node within a tree
static const Ref END
symbolic ID ref "_END_"
static const Ref ATTRIBS
symbolic ID ref "_ATTRIBS_"
Builder-DSL to create and configure a concrete TreeMutator.
auto attach(Rec::Mutator &targetTree)
set up binding to a GenNode tree: Special setup to build a concrete TreeMutator.
auto attach(BIN &&collectionBindingSetup)
set up a binding to a structure of "child objects", implemented through a typical STL container
auto onLocalChange(LIS changeListener)
attach a listener function, to be invoked on any local change.
auto change(Symbol attributeID, CLO setterClosure)
set up a binding to represent an "attribute" through a data or object field.
auto mutateAttrib(idi::BareEntryID const &rawID, CLO mutatorBuilderClosure)
auto mutateAttrib(Symbol attributeID, CLO mutatorBuilderClosure)
set up a binding for an object valued "attribute" or named scope.
Builder< BIN > chainedBuilder(ARGS &&...args)
auto onSeqChange(LIS changeListener)
attach a listener function, to be invoked on structural changes.
Marker types to indicate a literal string and a Symbol.
Helpers for type detection, type rewriting and metaprogramming.
Special binding implementation for TreeMutator, allowing to map tree diff operations onto native obje...
Special binding implementation for lib::diff::TreeMutator, allowing to map tree diff operations onto ...
Special binding implementation for TreeMutator, allowing to map tree diff operations onto an »Externa...
Special supplement for TreeMutator, to attach listeners for notification on specific changes,...
Special binding implementation for TreeMutator, allowing to accept and ignore any tree diff without t...