34 #ifndef CARTESIANPRODUCT_H
35 #define CARTESIANPRODUCT_H
72 size_t m_numPermutationsProcessed;
82 m_numPermutationsProcessed = 0;
85 virtual const char *
type()
const {
return "CartesianProductStrategy"; }
89 if (m_numPermutationsProcessed) {
92 ++m_numPermutationsProcessed;
98 return m_numPermutationsProcessed;
101 virtual operator bool()
const {
return hasNext(); }
110 ++m_numPermutationsProcessed;
113 bool hasNext()
const {
116 m_numPermutationsProcessed < rdcast<size_t>(m_numPermutations)) {
123 void next(
size_t rowToIncrement) {
124 if (!hasNext())
return;
125 m_permutation[rowToIncrement] += 1;
126 size_t max_index_of_row = m_permutationSizes[rowToIncrement] - 1;
127 if (m_permutation[rowToIncrement] > max_index_of_row) {
128 m_permutation[rowToIncrement] = 0;
129 next(rowToIncrement + 1);
134 #ifdef RDK_USE_BOOST_SERIALIZATION
135 friend class boost::serialization::access;
136 template <
class Archive>
137 void serialize(Archive &ar,
const unsigned int ) {
138 ar &boost::serialization::base_object<EnumerationStrategyBase>(*
this);
139 ar &m_numPermutationsProcessed;
145 #ifdef RDK_USE_BOOST_SERIALIZATION