33 #ifndef ENUMERATION_STRATEGY_H 34 #define ENUMERATION_STRATEGY_H 37 #include "../Reaction.h" 40 #include <boost/cstdint.hpp> 41 #ifdef RDK_USE_BOOST_SERIALIZATION 42 #include <boost/serialization/assume_abstract.hpp> 43 #include <boost/serialization/vector.hpp> 45 #include <boost/serialization/singleton.hpp> 46 #include <boost/serialization/extended_type_info.hpp> 47 #include <boost/serialization/shared_ptr.hpp> 60 const char *
message()
const {
return _msg.c_str(); };
74 const std::vector<std::vector<T> > &bbs) {
76 for (
size_t i = 0; i < bbs.size(); ++i) sizes.push_back(bbs[i].size());
85 const std::vector<MOL_SPTR_VECT> &bbs);
126 static const boost::uint64_t EnumerationOverflow =
127 static_cast<boost::uint64_t
>(-1);
129 : m_permutation(), m_permutationSizes(), m_numPermutations() {}
133 virtual const char *
type()
const {
return "EnumerationStrategyBase"; }
143 m_permutation.resize(m_permutationSizes.size());
146 std::fill(m_permutation.begin(), m_permutation.end(), 0);
148 initializeStrategy(reaction, building_blocks);
153 virtual void initializeStrategy(
159 virtual operator bool()
const = 0;
176 virtual boost::uint64_t getPermutationIdx()
const = 0;
180 bool skip(boost::uint64_t skipCount) {
181 for (boost::uint64_t i = 0; i < skipCount; ++i) next();
189 m_permutation.resize(rgroups.size());
190 m_permutationSizes = rgroups;
192 std::fill(m_permutation.begin(), m_permutation.end(), 0);
196 friend class boost::serialization::access;
197 template <
class Archive>
198 void serialize(Archive &ar,
const unsigned int ) {
200 ar &m_permutationSizes;
201 ar &m_numPermutations;
204 #ifdef RDK_USE_BOOST_SERIALIZATION 209 #ifdef RDK_USE_BOOST_SERIALIZATION EnumerationStrategyBase()
virtual const char * type() const
RDKIT_CHEMREACTIONS_EXPORT EnumerationTypes::RGROUPS getSizesFromReactants(const std::vector< MOL_SPTR_VECT > &bbs)
void initialize(const ChemicalReaction &reaction, const EnumerationTypes::BBS &building_blocks)
virtual ~EnumerationStrategyBase()
This is a class for storing and applying general chemical reactions.
pulls in the core RDKit functionality
std::vector< boost::shared_ptr< ROMol > > MOL_SPTR_VECT
boost::uint64_t m_numPermutations
EnumerationStrategyException(const std::string &msg)
~EnumerationStrategyException()
EnumerationTypes::RGROUPS m_permutation
std::vector< MOL_SPTR_VECT > BBS
const EnumerationTypes::RGROUPS & getPosition() const
The current position in the enumeration.
RDKIT_CHEMREACTIONS_EXPORT MOL_SPTR_VECT getReactantsFromRGroups(const std::vector< MOL_SPTR_VECT > &bbs, const EnumerationTypes::RGROUPS &rgroups)
RDKIT_CHEMREACTIONS_EXPORT boost::uint64_t computeNumProducts(const EnumerationTypes::RGROUPS &sizes)
std::vector< boost::uint64_t > RGROUPS
#define RDKIT_CHEMREACTIONS_EXPORT
bool skip(boost::uint64_t skipCount)
boost::uint64_t getNumPermutations() const
EnumerationStrategyException(const char *msg)
const char * message() const
void internalInitialize(const EnumerationTypes::RGROUPS &rgroups)
EnumerationTypes::RGROUPS m_permutationSizes
class for flagging enumeration strategy errors
EnumerationTypes::RGROUPS getSizesFromBBs(const std::vector< std::vector< T > > &bbs)
Return the number of elements per input vector.