32#ifndef RDK_SUBSTRUCT_LIBRARY_SERIALIZATION
33#define RDK_SUBSTRUCT_LIBRARY_SERIALIZATION
35#ifdef RDK_USE_BOOST_SERIALIZATION
37#include <boost/archive/text_oarchive.hpp>
38#include <boost/archive/text_iarchive.hpp>
39#include <boost/serialization/vector.hpp>
40#include <boost/serialization/shared_ptr.hpp>
41#include <boost/archive/archive_exception.hpp>
48namespace serialization {
50template <
class Archive>
51void serialize(Archive &, RDKit::MolHolderBase &,
const unsigned int) {}
53template <
class Archive>
54void save(Archive &ar,
const RDKit::MolHolder &molholder,
55 const unsigned int version) {
56 ar &boost::serialization::base_object<RDKit::MolHolderBase>(molholder);
59 std::int64_t pkl_count = molholder.
getMols().size();
62 for (
auto &mol : molholder.
getMols()) {
72template <
class Archive>
73void load(Archive &ar, RDKit::MolHolder &molholder,
74 const unsigned int version) {
75 ar &boost::serialization::base_object<RDKit::MolHolderBase>(molholder);
77 std::vector<boost::shared_ptr<RDKit::ROMol>> &mols = molholder.
getMols();
81 std::int64_t pkl_count = -1;
84 for (std::int64_t i = 0; i < pkl_count; ++i) {
87 mols.push_back(boost::make_shared<RDKit::ROMol>(pkl));
94template <
class Archive,
class MolHolder>
95void serialize_strings(Archive &ar, MolHolder &molholder,
96 const unsigned int version) {
98 ar &boost::serialization::base_object<RDKit::MolHolderBase>(molholder);
99 ar & molholder.getMols();
102template <
class Archive>
103void serialize(Archive &ar, RDKit::CachedMolHolder &molholder,
104 const unsigned int version) {
105 serialize_strings(ar, molholder, version);
108template <
class Archive>
109void serialize(Archive &ar, RDKit::CachedSmilesMolHolder &molholder,
110 const unsigned int version) {
111 serialize_strings(ar, molholder, version);
114template <
class Archive>
115void serialize(Archive &ar, RDKit::CachedTrustedSmilesMolHolder &molholder,
116 const unsigned int version) {
117 serialize_strings(ar, molholder, version);
120template <
class Archive>
121void save(Archive &ar,
const RDKit::FPHolderBase &fpholder,
122 const unsigned int version) {
124 std::vector<std::string> pickles;
126 pickles.push_back(fp->toString());
131template <
class Archive>
132void load(Archive &ar, RDKit::FPHolderBase &fpholder,
133 const unsigned int version) {
135 std::vector<std::string> pickles;
139 for (
size_t i = 0; i < fps.size(); ++i) {
144 for (
auto &pkl : pickles) {
145 fps.push_back(
new ExplicitBitVect(pkl));
149template <
class Archive>
150void serialize(Archive &ar, RDKit::PatternHolder &pattern_holder,
151 const unsigned int version) {
153 ar &boost::serialization::base_object<RDKit::FPHolderBase>(pattern_holder);
154 if (Archive::is_saving::value &&
157 }
else if (Archive::is_loading::value) {
160 }
catch (boost::archive::archive_exception &) {
166template <
class Archive>
167void serialize(Archive &ar, RDKit::TautomerPatternHolder &pattern_holder,
168 const unsigned int version) {
170 ar &boost::serialization::base_object<RDKit::FPHolderBase>(pattern_holder);
174template <
class Archive>
175void serialize(Archive &, RDKit::KeyHolderBase &,
const unsigned int) {}
177template <
class Archive>
178void serialize(Archive &ar, RDKit::KeyFromPropHolder &key_holder,
179 const unsigned int) {
180 ar &boost::serialization::base_object<RDKit::KeyHolderBase>(key_holder);
185template <
class Archive>
186void registerSubstructLibraryTypes(Archive &ar) {
187 ar.register_type(
static_cast<RDKit::MolHolder *
>(
nullptr));
188 ar.register_type(
static_cast<RDKit::CachedMolHolder *
>(
nullptr));
189 ar.register_type(
static_cast<RDKit::CachedSmilesMolHolder *
>(
nullptr));
190 ar.register_type(
static_cast<RDKit::CachedTrustedSmilesMolHolder *
>(
nullptr));
191 ar.register_type(
static_cast<RDKit::PatternHolder *
>(
nullptr));
192 ar.register_type(
static_cast<RDKit::TautomerPatternHolder *
>(
nullptr));
193 ar.register_type(
static_cast<RDKit::KeyFromPropHolder *
>(
nullptr));
196template <
class Archive>
197void save(Archive &ar,
const RDKit::SubstructLibrary &slib,
198 const unsigned int version) {
200 registerSubstructLibraryTypes(ar);
207template <
class Archive>
208void load(Archive &ar, RDKit::SubstructLibrary &slib,
209 const unsigned int version) {
211 registerSubstructLibraryTypes(ar);
#define RDUNUSED_PARAM(x)
Concrete class that holds binary cached molecules in memory.
Concrete class that holds smiles strings in memory.
Concrete class that holds trusted smiles strings in memory.
Base FPI for the fingerprinter used to rule out impossible matches.
std::vector< ExplicitBitVect * > & getFingerprints()
std::vector< std::string > & getKeys()
std::string & getPropName()
Base class API for holding molecules to substructure search.
Concrete class that holds molecules in memory.
std::vector< boost::shared_ptr< ROMol > > & getMols()
static void pickleMol(const ROMol *mol, std::ostream &ss)
pickles a molecule and sends the results to stream ss
const unsigned int & getNumBits() const
static unsigned int defaultNumBits()
Substructure Search a library of molecules.
boost::shared_ptr< MolHolderBase > & getMolHolder()
Get the underlying molecule holder implementation.
boost::shared_ptr< FPHolderBase > & getFpHolder()
Get the underlying molecule holder implementation.
boost::shared_ptr< KeyHolderBase > & getKeyHolder()
Get the underlying molecule holder implementation.
const std::vector< unsigned int > & getSearchOrder() const
void resetHolders()
access required for serialization
RDKIT_MOLSTANDARDIZE_EXPORT void serialize(RWMOL_SPTR_PAIR output, PipelineResult &result, const PipelineOptions &options)