8#ifndef INCLUDED_ORCUS_JSON_DOCUMENT_TREE_HPP
9#define INCLUDED_ORCUS_JSON_DOCUMENT_TREE_HPP
12#include "exception.hpp"
25struct document_resource;
31class ORCUS_DLLPUBLIC document_error :
public general_error
34 document_error(
const std::string& msg);
35 virtual ~document_error();
43class ORCUS_DLLPUBLIC key_value_error :
public document_error
46 key_value_error(
const std::string& msg);
47 virtual ~key_value_error();
50enum class node_t : uint8_t
81namespace detail {
namespace init {
class node; }}
86class ORCUS_DLLPUBLIC const_node_iterator
88 friend class const_node;
91 std::unique_ptr<impl> mp_impl;
93 const_node_iterator(
const document_tree* doc,
const const_node& v,
bool begin);
96 const_node_iterator();
97 const_node_iterator(
const const_node_iterator& other);
98 ~const_node_iterator();
100 const const_node& operator*()
const;
101 const const_node* operator->()
const;
103 const_node_iterator& operator++();
104 const_node_iterator operator++(
int);
106 const_node_iterator& operator--();
107 const_node_iterator operator--(
int);
109 bool operator== (
const const_node_iterator& other)
const;
110 bool operator!= (
const const_node_iterator& other)
const;
112 const_node_iterator& operator= (
const const_node_iterator& other);
119class ORCUS_DLLPUBLIC const_node
121 friend class document_tree;
122 friend class const_node_iterator;
126 std::unique_ptr<impl> mp_impl;
128 const_node(
const document_tree* doc, json_value* jv);
129 const_node(std::unique_ptr<impl>&& p);
131 const_node() =
delete;
133 const_node(
const const_node& other);
134 const_node(const_node&& rhs);
158 std::vector<std::string_view>
keys()
const;
174 std::string_view
key(
size_t index)
const;
199 const_node
child(
size_t index)
const;
253 const_node& operator=(
const const_node& other);
254 const_node& operator=(const_node&& other);
265 const_node_iterator begin()
const;
266 const_node_iterator end()
const;
273class ORCUS_DLLPUBLIC node :
public const_node
275 friend class document_tree;
277 node(
const document_tree* doc, json_value* jv);
278 node(const_node&& rhs);
283 node(
const node& other);
287 node& operator=(
const node& other);
289 node operator[](std::string_view
key);
352class ORCUS_DLLPUBLIC array
355 friend class document_tree;
357 std::vector<detail::init::node> m_vs;
360 array(
const array&) =
delete;
361 array(array&& other);
362 array(std::initializer_list<detail::init::node> vs);
370class ORCUS_DLLPUBLIC object
374 object(
const object&) =
delete;
375 object(
object&& other);
379namespace detail {
namespace init {
386class ORCUS_DLLPUBLIC node
388 friend class ::orcus::json::document_tree;
389 friend class ::orcus::json::node;
392 std::unique_ptr<impl> mp_impl;
398 node(std::nullptr_t);
400 node(
const std::string& s);
401 node(std::initializer_list<detail::init::node> vs);
405 node(
const node& other) =
delete;
409 node& operator= (node other) =
delete;
413 json_value* to_json_value(document_resource& res)
const;
414 void store_to_node(document_resource& res, json_value* parent)
const;
422class ORCUS_DLLPUBLIC document_tree
424 friend class const_node;
428 std::unique_ptr<impl> mp_impl;
430 const document_resource& get_resource()
const;
434 document_tree(
const document_tree&) =
delete;
435 document_tree(document_tree&& other);
436 document_tree(document_resource& res);
437 document_tree(std::initializer_list<detail::init::node> vs);
438 document_tree(
array vs);
439 document_tree(
object obj);
442 document_tree& operator= (std::initializer_list<detail::init::node> vs);
443 document_tree& operator= (
array vs);
444 document_tree& operator= (
object obj);
497 void swap(document_tree& other);
Definition json_document_tree.hpp:353
Definition json_document_tree.hpp:120
bool has_key(std::string_view key) const
std::vector< std::string_view > keys() const
std::string_view key(size_t index) const
const_node child(size_t index) const
std::string_view string_value() const
double numeric_value() const
size_t child_count() const
uintptr_t identity() const
const_node parent() const
const_node child(std::string_view key) const
Definition json_document_tree.hpp:387
Definition json_document_tree.hpp:423
json::node get_document_root()
std::string dump_yaml() const
void swap(document_tree &other)
json::const_node get_document_root() const
void load(std::string_view stream, const json_config &config)
std::string dump_xml() const
Definition json_document_tree.hpp:274
void push_back(const detail::init::node &v)
node child(std::string_view key)
Definition json_document_tree.hpp:371