20#include <boost/utility/binary.hpp>
21#include <boost/variant.hpp>
44 const char *
what() const noexcept
override {
return _msg.c_str(); }
53 PropertyPickleOptions,
unsigned int,
56 AtomProps = 0x2, BondProps = 0x4,
59 PrivateProps = 0x10, ComputedProps = 0x20,
60 AllProps = 0x0000FFFF,
61 CoordsAsDouble = 0x00010000,
164 unsigned int propertyFlags);
169 unsigned int propertyFlags) {
170 MolPickler::pickleMol(&mol, ss, propertyFlags);
176 unsigned int propertyFlags);
179 unsigned int propertyFlags) {
180 MolPickler::pickleMol(&mol, res, propertyFlags);
185 unsigned int propertyFlags);
187 unsigned int propertyFlags) {
188 MolPickler::molFromPickle(pickle, &mol, propertyFlags);
191 MolPickler::molFromPickle(pickle, mol,
192 PicklerOps::PropertyPickleOptions::AllProps);
195 MolPickler::molFromPickle(pickle, &mol,
196 PicklerOps::PropertyPickleOptions::AllProps);
201 unsigned int propertyFlags);
203 unsigned int propertyFlags) {
204 MolPickler::molFromPickle(ss, &mol, propertyFlags);
207 MolPickler::molFromPickle(ss, mol,
208 PicklerOps::PropertyPickleOptions::AllProps);
211 MolPickler::molFromPickle(ss, &mol,
212 PicklerOps::PropertyPickleOptions::AllProps);
217 static std::int32_t _pickleAtomData(std::ostream &tss,
const Atom *atom);
219 static void _unpickleAtomData(std::istream &tss,
Atom *atom,
int version);
221 static void _pickleQueryAtomData(std::ostream &tss,
const Atom *atom);
224 template <
typename T>
225 static void _pickle(
const ROMol *mol, std::ostream &ss,
226 unsigned int propertyFlags);
229 template <
typename T>
230 static void _pickleAtom(std::ostream &ss,
const Atom *atom);
233 template <
typename T>
234 static void _pickleBond(std::ostream &ss,
const Bond *bond,
235 std::map<int, int> &atomIdxMap);
238 template <
typename T>
239 static void _pickleSSSR(std::ostream &ss,
const RingInfo *ringInfo,
240 std::map<int, int> &atomIdxMap);
243 template <
typename T>
244 static void _pickleSubstanceGroup(std::ostream &ss,
246 std::map<int, int> &atomIdxMap,
247 std::map<int, int> &bondIdxMap);
250 template <
typename T>
251 static void _pickleStereo(std::ostream &ss, std::vector<StereoGroup> groups,
252 std::map<int, int> &atomIdxMap,
253 std::map<int, int> &bondIdxMap);
256 template <
typename T,
typename C>
257 static void _pickleConformer(std::ostream &ss,
const Conformer *conf);
260 template <
typename T>
261 static void _depickle(std::istream &ss,
ROMol *mol,
int version,
int numAtoms,
262 unsigned int propertyFlags);
266 template <
typename T>
267 static Atom *_addAtomFromPickle(std::istream &ss,
ROMol *mol,
269 bool directMap =
false);
272 template <
typename T>
273 static Bond *_addBondFromPickle(std::istream &ss,
ROMol *mol,
int version,
274 bool directMap =
false);
278 template <
typename T>
279 static void _addRingInfoFromPickle(
280 std::istream &ss,
ROMol *mol,
int version,
bool directMap =
false,
282 FIND_RING_TYPE::FIND_RING_TYPE_OTHER_OR_UNKNOWN);
285 template <
typename T>
286 static SubstanceGroup _getSubstanceGroupFromPickle(std::istream &ss,
287 ROMol *mol,
int version);
289 template <
typename T>
290 static void _depickleStereo(std::istream &ss,
ROMol *mol,
int version);
293 template <
typename T,
typename C>
294 static Conformer *_conformerFromPickle(std::istream &ss,
int version);
297 static void _pickleProperties(std::ostream &ss,
const RDProps &props,
298 unsigned int pickleFlags);
300 static void _unpickleProperties(std::istream &ss,
RDProps &props,
304 static void _pickleV1(
const ROMol *mol, std::ostream &ss);
306 static void _depickleV1(std::istream &ss,
ROMol *mol);
308 static void _addAtomFromPickleV1(std::istream &ss,
ROMol *mol);
310 static void _addBondFromPickleV1(std::istream &ss,
ROMol *mol);
313namespace PicklerOps {
317 std::tuple<MolPickler::Tags, int32_t, int32_t>,
318 std::tuple<MolPickler::Tags, int32_t, int32_t, int32_t, char>,
319 std::tuple<MolPickler::Tags, std::set<int32_t>>,
320 std::tuple<MolPickler::Tags, std::string>,
321 std::tuple<MolPickler::Tags, PairHolder, double>>;
Defines the Atom class and associated typedefs.
#define BETTER_ENUM(Enum, Underlying,...)
Pulls in all the query types.
Base class for all queries.
The class for representing atoms.
class for representing a bond
used to indicate exceptions whilst pickling (serializing) molecules
~MolPicklerException() noexcept override=default
const char * what() const noexcept override
MolPicklerException(const std::string msg)
MolPicklerException(const char *msg)
handles pickling (serializing) molecules
static const std::int32_t endianId
mark the endian-ness of the pickle
static void molFromPickle(std::istream &ss, ROMol *mol)
static void molFromPickle(const std::string &pickle, ROMol &mol, unsigned int propertyFlags)
static void molFromPickle(std::istream &ss, ROMol &mol, unsigned int propertyFlags)
static void pickleMol(const ROMol *mol, std::string &res, unsigned int propertyFlags)
static void molFromPickle(std::istream &ss, ROMol *mol, unsigned int propertyFlags)
constructs a molecule from a pickle stored in a stream
static void molFromPickle(const std::string &pickle, ROMol *mol)
@ ATOM_PDB_RESIDUE_TEMPFACTOR
@ QUERY_PROPERTY_WITH_VALUE
@ BEGINFINDOTHERORUNKNOWN
@ ATOM_PDB_RESIDUE_OCCUPANCY
@ ATOM_PDB_RESIDUE_SERIALNUMBER
@ ATOM_PDB_RESIDUE_INSERTIONCODE
@ ATOM_PDB_RESIDUE_RESIDUENUMBER
@ ATOM_PDB_RESIDUE_SECONDARYSTRUCTURE
@ ATOM_PDB_RESIDUE_SEGMENTNUMBER
@ ATOM_PDB_RESIDUE_RESIDUENAME
@ ATOM_PDB_RESIDUE_ALTLOC
@ ATOM_PDB_RESIDUE_CHAINID
@ ATOM_PDB_RESIDUE_ISHETEROATOM
static void pickleMol(const ROMol &mol, std::ostream &ss)
static void pickleMol(const ROMol &mol, std::string &res, unsigned int propertyFlags)
static void pickleMol(const ROMol *mol, std::ostream &ss, unsigned int propertyFlags)
static void molFromPickle(const std::string &pickle, ROMol *mol, unsigned int propertyFlags)
constructs a molecule from a pickle stored in a string
static const CustomPropHandlerVec & getCustomPropHandlers()
static void molFromPickle(const std::string &pickle, ROMol &mol)
static void setDefaultPickleProperties(unsigned int)
static const std::int32_t versionMajor
mark the pickle major version
static const std::int32_t versionMinor
mark the pickle minor version
static void molFromPickle(std::istream &ss, ROMol &mol)
static void pickleMol(const ROMol &mol, std::ostream &ss, unsigned int propertyFlags)
static void pickleMol(const ROMol *mol, std::ostream &ss)
pickles a molecule and sends the results to stream ss
static void pickleMol(const ROMol *mol, std::string &res)
pickles a molecule and adds the results to string res
static unsigned int getDefaultPickleProperties()
static void addCustomPropHandler(const CustomPropHandler &handler)
static const std::int32_t versionPatch
mark the pickle patch version
static void pickleMol(const ROMol &mol, std::string &res)
The class for representing SubstanceGroups.
#define RDKIT_GRAPHMOL_EXPORT
QueryDetails getQueryDetails(const Queries::Query< int, T const *, true > *query)
boost::variant< MolPickler::Tags, std::tuple< MolPickler::Tags, int32_t >, std::tuple< MolPickler::Tags, int32_t, int32_t >, std::tuple< MolPickler::Tags, int32_t, int32_t, int32_t, char >, std::tuple< MolPickler::Tags, std::set< int32_t > >, std::tuple< MolPickler::Tags, std::string >, std::tuple< MolPickler::Tags, PairHolder, double > > QueryDetails
FIND_RING_TYPE
A class to store information about a molecule's rings.
std::vector< std::shared_ptr< const CustomPropHandler > > CustomPropHandlerVec