C++ API#

Metkit is primarily a C++ library. This page documents the main public C++ interfaces.

The MarsRequest class#

metkit::mars::MarsRequest is the central data structure of the library: it represents a single MARS request (a verb plus a set of keyword parameters and their values) that can be parsed, inspected and manipulated.

class MarsRequest#

Public Functions

MarsRequest()#
explicit MarsRequest(const std::string&)#
explicit MarsRequest(eckit::Stream&, bool lowercase = false)#
MarsRequest(const std::string&, const std::map<std::string, std::string>&)#
MarsRequest(const std::string&, const eckit::Value&)#
explicit MarsRequest(const eckit::message::Message&)#
~MarsRequest() = default#
bool operator<(const MarsRequest &other) const#
const std::string &operator[](const std::string&) const#
operator eckit::Value() const#
const std::string &verb() const#
size_t countValues(const std::string&) const#
bool has(const std::string&) const#
bool is(const std::string &param, const std::string &value) const#
const std::vector<std::string> &values(const std::string&, bool emptyOk = false) const#
std::optional<std::reference_wrapper<const std::vector<std::string>>> get(const std::string &keyword) const#
template<class T>
size_t getValues(const std::string &name, std::vector<T> &v, bool emptyOk = false) const#
void getParams(std::vector<std::string>&) const#
std::vector<std::string> params() const#
inline std::list<Parameter> &parameters()#
inline const std::list<Parameter> &parameters() const#
void verb(const std::string&)#
void values(const std::string&, const std::vector<std::string>&)#
template<class T>
void setValue(const std::string &name, const T &value)#
void setValue(const std::string &name, const char *value)#
void unsetValues(const std::string&)#
std::vector<MarsRequest> split(const std::string &keys) const#

Splits a MARS request into multiple requests along the provided key.

std::vector<MarsRequest> split(const std::vector<std::string> &keys) const#

Splits a MARS request into multiple requests along the indicated keys.

void merge(const MarsRequest &other)#

Merges one MarsRequest into another

Todo:

Improve performance &#8212; uses O(N^2) search / merge in std::list’s

MarsRequest subset(const std::set<std::string>&) const#

Create a new MarsRequest from this one with only the given set of keys.

void json(eckit::JSON&, bool array = false) const#
void md5(eckit::MD5&) const#
void dump(std::ostream&, const char *cr = "\n", const char *tab = "\t", bool verb = true) const#
void setValuesTyped(Type*, const std::vector<std::string>&)#
bool filter(const MarsRequest &filter)#
bool matches(const MarsRequest &filter) const#
bool empty() const#
size_t count() const#
MarsRequest extract(const std::string &category) const#
void erase(const std::string &param)#
std::string asString() const#

Public Static Functions

static MarsRequest parse(const std::string &s, bool strict = false)#
static std::vector<MarsRequest> parse(std::istream&, bool strict = false)#
static const MarsRequest &fromOpaque(const metkit_marsrequest_t *request)#

Implementation in api/metkit_c.cc.