10#ifdef RDK_BUILD_THREADSAFE_SSS
11#ifndef MULTITHREADED_MOL_SUPPLIER
12#define MULTITHREADED_MOL_SUPPLIER
42 using readCallBackFn_t =
43 std::function<std::string(
const std::string &,
unsigned int)>;
44 using nextCallBackFn_t =
45 std::function<void(RWMol &,
const MultithreadedMolSupplier &)>;
46 using writeCallBackFn_t =
47 std::function<void(RWMol &,
const std::string &,
unsigned int)>;
50 ConcurrentQueue<std::tuple<std::string, unsigned int, unsigned int>>;
52 ConcurrentQueue<std::tuple<RWMol *, std::string, unsigned int>>;
55 unsigned int numWriterThreads = 1;
56 size_t sizeInputQueue = 5;
57 size_t sizeOutputQueue = 5;
60 MultithreadedMolSupplier() {}
64 ~MultithreadedMolSupplier()
override { close(); }
70 std::unique_ptr<RWMol> next() final;
77 virtual
bool getEOFHitOnRead() const = 0;
83 unsigned int getLastRecordId() const;
86 std::
string getLastItemText() const;
96 void setNextCallback(nextCallBackFn_t cb) { nextCallback = cb; }
105 void setWriteCallback(writeCallBackFn_t cb) { writeCallback = cb; }
113 void setReadCallback(readCallBackFn_t cb) { readCallback = cb; }
122 void initFromSettings(
bool takeOwnership, const Parameters ¶ms);
125 virtual
bool extractNextRecord(std::
string &record,
unsigned int &lineNum,
126 unsigned int &index) = 0;
129 virtual std::unique_ptr<RWMol> processMoleculeRecord(
130 const std::
string &record,
unsigned int lineNum) = 0;
133 std::atomic<
unsigned int> d_lastRecordId = 0;
136 unsigned int d_currentRecordId = 1;
139 std::unique_ptr<inputQueue_t> d_inputQueue;
142 std::unique_ptr<outputQueue_t> d_outputQueue;
167 MultithreadedMolSupplier(const MultithreadedMolSupplier &) = delete;
169 MultithreadedMolSupplier &operator=(const MultithreadedMolSupplier &) =
172 std::atomic<
bool> df_started = false;
173 std::atomic<
bool> df_forceStop = false;
175 std::mutex d_threadCounterMutex;
176 unsigned int d_threadEndCounter{1};
177 std::vector<std::thread> d_writerThreads;
178 std::thread d_readerThread;
180 std::string d_lastItemText;
182 readCallBackFn_t readCallback =
nullptr;
183 nextCallBackFn_t nextCallback =
nullptr;
184 writeCallBackFn_t writeCallback =
nullptr;
#define RDKIT_FILEPARSERS_EXPORT