19  { 
_values.push_back( std::move(val_r) ); }
 
 
   21  void Array::add(
const std::initializer_list<Value> &contents_r)
 
   23    for( 
const auto &v : contents_r )
 
 
   33      str << 
", " << val->asJSON();
 
 
   44  Object::Object(
const std::initializer_list<std::pair<String, Value> > &contents_r)
 
 
   49  { 
_values.insert( std::make_pair( std::move(key_r), std::move(val_r)) ); }
 
 
   51  void Object::add(std::initializer_list<std::pair<String, Value> > contents_r)
 
   53    for( 
const auto &val : contents_r )
 
   54      add( val.first, val.second );
 
 
   68    return str << endl << 
'}';
 
 
   77    std::vector<Value> vs;
 
   78    auto range = 
_values.equal_range ( key );
 
   79    std::for_each( range.first, range.second, [&]( 
const auto &v) { vs.push_back (v.second);} );
 
 
   93  std::ostream &
Object::dumpOn(std::ostream &
str, std::map<String, Value>::const_iterator val_r)
 const 
   94  { 
return str << val_r->first << 
": " << val_r->second; }
 
 
   98    return std::visit( []( 
auto &&val ) { 
return val.asJSON(); }, 
_value );
 
 
std::ostream & dumpOn(std::ostream &str) const
Stream output.
std::vector< Value > _values
void add(Value val_r)
Push JSON Value to Array.
bool operator==(const Array &other) const
std::string asJSON() const
JSON representation.
std::ostream & dumpOn(std::ostream &str) const
Stream output.
const Value & value(const String &key) const
bool contains(const String &key) const
std::vector< Value > values(const String &key) const
std::multimap< String, Value > _values
void add(String key_r, Value val_r)
Add key/value pair.
bool operator==(const Object &other) const
std::string asJSON() const
JSON representation.
String related utilities and Regular expression matching.
Convenient building of std::string via std::ostringstream Basically a std::ostringstream autoconverti...
#define for_(IT, BEG, END)
Convenient for-loops using iterator.