SourceXtractorPlusPlus 1.0.3
SourceXtractor++, the next generation SExtractor
Loading...
Searching...
No Matches
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
15namespace SourceXtractor {
16
17class FlushableOutput : public Output {
18
19public:
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();
35 }
36
37 void outputSource(const SourceInterface& source) override {
38 m_rows.emplace_back(m_source_to_row(source));
39 if (m_flush_size > 0 && m_rows.size() % m_flush_size == 0) {
40 flush();
41 }
42 }
43
44protected:
45 virtual void writeRows(const std::vector<Euclid::Table::Row>& rows) = 0;
46
47private:
50
53};
54
55}
56
57#endif /* SEIMPLEMENTATION_SEIMPLEMENTATION_OUTPUT_FLUSHABLEOUTPUT_H_ */
virtual ~FlushableOutput()=default
virtual void writeRows(const std::vector< Euclid::Table::Row > &rows)=0
FlushableOutput(SourceToRowConverter source_to_row, size_t flush_size)
std::function< Euclid::Table::Row(const SourceInterface &)> SourceToRowConverter
void outputSource(const SourceInterface &source) override
std::vector< Euclid::Table::Row > m_rows
SourceToRowConverter m_source_to_row
The SourceInterface is an abstract "source" that has properties attached to it.