more documentation
This commit is contained in:
		
							parent
							
								
									770b9820fe
								
							
						
					
					
						commit
						c85dbef98f
					
				
					 9 changed files with 441 additions and 85 deletions
				
			
		
							
								
								
									
										2
									
								
								Makefile
									
										
									
									
									
								
							
							
						
						
									
										2
									
								
								Makefile
									
										
									
									
									
								
							|  | @ -46,7 +46,7 @@ pretty: | |||
| 	   --indent-col1-comments --pad-oper --pad-header --align-pointer=type \
 | ||||
| 	   --align-reference=type --add-brackets --convert-tabs --close-templates \
 | ||||
| 	   --lineend=linux --preserve-date --suffix=none \
 | ||||
| 	   src/json.hpp src/json.hpp.re2c test/unit.cpp benchmarks/benchmarks.cpp docs/examples/*.cpp | ||||
| 	   src/json.hpp src/json.hpp.re2c test/unit.cpp benchmarks/benchmarks.cpp doc/examples/*.cpp | ||||
| 
 | ||||
| 
 | ||||
| ##########################################################################
 | ||||
|  |  | |||
							
								
								
									
										15
									
								
								doc/examples/basic_json__string_t.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								doc/examples/basic_json__string_t.cpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,15 @@ | |||
| #include <json.hpp> | ||||
| 
 | ||||
| using namespace nlohmann; | ||||
| 
 | ||||
| int main() | ||||
| { | ||||
|     // create an string_t value
 | ||||
|     json::string_t value = "The quick brown fox jumps over the lazy doc"; | ||||
| 
 | ||||
|     // create a JSON string from the value
 | ||||
|     json j(value); | ||||
| 
 | ||||
|     // serialize the JSON array
 | ||||
|     std::cout << j << '\n'; | ||||
| } | ||||
							
								
								
									
										1
									
								
								doc/examples/basic_json__string_t.output
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								doc/examples/basic_json__string_t.output
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1 @@ | |||
| "The quick brown fox jumps over the lazy doc" | ||||
							
								
								
									
										12
									
								
								doc/examples/basic_json__string_t_value_type.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								doc/examples/basic_json__string_t_value_type.cpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,12 @@ | |||
| #include <json.hpp> | ||||
| 
 | ||||
| using namespace nlohmann; | ||||
| 
 | ||||
| int main() | ||||
| { | ||||
|     // create a JSON string directly from a string literal
 | ||||
|     json j("The quick brown fox jumps over the lazy doc"); | ||||
| 
 | ||||
|     // serialize the JSON array
 | ||||
|     std::cout << j << '\n'; | ||||
| } | ||||
							
								
								
									
										1
									
								
								doc/examples/basic_json__string_t_value_type.output
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								doc/examples/basic_json__string_t_value_type.output
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1 @@ | |||
| "The quick brown fox jumps over the lazy doc" | ||||
							
								
								
									
										18
									
								
								doc/examples/operator_serialize.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								doc/examples/operator_serialize.cpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,18 @@ | |||
| #include <json.hpp> | ||||
| 
 | ||||
| using namespace nlohmann; | ||||
| 
 | ||||
| int main() | ||||
| { | ||||
|     // create JSON values
 | ||||
|     json j_object = {{"one", 1}, {"two", 2}}; | ||||
|     json j_array = {1, 2, 4, 8, 16}; | ||||
| 
 | ||||
|     // serialize without indentation
 | ||||
|     std::cout << j_object << "\n\n"; | ||||
|     std::cout << j_array << "\n\n"; | ||||
| 
 | ||||
|     // serialize with indentation
 | ||||
|     std::cout << std::setw(4) << j_object << "\n\n"; | ||||
|     std::cout << std::setw(2) << j_array << "\n\n"; | ||||
| } | ||||
							
								
								
									
										17
									
								
								doc/examples/operator_serialize.output
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								doc/examples/operator_serialize.output
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,17 @@ | |||
| {"one":1,"two":2} | ||||
| 
 | ||||
| [1,2,4,8,16] | ||||
| 
 | ||||
| { | ||||
|     "one": 1, | ||||
|     "two": 2 | ||||
| } | ||||
| 
 | ||||
| [ | ||||
|   1, | ||||
|   2, | ||||
|   4, | ||||
|   8, | ||||
|   16 | ||||
| ] | ||||
| 
 | ||||
							
								
								
									
										230
									
								
								src/json.hpp
									
										
									
									
									
								
							
							
						
						
									
										230
									
								
								src/json.hpp
									
										
									
									
									
								
							|  | @ -84,7 +84,8 @@ struct has_mapped_type | |||
| @tparam AllocatorType      type of the allocator to use | ||||
|                            (@c std::allocator by default) | ||||
| 
 | ||||
| @requirement This class satisfies the Container requirements (see http://en.cppreference.com/w/cpp/concept/Container):
 | ||||
| @requirement This class satisfies the Container requirements (see | ||||
| http://en.cppreference.com/w/cpp/concept/Container):
 | ||||
| - basic_json() | ||||
| - basic_json(const basic_json&) | ||||
| - reference& operator=(basic_json) | ||||
|  | @ -392,7 +393,7 @@ class basic_json | |||
|     object      | `{}` | ||||
|     array       | `[]` | ||||
| 
 | ||||
|     @param value  the type of the value to create | ||||
|     @param[in] value  the type of the value to create | ||||
| 
 | ||||
|     @complexity Constant. | ||||
| 
 | ||||
|  | @ -451,7 +452,7 @@ class basic_json | |||
| 
 | ||||
|     Create an object JSON value with a given content. | ||||
| 
 | ||||
|     @param value  a value for the object | ||||
|     @param[in] value  a value for the object | ||||
| 
 | ||||
|     @complexity Linear in the size of the passed @a value. | ||||
| 
 | ||||
|  | @ -477,7 +478,7 @@ class basic_json | |||
|     @tparam CompatibleObjectType an object type whose `key_type` and | ||||
|     `value_type` is compatible to @ref object_t | ||||
| 
 | ||||
|     @param value  a value for the object | ||||
|     @param[in] value  a value for the object | ||||
| 
 | ||||
|     @complexity Linear in the size of the passed @a value. | ||||
| 
 | ||||
|  | @ -509,7 +510,7 @@ class basic_json | |||
| 
 | ||||
|     Create an array JSON value with a given content. | ||||
| 
 | ||||
|     @param value  a value for the array | ||||
|     @param[in] value  a value for the array | ||||
| 
 | ||||
|     @complexity Linear in the size of the passed @a value. | ||||
| 
 | ||||
|  | @ -535,7 +536,7 @@ class basic_json | |||
|     @tparam CompatibleArrayType an object type whose `value_type` is compatible | ||||
|     to @ref array_t | ||||
| 
 | ||||
|     @param value  a value for the array | ||||
|     @param[in] value  a value for the array | ||||
| 
 | ||||
|     @complexity Linear in the size of the passed @a value. | ||||
| 
 | ||||
|  | @ -567,22 +568,56 @@ class basic_json | |||
|         alloc.construct(m_value.array, begin(value), end(value)); | ||||
|     } | ||||
| 
 | ||||
|     /// create a string (explicit)
 | ||||
|     /*!
 | ||||
|     @brief create a string (explicit) | ||||
| 
 | ||||
|     Create an string JSON value with a given content. | ||||
| 
 | ||||
|     @param[in] value  a value for the string | ||||
| 
 | ||||
|     @complexity Linear in the size of the passed @a value. | ||||
| 
 | ||||
|     @exception std::bad_alloc if allocation for string value fails (thrown by | ||||
|     the constructor of @ref json_value) | ||||
| 
 | ||||
|     @liveexample{The following code shows the constructor with an @ref string_t | ||||
|     parameter.,basic_json__string_t} | ||||
| 
 | ||||
|     @sa basic_json(const typename string_t::value_type*) | ||||
|     @sa basic_json(const CompatibleStringType&) | ||||
|     */ | ||||
|     basic_json(const string_t& value) | ||||
|         : m_type(value_t::string), m_value(value) | ||||
|     {} | ||||
| 
 | ||||
