10#ifdef RDK_BUILD_THREADSAFE_SSS
11#ifndef MULTITHREADED_MOL_SUPPLIER
12#define MULTITHREADED_MOL_SUPPLIER
23#include <boost/tokenizer.hpp>
28typedef boost::tokenizer<boost::char_separator<char>>
tokenizer;
35 MultithreadedMolSupplier() {}
36 ~MultithreadedMolSupplier()
override;
38 ROMol *next()
override;
40 bool atEnd()
override;
43 bool getEOFHitOnRead()
const {
return false; }
49 unsigned int getLastRecordId()
const;
51 std::string getLastItemText()
const;
69 MultithreadedMolSupplier(
const MultithreadedMolSupplier &);
70 MultithreadedMolSupplier &operator=(
const MultithreadedMolSupplier &);
72 void reset()
override;
73 void init()
override = 0;
74 virtual bool getEnd()
const = 0;
76 virtual bool extractNextRecord(std::string &record,
unsigned int &lineNum,
77 unsigned int &index) = 0;
79 virtual ROMol *processMoleculeRecord(
const std::string &record,
80 unsigned int lineNum) = 0;
83 std::atomic<unsigned int> d_threadCounter{1};
84 std::vector<std::thread> d_writerThreads;
85 std::thread d_readerThread;
88 std::atomic<unsigned int> d_lastRecordId =
90 std::string d_lastItemText;
91 const unsigned int d_numReaderThread = 1;
92 unsigned int d_numWriterThreads;
93 size_t d_sizeInputQueue;
94 size_t d_sizeOutputQueue;
96 ConcurrentQueue<std::tuple<std::string, unsigned int, unsigned int>>
98 ConcurrentQueue<std::tuple<ROMol *, std::string, unsigned int>>
boost::tokenizer< boost::char_separator< char > > tokenizer
#define RDKIT_FILEPARSERS_EXPORT
bool rdvalue_is(const RDValue_cast_t)