16 #ifndef odc_WriterBufferingIterator_H
17 #define odc_WriterBufferingIterator_H
19 #include "eckit/filesystem/PathName.h"
24 namespace eckit {
class PathName; }
25 namespace eckit {
class DataHandle; }
31 template <
typename I>
class Writer;
32 namespace sql {
class TableDef; }
47 double&
data(
size_t i);
54 template <
typename T>
unsigned long pass1(T&,
const T&);
110 eckit::DataHandle*
f_;
118 template <
typename T>
void pass1init(T&,
const T&);
120 std::pair<eckit::Buffer, size_t>
serializeHeader(
size_t dataSize,
size_t rowsNumber);
151 eckit::Log::debug() <<
"WriterBufferingIterator::pass1init" << std::endl;
159 size_t nCols = it->columns().size();
168 eckit::Log::debug() <<
"WriterBufferingIterator::pass1" << std::endl;
173 unsigned long nrows = 0;
174 for ( ; it != end; ++it, ++nrows)
176 if (it->isNewDataset() && it->columns() !=
columns())
178 eckit::Log::debug() <<
"WriterBufferingIterator::pass1: Change of input metadata." << std::endl;
184 writeRow(it->data(), it->columns().size());
187 eckit::Log::debug() <<
"Flushing rest of the buffer..." << std::endl;
190 eckit::Log::debug() <<
"WriterBufferingIterator::pass1: processed " << nrows <<
" row(s)." << std::endl;
191 ASSERT(
close() == 0);
static void count(void *counter, const double *data, size_t n)
int doWriteRow(core::DataStream< core::SameByteOrder > &stream, const double *values)
void missingValue(size_t i, double)
void property(std::string key, std::string value)
std::vector< eckit::PathName > outputFiles()
void setNumberOfColumns(size_t n)
unsigned char * nextRowInBuffer_
size_t rowDataSizeDoublesInternal() const
unsigned long pass1(T &, const T &)
int setBitfieldColumn(size_t index, std::string name, api::ColumnType type, eckit::sql::BitfieldDef b)
eckit::DataHandle & dataHandle()
const odc::sql::TableDef * tableDef_
std::pair< eckit::Buffer, size_t > serializeHeader(size_t dataSize, size_t rowsNumber)
WriterBufferingIterator & operator=(const WriterBufferingIterator &)
codec::CodecOptimizer codecOptimizer_
size_t * columnByteSizes_
~WriterBufferingIterator()
const core::MetaData & columns(const core::MetaData &md)
int setColumn(size_t index, std::string name, api::ColumnType type)
size_t rowDataSizeDoubles() const
WriterBufferingIterator(Owner &owner, eckit::DataHandle *, bool openDataHandle, const odc::sql::TableDef *tableDef=0)
eckit::Buffer rowsBuffer_
unsigned long gatherStats(const double *values, unsigned long count)
Writer< WriterBufferingIterator > Owner
void rowsBufferSize(size_t n)
size_t rowDataSizeDoubles_
int writeRow(const double *values, unsigned long count)
void resetColumnsBuffer()
WriterBufferingIterator(const WriterBufferingIterator &)
core::Properties properties_
unsigned long long nrows_
const core::MetaData & columns() const
void pass1init(T &, const T &)
size_t dataOffset(size_t i) const
The offset of a given column in the doubles[] data array.
std::map< std::string, std::string > Properties