Go to the documentation of this file.
    6 #ifndef JSON_H_INCLUDED 
    7 #define JSON_H_INCLUDED 
    9 #if !defined(JSON_IS_AMALGAMATION) 
   11 #endif // if !defined(JSON_IS_AMALGAMATION) 
   16 #if !defined(JSONCPP_NORETURN) 
   17 #if defined(_MSC_VER) && _MSC_VER == 1800 
   18 #define JSONCPP_NORETURN __declspec(noreturn) 
   20 #define JSONCPP_NORETURN [[noreturn]] 
   27 #if !defined(JSONCPP_TEMPLATE_DELETE) 
   28 #if defined(__clang__) && defined(__apple_build_version__) 
   29 #if __apple_build_version__ <= 8000042 
   30 #define JSONCPP_TEMPLATE_DELETE 
   32 #elif defined(__clang__) 
   33 #if __clang_major__ == 3 && __clang_minor__ <= 8 
   34 #define JSONCPP_TEMPLATE_DELETE 
   37 #if !defined(JSONCPP_TEMPLATE_DELETE) 
   38 #define JSONCPP_TEMPLATE_DELETE = delete 
   51 #if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) 
   53 #pragma warning(disable : 4251) 
   54 #endif // if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) 
   62 #if JSON_USE_EXCEPTION 
   71   char const* what() const noexcept override;
 
  151   operator const char*() 
const { 
return c_str_; }
 
  153   const char* 
c_str()
 const { 
return c_str_; }
 
  202 #if defined(JSON_HAS_INT64) 
  205 #endif // defined(JSON_HAS_INT64) 
  220   static Value const& nullSingleton();
 
  237 #if defined(JSON_HAS_INT64) 
  244 #endif // defined(JSON_HAS_INT64) 
  245   static constexpr 
UInt defaultRealPrecision = 17;
 
  250   static constexpr 
double maxUInt64AsDouble = 18446744073709551615.0;
 
  259 #ifndef JSONCPP_DOC_EXCLUDE_IMPLEMENTATION 
  262     enum DuplicationPolicy { noDuplication = 0, duplicate, duplicateOnCopy };
 
  264     CZString(
char const* str, 
unsigned length, DuplicationPolicy allocate);
 
  265     CZString(CZString 
const& other);
 
  266     CZString(CZString&& other);
 
  268     CZString& operator=(
const CZString& other);
 
  269     CZString& operator=(CZString&& other);
 
  271     bool operator<(CZString 
const& other) 
const;
 
  275     char const* data() 
const;
 
  276     unsigned length() 
const;
 
  277     bool isStaticString() 
