SourceXtractorPlusPlus  0.19
SourceXtractor++, the next generation SExtractor
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
FlushableOutput.h
Go to the documentation of this file.
1 /*
2  * FlushableOutput.h
3  *
4  * Created on: Feb 8, 2022
5  * Author: mschefer
6  */
7 
8 #ifndef _SEIMPLEMENTATION_OUTPUT_FLUSHABLEOUTPUT_H_
9 #define _SEIMPLEMENTATION_OUTPUT_FLUSHABLEOUTPUT_H_
10 
11 #include "Table/Row.h"
12 
14 
15 namespace SourceXtractor {
16 
17 class FlushableOutput : public Output {
18 
19 public:
21 
22  FlushableOutput(SourceToRowConverter source_to_row, size_t flush_size)
23  : m_source_to_row(source_to_row), m_flush_size(flush_size), m_total_rows_written(0) {
24  }
25 
26  virtual ~FlushableOutput() = default;
27 
28  size_t flush() override {
29  if (!m_rows.empty()) {
31  }
33  m_rows.clear();
34  return m_total_rows_written;
35  }
36 
37  void outputSource(const SourceInterface& source) override {
39  if (m_flush_size > 0 && m_rows.size() % m_flush_size == 0) {
40  flush();
41  }
42  }
43 
44 protected:
45  virtual void writeRows(const std::vector<Euclid::Table::Row>& rows) = 0;
46 
47 private:
49  size_t m_flush_size;
50 
53 };
54 
55 }
56 
57 #endif /* SEIMPLEMENTATION_SEIMPLEMENTATION_OUTPUT_FLUSHABLEOUTPUT_H_ */
T empty(T...args)
std::vector< Euclid::Table::Row > m_rows
T clear(T...args)
SourceToRowConverter m_source_to_row
void outputSource(const SourceInterface &source) override
virtual void writeRows(const std::vector< Euclid::Table::Row > &rows)=0
T size(T...args)
virtual ~FlushableOutput()=default
FlushableOutput(SourceToRowConverter source_to_row, size_t flush_size)
The SourceInterface is an abstract &quot;source&quot; that has properties attached to it.
T emplace_back(T...args)