json/tree: add mutable conversion queries

This commit is contained in:
Danny Robson 2015-03-18 15:50:07 +11:00
parent 6e81437b93
commit a2535e2006
2 changed files with 45 additions and 1 deletions

View File

@ -236,6 +236,37 @@ json::tree::node::as_null (void) const
{ throw json::type_error ("node is not a null"); }
//-----------------------------------------------------------------------------
json::tree::object&
json::tree::node::as_object (void)
{ throw json::type_error ("node is not an object"); }
json::tree::array&
json::tree::node::as_array (void)
{ throw json::type_error ("node is not an array"); }
json::tree::string&
json::tree::node::as_string (void)
{ throw json::type_error ("node is not a string"); }
json::tree::number&
json::tree::node::as_number (void)
{ throw json::type_error ("node is not a number"); }
json::tree::boolean&
json::tree::node::as_boolean (void)
{ throw json::type_error ("node is not a boolean"); }
json::tree::null&
json::tree::node::as_null (void)
{ throw json::type_error ("node is not a null"); }
///////////////////////////////////////////////////////////////////////////////
float
json::tree::node::as_float (void) const

View File

@ -63,6 +63,13 @@ namespace json { namespace tree {
virtual const boolean& as_boolean (void) const;
virtual const null& as_null (void) const;
virtual object& as_object (void);
virtual array& as_array (void);
virtual string& as_string (void);
virtual number& as_number (void);
virtual boolean& as_boolean (void);
virtual null& as_null (void);
virtual float as_float (void) const;
virtual double as_double (void) const;
virtual size_t as_uint (void) const;
@ -112,6 +119,7 @@ namespace json { namespace tree {
virtual std::unique_ptr<node> clone (void) const;
virtual const object& as_object (void) const { return *this; }
virtual object& as_object (void) { return *this; }
virtual bool is_object (void) const { return true; }
virtual type_t type (void) const { return OBJECT; }
@ -151,6 +159,7 @@ namespace json { namespace tree {
virtual std::unique_ptr<node> clone (void) const;
virtual const array& as_array (void) const { return *this; }
virtual array& as_array (void) { return *this; }
virtual bool is_array (void) const { return true; }
virtual type_t type (void) const { return ARRAY; }
@ -186,6 +195,7 @@ namespace json { namespace tree {
virtual std::unique_ptr<node> clone (void) const;
virtual const string& as_string (void) const { return *this; }
virtual string& as_string (void) { return *this; }
virtual bool is_string (void) const { return true; }
virtual type_t type (void) const { return STRING; }
@ -216,6 +226,7 @@ namespace json { namespace tree {
virtual std::unique_ptr<node> clone (void) const;
virtual const number& as_number (void) const { return *this; }
virtual number& as_number (void) { return *this; }
virtual bool is_number (void) const { return true; }
virtual type_t type (void) const { return NUMBER; }
@ -241,6 +252,7 @@ namespace json { namespace tree {
virtual std::unique_ptr<node> clone (void) const;
virtual const boolean& as_boolean (void) const { return *this; }
virtual boolean& as_boolean (void) { return *this; }
virtual bool is_boolean (void) const { return true; }
virtual type_t type (void) const { return BOOLEAN; }
@ -268,6 +280,7 @@ namespace json { namespace tree {
virtual bool is_null (void) const { return true; }
virtual const null& as_null (void) const { return *this; }
virtual null& as_null (void) { return *this; }
virtual std::ostream& write (std::ostream &os) const;
};