libzypp 17.38.5
JsonValue.cc
Go to the documentation of this file.
1/*---------------------------------------------------------------------\
2| ____ _ __ __ ___ |
3| |__ / \ / / . \ . \ |
4| / / \ V /| _/ _/ |
5| / /__ | | | | | | |
6| /_____||_| |_| |_| |
7| |
8\---------------------------------------------------------------------*/
9
10#include "JsonValue.h"
11
12namespace zypp::json {
13
15
16 Array::Array( std::initializer_list<Value> contents_r )
17 : Array( contents_r.begin(), contents_r.end() )
18 {}
19
20 void Array::add(Value val_r)
21 { _values.push_back( std::move(val_r) ); }
22
23 void Array::add(const std::initializer_list<Value> &contents_r)
24 {
25 for( const auto &v : contents_r )
26 add( v );
27 }
28
29 std::ostream &Array::dumpOn(std::ostream &str) const
30 {
31 if ( _values.empty() )
32 return str << "[]";
33 str << '[' << _values.begin()->asJSON();
34 for( auto val = ++_values.begin(); val != _values.end(); val++ )
35 str << ", " << val->asJSON();
36 return str << ']';
37 }
38
40 {
41 return _values[n];
42 }
43
44 Array::size_type Array::size() const { return _values.size(); }
45
47 {
48 return _values[n];
49 }
50
51 bool Array::operator==(const Array &other) const
52 {
53 return (other._values == _values);
54 }
55
57
58 Object::Object(const std::initializer_list<std::pair<String, Value> > &contents_r)
59 : Object( contents_r.begin(), contents_r.end() )
60 {}
61
62 void Object::add(String key_r, Value val_r )
63 { _values.insert( std::make_pair( std::move(key_r), std::move(val_r)) ); }
64
65 void Object::add(std::initializer_list<std::pair<String, Value> > contents_r)
66 {
67 for( const auto &val : contents_r )
68 add( val.first, val.second );
69 }
70
71 std::string Object::asJSON() const
72 { return str::Str() << *this; }
73
74 std::ostream &Object::dumpOn(std::ostream &str) const
75 {
76 using std::endl;
77 if ( _values.empty() )
78 return str << "{}";
79 dumpOn( str << '{' << endl, _values.begin() );
80 for_ ( val, ++_values.begin(), _values.end() )
81 dumpOn( str << ',' << endl, val );
82 return str << endl << '}';
83 }
84
85 bool Object::contains(const String &key) const {
86 return ( _values.find(key) != _values.end() );
87 }
88
89 std::vector<Value> Object::values(const String &key) const
90 {
91 std::vector<Value> vs;
92 auto range = _values.equal_range ( key );
93 std::for_each( range.first, range.second, [&]( const auto &v) { vs.push_back (v.second);} );
94 return vs;
95 }
96
97 const Value &Object::value(const String &key) const
98 {
99 auto i = _values.find (key);
100 return i->second;
101 }
102
103 bool Object::operator==(const Object &other) const {
104 return (_values == other._values);
105 }
106
107 std::ostream &Object::dumpOn(std::ostream &str, std::map<String, Value>::const_iterator val_r) const
108 { return str << val_r->first << ": " << val_r->second; }
109
110 std::string Value::asJSON() const
111 {
112 return std::visit( []( auto &&val ) { return val.asJSON(); }, _value );
113 }
114} // namespace zypp::json
#define for_(IT, BEG, END)
Convenient for-loops using iterator.
Definition Easy.h:27
std::ostream & dumpOn(std::ostream &str) const
Stream output.
Definition JsonValue.cc:29
size_type size() const
Definition JsonValue.cc:44
std::vector< Value > _values
Definition JsonValue.h:89
iterator end()
Definition JsonValue.h:76
const Value & operator[](size_type n) const
Definition JsonValue.cc:39
iterator begin()
Definition JsonValue.h:75
void add(Value val_r)
Push JSON Value to Array.
Definition JsonValue.cc:20
bool operator==(const Array &other) const
Definition JsonValue.cc:51
std::vector< Value >::size_type size_type
Definition JsonValue.h:38
std::string asJSON() const
JSON representation.
Definition JsonValue.cc:71
std::ostream & dumpOn(std::ostream &str) const
Stream output.
Definition JsonValue.cc:74
const Value & value(const String &key) const
Definition JsonValue.cc:97
bool contains(const String &key) const
Definition JsonValue.cc:85
iterator begin()
Definition JsonValue.h:134
std::vector< Value > values(const String &key) const
Definition JsonValue.cc:89
std::multimap< String, Value > _values
Definition JsonValue.h:162
void add(String key_r, Value val_r)
Add key/value pair.
Definition JsonValue.cc:62
bool operator==(const Object &other) const
Definition JsonValue.cc:103
JsonValueData _value
Definition JsonValue.h:308
std::string asJSON() const
JSON representation.
Definition JsonValue.cc:110
String related utilities and Regular expression matching.
Convenient building of std::string via std::ostringstream Basically a std::ostringstream autoconverti...
Definition String.h:213