const;
 
  280     void swap(CZString& other);
 
  282     struct StringStorage {
 
  283       unsigned policy_ : 2;
 
  284       unsigned length_ : 30; 
 
  290       StringStorage storage_;
 
  295   typedef std::map<CZString, Value> ObjectValues;
 
  296 #endif // ifndef JSONCPP_DOC_EXCLUDE_IMPLEMENTATION 
  318 #if defined(JSON_HAS_INT64) 
  321 #endif // if defined(JSON_HAS_INT64) 
  323   Value(
const char* value); 
 
  324   Value(
const char* begin, 
const char* end); 
 
  357   void swapPayload(
Value& other);
 
  360   void copy(
const Value& other);
 
  362   void copyPayload(
const Value& other);
 
  367   bool operator<(
const Value& other) 
const;
 
  368   bool operator<=(
const Value& other) 
const;
 
  369   bool operator>=(
const Value& other) 
const;
 
  370   bool operator>(
const Value& other) 
const;
 
  373   int compare(
const Value& other) 
const;
 
  375   const char* asCString() 
const; 
 
  376 #if JSONCPP_USING_SECURE_MEMORY 
  377   unsigned getCStringLength() 
const; 
 
  384   bool getString(
char const** begin, 
char const** end) 
const;
 
  387 #if defined(JSON_HAS_INT64) 
  388   Int64 asInt64() 
const;
 
  390 #endif // if defined(JSON_HAS_INT64) 
  393   float asFloat() 
const;
 
  394   double asDouble() 
const;
 
  400   bool isInt64() 
const;
 
  402   bool isUInt64() 
const;
 
  403   bool isIntegral() 
const;
 
  404   bool isDouble() 
const;
 
  405   bool isNumeric() 
const;
 
  406   bool isString() 
const;
 
  407   bool isArray() 
const;
 
  408   bool isObject() 
const;
 
  414   bool isConvertibleTo(
ValueType other) const;
 
  424   explicit operator 
bool() const;
 
  445   Value& operator[](
int index);
 
  453   const 
Value& operator[](
int index) const;
 
  474   Value& operator[](const 
char* key);
 
  477   const 
Value& operator[](const 
char* key) const;
 
  500   Value get(const 
char* key, const 
Value& defaultValue) const;
 
  504   Value get(const 
char* begin, const 
char* end,
 
  505             const 
Value& defaultValue) const;
 
  513   Value const* find(
char const* begin, 
char const* end) const;
 
  517   Value* demand(
char const* begin, 
char const* end);
 
  523   void removeMember(const 
char* key);
 
  526   void removeMember(const 
String& key);
 
  529   bool removeMember(const 
char* key, 
Value* removed);
 
  536   bool removeMember(
String const& key, 
Value* removed);
 
  538   bool removeMember(const 
char* begin, const 
char* end, 
Value* removed);
 
  549   bool isMember(const 
char* key) const;
 
  552   bool isMember(const 
String& key) const;
 
  554   bool isMember(const 
char* begin, const 
char* end) const;
 
  561   Members getMemberNames() const;
 
  566     setComment(
String(comment, strlen(comment)), placement);
 
  570     setComment(
String(comment, len), placement);
 
  578   String toStyledString() 
const;
 
  580   const_iterator begin() 
const;
 
  581   const_iterator end() 
const;
 
  588   void setOffsetStart(ptrdiff_t start);
 
  589   void setOffsetLimit(ptrdiff_t limit);
 
  590   ptrdiff_t getOffsetStart() 
const;
 
  591   ptrdiff_t getOffsetLimit() 
const;
 
  595     bits_.value_type_ = 
static_cast<unsigned char>(v);
 
  597   bool isAllocated()
 const { 
return bits_.allocated_; }
 
  598   void setIsAllocated(
bool v) { bits_.allocated_ = v; }
 
  600   void initBasic(
ValueType type, 
bool allocated = 
false);
 
  601   void dupPayload(
const Value& other);
 
  602   void releasePayload();
 
  603   void dupMeta(
const Value& other);
 
  605   Value& resolveReference(
const char* key);
 
  606   Value& resolveReference(
const char* key, 
const char* end);
 
  635     Comments() = 
default;
 
  636     Comments(
const Comments& that);
 
  637     Comments(Comments&& that);
 
  638     Comments& operator=(
const Comments& that);
 
  639     Comments& operator=(Comments&& that);
 
  645     using Array = std::array<String, numberOfCommentPlacement>;
 
  646     std::unique_ptr<Array> ptr_;
 
  656 template <> 
inline bool Value::as<bool>()
 const { 
return asBool(); }
 
  657 template <> 
inline bool Value::is<bool>()
 const { 
return isBool(); }
 
  659 template <> 
inline Int Value::as<Int>()
 const { 
return asInt(); }
 
  660 template <> 
inline bool Value::is<Int>()
 const { 
return isInt(); }
 
  662 template <> 
inline UInt Value::as<UInt>()
 const { 
return asUInt(); }
 
  663 template <> 
inline bool Value::is<UInt>()
 const { 
return isUInt(); }
 
  665 #if defined(JSON_HAS_INT64) 
  666 template <> 
inline Int64 Value::as<Int64>()
 const { 
return asInt64(); }
 
  667 template <> 
inline bool Value::is<Int64>()
 const { 
return isInt64(); }
 
  669 template <> 
inline UInt64 Value::as<UInt64>()
 const { 
return asUInt64(); }
 
  670 template <> 
inline bool Value::is<UInt64>()
 const { 
return isUInt64(); }
 
  673 template <> 
inline double Value::as<double>()
 const { 
return asDouble(); }
 
  674 template <> 
inline bool Value::is<double>()
 const { 
return isDouble(); }
 
  676 template <> 
inline String Value::as<String>()
 const { 
return asString(); }
 
  677 template <> 
inline bool Value::is<String>()
 const { 
return isString(); }
 
  681 template <> 
inline float Value::as<float>()
 const { 
return asFloat(); }
 
  682 template <> 
inline const char* Value::as<const char*>()
 const {
 
  699   enum Kind { kindNone = 0, kindIndex, kindKey };
 
  702   Kind kind_{kindNone};
 
  724   const Value& resolve(
const Value& root) 
const;
 
  731   using InArgs = std::vector<const PathArgument*>;
 
  732   using Args = std::vector<PathArgument>;
 
  734   void makePath(
const String& path, 
const InArgs& in);
 
  735   void addPathInArg(
const String& path, 
const InArgs& in,
 
  736                     InArgs::const_iterator& itInArg, PathArgument::Kind kind);
 
  737   static void invalidPath(
const String& path, 
int location);
 
  748   using size_t = 
unsigned int;
 
  778   char const* memberName() const;
 
  782   char const* memberName(
char const** end) const;
 
  791   const 
Value& deref() const;
 
  800   bool isEqual(const 
SelfType& other) const;
 
  805   Value::ObjectValues::iterator current_;
 
  875   using size_t = 
unsigned int;
 
  888   explicit ValueIterator(
const Value::ObjectValues::iterator& current);
 
  930 #if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) 
  932 #endif // if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) 
  934 #endif // JSON_H_INCLUDED 
  
bool operator!=(const SelfType &other) const
#define JSONCPP_TEMPLATE_DELETE
pointer operator->() const
ValueType
Type of the value held by a Value object.
@ numberOfCommentPlacement
root value)
Json::LargestUInt LargestUInt
@ uintValue
unsigned integer value
@ significantDigits
we set max number of significant digits in string
@ commentAfterOnSameLine
a comment just after a value on the same line
const iterator for object and array value.
bool operator==(const SelfType &other) const
@ commentBefore
a comment placed on the line before a value
Exceptions thrown by JSON_ASSERT/JSON_FAIL macros.
@ stringValue
UTF-8 string value.
Iterator for object and array value.
bool operator==(const SecureAllocator< T > &, const SecureAllocator< U > &)
difference_type computeDistance(const SelfType &other) const
Experimental and untested: represents a "path" to access a node.
std::bidirectional_iterator_tag iterator_category
@ commentAfter
a comment on the line after a value (only make sense for
@ intValue
signed integer value
@ decimalPlaces
we set max number of digits after "." in string
bool operator!=(const SecureAllocator< T > &, const SecureAllocator< U > &)
~Exception() noexcept override
ValueIterator(const ValueIterator &other)
@ arrayValue
array value (ordered list)
PrecisionType
Type of precision for formatting of real values.
void swap(Value &other)
Swap everything.
Base class for all exceptions we throw.
StaticString(const char *czstring)
Json::LargestInt LargestInt
Experimental and untested: represents an element of the "path" to access a node.
Json::ArrayIndex ArrayIndex
#define JSONCPP_DEPRECATED(message)
void swap(Value &a, Value &b)
JSON (JavaScript Object Notation).
#define JSON_API
If defined, indicates that the source file is amalgamated to prevent private header inclusion.
std::vector< String > Members
base class for Value iterators.
@ objectValue
object value (collection of name/value pairs).
const char * c_str() const
static const Value & nullRef
std::basic_string< char, std::char_traits< char >, Allocator< char > > String
void setComment(const char *comment, size_t len, CommentPlacement placement)
Comments must be //... or /* ... */.
reference operator*() const
T as() const =delete
The as<T> and is<T> member function templates and specializations.
difference_type operator-(const SelfType &other) const
Lightweight wrapper to tag static string.
Exceptions which the user cannot easily avoid.