10 #ifdef RDK_THREADSAFE_SSS
11 #ifndef MULTITHREADED_MOL_SUPPLIER
12 #define MULTITHREADED_MOL_SUPPLIER
23 #include <boost/tokenizer.hpp>
28 typedef 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 unsigned int d_lastRecordId = 0;
89 std::string d_lastItemText;
90 const unsigned int d_numReaderThread = 1;
91 unsigned int d_numWriterThreads;
92 size_t d_sizeInputQueue;
93 size_t d_sizeOutputQueue;
95 ConcurrentQueue<std::tuple<std::string, unsigned int, unsigned int>>
97 ConcurrentQueue<std::tuple<ROMol *, std::string, unsigned int>>
boost::tokenizer< boost::char_separator< char > > tokenizer
#define RDKIT_FILEPARSERS_EXPORT