|     /// create a string (explicit)
 | ||||
|     /*!
 | ||||
|     @brief create a string (explicit) | ||||
| 
 | ||||
|     Create an string JSON value with a given content. | ||||
| 
 | ||||
|     @param[in] value  a literal value for the string | ||||
| 
 | ||||
|     @complexity Linear in the size of the passed @a value. | ||||
| 
 | ||||
|     @exception std::bad_alloc if allocation for string value fails (thrown by | ||||
|     the constructor of @ref json_value) | ||||
| 
 | ||||
|     @liveexample{The following code shows the constructor with string literal | ||||
|     parameter.,basic_json__string_t_value_type} | ||||
| 
 | ||||
|     @sa basic_json(const string_t&) | ||||
|     @sa basic_json(const CompatibleStringType&) | ||||
|     */ | ||||
|     basic_json(const typename string_t::value_type* value) | ||||
|         : basic_json(string_t(value)) | ||||
|     {} | ||||
| 
 | ||||
|     /// create a string (implicit)
 | ||||
|     template <class V, typename | ||||
|     template <class CompatibleStringType, typename | ||||
|               std::enable_if< | ||||
|                   std::is_constructible<string_t, V>::value, int>::type | ||||
|                   std::is_constructible<string_t, CompatibleStringType>::value, int>::type | ||||
|               = 0> | ||||
|     basic_json(const V& value) | ||||
|     basic_json(const CompatibleStringType& value) | ||||
|         : basic_json(string_t(value)) | ||||
|     {} | ||||
| 
 | ||||
|  | @ -595,7 +630,7 @@ class basic_json | |||
|     @brief create an integer number (explicit) | ||||
| 
 | ||||
|     @tparam T  helper type to compare number_integer_t and int | ||||
|     @param value  an integer to create a JSON number from | ||||
|     @param[in] value  an integer to create a JSON number from | ||||
| 
 | ||||
