17 #ifndef AWALI_JSON_NODE_HH
18 #define AWALI_JSON_NODE_HH
23 #include<unordered_map>
61 :
i(uos.
i),
str(std::move(uos.
str)) {}
71 inline std::string
const&
string()
const {
return str;}
74 inline operator std::string&() {
return str;}
75 inline operator std::string()
const {
return str;}
76 inline operator unsigned()
const {
return i;}
79 {
i = uos.i,
str = std::move(uos.str);
return *
this;}
82 typedef std::vector<uint_or_string_t>
path_t;
107 class exception :
public std::exception {
125 virtual const char*
what() const noexcept
override
140 class coercion_exception :
public exception {
165 class kind_mismatch :
public exception {
173 std::initializer_list<node_kind_t> types);
179 std::initializer_list<node_kind_t> types);
225 virtual inline null_t const*
null()
const
262 inline virtual unsigned height()
const {
return 0;}
281 virtual node_t const*
at(std::string
const& key)
const;
348 inline bool is(std::vector<node_kind_t>
const& v)
const
349 {
for(
auto k:v)
if (this->
is(k))
return true;
return false;}
353 virtual inline unsigned arity()
const {
return 0u;}
378 inline virtual bool has_child(std::string
const& key)
const override
381 virtual node_t*
at(std::string
const& key)
override;
383 virtual node_t const*
at(std::string
const& key)
const override;
390 std::string key,
node_t* node);
393 std::string key,
node_t* node);
395 inline void erase(std::string
const& key) {_fields.
erase(key);}
402 inline virtual unsigned height()
const override {
405 unsigned x = p.second->height() + 1;
417 inline virtual unsigned arity()
const override {
return fields.size();}
450 virtual node_t const*
at(
unsigned i)
const override;
465 inline virtual bool has_child(
unsigned i)
const override
466 {
return i <
arity();}
468 inline virtual unsigned height()
const override {
471 unsigned x = p->height()+1;
590 inline virtual null_t*
null()
override {
return this;}
592 inline virtual null_t const*
null()
const override {
return this;}
virtual node_t * at(unsigned i) override
const_iterator begin() const
Definition: node.hh:453
virtual unsigned height() const override
Definition: node.hh:468
const_iterator end() const
Definition: node.hh:456
virtual node_t const * at(unsigned i) const override
std::vector< node_t * >::iterator iterator
Definition: node.hh:431
array_t * push_back(node_t *p)
array_t()
Definition: node.hh:434
virtual array_t * array() override
Casts this node to array_t.
Definition: node.hh:442
iterator end()
Definition: node.hh:455
array_t(std::vector< node_t * > v)
Definition: node.hh:435
virtual array_t * copy() const override
unsigned arity() const override
Definition: node.hh:460
std::vector< node_t * > _values
Definition: node.hh:426
virtual bool has_child(unsigned i) const override
Definition: node.hh:465
iterator begin()
Definition: node.hh:452
std::vector< node_t * >::const_iterator const_iterator
Definition: node.hh:432
virtual array_t const * array() const override
Casts this node to array_t.
Definition: node.hh:443
std::vector< node_t * > const & values
Definition: node.hh:429
unsigned empty() const
Definition: node.hh:462
bool value
Definition: node.hh:557
virtual bool to_bool() const override
Coerces this node_t to bool.
Definition: node.hh:572
bool_t(bool v)
Definition: node.hh:559
virtual bool_t * boolean() override
Casts this node to bool_t.
Definition: node.hh:568
virtual bool_t const * boolean() const override
Casts this node to bool_t.
Definition: node.hh:569
virtual double to_double() const override
Coerces this node_t to a double
Definition: node.hh:574
virtual int to_int() const override
Coerces this node_t to int.
Definition: node.hh:573
virtual bool_t * copy() const override
Definition: node.hh:565
Exception used when trying to coerce a node to a given type.
Definition: exceptions.hh:83
coercion_exception(std::string const &message, std::string const &caller, node_t const *node=nullptr)
Definition: node.hh:142
coercion_exception(std::string message, node_t const *node=nullptr)
Definition: node.hh:146
The main exception for json manipulation.
Definition: exceptions.hh:26
exception(std::string message, node_t const *node=nullptr)
Definition: node.hh:122
node_t const * node
Definition: node.hh:111
virtual const char * what() const noexcept override
Definition: node.hh:125
exception(std::string const &message, std::string const &caller, node_t const *node=nullptr)
exception(std::string const &message, std::string const &caller, path_t path_to_root, int line, int col)
std::string caller
Definition: exceptions.hh:29
std::string what_msg
Definition: exceptions.hh:30
node_t * attempted_parsed_tree
Definition: node.hh:112
path_t path_to_root
Definition: node.hh:113
std::string message
Definition: exceptions.hh:28
virtual float_t * floating() override
Casts this not to float_t.
Definition: node.hh:514
double value
Definition: node.hh:505
virtual double to_double() const override
Coerces this node_t to a double
Definition: node.hh:519
float_t(double v)
Definition: node.hh:507
virtual int to_int() const override
Coerces this node_t to int.
virtual float_t * copy() const override
Definition: node.hh:511
virtual float_t const * floating() const override
Casts this not to float_t.
Definition: node.hh:515
virtual bool to_bool() const override
Coerces this node_t to bool.
virtual bool to_bool() const override
Coerces this node_t to bool.
virtual int_t * integer() override
Casts this node to int_t.
Definition: node.hh:491
virtual int to_int() const override
Coerces this node_t to int.
Definition: node.hh:495
int value
Definition: node.hh:485
virtual int_t * copy() const override
Definition: node.hh:489
virtual int_t const * integer() const override
Casts this node to int_t.
Definition: node.hh:492
virtual double to_double() const override
Coerces this node_t to a double
Definition: node.hh:496
int_t(int v)
Definition: node.hh:487
Definition: exceptions.hh:78
std::vector< node_kind_t > expected_types
Definition: node.hh:167
kind_mismatch(std::string const &caller, node_t const *node, std::initializer_list< node_kind_t > types)
kind_mismatch(std::string const &caller, node_t const *node, node_kind_t expected_type)
Definition: node.hh:168
static std::string message_builder(std::string const &caller_method, node_kind_t caller_kind, std::initializer_list< node_kind_t > types)
virtual bool has_child(unsigned i) const
Definition: node.hh:289
bool is(node_kind_t k) const
Definition: node.hh:347
node_t const * parent
Definition: node.hh:193
virtual float_t const * floating() const
Casts this not to float_t.
Definition: node.hh:217
virtual node_t * at(std::string const &key)
node_t * at_path(path_t const &path, unsigned i=0)
virtual bool_t const * boolean() const
Casts this node to bool_t.
Definition: node.hh:221
path_t path_to_root() const
virtual double to_double() const
Coerces this node_t to a double
Definition: node.hh:341
virtual std::string to_string() const
Coerces this node_t to an std::string.
Definition: node.hh:329
virtual node_t * at(unsigned i)
bool is(std::vector< node_kind_t >const &v) const
Definition: node.hh:348
virtual node_t const * at(unsigned i) const
virtual array_t * array()
Casts this node to array_t.
Definition: node.hh:233
bool has_path(json::path_t const &path) const
virtual int_t const * integer() const
Casts this node to int_t.
Definition: node.hh:209
virtual int to_int() const
Coerces this node_t to int.
Definition: node.hh:319
node_t const * at_path(path_t const &path, unsigned i=0) const
virtual unsigned height() const
Definition: node.hh:262
virtual string_t * string()
Casts this node to string_t.
Definition: node.hh:241
virtual bool to_bool() const
Coerces this node_t to bool.
Definition: node.hh:304
virtual float_t * floating()
Casts this not to float_t.
Definition: node.hh:245
virtual string_t const * string() const
Casts this node to string_t.
Definition: node.hh:213
virtual ~node_t()
Definition: node.hh:198
virtual bool has_child(std::string const &) const
Definition: node.hh:282
virtual node_t const * at(std::string const &key) const
virtual object_t * object()
Casts this node to object_t.
Definition: node.hh:229
virtual object_t const * object() const
Casts this node to object_t.
Definition: node.hh:201
node_kind_t const kind
Definition: node.hh:194
node_t(node_kind_t k)
Definition: node.hh:358
virtual node_t * copy() const =0
virtual unsigned arity() const
Definition: node.hh:353
virtual bool_t * boolean()
Casts this node to bool_t.
Definition: node.hh:249
virtual int_t * integer()
Casts this node to int_t.
Definition: node.hh:237
bool is_leaf() const
Definition: node.hh:351
virtual array_t const * array() const
Casts this node to array_t.
Definition: node.hh:205
null_t()
Definition: node.hh:584
virtual null_t * copy() const override
Definition: node.hh:588
const_iterator end() const
Definition: node.hh:415
virtual bool has_child(std::string const &key) const override
Definition: node.hh:378
linked_map_t< std::string, node_t * >::const_iterator const_iterator
Definition: node.hh:370
iterator begin()
Definition: node.hh:412
object_t(std::string key, node_t *child)
Definition: node.hh:373
virtual node_t * at(std::string const &key) override
object_t * insert_after(std::string const &ref_key, std::string key, node_t *node)
object_t * push_back(std::string key, node_t *node)
virtual object_t * object() override
Casts this node to object_t.
Definition: node.hh:397
object_t()
Definition: node.hh:372
iterator end()
Definition: node.hh:413
virtual unsigned height() const override
Definition: node.hh:402
const_iterator begin() const
Definition: node.hh:414
void erase(std::string const &key)
Definition: node.hh:395
virtual object_t const * object() const override
Casts this node to object_t.
Definition: node.hh:398
linked_map_t< std::string, node_t * >::iterator iterator
Definition: node.hh:369
virtual object_t * copy() const override
object_t * insert_before(std::string const &ref_key, std::string key, node_t *node)
object_t * push_front(std::string key, node_t *node)
virtual node_t const * at(std::string const &key) const override
virtual unsigned arity() const override
Definition: node.hh:417
linked_map_t< std::string, node_t * > const & fields
Definition: node.hh:368
out_of_range(std::string const &message, node_t const *node=nullptr)
Definition: node.hh:158
out_of_range(std::string const &message, std::string const &caller, node_t const *node=nullptr)
Definition: node.hh:153
parse_exception(std::string const &message, std::string const &caller, path_t path_to_root, int line, int col)
Definition: node.hh:131
parse_exception(std::string const &message, std::string const &caller)
Definition: node.hh:134
virtual int to_int() const override
Coerces this node_t to int.
virtual std::string to_string() const override
Coerces this node_t to an std::string.
Definition: node.hh:548
virtual bool to_bool() const override
Coerces this node_t to bool.
std::string value
Definition: node.hh:528
virtual string_t * string() override
Casts this node to string_t.
Definition: node.hh:542
virtual string_t * copy() const override
Definition: node.hh:539
virtual double to_double() const override
Coerces this node_t to a double
virtual string_t const * string() const override
Casts this node to string_t.
Definition: node.hh:543
string_t(std::string v)
Definition: node.hh:533
string_t(char c)
Definition: node.hh:530
unsigned integer() const
Definition: node.hh:69
uint_or_string_t(std::string s)
Definition: node.hh:55
uint_or_string_t(char const *s)
Definition: node.hh:63
bool is_string() const
Definition: node.hh:65
std::string str
Definition: node.hh:51
uint_or_string_t(uint_or_string_t const &uos)
Definition: node.hh:57
long i
Definition: node.hh:50
uint_or_string_t(unsigned integer)
Definition: node.hh:53
std::string const & string() const
Definition: node.hh:71
bool is_integer() const
Definition: node.hh:67
uint_or_string_t & operator=(uint_or_string_t &&uos)
Definition: node.hh:78
uint_or_string_t(uint_or_string_t &&uos)
Definition: node.hh:60
Implemention of a linked hash-map.
Definition: linked_map.hxx:72
std::list< pair_t >::iterator iterator
Definition: linked_map.hxx:81
iterator begin() noexcept
Definition: linked_map.hxx:143
std::list< pair_t >::const_iterator const_iterator
Definition: linked_map.hxx:82
iterator erase(const_iterator pos)
Definition: linked_map.hxx:256
iterator end() noexcept
Definition: linked_map.hxx:144
std::ostream & json(automaton_t aut, std::ostream &out)
std::vector< uint_or_string_t > path_t
Definition: node.hh:82
std::string const & string_of(node_kind_t kind)
std::ostream & operator<<(std::ostream &o, node_kind_t kind)
node_kind_t
Definition: node.hh:89
@ OBJECT
Definition: node.hh:90
@ INTEGER
Definition: node.hh:92
@ ARRAY
Definition: node.hh:91
@ BOOLEAN
Definition: node.hh:95
@ STRING
Definition: node.hh:94
@ FLOATING
Definition: node.hh:93
@ _NULL
Definition: node.hh:96
Main namespace of Awali.
Definition: ato.hh:22
Exceptions thrown during parsing.
Definition: parse_exception.hh:26