10#ifdef RDK_BUILD_THREADSAFE_SSS
11#ifndef MULTITHREADED_SMILES_MOL_SUPPLIER
12#define MULTITHREADED_SMILES_MOL_SUPPLIER
25 :
public MultithreadedMolSupplier {
27 explicit MultithreadedSmilesMolSupplier(
28 const std::string &fileName,
const Parameters ¶ms = Parameters(),
29 const SmilesMolSupplierParams &parseParams = SmilesMolSupplierParams());
31 explicit MultithreadedSmilesMolSupplier(
32 std::istream *inStream,
bool takeOwnership =
true,
33 const Parameters ¶ms = Parameters(),
34 const SmilesMolSupplierParams &parseParams = SmilesMolSupplierParams());
36 MultithreadedSmilesMolSupplier();
38 ~MultithreadedSmilesMolSupplier() final { close(); };
40 bool getEOFHitOnRead() const final {
return false; }
43 bool extractNextRecord(std::string &record,
unsigned int &lineNum,
44 unsigned int &index)
final;
47 std::unique_ptr<RWMol> processMoleculeRecord(
const std::string &record,
48 unsigned int lineNum)
final;
51 void initFromSettings(
52 bool takeOwnership,
const Parameters ¶ms,
53 const SmilesMolSupplierParams &parseParams = SmilesMolSupplierParams());
56 void processTitleLine();
59 SmilesMolSupplierParams d_parseParams;
70 using ContainedType = v2::FileParsers::MultithreadedSmilesMolSupplier;
71 MultithreadedSmilesMolSupplier() {}
72 explicit MultithreadedSmilesMolSupplier(
73 const std::string &fileName,
const std::string &delimiter =
" \t",
74 int smilesColumn = 0,
int nameColumn = 1,
bool titleLine =
true,
75 bool sanitize =
true,
unsigned int numWriterThreads = 1,
76 size_t sizeInputQueue = 5,
size_t sizeOutputQueue = 5) {
77 v2::FileParsers::MultithreadedSmilesMolSupplier::Parameters params;
78 params.numWriterThreads = numWriterThreads;
79 params.sizeInputQueue = sizeInputQueue;
80 params.sizeOutputQueue = sizeOutputQueue;
81 v2::FileParsers::SmilesMolSupplierParams parseParams;
82 parseParams.delimiter = delimiter;
83 parseParams.smilesColumn = smilesColumn;
84 parseParams.nameColumn = nameColumn;
85 parseParams.titleLine = titleLine;
86 parseParams.parseParameters.sanitize = sanitize;
88 dp_supplier.
reset(
new v2::FileParsers::MultithreadedSmilesMolSupplier(
89 fileName, params, parseParams));
92 explicit MultithreadedSmilesMolSupplier(
93 std::istream *inStream,
bool takeOwnership =
true,
94 const std::string &delimiter =
" \t",
int smilesColumn = 0,
95 int nameColumn = 1,
bool titleLine =
true,
bool sanitize =
true,
96 unsigned int numWriterThreads = 1,
size_t sizeInputQueue = 5,
97 size_t sizeOutputQueue = 5) {
98 v2::FileParsers::MultithreadedSmilesMolSupplier::Parameters params;
99 params.numWriterThreads = numWriterThreads;
100 params.sizeInputQueue = sizeInputQueue;
101 params.sizeOutputQueue = sizeOutputQueue;
102 v2::FileParsers::SmilesMolSupplierParams parseParams;
103 parseParams.delimiter = delimiter;
104 parseParams.smilesColumn = smilesColumn;
105 parseParams.nameColumn = nameColumn;
106 parseParams.titleLine = titleLine;
107 parseParams.parseParameters.sanitize = sanitize;
109 dp_supplier.reset(
new v2::FileParsers::MultithreadedSmilesMolSupplier(
110 inStream, takeOwnership, params, parseParams));
113 bool getEOFHitOnRead()
const {
115 return static_cast<ContainedType *
>(dp_supplier.get())->getEOFHitOnRead();
124 unsigned int getLastRecordId()
const {
126 return static_cast<ContainedType *
>(dp_supplier.get())->getLastRecordId();
130 std::string getLastItemText()
const {
132 return static_cast<ContainedType *
>(dp_supplier.get())->getLastItemText();
#define PRECONDITION(expr, mess)
#define RDKIT_FILEPARSERS_EXPORT
std::vector< std::string > STR_VECT