7 #ifndef INDIGOX_UTIL_COMBINATRONICS_HPP 8 #define INDIGOX_UTIL_COMBINATRONICS_HPP 14 using innerIter =
typename innerType::const_iterator;
23 template <
class outerIter>
25 for (; begin != end; ++begin)
26 iters.emplace_back(begin->begin(), begin->end(), begin->begin());
31 iters.emplace_back(a.begin(), a.end(), a.begin());
32 iters.emplace_back(b.begin(), b.end(), b.begin());
33 if (a.begin() == a.end() || b.begin() == b.end())
finished =
true;
40 c.reserve(
iters.size());
41 for (
auto it :
iters) c.push_back(*(it.third));
43 for (
auto it =
iters.begin();;) {
45 if (it->third == it->second) {
46 if (it + 1 ==
iters.end())
49 it->third = it->first;
62 using Iters = std::vector<IterPair>;
74 if (first == last)
return false;
76 if (first == --tmp)
return false;
79 if (first < be.first && last <= be.first)
continue;
80 if (first >= be.second && last > be.second)
continue;
83 regions.emplace_back(first, last, first);
95 bool fin_region = !std::next_permutation(be.first, be.second);
96 if (!fin_region)
return true;
ICT innerType
Definition: combinatronics.hpp:12
bool AddRegion(RandomIt first, RandomIt last)
Definition: combinatronics.hpp:72
Definition: combinatronics.hpp:10
bool operator()(innerType &c)
Definition: combinatronics.hpp:37
std::vector< IterPair > Iters
Definition: combinatronics.hpp:62
bool operator()()
Definition: combinatronics.hpp:88
RandomIt b
Definition: combinatronics.hpp:64
CartesianProduct(innerType &a, innerType &b)
Definition: combinatronics.hpp:30
Iters regions
Definition: combinatronics.hpp:66
std::vector< innerIters > innerItersC
Definition: combinatronics.hpp:16
Definition: combinatronics.hpp:59
RegionalPermutation()=delete
CartesianProduct()=delete
bool finished
Definition: combinatronics.hpp:65
bool finished
Definition: combinatronics.hpp:19
typename innerType::const_iterator innerIter
Definition: combinatronics.hpp:14
RegionalPermutation(RandomIt begin, RandomIt end)
Definition: combinatronics.hpp:69
Definition: triple.hpp:11
T type
Definition: combinatronics.hpp:11
bool first_pass
Definition: combinatronics.hpp:65
CartesianProduct(outerIter begin, outerIter end)
Definition: combinatronics.hpp:24
RandomIt e
Definition: combinatronics.hpp:64
innerItersC iters
Definition: combinatronics.hpp:18