#pragma once #include "utils/iterator/count.hpp" #include "utils/option.hpp" class EdgeType; // Base iterator for next() kind iterator. // T - type of return value template class IteratorBase { public: virtual ~IteratorBase(){}; virtual Option next() = 0; virtual Count count() { return Count(0, ~((size_t)0)); } template auto map(OP &&op); template auto filter(OP &&op); // Maps with call to method to() and filters with call to fill. auto to(); // Filters with call to method fill() auto fill(); // Filters with type template auto type(TYPE const &type); // For all items calls OP. template void for_all(OP &&op); };