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 {
if (
this != &uos) {
i = uos.
i;
str = uos.
str;}
return *
this;}
82 {
i = uos.i,
str = std::move(uos.str);
return *
this;}
85 typedef std::vector<uint_or_string_t>
path_t;
128 virtual const char*
what() const noexcept
override
176 std::initializer_list<node_kind_t> types);
181 std::initializer_list<node_kind_t> types);
227 virtual inline null_t const*
null()
const
264 inline virtual unsigned height()
const {
return 0;}
283 virtual node_t const*
at(std::string
const& key)
const;
350 inline bool is(std::vector<node_kind_t>
const& v)
const
351 {
for(
auto k:v)
if (this->
is(k))
return true;
return false;}
355 virtual inline unsigned arity()
const {
return 0u;}
380 inline virtual bool has_child(std::string
const& key)
const override
383 virtual node_t*
at(std::string
const& key)
override;
385 virtual node_t const*
at(std::string
const& key)
const override;
392 std::string key,
node_t* node);
395 std::string key,
node_t* node);
397 inline void erase(std::string
const& key) {
398 auto it = _fields.find(key);
399 if (it != _fields.end())
409 inline virtual unsigned height()
const override {
412 unsigned x = p.second->height() + 1;
424 inline virtual unsigned arity()
const override {
return fields.size();}
455 virtual node_t const*
at(
unsigned i)
const override;
470 inline virtual bool has_child(
unsigned i)
const override
471 {
return i <
arity();}
473 inline virtual unsigned height()
const override {
476 unsigned x = p->height()+1;
584 inline virtual null_t*
null()
override {
return this;}
586 inline virtual null_t const*
null()
const override {
return this;}
virtual node_t * at(unsigned i) override
const_iterator begin() const
Definition: node.hh:458
virtual unsigned height() const override
Definition: node.hh:473
const_iterator end() const
Definition: node.hh:461
virtual node_t const * at(unsigned i) const override
std::vector< node_t * >::iterator iterator
Definition: node.hh:438
array_t * push_back(node_t *p)
array_t()
Definition: node.hh:441
virtual array_t * array() override
Casts this node to array_t.
Definition: node.hh:447
iterator end()
Definition: node.hh:460
array_t(std::vector< node_t * > v)
Definition: node.hh:442
virtual array_t * copy() const override
unsigned arity() const override
Definition: node.hh:465
std::vector< node_t * > _values
Definition: node.hh:433
virtual bool has_child(unsigned i) const override
Definition: node.hh:470
iterator begin()
Definition: node.hh:457
std::vector< node_t * >::const_iterator const_iterator
Definition: node.hh:439
virtual array_t const * array() const override
Casts this node to array_t.
Definition: node.hh:448
std::vector< node_t * > const & values
Definition: node.hh:436
unsigned empty() const
Definition: node.hh:467
bool value
Definition: node.hh:557
virtual bool to_bool() const override
Coerces this node_t to bool.
Definition: node.hh:568
bool_t(bool v)
Definition: node.hh:559
virtual bool_t * boolean() override
Casts this node to bool_t.
Definition: node.hh:564
virtual bool_t const * boolean() const override
Casts this node to bool_t.
Definition: node.hh:565
virtual double to_double() const override
Coerces this node_t to a double
Definition: node.hh:570
virtual int to_int() const override
Coerces this node_t to int.
Definition: node.hh:569
virtual bool_t * copy() const override
Definition: node.hh:561
Exception used when trying to coerce a node to a given type.
Definition: node.hh:143
coercion_exception(std::string const &message, std::string const &caller, node_t const *node=nullptr)
Definition: node.hh:145
coercion_exception(std::string message, node_t const *node=nullptr)
Definition: node.hh:149
exception(std::string message, node_t const *node=nullptr)
Definition: node.hh:125
node_t const * node
Definition: node.hh:114
virtual const char * what() const noexcept override
Definition: node.hh:128
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: node.hh:113
std::string what_msg
Definition: node.hh:117
node_t * attempted_parsed_tree
Definition: node.hh:115
path_t path_to_root
Definition: node.hh:116
std::string message
Definition: node.hh:112
virtual float_t * floating() override
Casts this not to float_t.
Definition: node.hh:517
double value
Definition: node.hh:510
virtual double to_double() const override
Coerces this node_t to a double
Definition: node.hh:522
float_t(double v)
Definition: node.hh:512
virtual int to_int() const override
Coerces this node_t to int.
virtual float_t * copy() const override
Definition: node.hh:514
virtual float_t const * floating() const override
Casts this not to float_t.
Definition: node.hh:518
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:496
virtual int to_int() const override
Coerces this node_t to int.
Definition: node.hh:500
int value
Definition: node.hh:490
virtual int_t * copy() const override
Definition: node.hh:494
virtual int_t const * integer() const override
Casts this node to int_t.
Definition: node.hh:497
virtual double to_double() const override
Coerces this node_t to a double
Definition: node.hh:501
int_t(int v)
Definition: node.hh:492
std::vector< node_kind_t > expected_types
Definition: node.hh:170
static std::string message_builder(node_kind_t caller_kind, std::initializer_list< node_kind_t > types)
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:171
bool is(node_kind_t k) const
Definition: node.hh:349
node_t const * parent
Definition: node.hh:195
virtual float_t const * floating() const
Casts this not to float_t.
Definition: node.hh:219
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:223
path_t path_to_root() const
virtual double to_double() const
Coerces this node_t to a double
Definition: node.hh:343
virtual std::string to_string() const
Coerces this node_t to an std::string.
Definition: node.hh:331
virtual node_t * at(unsigned i)
bool is(std::vector< node_kind_t >const &v) const
Definition: node.hh:350
virtual node_t const * at(unsigned i) const
virtual array_t * array()
Casts this node to array_t.
Definition: node.hh:235
bool has_path(json::path_t const &path) const
virtual int_t const * integer() const
Casts this node to int_t.
Definition: node.hh:211
virtual int to_int() const
Coerces this node_t to int.
Definition: node.hh:321
node_t const * at_path(path_t const &path, unsigned i=0) const
virtual unsigned height() const
Definition: node.hh:264
virtual string_t * string()
Casts this node to string_t.
Definition: node.hh:243
virtual bool to_bool() const
Coerces this node_t to bool.
Definition: node.hh:306
virtual float_t * floating()
Casts this not to float_t.
Definition: node.hh:247
virtual string_t const * string() const
Casts this node to string_t.
Definition: node.hh:215
virtual ~node_t()
Definition: node.hh:200
virtual bool has_child(std::string const &) const
Definition: node.hh:284
virtual node_t const * at(std::string const &key) const
virtual object_t * object()
Casts this node to object_t.
Definition: node.hh:231
virtual object_t const * object() const
Casts this node to object_t.
Definition: node.hh:203
node_kind_t const kind
Definition: node.hh:196
node_t(node_kind_t k)
Definition: node.hh:360
virtual node_t * copy() const =0
virtual bool has_child(unsigned) const
Definition: node.hh:291
virtual unsigned arity() const
Definition: node.hh:355
virtual bool_t * boolean()
Casts this node to bool_t.
Definition: node.hh:251
virtual int_t * integer()
Casts this node to int_t.
Definition: node.hh:239
bool is_leaf() const
Definition: node.hh:353
virtual array_t const * array() const
Casts this node to array_t.
Definition: node.hh:207
null_t()
Definition: node.hh:580
virtual null_t * copy() const override
Definition: node.hh:582
const_iterator end() const
Definition: node.hh:422
virtual bool has_child(std::string const &key) const override
Definition: node.hh:380
linked_map_t< std::string, node_t * >::const_iterator const_iterator
Definition: node.hh:372
iterator begin()
Definition: node.hh:419
object_t(std::string key, node_t *child)
Definition: node.hh:375
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:404
object_t()
Definition: node.hh:374
iterator end()
Definition: node.hh:420
virtual unsigned height() const override
Definition: node.hh:409
const_iterator begin() const
Definition: node.hh:421
void erase(std::string const &key)
Definition: node.hh:397
virtual object_t const * object() const override
Casts this node to object_t.
Definition: node.hh:405
linked_map_t< std::string, node_t * >::iterator iterator
Definition: node.hh:371
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:424
linked_map_t< std::string, node_t * > const & fields
Definition: node.hh:370
out_of_range(std::string const &message, node_t const *node=nullptr)
Definition: node.hh:161
out_of_range(std::string const &message, std::string const &caller, node_t const *node=nullptr)
Definition: node.hh:156
parse_exception(std::string const &message, std::string const &caller, path_t path_to_root, int line, int col)
Definition: node.hh:134
parse_exception(std::string const &message, std::string const &caller)
Definition: node.hh:137
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:531
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:536
string_t(char c)
Definition: node.hh:533
uint_or_string_t & operator=(uint_or_string_t const &uos)
Definition: node.hh:78
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:81
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
std::list< pair_t >::const_iterator const_iterator
Definition: linked_map.hxx:82
std::ostream & json(automaton_t aut, std::ostream &out)
std::vector< uint_or_string_t > path_t
Definition: node.hh:85
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:92
@ OBJECT
Definition: node.hh:93
@ INTEGER
Definition: node.hh:95
@ ARRAY
Definition: node.hh:94
@ BOOLEAN
Definition: node.hh:98
@ STRING
Definition: node.hh:97
@ FLOATING
Definition: node.hh:96
@ _NULL
Definition: node.hh:99
Main namespace of Awali.
Definition: ato.hh:22