43 template<
typename...ITS>
47 return std::make_tuple (
lib::explore (std::forward<ITS> (iters)) ...);
54 template<meta::tuple_like ITUP>
79 return meta::apply ([](
auto&... its) {
return (
bool(its) and ...); }
93 ,[](
auto& it){ ++it; });
110 ,[](
auto& it){ it.expandChildren(); });
118 ,[&](
auto& it){ maxDepth = std::max (maxDepth, it.depth()); });
136 template<
class...ITS>
140 auto access_result = [ ](
auto& it)->
decltype(
auto){
return *it; };
141 auto tuple_results = [&](
auto& it){
return meta::mapEach (*it, access_result); };
143 auto core = iter::ProductCore{iter::buildIterTuple (std::forward<ITS> (iters)...)};
145 return explore (std::move(core))
146 .transform (tuple_results);
150 template<
class...ITS>
154 return zip (eachNum<size_t>(), std::forward<ITS>(iters)...);
Building block for a tupeled-iterator.
void expandChildren()
delegate to the IterExplorers in the tuple
ProductCore(ITUP &&iterTup)
ITUP TAG_IterExplorer_BaseAdapter
instruct a follow-up IterAdapter not to add a BaseAdapter but rather to connect to the dispatcher fun...
ITUP & yield() const
< exposing the iterator-tuple itself as »product«
friend bool operator==(ProductCore const &cor1, ProductCore const &cor2)
Helper template(s) for creating Lumiera Forward Iterators.
Building tree expanding and backtracking evaluations within hierarchical scopes.
auto buildIterTuple(ITS &&...iters)
construction-helper: apply IterExplorer builder packaged tuple
Implementation namespace for support and library code.
auto explore(IT &&srcSeq)
start building a IterExplorer by suitably wrapping the given iterable source.
auto zip(ITS &&...iters)
Build a tuple-combining iterator builder.
auto izip(ITS &&...iters)
tuple-combining iterator prefixed by index sequence
OBJ * unConst(const OBJ *)
shortcut to save some typing when having to define const and non-const variants of member functions
Metaprogramming with tuples-of-types and the std::tuple record.