34 #ifndef CARTESIANPRODUCT_H 35 #define CARTESIANPRODUCT_H 71 size_t m_numPermutationsProcessed;
80 m_numPermutationsProcessed = 0;
83 virtual const char *
type()
const {
return "CartesianProductStrategy"; }
87 if (m_numPermutationsProcessed) {
90 ++m_numPermutationsProcessed;
96 return m_numPermutationsProcessed; }
98 virtual operator bool()
const {
return hasNext(); }
107 ++m_numPermutationsProcessed;
110 bool hasNext()
const {
113 m_numPermutationsProcessed < rdcast<size_t>(m_numPermutations)) {
120 void next(
size_t rowToIncrement) {
121 if (!hasNext())
return;
122 m_permutation[rowToIncrement] += 1;
123 size_t max_index_of_row = m_permutationSizes[rowToIncrement] - 1;
124 if (m_permutation[rowToIncrement] > max_index_of_row) {
125 m_permutation[rowToIncrement] = 0;
126 next(rowToIncrement + 1);
131 #ifdef RDK_USE_BOOST_SERIALIZATION 132 friend class boost::serialization::access;
133 template <
class Archive>
134 void serialize(Archive &ar,
const unsigned int ) {
135 ar &boost::serialization::base_object<EnumerationStrategyBase>(*this);
136 ar &m_numPermutationsProcessed;
142 #ifdef RDK_USE_BOOST_SERIALIZATION
void initialize(const ChemicalReaction &reaction, const EnumerationTypes::BBS &building_blocks)
This is a class for storing and applying general chemical reactions.
static const boost::uint64_t EnumerationOverflow
virtual boost::uint64_t getPermutationIdx() const
Returns how many permutations have been processed by this strategy.
EnumerationStrategyBase * copy() const
copy the enumeration strategy complete with current state
std::vector< MOL_SPTR_VECT > BBS
virtual const EnumerationTypes::RGROUPS & next()
The current permutation {r1, r2, ...}.
std::vector< boost::uint64_t > RGROUPS
#define RDKIT_CHEMREACTIONS_EXPORT
CartesianProductStrategy()
This is a class for enumerating reagents using Cartesian Products of.
virtual void initializeStrategy(const ChemicalReaction &, const EnumerationTypes::BBS &)
virtual const char * type() const