|     This constructor takes care about explicitly passed values of type | ||||
|     number_integer_t. However, this constructor would have the same signature | ||||
|  | @ -614,7 +649,7 @@ class basic_json | |||
|     /*!
 | ||||
|     @brief create an int number to support enum type (implicit) | ||||
| 
 | ||||
|     @param value  an integer to create a JSON number from | ||||
|     @param[in] value  an integer to create a JSON number from | ||||
| 
 | ||||
|     This constructor allows to pass enums directly to a constructor. As C++ has | ||||
|     no way of specifying the type of an anonymous enum explicitly, we can only | ||||
|  | @ -698,14 +733,14 @@ class basic_json | |||
|     basic_json() is called instead of this function, yielding the JSON null | ||||
|     value. | ||||
| 
 | ||||
|     @param init  initializer list with JSON values | ||||
|     @param[in] init  initializer list with JSON values | ||||
| 
 | ||||
|     @param type_deduction  internal parameter; when set to `true`, the type of | ||||
|     the JSON value is deducted from the initializer list @a init; when set to | ||||
|     `false`, the type provided via @a manual_type is forced. This mode is used | ||||
|     by the functions @ref array(list_init_t) and @ref object(list_init_t). | ||||
|     @param[in] type_deduction internal parameter; when set to `true`, the type | ||||
|     of the JSON value is deducted from the initializer list @a init; when set | ||||
|     to `false`, the type provided via @a manual_type is forced. This mode is | ||||
|     used by the functions @ref array(list_init_t) and @ref object(list_init_t). | ||||
| 
 | ||||
|     @param manual_type  internal parameter; when @a type_deduction is set to | ||||
|     @param[in] manual_type internal parameter; when @a type_deduction is set to | ||||
|     `false`, the created JSON value will use the provided type (only @ref | ||||
|     value_t::array and @ref value_t::object are valid); when @a type_deduction | ||||
|     is set to `true`, this parameter has no effect | ||||
|  | @ -797,7 +832,7 @@ class basic_json | |||
|     2. creating an empty array - passing the empty initializer list to the | ||||
|     initializer list constructor yields an empty object | ||||
| 
 | ||||
|     @param init  initializer list with JSON values to create an array from | ||||
|     @param[in] init  initializer list with JSON values to create an array from | ||||
|     (optional) | ||||
| 
 | ||||
|     @return JSON array value | ||||
|  | @ -830,7 +865,7 @@ class basic_json | |||
|     @a init can also be passed to the initializer list constructor @ref | ||||
|     basic_json(list_init_t, bool, value_t). | ||||
| 
 | ||||
|     @param init  initializer list to create an object from (optional) | ||||
|     @param[in] init  initializer list to create an object from (optional) | ||||
| 
 | ||||
|     @return JSON object value | ||||
| 
 | ||||
|  | @ -859,8 +894,8 @@ class basic_json | |||
|     value. In case @a count is `0`, an empty array is created. As postcondition, | ||||
|     `std::distance(begin(),end()) == count` holds. | ||||
| 
 | ||||
|     @param count  the number of JSON copies of @a value to create | ||||
|     @param value  the JSON value to copy | ||||
|     @param[in] count  the number of JSON copies of @a value to create | ||||
|     @param[in] value  the JSON value to copy | ||||
| 
 | ||||
|     @complexity Linear in @a count. | ||||
| 
 | ||||
|  | @ -974,7 +1009,7 @@ class basic_json | |||
| 
 | ||||
|     Creates a copy of a given JSON value. | ||||
| 
 | ||||
|     @param other  the JSON value to copy | ||||
|     @param[in] other  the JSON value to copy | ||||
| 
 | ||||
|     @complexity Linear in the size of @a other. | ||||
| 
 | ||||
|  | @ -1045,7 +1080,7 @@ class basic_json | |||
|     value @a other using move semantics. It "steals" the resources from @a | ||||
|     other and leaves it as JSON null value. | ||||
| 
 | ||||
|     @param other  value to move to this object | ||||
|     @param[in,out] other  value to move to this object | ||||
| 
 | ||||
|     @post @a other is a JSON null value | ||||
| 
 | ||||
|  | @ -1070,7 +1105,7 @@ class basic_json | |||
|     strategy: It is expressed in terms of the copy constructor, destructor, and | ||||
|     the swap() member function. | ||||
| 
 | ||||
|     @param other  value to copy from | ||||
|     @param[in] other  value to copy from | ||||
| 
 | ||||
|     @complexity Linear. | ||||
| 
 | ||||
|  | @ -1165,7 +1200,7 @@ class basic_json | |||
|     Python's @p json.dumps() function, and currently supports its @p indent | ||||
|     parameter. | ||||
| 
 | ||||
|     @param indent  if indent is nonnegative, then array elements and object | ||||
|     @param[in] indent if indent is nonnegative, then array elements and object | ||||
|     members will be pretty-printed with that indent level. An indent level of 0 | ||||
|     will only insert newlines. -1 (the default) selects the most compact | ||||
|     representation | ||||
|  | @ -2634,6 +2669,24 @@ class basic_json | |||
| 
 | ||||
|     /*!
 | ||||
|     @brief comparison: equal | ||||
| 
 | ||||
|     Compares two JSON values for equality according to the following rules: | ||||
|     - Two JSON values are equal if (1) they are from the same type and (2) | ||||
|       their stored values are the same. | ||||
|     - Integer and floating-point numbers are automatically converted before | ||||
|       comparison. Floating-point numbers are compared indirectly: two | ||||
|       floating-point numbers `f1` and `f2` are considered equal if neither | ||||
|       `f1 > f2` nor `f2 > f1` holds. | ||||
|     - Two JSON null values are equal. | ||||
| 
 | ||||
|     @param[in] lhs  first JSON value to consider | ||||
|     @param[in] rhs  second JSON value to consider | ||||
|     @return whether the values @a lhs and @a rhs are equal | ||||
| 
 | ||||
|     @complexity Linear. | ||||
| 
 | ||||
|     @todo Add example. | ||||
| 
 | ||||
|     @ingroup container | ||||
|     */ | ||||
|     friend bool operator==(const_reference lhs, const_reference rhs) noexcept | ||||
|  | @ -2678,6 +2731,17 @@ class basic_json | |||
| 
 | ||||
|     /*!
 | ||||
|     @brief comparison: not equal | ||||
| 
 | ||||
|     Compares two JSON values for inequality by calculating `not (lhs == rhs)`. | ||||
| 
 | ||||
|     @param[in] lhs  first JSON value to consider | ||||
|     @param[in] rhs  second JSON value to consider | ||||
|     @return whether the values @a lhs and @a rhs are not equal | ||||
| 
 | ||||
|     @complexity Linear. | ||||
| 
 | ||||
|     @todo Add example. | ||||
| 
 | ||||
|     @ingroup container | ||||
|     */ | ||||
|     friend bool operator!=(const_reference lhs, const_reference rhs) noexcept | ||||
|  | @ -2685,7 +2749,27 @@ class basic_json | |||
|         return not (lhs == rhs); | ||||
|     } | ||||
| 
 | ||||
|     /// comparison: less than
 | ||||
