📝 added documentation
This commit is contained in:
		
							parent
							
								
									56f6d1d68e
								
							
						
					
					
						commit
						22c733e6fe
					
				
					 18 changed files with 233 additions and 56 deletions
				
			
		
							
								
								
									
										17
									
								
								doc/examples/contains.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								doc/examples/contains.cpp
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,17 @@
 | 
			
		|||
#include <iostream>
 | 
			
		||||
#include <nlohmann/json.hpp>
 | 
			
		||||
 | 
			
		||||
using json = nlohmann::json;
 | 
			
		||||
 | 
			
		||||
int main()
 | 
			
		||||
{
 | 
			
		||||
    // create some JSON values
 | 
			
		||||
    json j_object = R"( {"key": "value"} )"_json;
 | 
			
		||||
    json j_array = R"( [1, 2, 3] )"_json;
 | 
			
		||||
 | 
			
		||||
    // call contains
 | 
			
		||||
    std::cout << std::boolalpha <<
 | 
			
		||||
              "j_object contains 'key': " << j_object.contains("key") << '\n' <<
 | 
			
		||||
              "j_object contains 'another': " << j_object.contains("another") << '\n' <<
 | 
			
		||||
              "j_array contains 'key': " << j_array.contains("key") << std::endl;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										1
									
								
								doc/examples/contains.link
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								doc/examples/contains.link
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1 @@
 | 
			
		|||
<a target="_blank" href="https://wandbox.org/permlink/iHSlXjtjhgO9Q1Tw"><b>online</b></a>
 | 
			
		||||
							
								
								
									
										3
									
								
								doc/examples/contains.output
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								doc/examples/contains.output
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,3 @@
 | 
			
		|||
j_object contains 'key': true
 | 
			
		||||
j_object contains 'another': false
 | 
			
		||||
j_array contains 'key': false
 | 
			
		||||
							
								
								
									
										20
									
								
								doc/examples/json_pointer__empty.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								doc/examples/json_pointer__empty.cpp
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,20 @@
 | 
			
		|||
#include <iostream>
 | 
			
		||||
#include <nlohmann/json.hpp>
 | 
			
		||||
 | 
			
		||||
using json = nlohmann::json;
 | 
			
		||||
 | 
			
		||||
int main()
 | 
			
		||||
{
 | 
			
		||||
    // different JSON Pointers
 | 
			
		||||
    json::json_pointer ptr0;
 | 
			
		||||
    json::json_pointer ptr1("");
 | 
			
		||||
    json::json_pointer ptr2("/foo");
 | 
			
		||||
    json::json_pointer ptr3("/foo/0");
 | 
			
		||||
 | 
			
		||||
    // call empty()
 | 
			
		||||
    std::cout << std::boolalpha
 | 
			
		||||
              << ptr0 << ": " << ptr0.empty() << '\n'
 | 
			
		||||
              << ptr1 << ": " << ptr1.empty() << '\n'
 | 
			
		||||
              << ptr2 << ": " << ptr2.empty() << '\n'
 | 
			
		||||
              << ptr3 << ": " << ptr3.empty() << std::endl;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										1
									
								
								doc/examples/json_pointer__empty.link
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								doc/examples/json_pointer__empty.link
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1 @@
 | 
			
		|||
<a target="_blank" href="https://wandbox.org/permlink/pqG2Q8bmj9SvSX0i"><b>online</b></a>
 | 
			
		||||
							
								
								
									
										4
									
								
								doc/examples/json_pointer__empty.output
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								doc/examples/json_pointer__empty.output
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,4 @@
 | 
			
		|||
"": true
 | 
			
		||||
"": true
 | 
			
		||||
"/foo": false
 | 
			
		||||
"/foo/0": false
 | 
			
		||||
							
								
								
									
										18
									
								
								doc/examples/json_pointer__parent_pointer.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								doc/examples/json_pointer__parent_pointer.cpp
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,18 @@
 | 
			
		|||
#include <iostream>
 | 
			
		||||
#include <nlohmann/json.hpp>
 | 
			
		||||
 | 
			
		||||
using json = nlohmann::json;
 | 
			
		||||
 | 
			
		||||
int main()
 | 
			
		||||
{
 | 
			
		||||
    // different JSON Pointers
 | 
			
		||||
    json::json_pointer ptr1("");
 | 
			
		||||
    json::json_pointer ptr2("/foo");
 | 
			
		||||
    json::json_pointer ptr3("/foo/0");
 | 
			
		||||
 | 
			
		||||
    // call parent_pointer()
 | 
			
		||||
    std::cout << std::boolalpha
 | 
			
		||||
              << "parent of " << ptr1 << " is " << ptr1.parent_pointer() << '\n'
 | 
			
		||||
              << "parent of " << ptr2 << " is " << ptr2.parent_pointer() << '\n'
 | 
			
		||||
              << "parent of " << ptr3 << " is " << ptr3.parent_pointer() << std::endl;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										1
									
								
								doc/examples/json_pointer__parent_pointer.link
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								doc/examples/json_pointer__parent_pointer.link
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1 @@
 | 
			
		|||
<a target="_blank" href="https://wandbox.org/permlink/yweqBQ8bAC6pcn68"><b>online</b></a>
 | 
			
		||||
							
								
								
									
										3
									
								
								doc/examples/json_pointer__parent_pointer.output
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								doc/examples/json_pointer__parent_pointer.output
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,3 @@
 | 
			
		|||
parent of "" is ""
 | 
			
		||||
parent of "/foo" is ""
 | 
			
		||||
parent of "/foo/0" is "/foo"
 | 
			
		||||
							
								
								
									
										21
									
								
								doc/examples/json_pointer__push_back.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								doc/examples/json_pointer__push_back.cpp
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,21 @@
 | 
			
		|||
#include <iostream>
 | 
			
		||||
#include <nlohmann/json.hpp>
 | 
			
		||||
 | 
			
		||||
using json = nlohmann::json;
 | 
			
		||||
 | 
			
		||||
int main()
 | 
			
		||||
{
 | 
			
		||||
    // create empty JSON Pointer
 | 
			
		||||
    json::json_pointer ptr;
 | 
			
		||||
    std::cout << ptr << '\n';
 | 
			
		||||
 | 
			
		||||
    // call push_back()
 | 
			
		||||
    ptr.push_back("foo");
 | 
			
		||||
    std::cout << ptr << '\n';
 | 
			
		||||
 | 
			
		||||
    ptr.push_back("0");
 | 
			
		||||
    std::cout << ptr << '\n';
 | 
			
		||||
 | 
			
		||||
    ptr.push_back("bar");
 | 
			
		||||
    std::cout << ptr << '\n';
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										1
									
								
								doc/examples/json_pointer__push_back.link
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								doc/examples/json_pointer__push_back.link
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1 @@
 | 
			
		|||
<a target="_blank" href="https://wandbox.org/permlink/kLC7IUvqQ6XJCeG9"><b>online</b></a>
 | 
			
		||||
							
								
								
									
										4
									
								
								doc/examples/json_pointer__push_back.output
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								doc/examples/json_pointer__push_back.output
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,4 @@
 | 
			
		|||
""
 | 
			
		||||
"/foo"
 | 
			
		||||
"/foo/0"
 | 
			
		||||
"/foo/0/bar"
 | 
			
		||||
| 
						 | 
				
			
			@ -57,6 +57,7 @@ These pages contain the API documentation of JSON for Modern C++, a C++11 header
 | 
			
		|||
    - @link nlohmann::basic_json::number_integer_t signed integers @endlink
 | 
			
		||||
    - @link nlohmann::basic_json::number_unsigned_t unsigned integers @endlink
 | 
			
		||||
    - @link nlohmann::basic_json::number_float_t floating-point @endlink
 | 
			
		||||
- @link nlohmann::json_pointer JSON Pointer @endlink
 | 
			
		||||
 | 
			
		||||
# Container function overview
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -223,7 +223,7 @@ name / id                     | example message | description
 | 
			
		|||
----------------------------- | --------------- | -------------------------
 | 
			
		||||
json.exception.type_error.301 | cannot create object from initializer list | To create an object from an initializer list, the initializer list must consist only of a list of pairs whose first element is a string. When this constraint is violated, an array is created instead.
 | 
			
		||||
json.exception.type_error.302 | type must be object, but is array | During implicit or explicit value conversion, the JSON type must be compatible to the target type. For instance, a JSON string can only be converted into string types, but not into numbers or boolean types.
 | 
			
		||||
json.exception.type_error.303 | incompatible ReferenceType for get_ref, actual type is object | To retrieve a reference to a value stored in a @ref basic_json object with @ref get_ref, the type of the reference must match the value type. For instance, for a JSON array, the @a ReferenceType must be @ref array_t&.
 | 
			
		||||
json.exception.type_error.303 | incompatible ReferenceType for get_ref, actual type is object | To retrieve a reference to a value stored in a @ref basic_json object with @ref get_ref, the type of the reference must match the value type. For instance, for a JSON array, the @a ReferenceType must be @ref array_t &.
 | 
			
		||||
json.exception.type_error.304 | cannot use at() with string | The @ref at() member functions can only be executed for certain JSON types.
 | 
			
		||||
json.exception.type_error.305 | cannot use operator[] with string | The @ref operator[] member functions can only be executed for certain JSON types.
 | 
			
		||||
json.exception.type_error.306 | cannot use value() with string | The @ref value() member functions can only be executed for certain JSON types.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -61,9 +61,9 @@ class file_input_adapter : public input_adapter_protocol
 | 
			
		|||
 | 
			
		||||
    // make class move-only
 | 
			
		||||
    file_input_adapter(const file_input_adapter&) = delete;
 | 
			
		||||
    file_input_adapter(file_input_adapter&&) noexcept = default;
 | 
			
		||||
    file_input_adapter(file_input_adapter&&) = default;
 | 
			
		||||
    file_input_adapter& operator=(const file_input_adapter&) = delete;
 | 
			
		||||
    file_input_adapter& operator=(file_input_adapter&&) noexcept = default;
 | 
			
		||||
    file_input_adapter& operator=(file_input_adapter&&) = default;
 | 
			
		||||
    ~file_input_adapter() override = default;
 | 
			
		||||
 | 
			
		||||
    std::char_traits<char>::int_type get_character() noexcept override
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -82,7 +82,9 @@ class json_pointer
 | 
			
		|||
    */
 | 
			
		||||
    json_pointer& operator/=(const json_pointer& ptr)
 | 
			
		||||
    {
 | 
			
		||||
        reference_tokens.insert(reference_tokens.end(), ptr.reference_tokens.begin(), ptr.reference_tokens.end());
 | 
			
		||||
        reference_tokens.insert(reference_tokens.end(),
 | 
			
		||||
                                ptr.reference_tokens.begin(),
 | 
			
		||||
                                ptr.reference_tokens.end());
 | 
			
		||||
        return *this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -102,7 +104,8 @@ class json_pointer
 | 
			
		|||
    /*!
 | 
			
		||||
    @brief create a new JSON pointer by appending the right JSON pointer at the end of the left JSON pointer
 | 
			
		||||
    */
 | 
			
		||||
    friend json_pointer operator/(const json_pointer& left_ptr, const json_pointer& right_ptr)
 | 
			
		||||
    friend json_pointer operator/(const json_pointer& left_ptr,
 | 
			
		||||
                                  const json_pointer& right_ptr)
 | 
			
		||||
    {
 | 
			
		||||
        return json_pointer(left_ptr) /= right_ptr;
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -124,7 +127,17 @@ class json_pointer
 | 
			
		|||
    }
 | 
			
		||||
 | 
			
		||||
    /*!
 | 
			
		||||
    @brief create a new JSON pointer that is the parent of this JSON pointer
 | 
			
		||||
    @brief returns the parent of this JSON pointer
 | 
			
		||||
 | 
			
		||||
    @return parent of this JSON pointer; in case this JSON pointer is the root,
 | 
			
		||||
            the root itself is returned
 | 
			
		||||
 | 
			
		||||
    @complexity Constant.
 | 
			
		||||
 | 
			
		||||
    @liveexample{The example shows the result of `parent_pointer` for different
 | 
			
		||||
    JSON Pointers.,json_pointer__parent_pointer}
 | 
			
		||||
 | 
			
		||||
    @since version 3.6.0
 | 
			
		||||
    */
 | 
			
		||||
    json_pointer parent_pointer() const
 | 
			
		||||
    {
 | 
			
		||||
| 
						 | 
				
			
			@ -138,27 +151,6 @@ class json_pointer
 | 
			
		|||
        return res;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /*!
 | 
			
		||||
    @param[in] s  reference token to be converted into an array index
 | 
			
		||||
 | 
			
		||||
    @return integer representation of @a s
 | 
			
		||||
 | 
			
		||||
    @throw out_of_range.404 if string @a s could not be converted to an integer
 | 
			
		||||
    */
 | 
			
		||||
    static int array_index(const std::string& s)
 | 
			
		||||
    {
 | 
			
		||||
        std::size_t processed_chars = 0;
 | 
			
		||||
        const int res = std::stoi(s, &processed_chars);
 | 
			
		||||
 | 
			
		||||
        // check if the string was completely read
 | 
			
		||||
        if (JSON_UNLIKELY(processed_chars != s.size()))
 | 
			
		||||
        {
 | 
			
		||||
            JSON_THROW(detail::out_of_range::create(404, "unresolved reference token '" + s + "'"));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return res;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /*!
 | 
			
		||||
    @brief remove and return last reference token
 | 
			
		||||
    @throw out_of_range.405 if JSON pointer has no parent
 | 
			
		||||
| 
						 | 
				
			
			@ -177,6 +169,15 @@ class json_pointer
 | 
			
		|||
 | 
			
		||||
    /*!
 | 
			
		||||
    @brief append an unescaped token at the end of the reference pointer
 | 
			
		||||
 | 
			
		||||
    @param[in] token  token to add
 | 
			
		||||
 | 
			
		||||
    @complexity Amortized constant.
 | 
			
		||||
 | 
			
		||||
    @liveexample{The example shows the result of `push_back` for different
 | 
			
		||||
    JSON Pointers.,json_pointer__push_back}
 | 
			
		||||
 | 
			
		||||
    @since version 0.6.0
 | 
			
		||||
    */
 | 
			
		||||
    void push_back(const std::string& token)
 | 
			
		||||
    {
 | 
			
		||||
| 
						 | 
				
			
			@ -189,13 +190,47 @@ class json_pointer
 | 
			
		|||
        reference_tokens.push_back(std::move(token));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// return whether pointer points to the root document
 | 
			
		||||
    /*!
 | 
			
		||||
    @brief return whether pointer points to the root document
 | 
			
		||||
 | 
			
		||||
    @return true iff the JSON pointer points to the root document
 | 
			
		||||
 | 
			
		||||
    @complexity Constant.
 | 
			
		||||
 | 
			
		||||
    @exceptionsafety No-throw guarantee: this function never throws exceptions.
 | 
			
		||||
 | 
			
		||||
    @liveexample{The example shows the result of `empty` for different JSON
 | 
			
		||||
    Pointers.,json_pointer__empty}
 | 
			
		||||
 | 
			
		||||
    @since version 3.6.0
 | 
			
		||||
    */
 | 
			
		||||
    bool empty() const noexcept
 | 
			
		||||
    {
 | 
			
		||||
        return reference_tokens.empty();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  private:
 | 
			
		||||
    /*!
 | 
			
		||||
    @param[in] s  reference token to be converted into an array index
 | 
			
		||||
 | 
			
		||||
    @return integer representation of @a s
 | 
			
		||||
 | 
			
		||||
    @throw out_of_range.404 if string @a s could not be converted to an integer
 | 
			
		||||
    */
 | 
			
		||||
    static int array_index(const std::string& s)
 | 
			
		||||
    {
 | 
			
		||||
        std::size_t processed_chars = 0;
 | 
			
		||||
        const int res = std::stoi(s, &processed_chars);
 | 
			
		||||
 | 
			
		||||
        // check if the string was completely read
 | 
			
		||||
        if (JSON_UNLIKELY(processed_chars != s.size()))
 | 
			
		||||
        {
 | 
			
		||||
            JSON_THROW(detail::out_of_range::create(404, "unresolved reference token '" + s + "'"));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return res;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    json_pointer top() const
 | 
			
		||||
    {
 | 
			
		||||
        if (JSON_UNLIKELY(empty()))
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3901,6 +3901,8 @@ class basic_json
 | 
			
		|||
 | 
			
		||||
    @liveexample{The example shows how `find()` is used.,find__key_type}
 | 
			
		||||
 | 
			
		||||
    @sa @ref contains(KeyT&&) const -- checks whether a key exists
 | 
			
		||||
 | 
			
		||||
    @since version 1.0.0
 | 
			
		||||
    */
 | 
			
		||||
    template<typename KeyT>
 | 
			
		||||
| 
						 | 
				
			
			@ -3979,6 +3981,10 @@ class basic_json
 | 
			
		|||
 | 
			
		||||
    @complexity Logarithmic in the size of the JSON object.
 | 
			
		||||
 | 
			
		||||
    @liveexample{The following code shows an example for `contains()`.,contains}
 | 
			
		||||
 | 
			
		||||
    @sa @ref find(KeyT&&) -- returns an iterator to an object element
 | 
			
		||||
 | 
			
		||||
    @since version 3.6.0
 | 
			
		||||
    */
 | 
			
		||||
    template<typename KeyT>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -323,7 +323,7 @@ name / id                     | example message | description
 | 
			
		|||
----------------------------- | --------------- | -------------------------
 | 
			
		||||
json.exception.type_error.301 | cannot create object from initializer list | To create an object from an initializer list, the initializer list must consist only of a list of pairs whose first element is a string. When this constraint is violated, an array is created instead.
 | 
			
		||||
json.exception.type_error.302 | type must be object, but is array | During implicit or explicit value conversion, the JSON type must be compatible to the target type. For instance, a JSON string can only be converted into string types, but not into numbers or boolean types.
 | 
			
		||||
json.exception.type_error.303 | incompatible ReferenceType for get_ref, actual type is object | To retrieve a reference to a value stored in a @ref basic_json object with @ref get_ref, the type of the reference must match the value type. For instance, for a JSON array, the @a ReferenceType must be @ref array_t&.
 | 
			
		||||
json.exception.type_error.303 | incompatible ReferenceType for get_ref, actual type is object | To retrieve a reference to a value stored in a @ref basic_json object with @ref get_ref, the type of the reference must match the value type. For instance, for a JSON array, the @a ReferenceType must be @ref array_t &.
 | 
			
		||||
json.exception.type_error.304 | cannot use at() with string | The @ref at() member functions can only be executed for certain JSON types.
 | 
			
		||||
json.exception.type_error.305 | cannot use operator[] with string | The @ref operator[] member functions can only be executed for certain JSON types.
 | 
			
		||||
json.exception.type_error.306 | cannot use value() with string | The @ref value() member functions can only be executed for certain JSON types.
 | 
			
		||||
| 
						 | 
				
			
			@ -2296,9 +2296,9 @@ class file_input_adapter : public input_adapter_protocol
 | 
			
		|||
 | 
			
		||||
    // make class move-only
 | 
			
		||||
    file_input_adapter(const file_input_adapter&) = delete;
 | 
			
		||||
    file_input_adapter(file_input_adapter&&) noexcept = default;
 | 
			
		||||
    file_input_adapter(file_input_adapter&&) = default;
 | 
			
		||||
    file_input_adapter& operator=(const file_input_adapter&) = delete;
 | 
			
		||||
    file_input_adapter& operator=(file_input_adapter&&) noexcept = default;
 | 
			
		||||
    file_input_adapter& operator=(file_input_adapter&&) = default;
 | 
			
		||||
    ~file_input_adapter() override = default;
 | 
			
		||||
 | 
			
		||||
    std::char_traits<char>::int_type get_character() noexcept override
 | 
			
		||||
| 
						 | 
				
			
			@ -8529,7 +8529,9 @@ class json_pointer
 | 
			
		|||
    */
 | 
			
		||||
    json_pointer& operator/=(const json_pointer& ptr)
 | 
			
		||||
    {
 | 
			
		||||
        reference_tokens.insert(reference_tokens.end(), ptr.reference_tokens.begin(), ptr.reference_tokens.end());
 | 
			
		||||
        reference_tokens.insert(reference_tokens.end(),
 | 
			
		||||
                                ptr.reference_tokens.begin(),
 | 
			
		||||
                                ptr.reference_tokens.end());
 | 
			
		||||
        return *this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -8549,7 +8551,8 @@ class json_pointer
 | 
			
		|||
    /*!
 | 
			
		||||
    @brief create a new JSON pointer by appending the right JSON pointer at the end of the left JSON pointer
 | 
			
		||||
    */
 | 
			
		||||
    friend json_pointer operator/(const json_pointer& left_ptr, const json_pointer& right_ptr)
 | 
			
		||||
    friend json_pointer operator/(const json_pointer& left_ptr,
 | 
			
		||||
                                  const json_pointer& right_ptr)
 | 
			
		||||
    {
 | 
			
		||||
        return json_pointer(left_ptr) /= right_ptr;
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -8571,7 +8574,17 @@ class json_pointer
 | 
			
		|||
    }
 | 
			
		||||
 | 
			
		||||
    /*!
 | 
			
		||||
    @brief create a new JSON pointer that is the parent of this JSON pointer
 | 
			
		||||
    @brief returns the parent of this JSON pointer
 | 
			
		||||
 | 
			
		||||
    @return parent of this JSON pointer; in case this JSON pointer is the root,
 | 
			
		||||
            the root itself is returned
 | 
			
		||||
 | 
			
		||||
    @complexity Constant.
 | 
			
		||||
 | 
			
		||||
    @liveexample{The example shows the result of `parent_pointer` for different
 | 
			
		||||
    JSON Pointers.,json_pointer__parent_pointer}
 | 
			
		||||
 | 
			
		||||
    @since version 3.6.0
 | 
			
		||||
    */
 | 
			
		||||
    json_pointer parent_pointer() const
 | 
			
		||||
    {
 | 
			
		||||
| 
						 | 
				
			
			@ -8585,27 +8598,6 @@ class json_pointer
 | 
			
		|||
        return res;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /*!
 | 
			
		||||
    @param[in] s  reference token to be converted into an array index
 | 
			
		||||
 | 
			
		||||
    @return integer representation of @a s
 | 
			
		||||
 | 
			
		||||
    @throw out_of_range.404 if string @a s could not be converted to an integer
 | 
			
		||||
    */
 | 
			
		||||
    static int array_index(const std::string& s)
 | 
			
		||||
    {
 | 
			
		||||
        std::size_t processed_chars = 0;
 | 
			
		||||
        const int res = std::stoi(s, &processed_chars);
 | 
			
		||||
 | 
			
		||||
        // check if the string was completely read
 | 
			
		||||
        if (JSON_UNLIKELY(processed_chars != s.size()))
 | 
			
		||||
        {
 | 
			
		||||
            JSON_THROW(detail::out_of_range::create(404, "unresolved reference token '" + s + "'"));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return res;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /*!
 | 
			
		||||
    @brief remove and return last reference token
 | 
			
		||||
    @throw out_of_range.405 if JSON pointer has no parent
 | 
			
		||||
| 
						 | 
				
			
			@ -8624,6 +8616,15 @@ class json_pointer
 | 
			
		|||
 | 
			
		||||
    /*!
 | 
			
		||||
    @brief append an unescaped token at the end of the reference pointer
 | 
			
		||||
 | 
			
		||||
    @param[in] token  token to add
 | 
			
		||||
 | 
			
		||||
    @complexity Amortized constant.
 | 
			
		||||
 | 
			
		||||
    @liveexample{The example shows the result of `push_back` for different
 | 
			
		||||
    JSON Pointers.,json_pointer__push_back}
 | 
			
		||||
 | 
			
		||||
    @since version 0.6.0
 | 
			
		||||
    */
 | 
			
		||||
    void push_back(const std::string& token)
 | 
			
		||||
    {
 | 
			
		||||
| 
						 | 
				
			
			@ -8636,13 +8637,47 @@ class json_pointer
 | 
			
		|||
        reference_tokens.push_back(std::move(token));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// return whether pointer points to the root document
 | 
			
		||||
    /*!
 | 
			
		||||
    @brief return whether pointer points to the root document
 | 
			
		||||
 | 
			
		||||
    @return true iff the JSON pointer points to the root document
 | 
			
		||||
 | 
			
		||||
    @complexity Constant.
 | 
			
		||||
 | 
			
		||||
    @exceptionsafety No-throw guarantee: this function never throws exceptions.
 | 
			
		||||
 | 
			
		||||
    @liveexample{The example shows the result of `empty` for different JSON
 | 
			
		||||
    Pointers.,json_pointer__empty}
 | 
			
		||||
 | 
			
		||||
    @since version 3.6.0
 | 
			
		||||
    */
 | 
			
		||||
    bool empty() const noexcept
 | 
			
		||||
    {
 | 
			
		||||
        return reference_tokens.empty();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  private:
 | 
			
		||||
    /*!
 | 
			
		||||
    @param[in] s  reference token to be converted into an array index
 | 
			
		||||
 | 
			
		||||
    @return integer representation of @a s
 | 
			
		||||
 | 
			
		||||
    @throw out_of_range.404 if string @a s could not be converted to an integer
 | 
			
		||||
    */
 | 
			
		||||
    static int array_index(const std::string& s)
 | 
			
		||||
    {
 | 
			
		||||
        std::size_t processed_chars = 0;
 | 
			
		||||
        const int res = std::stoi(s, &processed_chars);
 | 
			
		||||
 | 
			
		||||
        // check if the string was completely read
 | 
			
		||||
        if (JSON_UNLIKELY(processed_chars != s.size()))
 | 
			
		||||
        {
 | 
			
		||||
            JSON_THROW(detail::out_of_range::create(404, "unresolved reference token '" + s + "'"));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return res;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    json_pointer top() const
 | 
			
		||||
    {
 | 
			
		||||
        if (JSON_UNLIKELY(empty()))
 | 
			
		||||
| 
						 | 
				
			
			@ -16543,6 +16578,8 @@ class basic_json
 | 
			
		|||
 | 
			
		||||
    @liveexample{The example shows how `find()` is used.,find__key_type}
 | 
			
		||||
 | 
			
		||||
    @sa @ref contains(KeyT&&) const -- checks whether a key exists
 | 
			
		||||
 | 
			
		||||
    @since version 1.0.0
 | 
			
		||||
    */
 | 
			
		||||
    template<typename KeyT>
 | 
			
		||||
| 
						 | 
				
			
			@ -16621,6 +16658,10 @@ class basic_json
 | 
			
		|||
 | 
			
		||||
    @complexity Logarithmic in the size of the JSON object.
 | 
			
		||||
 | 
			
		||||
    @liveexample{The following code shows an example for `contains()`.,contains}
 | 
			
		||||
 | 
			
		||||
    @sa @ref find(KeyT&&) -- returns an iterator to an object element
 | 
			
		||||
 | 
			
		||||
    @since version 3.6.0
 | 
			
		||||
    */
 | 
			
		||||
    template<typename KeyT>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue