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;
32namespace FileParsers {
38 unsigned int numWriterThreads = 1;
39 size_t sizeInputQueue = 5;
40 size_t sizeOutputQueue = 5;
43 MultithreadedMolSupplier() {}
44 ~MultithreadedMolSupplier()
override;
46 std::unique_ptr<RWMol> next()
override;
48 bool atEnd()
override;
51 bool getEOFHitOnRead()
const {
return false; }
57 unsigned int getLastRecordId()
const;
59 std::string getLastItemText()
const;
77 MultithreadedMolSupplier(
const MultithreadedMolSupplier &);
78 MultithreadedMolSupplier &operator=(
const MultithreadedMolSupplier &);
80 void reset()
override;
81 void init()
override = 0;
82 virtual bool getEnd()
const = 0;
84 virtual bool extractNextRecord(std::string &record,
unsigned int &lineNum,
85 unsigned int &index) = 0;
87 virtual RWMol *processMoleculeRecord(
const std::string &record,
88 unsigned int lineNum) = 0;
90 std::atomic<unsigned int> d_threadCounter{1};
91 std::vector<std::thread> d_writerThreads;
92 std::thread d_readerThread;
95 std::atomic<unsigned int> d_lastRecordId =
97 std::string d_lastItemText;
98 const unsigned int d_numReaderThread = 1;
100 ConcurrentQueue<std::tuple<std::string, unsigned int, unsigned int>>
102 ConcurrentQueue<std::tuple<RWMol *, std::string, unsigned int>>
114 using ContainedType = v2::FileParsers::MultithreadedMolSupplier;
115 MultithreadedMolSupplier() {}
118 bool getEOFHitOnRead()
const {
120 return static_cast<ContainedType *
>(dp_supplier.get())->getEOFHitOnRead();
129 unsigned int getLastRecordId()
const {
131 return static_cast<ContainedType *
>(dp_supplier.get())->getLastRecordId();
134 std::string getLastItemText()
const {
136 return static_cast<ContainedType *
>(dp_supplier.get())->getLastItemText();
#define PRECONDITION(expr, mess)
boost::tokenizer< boost::char_separator< char > > tokenizer
#define RDKIT_FILEPARSERS_EXPORT
bool rdvalue_is(const RDValue_cast_t)