|     /*!
 | ||||
|     @brief comparison: less than | ||||
| 
 | ||||
|     Compares whether one JSON value @a lhs is less than another JSON value @a | ||||
|     rhs according to the following rules: | ||||
|     - If @a lhs and @a rhs have the same type, the values are compared using | ||||
|       the default `<` operator. | ||||
|     - Integer and floating-point numbers are automatically converted before | ||||
|       comparison | ||||
|     - In case @a lhs and @a rhs have different types, the values are ignored | ||||
|       and the order of the types is considered, see | ||||
|       @ref operator<(const value_t, const value_t). | ||||
| 
 | ||||
|     @param[in] lhs  first JSON value to consider | ||||
|     @param[in] rhs  second JSON value to consider | ||||
|     @return whether @a lhs is less than @a rhs | ||||
| 
 | ||||
|     @complexity Linear. | ||||
| 
 | ||||
|     @todo Add example. | ||||
|     */ | ||||
|     friend bool operator<(const_reference lhs, const_reference rhs) noexcept | ||||
|     { | ||||
|         const auto lhs_type = lhs.type(); | ||||
|  | @ -2729,19 +2813,58 @@ class basic_json | |||
|         return lhs_type < rhs_type; | ||||
|     } | ||||
| 
 | ||||
|     /// comparison: less than or equal
 | ||||
|     /*!
 | ||||
|     @brief comparison: less than or equal | ||||
| 
 | ||||
|     Compares whether one JSON value @a lhs is less than or equal to another | ||||
|     JSON value by calculating `not (rhs < lhs)`. | ||||
| 
 | ||||
|     @param[in] lhs  first JSON value to consider | ||||
|     @param[in] rhs  second JSON value to consider | ||||
|     @return whether @a lhs is less than or equal to @a rhs | ||||
| 
 | ||||
|     @complexity Linear. | ||||
| 
 | ||||
|     @todo Add example. | ||||
|     */ | ||||
|     friend bool operator<=(const_reference lhs, const_reference rhs) noexcept | ||||
|     { | ||||
|         return not (rhs < lhs); | ||||
|     } | ||||
| 
 | ||||
|     /// comparison: greater than
 | ||||
|     /*!
 | ||||
|     @brief comparison: greater than | ||||
| 
 | ||||
|     Compares whether one JSON value @a lhs is greater than another | ||||
|     JSON value by calculating `not (lhs <= rhs)`. | ||||
| 
 | ||||
|     @param[in] lhs  first JSON value to consider | ||||
|     @param[in] rhs  second JSON value to consider | ||||
|     @return whether @a lhs is greater than to @a rhs | ||||
| 
 | ||||
|     @complexity Linear. | ||||
| 
 | ||||
|     @todo Add example. | ||||
|     */ | ||||
|     friend bool operator>(const_reference lhs, const_reference rhs) noexcept | ||||
|     { | ||||
|         return not (lhs <= rhs); | ||||
|     } | ||||
| 
 | ||||
|     /// comparison: greater than or equal
 | ||||
|     /*!
 | ||||
|     @brief comparison: greater than or equal | ||||
| 
 | ||||
|     Compares whether one JSON value @a lhs is greater than or equal to another | ||||
|     JSON value by calculating `not (lhs < rhs)`. | ||||
| 
 | ||||
|     @param[in] lhs  first JSON value to consider | ||||
|     @param[in] rhs  second JSON value to consider | ||||
|     @return whether @a lhs is greater than or equal to @a rhs | ||||
| 
 | ||||
|     @complexity Linear. | ||||
| 
 | ||||
|     @todo Add example. | ||||
|     */ | ||||
|     friend bool operator>=(const_reference lhs, const_reference rhs) noexcept | ||||
|     { | ||||
|         return not (lhs < rhs); | ||||
|  | @ -2757,7 +2880,25 @@ class basic_json | |||
|     /// @name serialization
 | ||||
|     /// @{
 | ||||
| 
 | ||||
|     /// serialize to stream
 | ||||
|     /*!
 | ||||
|     @brief serialize to stream | ||||
| 
 | ||||
|     Serialize the given JSON value @a j to the output stream @a o. The JSON | ||||
|     value will be serialized using the @ref dump member function. The | ||||
|     indentation of the output can be controlled with the member variable | ||||
|     `width` of the output stream @a o. For instance, using the manipulator | ||||
|     `std::setw(4)` on @a o sets the indentation level to `4` and the | ||||
|     serialization result is the same as calling `dump(4)`. | ||||
| 
 | ||||
|     @param[in,out] o  stream to serialize to | ||||
|     @param[in] j  JSON value to serialize | ||||
| 
 | ||||
|     @return the stream @a o | ||||
| 
 | ||||
|     @complexity Linear. | ||||
| 
 | ||||
|     @liveexample{,operator_serialize} | ||||
|     */ | ||||
|     friend std::ostream& operator<<(std::ostream& o, const basic_json& j) | ||||
|     { | ||||
|         // read width member and use it as indentation parameter if nonzero
 | ||||
|  | @ -2772,7 +2913,10 @@ class basic_json | |||
|         return o; | ||||
|     } | ||||
| 
 | ||||
|     /// serialize to stream
 | ||||
|     /*!
 | ||||
|     @brief serialize to stream | ||||
|     @copydoc operator<<(std::ostream&, const basic_json&) | ||||
|     */ | ||||
|     friend std::ostream& operator>>(const basic_json& j, std::ostream& o) | ||||
|     { | ||||
|         return o << j; | ||||
|  | @ -2872,8 +3016,8 @@ class basic_json | |||
|     characters by a sequence of "\u" followed by a four-digit hex | ||||
|     representation. | ||||
| 
 | ||||
|     @param o  the stream to write the escaped string to | ||||
|     @param s  the string to escape | ||||
|     @param[out] o  the stream to write the escaped string to | ||||
|     @param[in] s  the string to escape | ||||
|     */ | ||||
|     static void escape_string(std::ostream& o, const string_t& s) noexcept | ||||
|     { | ||||
|  | @ -2961,10 +3105,10 @@ class basic_json | |||
|     - integer numbers are converted implictly via operator<< | ||||
|     - floating-point numbers are converted to a string using "%g" format | ||||
| 
 | ||||
|     @param o               stream to write to | ||||
|     @param pretty_print    whether the output shall be pretty-printed | ||||
|     @param indent_step     the indent level | ||||
|     @param current_indent  the current indent level (only used internally) | ||||
|     @param[out] o              stream to write to | ||||
|     @param[in] pretty_print    whether the output shall be pretty-printed | ||||
|     @param[in] indent_step     the indent level | ||||
|     @param[in] current_indent  the current indent level (only used internally) | ||||
|     */ | ||||
|     void dump(std::ostream& o, const bool pretty_print, const unsigned int indent_step, | ||||
|               const unsigned int current_indent = 0) const noexcept | ||||
|  | @ -4254,8 +4398,8 @@ class basic_json | |||
|         /*!
 | ||||
|         @brief create a string from a Unicode code point | ||||
| 
 | ||||
|         @param codepoint1  the code point (can be high surrogate) | ||||
|         @param codepoint2  the code point (can be low surrogate or 0) | ||||
|         @param[in] codepoint1  the code point (can be high surrogate) | ||||
|         @param[in] codepoint2  the code point (can be low surrogate or 0) | ||||
|         @return string representation of the code point | ||||
|         @exception std::out_of_range if code point is >0x10ffff | ||||
|         @exception std::invalid_argument if the low surrogate is invalid | ||||
|  | @ -5671,11 +5815,13 @@ struct hash<nlohmann::json> | |||
| } | ||||
| 
 | ||||
| /*!
 | ||||
| @brief user-defined string literal for JSON values | ||||
| 
 | ||||
| This operator implements a user-defined string literal for JSON objects. It can | ||||
| be used by adding \p "_json" to a string literal and returns a JSON object if | ||||
| no parse error occurred. | ||||
| 
 | ||||
| @param s  a string representation of a JSON object | ||||
| @param[in] s  a string representation of a JSON object | ||||
| @return a JSON object | ||||
| */ | ||||
| inline nlohmann::json operator "" _json(const char* s, std::size_t) | ||||
|  |  | |||
|  | @ -84,7 +84,8 @@ struct has_mapped_type | |||
| @tparam AllocatorType      type of the allocator to use | ||||
|                            (@c std::allocator by default) | ||||
| 
 | ||||
| @requirement This class satisfies the Container requirements (see http://en.cppreference.com/w/cpp/concept/Container): | ||||
| @requirement This class satisfies the Container requirements (see | ||||
| http://en.cppreference.com/w/cpp/concept/Container): | ||||
| - basic_json() | ||||
| - basic_json(const basic_json&) | ||||
| - reference& operator=(basic_json) | ||||
|  | @ -392,7 +393,7 @@ class basic_json | |||
|     object      | `{}` | ||||
|     array       | `[]` | ||||
| 
 | ||||
|     @param value  the type of the value to create | ||||
|     @param[in] value  the type of the value to create | ||||
| 
 | ||||
|     @complexity Constant. | ||||
| 
 | ||||
|  | @ -451,7 +452,7 @@ class basic_json | |||
| 
 | ||||
|     Create an object JSON value with a given content. | ||||
| 
 | ||||
|     @param value  a value for the object | ||||
|     @param[in] value  a value for the object | ||||
| 
 | ||||
|     @complexity Linear in the size of the passed @a value. | ||||
| 
 | ||||
|  | @ -477,7 +478,7 @@ class basic_json | |||
|     @tparam CompatibleObjectType an object type whose `key_type` and | ||||
|     `value_type` is compatible to @ref object_t | ||||
| 
 | ||||
|     @param value  a value for the object | ||||
|     @param[in] value  a value for the object | ||||
| 
 | ||||
|     @complexity Linear in the size of the passed @a value. | ||||
| 
 | ||||
|  | @ -509,7 +510,7 @@ class basic_json | |||
| 
 | ||||
|     Create an array JSON value with a given content. | ||||
| 
 | ||||
|     @param value  a value for the array | ||||
|     @param[in] value  a value for the array | ||||
| 
 | ||||
|     @complexity Linear in the size of the passed @a value. | ||||
| 
 | ||||
|  | @ -535,7 +536,7 @@ class basic_json | |||
|     @tparam CompatibleArrayType an object type whose `value_type` is compatible | ||||
|     to @ref array_t | ||||
| 
 | ||||
|     @param value  a value for the array | ||||
|     @param[in] value  a value for the array | ||||
| 
 | ||||
|     @complexity Linear in the size of the passed @a value. | ||||
| 
 | ||||
|  | @ -567,22 +568,56 @@ class basic_json | |||
|         alloc.construct(m_value.array, begin(value), end(value)); | ||||
|     } | ||||
| 
 | ||||
|     /// create a string (explicit) | ||||
|     /*! | ||||
|     @brief create a string (explicit) | ||||
| 
 | ||||
|     Create an string JSON value with a given content. | ||||
| 
 | ||||
|     @param[in] value  a value for the string | ||||
| 
 | ||||
|     @complexity Linear in the size of the passed @a value. | ||||
| 
 | ||||
|     @exception std::bad_alloc if allocation for string value fails (thrown by | ||||
|     the constructor of @ref json_value) | ||||
| 
 | ||||
|     @liveexample{The following code shows the constructor with an @ref string_t | ||||
|     parameter.,basic_json__string_t} | ||||
| 
 | ||||
|     @sa basic_json(const typename string_t::value_type*) | ||||
|     @sa basic_json(const CompatibleStringType&) | ||||
|     */ | ||||
|     basic_json(const string_t& value) | ||||
|         : m_type(value_t::string), m_value(value) | ||||
|     {} | ||||
| 
 | ||||
|     /// create a string (explicit) | ||||
|     /*! | ||||
|     @brief create a string (explicit) | ||||
| 
 | ||||
|     Create an string JSON value with a given content. | ||||
| 
 | ||||
|     @param[in] value  a literal value for the string | ||||
| 
 | ||||
|     @complexity Linear in the size of the passed @a value. | ||||
| 
 | ||||
|     @exception std::bad_alloc if allocation for string value fails (thrown by | ||||
|     the constructor of @ref json_value) | ||||
| 
 | ||||
|     @liveexample{The following code shows the constructor with string literal | ||||
|     parameter.,basic_json__string_t_value_type} | ||||
| 
 | ||||
|     @sa basic_json(const string_t&) | ||||
|     @sa basic_json(const CompatibleStringType&) | ||||
|     */ | ||||
|     basic_json(const typename string_t::value_type* value) | ||||
|         : basic_json(string_t(value)) | ||||
|     {} | ||||
| 
 | ||||
|     /// create a string (implicit) | ||||
|     template <class V, typename | ||||
|     template <class CompatibleStringType, typename | ||||
|               std::enable_if< | ||||
|                   std::is_constructible<string_t, V>::value, int>::type | ||||
|                   std::is_constructible<string_t, CompatibleStringType>::value, int>::type | ||||
|               = 0> | ||||
|     basic_json(const V& value) | ||||
|     basic_json(const CompatibleStringType& value) | ||||
|         : basic_json(string_t(value)) | ||||
|     {} | ||||
| 
 | ||||
|  | @ -595,7 +630,7 @@ class basic_json | |||
|     @brief create an integer number (explicit) | ||||
| 
 | ||||
|     @tparam T  helper type to compare number_integer_t and int | ||||
|     @param value  an integer to create a JSON number from | ||||
|     @param[in] value  an integer to create a JSON number from | ||||
| 
 | ||||
|     This constructor takes care about explicitly passed values of type | ||||
|     number_integer_t. However, this constructor would have the same signature | ||||
|  | @ -614,7 +649,7 @@ class basic_json | |||
|     /*! | ||||
|     @brief create an int number to support enum type (implicit) | ||||
| 
 | ||||
|     @param value  an integer to create a JSON number from | ||||
|     @param[in] value  an integer to create a JSON number from | ||||
| 
 | ||||
|     This constructor allows to pass enums directly to a constructor. As C++ has | ||||
|     no way of specifying the type of an anonymous enum explicitly, we can only | ||||
|  | @ -698,14 +733,14 @@ class basic_json | |||
|     basic_json() is called instead of this function, yielding the JSON null | ||||
|     value. | ||||
| 
 | ||||
|     @param init  initializer list with JSON values | ||||
|     @param[in] init  initializer list with JSON values | ||||
| 
 | ||||
|     @param type_deduction  internal parameter; when set to `true`, the type of | ||||
|     the JSON value is deducted from the initializer list @a init; when set to | ||||
|     `false`, the type provided via @a manual_type is forced. This mode is used | ||||
|     by the functions @ref array(list_init_t) and @ref object(list_init_t). | ||||
|     @param[in] type_deduction internal parameter; when set to `true`, the type | ||||
|     of the JSON value is deducted from the initializer list @a init; when set | ||||
|     to `false`, the type provided via @a manual_type is forced. This mode is | ||||
|     used by the functions @ref array(list_init_t) and @ref object(list_init_t). | ||||
| 
 | ||||
|     @param manual_type  internal parameter; when @a type_deduction is set to | ||||
|     @param[in] manual_type internal parameter; when @a type_deduction is set to | ||||
|     `false`, the created JSON value will use the provided type (only @ref | ||||
|     value_t::array and @ref value_t::object are valid); when @a type_deduction | ||||
|     is set to `true`, this parameter has no effect | ||||
|  | @ -797,7 +832,7 @@ class basic_json | |||
|     2. creating an empty array - passing the empty initializer list to the | ||||
|     initializer list constructor yields an empty object | ||||
| 
 | ||||
|     @param init  initializer list with JSON values to create an array from | ||||
|     @param[in] init  initializer list with JSON values to create an array from | ||||
|     (optional) | ||||
| 
 | ||||
|     @return JSON array value | ||||
|  | @ -830,7 +865,7 @@ class basic_json | |||
|     @a init can also be passed to the initializer list constructor @ref | ||||
|     basic_json(list_init_t, bool, value_t). | ||||
| 
 | ||||
|     @param init  initializer list to create an object from (optional) | ||||
|     @param[in] init  initializer list to create an object from (optional) | ||||
| 
 | ||||
|     @return JSON object value | ||||
| 
 | ||||
|  | @ -859,8 +894,8 @@ class basic_json | |||
|     value. In case @a count is `0`, an empty array is created. As postcondition, | ||||
|     `std::distance(begin(),end()) == count` holds. | ||||
| 
 | ||||
|     @param count  the number of JSON copies of @a value to create | ||||
|     @param value  the JSON value to copy | ||||
|     @param[in] count  the number of JSON copies of @a value to create | ||||
|     @param[in] value  the JSON value to copy | ||||
| 
 | ||||
|     @complexity Linear in @a count. | ||||
| 
 | ||||
|  | @ -974,7 +1009,7 @@ class basic_json | |||
| 
 | ||||
|     Creates a copy of a given JSON value. | ||||
| 
 | ||||
|     @param other  the JSON value to copy | ||||
|     @param[in] other  the JSON value to copy | ||||
| 
 | ||||
|     @complexity Linear in the size of @a other. | ||||
| 
 | ||||
|  | @ -1045,7 +1080,7 @@ class basic_json | |||
|     value @a other using move semantics. It "steals" the resources from @a | ||||
|     other and leaves it as JSON null value. | ||||
| 
 | ||||
|     @param other  value to move to this object | ||||
|     @param[in,out] other  value to move to this object | ||||
| 
 | ||||
|     @post @a other is a JSON null value | ||||
| 
 | ||||
|  | @ -1070,7 +1105,7 @@ class basic_json | |||
|     strategy: It is expressed in terms of the copy constructor, destructor, and | ||||
|     the swap() member function. | ||||
| 
 | ||||
|     @param other  value to copy from | ||||
|     @param[in] other  value to copy from | ||||
| 
 | ||||
|     @complexity Linear. | ||||
| 
 | ||||
|  | @ -1165,7 +1200,7 @@ class basic_json | |||
|     Python's @p json.dumps() function, and currently supports its @p indent | ||||
|     parameter. | ||||
| 
 | ||||
|     @param indent  if indent is nonnegative, then array elements and object | ||||
|     @param[in] indent if indent is nonnegative, then array elements and object | ||||
|     members will be pretty-printed with that indent level. An indent level of 0 | ||||
|     will only insert newlines. -1 (the default) selects the most compact | ||||
|     representation | ||||
|  | @ -2634,6 +2669,24 @@ class basic_json | |||
| 
 | ||||
|     /*! | ||||
|     @brief comparison: equal | ||||
| 
 | ||||
|     Compares two JSON values for equality according to the following rules: | ||||
|     - Two JSON values are equal if (1) they are from the same type and (2) | ||||
|       their stored values are the same. | ||||
|     - Integer and floating-point numbers are automatically converted before | ||||
|       comparison. Floating-point numbers are compared indirectly: two | ||||
|       floating-point numbers `f1` and `f2` are considered equal if neither | ||||
|       `f1 > f2` nor `f2 > f1` holds. | ||||
|     - Two JSON null values are equal. | ||||
| 
 | ||||
|     @param[in] lhs  first JSON value to consider | ||||
|     @param[in] rhs  second JSON value to consider | ||||
|     @return whether the values @a lhs and @a rhs are equal | ||||
| 
 | ||||
|     @complexity Linear. | ||||
| 
 | ||||
|     @todo Add example. | ||||
| 
 | ||||
|     @ingroup container | ||||
|     */ | ||||
|     friend bool operator==(const_reference lhs, const_reference rhs) noexcept | ||||
|  | @ -2678,6 +2731,17 @@ class basic_json | |||
| 
 | ||||
|     /*! | ||||
|     @brief comparison: not equal | ||||
| 
 | ||||
|     Compares two JSON values for inequality by calculating `not (lhs == rhs)`. | ||||
| 
 | ||||
|     @param[in] lhs  first JSON value to consider | ||||
|     @param[in] rhs  second JSON value to consider | ||||
|     @return whether the values @a lhs and @a rhs are not equal | ||||
| 
 | ||||
|     @complexity Linear. | ||||
| 
 | ||||
|     @todo Add example. | ||||
| 
 | ||||
|     @ingroup container | ||||
|     */ | ||||
|     friend bool operator!=(const_reference lhs, const_reference rhs) noexcept | ||||
|  | @ -2685,7 +2749,27 @@ class basic_json | |||
|         return not (lhs == rhs); | ||||
|     } | ||||
| 
 | ||||
|     /// comparison: less than | ||||
|     /*! | ||||
|     @brief comparison: less than | ||||
| 
 | ||||
|     Compares whether one JSON value @a lhs is less than another JSON value @a | ||||
|     rhs according to the following rules: | ||||
|     - If @a lhs and @a rhs have the same type, the values are compared using | ||||
|       the default `<` operator. | ||||
|     - Integer and floating-point numbers are automatically converted before | ||||
|       comparison | ||||
|     - In case @a lhs and @a rhs have different types, the values are ignored | ||||
|       and the order of the types is considered, see | ||||
|       @ref operator<(const value_t, const value_t). | ||||
| 
 | ||||
|     @param[in] lhs  first JSON value to consider | ||||
|     @param[in] rhs  second JSON value to consider | ||||
|     @return whether @a lhs is less than @a rhs | ||||
| 
 | ||||
|     @complexity Linear. | ||||
| 
 | ||||
|     @todo Add example. | ||||
|     */ | ||||
|     friend bool operator<(const_reference lhs, const_reference rhs) noexcept | ||||
|     { | ||||
|         const auto lhs_type = lhs.type(); | ||||
|  | @ -2729,19 +2813,58 @@ class basic_json | |||
|         return lhs_type < rhs_type; | ||||
|     } | ||||
| 
 | ||||
|     /// comparison: less than or equal | ||||
|     /*! | ||||
|     @brief comparison: less than or equal | ||||
| 
 | ||||
|     Compares whether one JSON value @a lhs is less than or equal to another | ||||
|     JSON value by calculating `not (rhs < lhs)`. | ||||
| 
 | ||||
|     @param[in] lhs  first JSON value to consider | ||||
|     @param[in] rhs  second JSON value to consider | ||||
|     @return whether @a lhs is less than or equal to @a rhs | ||||
| 
 | ||||
|     @complexity Linear. | ||||
| 
 | ||||
|     @todo Add example. | ||||
|     */ | ||||
|     friend bool operator<=(const_reference lhs, const_reference rhs) noexcept | ||||
|     { | ||||
|         return not (rhs < lhs); | ||||
|     } | ||||
| 
 | ||||
|     /// comparison: greater than | ||||
|     /*! | ||||
|     @brief comparison: greater than | ||||
| 
 | ||||
|     Compares whether one JSON value @a lhs is greater than another | ||||
|     JSON value by calculating `not (lhs <= rhs)`. | ||||
| 
 | ||||
|     @param[in] lhs  first JSON value to consider | ||||
|     @param[in] rhs  second JSON value to consider | ||||
|     @return whether @a lhs is greater than to @a rhs | ||||
| 
 | ||||
|     @complexity Linear. | ||||
| 
 | ||||
|     @todo Add example. | ||||
|     */ | ||||
|     friend bool operator>(const_reference lhs, const_reference rhs) noexcept | ||||
|     { | ||||
|         return not (lhs <= rhs); | ||||
|     } | ||||
| 
 | ||||
|     /// comparison: greater than or equal | ||||
|     /*! | ||||
|     @brief comparison: greater than or equal | ||||
| 
 | ||||
|     Compares whether one JSON value @a lhs is greater than or equal to another | ||||
|     JSON value by calculating `not (lhs < rhs)`. | ||||
| 
 | ||||
|     @param[in] lhs  first JSON value to consider | ||||
|     @param[in] rhs  second JSON value to consider | ||||
|     @return whether @a lhs is greater than or equal to @a rhs | ||||
| 
 | ||||
|     @complexity Linear. | ||||
| 
 | ||||
|     @todo Add example. | ||||
|     */ | ||||
|     friend bool operator>=(const_reference lhs, const_reference rhs) noexcept | ||||
|     { | ||||
|         return not (lhs < rhs); | ||||
|  | @ -2757,7 +2880,25 @@ class basic_json | |||
|     /// @name serialization | ||||
|     /// @{ | ||||
| 
 | ||||
|     /// serialize to stream | ||||
|     /*! | ||||
|     @brief serialize to stream | ||||
| 
 | ||||
|     Serialize the given JSON value @a j to the output stream @a o. The JSON | ||||
|     value will be serialized using the @ref dump member function. The | ||||
|     indentation of the output can be controlled with the member variable | ||||
|     `width` of the output stream @a o. For instance, using the manipulator | ||||
|     `std::setw(4)` on @a o sets the indentation level to `4` and the | ||||
|     serialization result is the same as calling `dump(4)`. | ||||
| 
 | ||||
|     @param[in,out] o  stream to serialize to | ||||
|     @param[in] j  JSON value to serialize | ||||
| 
 | ||||
|     @return the stream @a o | ||||
| 
 | ||||
|     @complexity Linear. | ||||
| 
 | ||||
|     @liveexample{,operator_serialize} | ||||
|     */ | ||||
|     friend std::ostream& operator<<(std::ostream& o, const basic_json& j) | ||||
|     { | ||||
|         // read width member and use it as indentation parameter if nonzero | ||||
|  | @ -2772,7 +2913,10 @@ class basic_json | |||
|         return o; | ||||
|     } | ||||
| 
 | ||||
|     /// serialize to stream | ||||
|     /*! | ||||
|     @brief serialize to stream | ||||
|     @copydoc operator<<(std::ostream&, const basic_json&) | ||||
|     */ | ||||
|     friend std::ostream& operator>>(const basic_json& j, std::ostream& o) | ||||
|     { | ||||
|         return o << j; | ||||
|  | @ -2872,8 +3016,8 @@ class basic_json | |||
|     characters by a sequence of "\u" followed by a four-digit hex | ||||
|     representation. | ||||
| 
 | ||||
|     @param o  the stream to write the escaped string to | ||||
|     @param s  the string to escape | ||||
|     @param[out] o  the stream to write the escaped string to | ||||
|     @param[in] s  the string to escape | ||||
|     */ | ||||
|     static void escape_string(std::ostream& o, const string_t& s) noexcept | ||||
|     { | ||||
|  | @ -2961,10 +3105,10 @@ class basic_json | |||
|     - integer numbers are converted implictly via operator<< | ||||
|     - floating-point numbers are converted to a string using "%g" format | ||||
| 
 | ||||
|     @param o               stream to write to | ||||
|     @param pretty_print    whether the output shall be pretty-printed | ||||
|     @param indent_step     the indent level | ||||
|     @param current_indent  the current indent level (only used internally) | ||||
|     @param[out] o              stream to write to | ||||
|     @param[in] pretty_print    whether the output shall be pretty-printed | ||||
|     @param[in] indent_step     the indent level | ||||
|     @param[in] current_indent  the current indent level (only used internally) | ||||
|     */ | ||||
|     void dump(std::ostream& o, const bool pretty_print, const unsigned int indent_step, | ||||
|               const unsigned int current_indent = 0) const noexcept | ||||
|  | @ -4254,8 +4398,8 @@ class basic_json | |||
|         /*! | ||||
|         @brief create a string from a Unicode code point | ||||
| 
 | ||||
|         @param codepoint1  the code point (can be high surrogate) | ||||
|         @param codepoint2  the code point (can be low surrogate or 0) | ||||
|         @param[in] codepoint1  the code point (can be high surrogate) | ||||
|         @param[in] codepoint2  the code point (can be low surrogate or 0) | ||||
|         @return string representation of the code point | ||||
|         @exception std::out_of_range if code point is >0x10ffff | ||||
|         @exception std::invalid_argument if the low surrogate is invalid | ||||
|  | @ -4977,11 +5121,13 @@ struct hash<nlohmann::json> | |||
| } | ||||
| 
 | ||||
| /*! | ||||
| @brief user-defined string literal for JSON values | ||||
| 
 | ||||
| This operator implements a user-defined string literal for JSON objects. It can | ||||
| be used by adding \p "_json" to a string literal and returns a JSON object if | ||||
| no parse error occurred. | ||||
| 
 | ||||
| @param s  a string representation of a JSON object | ||||
| @param[in] s  a string representation of a JSON object | ||||
| @return a JSON object | ||||
| */ | ||||
| inline nlohmann::json operator "" _json(const char* s, std::size_t) | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue