1 #ifndef DBALLE_VALUES_H 2 #define DBALLE_VALUES_H 8 #include <dballe/fwd.h> 9 #include <dballe/value.h> 18 template<
typename Value>
22 typedef typename std::vector<Value>::const_iterator const_iterator;
23 typedef typename std::vector<Value>::iterator iterator;
26 std::vector<Value> m_values;
28 iterator insert_new(
Value&& val);
37 const_iterator begin()
const {
return m_values.begin(); }
38 const_iterator end()
const {
return m_values.end(); }
39 const_iterator cbegin()
const {
return m_values.cbegin(); }
40 const_iterator cend()
const {
return m_values.cend(); }
41 iterator begin() {
return m_values.begin(); }
42 iterator end() {
return m_values.end(); }
45 size_t size()
const {
return m_values.size(); }
46 bool empty()
const {
return m_values.empty(); }
47 void clear() {
return m_values.clear(); }
48 void reserve(
typename std::vector<Value>::size_type size) { m_values.reserve(size); }
56 void set(std::unique_ptr<wreport::Var>&&);
59 void set(
Value&& val);
71 template<
typename C,
typename T>
void set(
const C& code,
const T& val) { this->
set(
newvar(code, val)); }
73 template<
typename C,
typename T>
74 void setf(
const C& code,
const T& val)
78 this->
set(std::move(
var));
86 const Value&
value(
const std::string& code)
const {
return value(resolve_varcode(code)); }
126 template<
typename C,
typename T> T
enq(C code,
const T& def)
145 void move_to(std::function<
void(std::unique_ptr<wreport::Var>)> dest);
148 void print(FILE* out)
const;
153 std::vector<uint8_t>
encode()
const;
163 static void decode(
const std::vector<uint8_t>& buf, std::function<
void(std::unique_ptr<wreport::Var>)> dest);
166 extern template struct ValuesBase<Value>;
167 extern template struct ValuesBase<DBValue>;
178 using ValuesBase<Value>::ValuesBase;
194 using ValuesBase<DBValue>::ValuesBase;
203 bool vars_equal(
const DBValues& o)
const;
211 for (
auto& val : m_values)
212 val.data_id = MISSING_INT;
216 std::ostream& operator<<(std::ostream&,
const Values&);
217 std::ostream& operator<<(std::ostream&,
const DBValues&);
void move_to(std::function< void(std::unique_ptr< wreport::Var >)> dest)
Move all the Var passing them to the given function.
void move_to_attributes(wreport::Var &dest)
Move all the Var as attributes to dest.
const wreport::Var & var(wreport::Varcode code) const
Lookup a wreport::Var, throwing an exception if not found.
void unset(wreport::Varcode code)
Remove one variable.
const wreport::Var * maybe_var(wreport::Varcode code) const
Lookup a variable, returning nullptr if not found.
std::vector< uint8_t > encode() const
Encode these values in a DB-All.e specific binary representation.
Create wreport variables from the DB-All.e B table.
std::unique_ptr< wreport::Var > newvar(C code, const T &val)
Create a new Var, from the DB-All.e B table, with value.
Definition: var.h:63
Collection of DBValue objects, indexed by wreport::Varcode.
Definition: values.h:191
void merge(const ValuesBase< Value > &vals)
Add all the variables from vals.
wreport::Varcode resolve_varcode(const char *name)
Resolve a variable name to a varcode proper, dealing with aliases and validation. ...
const Value & value(wreport::Varcode code) const
Lookup a value, throwing an exception if not found.
static void decode(const std::vector< uint8_t > &buf, std::function< void(std::unique_ptr< wreport::Var >)> dest)
Decode variables from a DB-All.e specific binary representation.
static std::vector< uint8_t > encode_attrs(const wreport::Var &var)
Encode the attributes of var in a DB-All.e specific binary representation.
void print(FILE *out) const
Print the contents of this Values.
Container for a wreport::Var pointer.
Definition: value.h:18
void setf(const char *val)
T enq(C code, const T &def)
Get the value of a variable, or def if it is not set.
Definition: values.h:126
void clear_ids()
Reset all the database IDs.
Definition: values.h:209
const Value * maybe_value(wreport::Varcode code) const
Lookup a value, returning nullptr if not found.
Collection of Value objects, indexed by wreport::Varcode.
Definition: values.h:176