Lumiera 0.pre.04
»edit your freedom«
Loading...
Searching...
No Matches
Transformer< SRC, RES > Class Template Reference

#include "lib/iter-explorer.hpp"

Description

template<class SRC, class RES>
class lib::iter_explorer::Transformer< SRC, RES >

Decorator for IterExplorer to map a transformation function on all results. The transformation function is invoked on demand, and only once per item to be treated, storing the treated result into an universal value holder buffer. The given functor is adapted in a similar way as the "expand functor", so to detect and convert the expected input on invocation.

Note
the result-type of the #yield() function must be reference, even when the TransformFunctor produces a value; otherwise we can not provide a safe operator-> on any iterator downstream. This is also the reason why the ItemWrapper is necessary, precisely because we want to support functions producing a value; it provides a safe location for this value to persist.
Warning
handling a transformer function which exposes references can be dangerous. For this reason, Transformer attempts to »dis-engage« on each copy / assignment, in order to provoke a re-invocation of the transformer function, which hopefully picks up references to the copied / moved / swapped location. Be careful though!

Definition at line 782 of file iter-explorer.hpp.

Public Types

using value_type = meta::ValueTypeBinding< RES >::value_type
 
using reference = meta::ValueTypeBinding< RES >::reference
 
using pointer = meta::ValueTypeBinding< RES >::pointer
 

Public Member Functions

template<typename FUN >
 Transformer (SRC &&dataSrc, FUN &&transformFunctor)
 
 Transformer ()=default
 
 Transformer (Transformer const &o)
 
 Transformer (Transformer &&o)
 
Transformeroperator= (Transformer changed)
 
void expandChildren ()
 refresh state when other layers manipulate the source sequence
 
bool checkPoint () const
 
reference yield () const
 
void iterNext ()
 

Friends

void swap (Transformer &t1, Transformer &t2)
 

Private Types

using TransformFunctor = function< RES(SRC &)>
 
using TransformedItem = wrapper::ItemWrapper< RES >
 

Private Member Functions

SRC & srcIter () const
 
reference invokeTransformation ()
 

Private Attributes

TransformFunctor trafo_
 
TransformedItem treated_
 

Constructor & Destructor Documentation

◆ Transformer() [1/4]

template<class SRC , class RES >
template<typename FUN >
Transformer ( SRC &&  dataSrc,
FUN &&  transformFunctor 
)
inline

Definition at line 800 of file iter-explorer.hpp.

◆ Transformer() [2/4]

template<class SRC , class RES >
Transformer ( )
default

◆ Transformer() [3/4]

template<class SRC , class RES >
Transformer ( Transformer< SRC, RES > const &  o)
inline

Definition at line 806 of file iter-explorer.hpp.

◆ Transformer() [4/4]

template<class SRC , class RES >
Transformer ( Transformer< SRC, RES > &&  o)
inline

Definition at line 811 of file iter-explorer.hpp.

Member Typedef Documentation

◆ TransformFunctor

template<class SRC , class RES >
using TransformFunctor = function<RES(SRC&)>
private

Definition at line 787 of file iter-explorer.hpp.

◆ TransformedItem

template<class SRC , class RES >
using TransformedItem = wrapper::ItemWrapper<RES>
private

Definition at line 788 of file iter-explorer.hpp.

◆ value_type

template<class SRC , class RES >
using value_type = meta::ValueTypeBinding<RES>::value_type

Definition at line 794 of file iter-explorer.hpp.

◆ reference

template<class SRC , class RES >
using reference = meta::ValueTypeBinding<RES>::reference

Definition at line 795 of file iter-explorer.hpp.

◆ pointer

template<class SRC , class RES >
using pointer = meta::ValueTypeBinding<RES>::pointer

Definition at line 796 of file iter-explorer.hpp.

Member Function Documentation

◆ operator=()

template<class SRC , class RES >
Transformer & operator= ( Transformer< SRC, RES >  changed)
inline

Definition at line 817 of file iter-explorer.hpp.

References Transformer< SRC, RES >::swap.

◆ expandChildren()

template<class SRC , class RES >
void expandChildren ( )
inline

refresh state when other layers manipulate the source sequence

Remarks
expansion replaces the current element by a sequence of "child" elements. Since we cache our transformation, we need to ensure possibly new source elements get processed

Definition at line 838 of file iter-explorer.hpp.

References ItemWrapper< TY >::reset(), and Transformer< SRC, RES >::treated_.

+ Here is the call graph for this function:

◆ checkPoint()

template<class SRC , class RES >
bool checkPoint ( ) const
inline

Definition at line 847 of file iter-explorer.hpp.

References Transformer< SRC, RES >::srcIter().

+ Here is the call graph for this function:

◆ yield()

template<class SRC , class RES >
reference yield ( ) const
inline

Definition at line 853 of file iter-explorer.hpp.

◆ iterNext()

template<class SRC , class RES >
void iterNext ( )
inline

Definition at line 859 of file iter-explorer.hpp.

References ItemWrapper< TY >::reset(), Transformer< SRC, RES >::srcIter(), and Transformer< SRC, RES >::treated_.

+ Here is the call graph for this function:

◆ srcIter()

template<class SRC , class RES >
SRC & srcIter ( ) const
inlineprivate

Definition at line 867 of file iter-explorer.hpp.

Referenced by Transformer< SRC, RES >::checkPoint(), Transformer< SRC, RES >::invokeTransformation(), and Transformer< SRC, RES >::iterNext().

+ Here is the caller graph for this function:

◆ invokeTransformation()

template<class SRC , class RES >
reference invokeTransformation ( )
inlineprivate

Definition at line 873 of file iter-explorer.hpp.

References Transformer< SRC, RES >::srcIter(), Transformer< SRC, RES >::trafo_, and Transformer< SRC, RES >::treated_.

+ Here is the call graph for this function:

Member Data Documentation

◆ trafo_

template<class SRC , class RES >
TransformFunctor trafo_
private

Definition at line 790 of file iter-explorer.hpp.

Referenced by Transformer< SRC, RES >::invokeTransformation().

◆ treated_

template<class SRC , class RES >
TransformedItem treated_
private

Friends And Related Symbol Documentation

◆ swap

template<class SRC , class RES >
void swap ( Transformer< SRC, RES > &  t1,
Transformer< SRC, RES > &  t2 
)
friend

Definition at line 823 of file iter-explorer.hpp.

Referenced by Transformer< SRC, RES >::operator=().

+ Inheritance diagram for Transformer< SRC, RES >:
+ Collaboration diagram for Transformer< SRC, RES >:

The documentation for this class was generated from the following file: