C++ Reference
Global Settings
-
class Settings
Provides access to global settings and version utility methods
Public Static Functions
-
static void treatIntegersAsDoubles(bool flag)
Sets treatment of integers in ODB-2 data as doubles
- Parameters:
flag – Whether to treat integers as doubles (true) or longs (false)
-
static long integerMissingValue()
Returns the value that identifies a missing integer
- Returns:
Missing integer value
-
static void setIntegerMissingValue(long val)
Sets the value that identifies a missing integer
- Parameters:
val – Missing integer value
-
static double doubleMissingValue()
Returns the value that identifies a missing double
- Returns:
Missing double value
-
static void setDoubleMissingValue(double val)
Sets the value that identifies a missing double
- Parameters:
val – Missing double value
-
static const std::string &version()
Returns release version of the library in human-readable format, e.g.
1.3.0- Returns:
Release version
-
static const std::string &gitsha1()
Returns version control checksum of the latest change, e.g.
a88011c007a0db48a5d16e296934a197eac2050a- Returns:
Version control checksum
-
static void treatIntegersAsDoubles(bool flag)
Values and Types
-
enum odc::api::ColumnType
Identifies the type of data encoded in a column
Values:
-
enumerator IGNORE
Specifies that the column is ignored (invalid for real data)
-
enumerator INTEGER
Specifies the column contains integer data
-
enumerator REAL
Specifies the column contains 32-bit floating point values
-
enumerator STRING
Specifies the column contains character (string) data
-
enumerator BITFIELD
Specifies the column contains bitfield data
-
enumerator DOUBLE
Specifies the column contains 64-bit floating point values
-
enumerator IGNORE
-
struct ColumnInfo
Describes a column and the data encoded in it
Public Members
-
std::string name = {}
Column name
-
ColumnType type = {}
Column data type
-
size_t decodedSize = {}
Size of a single decoded value in bytes
-
struct Bit
Describes a bit or bit group in a bitfield
-
std::string name = {}
-
typedef StridedDataT<char> odc::api::StridedData
Describes the layout of periodic data in memory (mutable)
-
typedef StridedDataT<const char> odc::api::ConstStridedData
Describes the layout of periodic data in memory (const)
-
template<typename value_type>
class StridedDataT Describes the layout of periodic data in memory. This is the template base class for the StridedData and ConstStridedData types.
Public Functions
-
inline StridedDataT(void_arg_t data, size_t nelem, size_t dataSize, size_t stride)
Constructor
- Parameters:
data – Data array
nelem – Number of data elements
dataSize – Size of each data element
stride – Size between periodic data elements
-
inline StridedDataT<value_type> slice(size_t rowOffset, size_t nrows)
Returns a new object which references a contiguous subset of the data elements of the original
- Parameters:
rowOffset – Data element offset where to start slicing
nrows – Number of data elements to slice
- Returns:
Subset of current data
-
inline size_t nelem() const
Returns number of data elements
- Returns:
Number of data elements
-
inline size_t dataSize() const
Returns size of each data element
- Returns:
Size of each data element
-
inline size_t stride() const
Returns size between periodic data elements
- Returns:
Size between periodic data elements
-
inline value_type *get(int i)
Returns the address of the i’th data element (mutable)
- Parameters:
i – Periodic offset
- Returns:
Target mutable data element
-
inline const_value_type *get(int i) const
Returns the address of the i’th data element (const)
- Parameters:
i – Periodic offset
- Returns:
Target constant data element
-
inline void fill(int sourceRow, int finalRow)
Copy the value contained in one data element into the following contiguous elements.
- Parameters:
sourceRow – Source data element offset
finalRow – Target data element offset
-
inline bool isNewValue(size_t row) const
Checks if data element differs from the previous data element
- Parameters:
row – Data element offset to check
<em>True</em> – if data element does not exist yet, false otherwise
-
inline StridedDataT(void_arg_t data, size_t nelem, size_t dataSize, size_t stride)
Reader API
-
class Reader
Owns the ODB-2 data stream and controls associated resources. The Reader object gives access to the sequence of frames.
Public Functions
-
Reader(const std::string &path, bool aggregated = true, long rowlimit = -1)
Construct from file path
- Parameters:
path – File path to open
aggregated – Whether to aggregate compatible data into a logical frame
rowlimit – Maximum number of rows to aggregate into one logical frame
-
Reader(eckit::DataHandle &dh, bool aggregated = true, long rowlimit = -1)
Construct from data handle reference. This does not take ownership of the data handle, and managing the lifetime of this data handle is the responsibility of the caller.
- Parameters:
dh – Data handle (eckit)
aggregated – Whether to aggregate compatible data into a logical frame
rowlimit – Maximum number of rows to aggregate into one logical frame
-
Reader(eckit::DataHandle *dh, bool aggregated = true, long rowlimit = -1)
Construct via data handle pointer. This takes ownership of the DataHandle.
- Parameters:
dh – Data handle (eckit)
aggregated – Whether to aggregate compatible data into a logical frame
rowlimit – Maximum number of rows to aggregate into one logical frame
-
Reader(const std::string &path, bool aggregated = true, long rowlimit = -1)
Frame Handling
-
class Frame
Provides a viewport onto a chunk of contiguous, compatible data within the ODB-2 stream. This may be a logical Frame comprising multiple underlying frames in the data stream.
Public Functions
-
size_t rowCount() const
Returns number of rows in current frame
- Returns:
Number of rows
-
size_t columnCount() const
Returns number of columns in current frame
- Returns:
Number of columns
-
eckit::Offset offset() const
Returns current frame data offset within the data stream owned by the Reader
- Returns:
Frame offset
-
const std::vector<ColumnInfo> &columnInfo() const
Returns current frame column information
- Returns:
Column information
-
bool hasColumn(const std::string &name) const
Checks if frame has a named column
- Parameters:
name – Column name
- Returns:
True if named column exists, false otherwise
-
Frame filter(const std::string &sql)
Filters current frame according to an SQL-like query and returns another frame object (which owns its own attached memory buffer) buffer
- Parameters:
sql – SQL query
- Returns:
Frame object attached to a memory buffer
-
eckit::Buffer encodedData()
Returns the encoded data of the current frame
- Returns:
Encoded frame data
-
Span span(const std::vector<std::string> &columns, bool onlyConstantValues) const
Returns a Span object describing the range of values in the Frame associated with the specified columns, without decoding the frame.
- Parameters:
columns – List of column names
onlyConstantValues – Introduces a constraint that a frame must have constant values in a column if true
- Returns:
Span object
-
const std::map<std::string, std::string> &properties() const
Returns key/value properties encoded in the current frame
- Returns:
Map object
-
size_t rowCount() const
-
class Span
Provides details of the range of values spanned by each column within a given frame
Public Functions
-
void visit(SpanVisitor &visitor) const
Visit the Span object with the specified visitor. Calls the appropriate typed method on the visitor for each column in the Span with the set of associated values.
- Parameters:
visitor – Span visitor instance
-
const std::set<long> &getIntegerValues(const std::string &column) const
Returns integer values present in the specified column
- Parameters:
column – Column name
- Returns:
Integer values
-
const std::set<double> &getRealValues(const std::string &column) const
Returns floating point values present in the specified column
- Parameters:
column – Column name
- Returns:
Real values
-
const std::set<std::string> &getStringValues(const std::string &column) const
Returns string values present in the specified column
- Parameters:
column – Column name
- Returns:
String values
-
bool operator==(const Span &rhs) const
Compare Spans for equality
- Parameters:
rhs – Reference to span object to compare with
- Returns:
Returns true if span objects are equal
-
Span &operator=(Span &&rhs)
Move assignment operator
- Parameters:
rhs – Reference to a span value to assign
-
void visit(SpanVisitor &visitor) const
-
class SpanVisitor
Provides an interface for accessing the contents of a Span class using a visitor pattern. The appropriate operator() will be called for each column with its associated values.
Public Functions
-
virtual void operator()(const std::string &columnName, const std::set<long> &vals) = 0
Method for processing long values
- Parameters:
columnName – Column name
vals – Long values
-
virtual void operator()(const std::string &columnName, const std::set<double> &vals) = 0
Method for processing double values
- Parameters:
columnName – Column name
vals – Double values
-
virtual void operator()(const std::string &columnName, const std::set<std::string> &vals) = 0
Method for processing string values
- Parameters:
columnName – Column name
vals – String values
-
virtual void operator()(const std::string &columnName, const std::set<long> &vals) = 0
Decoding Data
-
class Decoder
Specifies the ODB-2 columns to decode and the memory layout for the decoded data
Public Functions
-
Decoder(const std::vector<std::string> &columns, std::vector<StridedData> &columnFacades)
Constructor
- Parameters:
columns – The names of the columns to decode
columnFacades – A description of the periodic data layout for each named column
-
Decoder(const std::vector<std::string> &columns, std::vector<StridedData> &columnFacades)
Encoding Data
-
void odc::api::encode(eckit::DataHandle &out, const std::vector<ColumnInfo> &columns, const std::vector<ConstStridedData> &data, const std::map<std::string, std::string> &properties = {}, size_t maxRowsPerFrame = 10000)
Encodes ODB-2 into a data handle
- Parameters:
out – Data handle (eckit)
columns – Name and type specification for each column to encode
data – Description of the periodic data layout for each column to encode
properties – Dictionary of key/value properties to encode
maxRowsPerFrame – Maximum number of rows per frame
Conversion Functions
-
size_t odc::api::filter(const std::string &sql, eckit::DataHandle &in, eckit::DataHandle &out)
Filters ODB-2 data according to an SQL-like query and writes result into another data handle
Note
Depending on the query, SQL filtering may not be appropriate to do on a per-Frame basis, as aggregate values won’t behave properly. This function allows filtering of an entire data stream.
- Parameters:
sql – SQL query
in – Source data handle
out – Target data handle
- Returns:
Number of rows written
-
size_t odc::api::odbFromCSV(const std::string &in, eckit::DataHandle &dh_out, const std::string &delimiter = ",")
Imports CSV from a string into a ODB-2 data handle
- Parameters:
is – String containing CSV data
dh_out – ODB-2 data handle (eckit)
delimiter – CSV delimiter
- Returns:
Number of imported lines
-
size_t odc::api::odbFromCSV(eckit::DataHandle &dh_in, eckit::DataHandle &dh_out, const std::string &delimiter = ",")
Imports CSV from a source data handle into a ODB-2 data handle
- Parameters:
dh_in – Input data stream (CSV data)
dh_out – ODB-2 data handle (eckit)
delimiter – CSV delimiter
- Returns:
Number of imported lines
-
size_t odc::api::odbFromCSV(std::istream &is, eckit::DataHandle &dh_out, const std::string &delimiter = ",")
Imports CSV from a stream handle into a ODB-2 data handle
- Parameters:
is – Input data stream (CSV data)
dh_out – ODB-2 data handle (eckit)
delimiter – CSV delimiter
- Returns:
Number of imported lines