summaryrefslogtreecommitdiff
path: root/Utilities/cmjsoncpp/src/lib_json/json_value.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Utilities/cmjsoncpp/src/lib_json/json_value.cpp')
-rw-r--r--Utilities/cmjsoncpp/src/lib_json/json_value.cpp1847
1 files changed, 798 insertions, 1049 deletions
diff --git a/Utilities/cmjsoncpp/src/lib_json/json_value.cpp b/Utilities/cmjsoncpp/src/lib_json/json_value.cpp
index eadb1c375..f271e5731 100644
--- a/Utilities/cmjsoncpp/src/lib_json/json_value.cpp
+++ b/Utilities/cmjsoncpp/src/lib_json/json_value.cpp
@@ -1,25 +1,23 @@
// Copyright 2011 Baptiste Lepilleur and The JsonCpp Authors
// Distributed under MIT license, or public domain if desired and
// recognized in your jurisdiction.
-// See file LICENSE for detail or copy at
-// http://jsoncpp.sourceforge.net/LICENSE
+// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
#if !defined(JSON_IS_AMALGAMATION)
-# include <json/assertions.h>
-# include <json/value.h>
-# include <json/writer.h>
+#include <json/assertions.h>
+#include <json/value.h>
+#include <json/writer.h>
#endif // if !defined(JSON_IS_AMALGAMATION)
+#include <math.h>
#include <sstream>
#include <utility>
-
-#include <assert.h>
-#include <math.h>
#include <string.h>
+#include <assert.h>
#ifdef JSON_USE_CPPTL
-# include <cpptl/conststring.h>
+#include <cpptl/conststring.h>
#endif
+#include <cstddef> // size_t
#include <algorithm> // min()
-#include <cstddef> // size_t
#define JSON_ASSERT_UNREACHABLE assert(false)
@@ -29,24 +27,24 @@ namespace Json {
// kNull must be word-aligned to avoid crashing on ARM. We use an alignment of
// 8 (instead of 4) as a bit of future-proofing.
#if defined(__ARMEL__)
-# define ALIGNAS(byte_alignment) __attribute__((aligned(byte_alignment)))
+#define ALIGNAS(byte_alignment) __attribute__((aligned(byte_alignment)))
#else
-# define ALIGNAS(byte_alignment)
+#define ALIGNAS(byte_alignment)
#endif
-// static const unsigned char ALIGNAS(8) kNull[sizeof(Value)] = { 0 };
-// const unsigned char& kNullRef = kNull[0];
-// const Value& Value::null = reinterpret_cast<const Value&>(kNullRef);
-// const Value& Value::nullRef = null;
+//static const unsigned char ALIGNAS(8) kNull[sizeof(Value)] = { 0 };
+//const unsigned char& kNullRef = kNull[0];
+//const Value& Value::null = reinterpret_cast<const Value&>(kNullRef);
+//const Value& Value::nullRef = null;
// static
Value const& Value::nullSingleton()
{
- static Value const nullStatic;
- return nullStatic;
+ static Value const nullStatic;
+ return nullStatic;
}
-// for backwards compatibility, we'll leave these global references around, but
-// DO NOT use them in JSONCPP library code any more!
+// for backwards compatibility, we'll leave these global references around, but DO NOT
+// use them in JSONCPP library code any more!
Value const& Value::null = Value::nullSingleton();
Value const& Value::nullRef = Value::nullSingleton();
@@ -68,29 +66,23 @@ const LargestUInt Value::maxLargestUInt = LargestUInt(-1);
#if !defined(JSON_USE_INT64_DOUBLE_CONVERSION)
template <typename T, typename U>
-static inline bool InRange(double d, T min, U max)
-{
+static inline bool InRange(double d, T min, U max) {
// The casts can lose precision, but we are looking only for
// an approximate range. Might fail on edge cases though. ~cdunn
- // return d >= static_cast<double>(min) && d <= static_cast<double>(max);
+ //return d >= static_cast<double>(min) && d <= static_cast<double>(max);
return d >= min && d <= max;
}
#else // if !defined(JSON_USE_INT64_DOUBLE_CONVERSION)
-static inline double integerToDouble(Json::UInt64 value)
-{
- return static_cast<double>(Int64(value / 2)) * 2.0 +
- static_cast<double>(Int64(value & 1));
+static inline double integerToDouble(Json::UInt64 value) {
+ return static_cast<double>(Int64(value / 2)) * 2.0 + static_cast<double>(Int64(value & 1));
}
-template <typename T>
-static inline double integerToDouble(T value)
-{
+template <typename T> static inline double integerToDouble(T value) {
return static_cast<double>(value);
}
template <typename T, typename U>
-static inline bool InRange(double d, T min, U max)
-{
+static inline bool InRange(double d, T min, U max) {
return d >= integerToDouble(min) && d <= integerToDouble(max);
}
#endif // if !defined(JSON_USE_INT64_DOUBLE_CONVERSION)
@@ -102,7 +94,8 @@ static inline bool InRange(double d, T min, U max)
* computed using strlen(value).
* @return Pointer on the duplicate instance of string.
*/
-static inline char* duplicateStringValue(const char* value, size_t length)
+static inline char* duplicateStringValue(const char* value,
+ size_t length)
{
// Avoid an integer overflow in the call to malloc below by limiting length
// to a sane value.
@@ -111,8 +104,9 @@ static inline char* duplicateStringValue(const char* value, size_t length)
char* newString = static_cast<char*>(malloc(length + 1));
if (newString == NULL) {
- throwRuntimeError("in Json::Value::duplicateStringValue(): "
- "Failed to allocate string value buffer");
+ throwRuntimeError(
+ "in Json::Value::duplicateStringValue(): "
+ "Failed to allocate string value buffer");
}
memcpy(newString, value, length);
newString[length] = 0;
@@ -121,30 +115,30 @@ static inline char* duplicateStringValue(const char* value, size_t length)
/* Record the length as a prefix.
*/
-static inline char* duplicateAndPrefixStringValue(const char* value,
- unsigned int length)
+static inline char* duplicateAndPrefixStringValue(
+ const char* value,
+ unsigned int length)
{
// Avoid an integer overflow in the call to malloc below by limiting length
// to a sane value.
- JSON_ASSERT_MESSAGE(length <= static_cast<unsigned>(Value::maxInt) -
- sizeof(unsigned) - 1U,
+ JSON_ASSERT_MESSAGE(length <= static_cast<unsigned>(Value::maxInt) - sizeof(unsigned) - 1U,
"in Json::Value::duplicateAndPrefixStringValue(): "
"length too big for prefixing");
- unsigned actualLength =
- length + static_cast<unsigned>(sizeof(unsigned)) + 1U;
+ unsigned actualLength = length + static_cast<unsigned>(sizeof(unsigned)) + 1U;
char* newString = static_cast<char*>(malloc(actualLength));
if (newString == 0) {
- throwRuntimeError("in Json::Value::duplicateAndPrefixStringValue(): "
- "Failed to allocate string value buffer");
+ throwRuntimeError(
+ "in Json::Value::duplicateAndPrefixStringValue(): "
+ "Failed to allocate string value buffer");
}
*reinterpret_cast<unsigned*>(newString) = length;
memcpy(newString + sizeof(unsigned), value, length);
- newString[actualLength - 1U] =
- 0; // to avoid buffer over-run accidents by users later
+ newString[actualLength - 1U] = 0; // to avoid buffer over-run accidents by users later
return newString;
}
-inline static void decodePrefixedString(bool isPrefixed, char const* prefixed,
- unsigned* length, char const** value)
+inline static void decodePrefixedString(
+ bool isPrefixed, char const* prefixed,
+ unsigned* length, char const** value)
{
if (!isPrefixed) {
*length = static_cast<unsigned>(strlen(prefixed));
@@ -154,12 +148,10 @@ inline static void decodePrefixedString(bool isPrefixed, char const* prefixed,
*value = prefixed + sizeof(unsigned);
}
}
-/** Free the string duplicated by
- * duplicateStringValue()/duplicateAndPrefixStringValue().
+/** Free the string duplicated by duplicateStringValue()/duplicateAndPrefixStringValue().
*/
#if JSONCPP_USING_SECURE_MEMORY
-static inline void releasePrefixedStringValue(char* value)
-{
+static inline void releasePrefixedStringValue(char* value) {
unsigned length = 0;
char const* valueDecoded;
decodePrefixedString(true, value, &length, &valueDecoded);
@@ -167,20 +159,17 @@ static inline void releasePrefixedStringValue(char* value)
memset(value, 0, size);
free(value);
}
-static inline void releaseStringValue(char* value, unsigned length)
-{
+static inline void releaseStringValue(char* value, unsigned length) {
// length==0 => we allocated the strings memory
- size_t size = (length == 0) ? strlen(value) : length;
+ size_t size = (length==0) ? strlen(value) : length;
memset(value, 0, size);
free(value);
}
-#else // !JSONCPP_USING_SECURE_MEMORY
-static inline void releasePrefixedStringValue(char* value)
-{
+#else // !JSONCPP_USING_SECURE_MEMORY
+static inline void releasePrefixedStringValue(char* value) {
free(value);
}
-static inline void releaseStringValue(char* value, unsigned)
-{
+static inline void releaseStringValue(char* value, unsigned) {
free(value);
}
#endif // JSONCPP_USING_SECURE_MEMORY
@@ -196,30 +185,26 @@ static inline void releaseStringValue(char* value, unsigned)
// //////////////////////////////////////////////////////////////////
#if !defined(JSON_IS_AMALGAMATION)
-# include "json_valueiterator.inl"
+#include "json_valueiterator.inl"
#endif // if !defined(JSON_IS_AMALGAMATION)
namespace Json {
Exception::Exception(JSONCPP_STRING const& msg)
: msg_(msg)
-{
-}
+{}
Exception::~Exception() JSONCPP_NOEXCEPT
-{
-}
+{}
char const* Exception::what() const JSONCPP_NOEXCEPT
{
- return this->msg_.c_str();
+ return msg_.c_str();
}
RuntimeError::RuntimeError(JSONCPP_STRING const& msg)
: Exception(msg)
-{
-}
+{}
LogicError::LogicError(JSONCPP_STRING const& msg)
: Exception(msg)
-{
-}
+{}
JSONCPP_NORETURN void throwRuntimeError(JSONCPP_STRING const& msg)
{
throw RuntimeError(msg);
@@ -237,29 +222,25 @@ JSONCPP_NORETURN void throwLogicError(JSONCPP_STRING const& msg)
// //////////////////////////////////////////////////////////////////
// //////////////////////////////////////////////////////////////////
-Value::CommentInfo::CommentInfo()
- : comment_(0)
-{
-}
+Value::CommentInfo::CommentInfo() : comment_(0)
+{}
-Value::CommentInfo::~CommentInfo()
-{
- if (this->comment_)
- releaseStringValue(this->comment_, 0u);
+Value::CommentInfo::~CommentInfo() {
+ if (comment_)
+ releaseStringValue(comment_, 0u);
}
-void Value::CommentInfo::setComment(const char* text, size_t len)
-{
- if (this->comment_) {
- releaseStringValue(this->comment_, 0u);
- this->comment_ = 0;
+void Value::CommentInfo::setComment(const char* text, size_t len) {
+ if (comment_) {
+ releaseStringValue(comment_, 0u);
+ comment_ = 0;
}
JSON_ASSERT(text != 0);
JSON_ASSERT_MESSAGE(
- text[0] == '\0' || text[0] == '/',
- "in Json::Value::setComment(): Comments must start with /");
+ text[0] == '\0' || text[0] == '/',
+ "in Json::Value::setComment(): Comments must start with /");
// It seems that /**/ style comments are acceptable as well.
- this->comment_ = duplicateStringValue(text, len);
+ comment_ = duplicateStringValue(text, len);
}
// //////////////////////////////////////////////////////////////////
@@ -273,130 +254,91 @@ void Value::CommentInfo::setComment(const char* text, size_t len)
// Notes: policy_ indicates if the string was allocated when
// a string is stored.
-Value::CZString::CZString(ArrayIndex aindex)
- : cstr_(0)
- , index_(aindex)
-{
-}
+Value::CZString::CZString(ArrayIndex aindex) : cstr_(0), index_(aindex) {}
-Value::CZString::CZString(char const* str, unsigned ulength,
- DuplicationPolicy allocate)
- : cstr_(str)
-{
+Value::CZString::CZString(char const* str, unsigned ulength, DuplicationPolicy allocate)
+ : cstr_(str) {
// allocate != duplicate
- this->storage_.policy_ = allocate & 0x3;
- this->storage_.length_ = ulength & 0x3FFFFFFF;
+ storage_.policy_ = allocate & 0x3;
+ storage_.length_ = ulength & 0x3FFFFFFF;
}
-Value::CZString::CZString(const CZString& other)
-{
- this->cstr_ = (other.storage_.policy_ != noDuplication && other.cstr_ != 0
- ? duplicateStringValue(other.cstr_, other.storage_.length_)
- : other.cstr_);
- this->storage_.policy_ =
- static_cast<unsigned>(
- other.cstr_ ? (static_cast<DuplicationPolicy>(other.storage_.policy_) ==
- noDuplication
- ? noDuplication
- : duplicate)
- : static_cast<DuplicationPolicy>(other.storage_.policy_)) &
- 3U;
- this->storage_.length_ = other.storage_.length_;
+Value::CZString::CZString(const CZString& other) {
+ cstr_ = (other.storage_.policy_ != noDuplication && other.cstr_ != 0
+ ? duplicateStringValue(other.cstr_, other.storage_.length_)
+ : other.cstr_);
+ storage_.policy_ = static_cast<unsigned>(other.cstr_
+ ? (static_cast<DuplicationPolicy>(other.storage_.policy_) == noDuplication
+ ? noDuplication : duplicate)
+ : static_cast<DuplicationPolicy>(other.storage_.policy_)) & 3U;
+ storage_.length_ = other.storage_.length_;
}
#if JSON_HAS_RVALUE_REFERENCES
Value::CZString::CZString(CZString&& other)
- : cstr_(other.cstr_)
- , index_(other.index_)
-{
+ : cstr_(other.cstr_), index_(other.index_) {
other.cstr_ = nullptr;
}
#endif
-Value::CZString::~CZString()
-{
- if (this->cstr_ && this->storage_.policy_ == duplicate) {
- releaseStringValue(const_cast<char*>(this->cstr_),
- this->storage_.length_ +
- 1u); //+1 for null terminating character for sake of
- //completeness but not actually necessary
+Value::CZString::~CZString() {
+ if (cstr_ && storage_.policy_ == duplicate) {
+ releaseStringValue(const_cast<char*>(cstr_), storage_.length_ + 1u); //+1 for null terminating character for sake of completeness but not actually necessary
}
}
-void Value::CZString::swap(CZString& other)
-{
- std::swap(this->cstr_, other.cstr_);
- std::swap(this->index_, other.index_);
+void Value::CZString::swap(CZString& other) {
+ std::swap(cstr_, other.cstr_);
+ std::swap(index_, other.index_);
}
-Value::CZString& Value::CZString::operator=(const CZString& other)
-{
- this->cstr_ = other.cstr_;
- this->index_ = other.index_;
+Value::CZString& Value::CZString::operator=(const CZString& other) {
+ cstr_ = other.cstr_;
+ index_ = other.index_;
return *this;
}
#if JSON_HAS_RVALUE_REFERENCES
-Value::CZString& Value::CZString::operator=(CZString&& other)
-{
- this->cstr_ = other.cstr_;
- this->index_ = other.index_;
+Value::CZString& Value::CZString::operator=(CZString&& other) {
+ cstr_ = other.cstr_;
+ index_ = other.index_;
other.cstr_ = nullptr;
return *this;
}
#endif
-bool Value::CZString::operator<(const CZString& other) const
-{
- if (!this->cstr_)
- return this->index_ < other.index_;
- // return strcmp(cstr_, other.cstr_) < 0;
+bool Value::CZString::operator<(const CZString& other) const {
+ if (!cstr_) return index_ < other.index_;
+ //return strcmp(cstr_, other.cstr_) < 0;
// Assume both are strings.
unsigned this_len = this->storage_.length_;
unsigned other_len = other.storage_.length_;
unsigned min_len = std::min<unsigned>(this_len, other_len);
JSON_ASSERT(this->cstr_ && other.cstr_);
int comp = memcmp(this->cstr_, other.cstr_, min_len);
- if (comp < 0)
- return true;
- if (comp > 0)
- return false;
+ if (comp < 0) return true;
+ if (comp > 0) return false;
return (this_len < other_len);
}
-bool Value::CZString::operator==(const CZString& other) const
-{
- if (!this->cstr_)
- return this->index_ == other.index_;
- // return strcmp(cstr_, other.cstr_) == 0;
+bool Value::CZString::operator==(const CZString& other) const {
+ if (!cstr_) return index_ == other.index_;
+ //return strcmp(cstr_, other.cstr_) == 0;
// Assume both are strings.
unsigned this_len = this->storage_.length_;
unsigned other_len = other.storage_.length_;
- if (this_len != other_len)
- return false;
+ if (this_len != other_len) return false;
JSON_ASSERT(this->cstr_ && other.cstr_);
int comp = memcmp(this->cstr_, other.cstr_, this_len);
return comp == 0;
}
-ArrayIndex Value::CZString::index() const
-{
- return this->index_;
-}
+ArrayIndex Value::CZString::index() const { return index_; }
-// const char* Value::CZString::c_str() const { return cstr_; }
-const char* Value::CZString::data() const
-{
- return this->cstr_;
-}
-unsigned Value::CZString::length() const
-{
- return this->storage_.length_;
-}
-bool Value::CZString::isStaticString() const
-{
- return this->storage_.policy_ == noDuplication;
-}
+//const char* Value::CZString::c_str() const { return cstr_; }
+const char* Value::CZString::data() const { return cstr_; }
+unsigned Value::CZString::length() const { return storage_.length_; }
+bool Value::CZString::isStaticString() const { return storage_.policy_ == noDuplication; }
// //////////////////////////////////////////////////////////////////
// //////////////////////////////////////////////////////////////////
@@ -410,238 +352,210 @@ bool Value::CZString::isStaticString() const
* memset( this, 0, sizeof(Value) )
* This optimization is used in ValueInternalMap fast allocator.
*/
-Value::Value(ValueType vtype)
-{
+Value::Value(ValueType vtype) {
static char const emptyString[] = "";
- this->initBasic(vtype);
+ initBasic(vtype);
switch (vtype) {
- case nullValue:
- break;
- case intValue:
- case uintValue:
- this->value_.int_ = 0;
- break;
- case realValue:
- this->value_.real_ = 0.0;
- break;
- case stringValue:
- // allocated_ == false, so this is safe.
- this->value_.string_ =
- const_cast<char*>(static_cast<char const*>(emptyString));
- break;
- case arrayValue:
- case objectValue:
- this->value_.map_ = new ObjectValues();
- break;
- case booleanValue:
- this->value_.bool_ = false;
- break;
- default:
- JSON_ASSERT_UNREACHABLE;
+ case nullValue:
+ break;
+ case intValue:
+ case uintValue:
+ value_.int_ = 0;
+ break;
+ case realValue:
+ value_.real_ = 0.0;
+ break;
+ case stringValue:
+ // allocated_ == false, so this is safe.
+ value_.string_ = const_cast<char*>(static_cast<char const*>(emptyString));
+ break;
+ case arrayValue:
+ case objectValue:
+ value_.map_ = new ObjectValues();
+ break;
+ case booleanValue:
+ value_.bool_ = false;
+ break;
+ default:
+ JSON_ASSERT_UNREACHABLE;
}
}
-Value::Value(Int value)
-{
- this->initBasic(intValue);
- this->value_.int_ = value;
+Value::Value(Int value) {
+ initBasic(intValue);
+ value_.int_ = value;
}
-Value::Value(UInt value)
-{
- this->initBasic(uintValue);
- this->value_.uint_ = value;
+Value::Value(UInt value) {
+ initBasic(uintValue);
+ value_.uint_ = value;
}
#if defined(JSON_HAS_INT64)
-Value::Value(Int64 value)
-{
- this->initBasic(intValue);
- this->value_.int_ = value;
+Value::Value(Int64 value) {
+ initBasic(intValue);
+ value_.int_ = value;
}
-Value::Value(UInt64 value)
-{
- this->initBasic(uintValue);
- this->value_.uint_ = value;
+Value::Value(UInt64 value) {
+ initBasic(uintValue);
+ value_.uint_ = value;
}
#endif // defined(JSON_HAS_INT64)
-Value::Value(double value)
-{
- this->initBasic(realValue);
- this->value_.real_ = value;
+Value::Value(double value) {
+ initBasic(realValue);
+ value_.real_ = value;
}
-Value::Value(const char* value)
-{
- this->initBasic(stringValue, true);
+Value::Value(const char* value) {
+ initBasic(stringValue, true);
JSON_ASSERT_MESSAGE(value != NULL, "Null Value Passed to Value Constructor");
- this->value_.string_ =
- duplicateAndPrefixStringValue(value, static_cast<unsigned>(strlen(value)));
+ value_.string_ = duplicateAndPrefixStringValue(value, static_cast<unsigned>(strlen(value)));
}
-Value::Value(const char* beginValue, const char* endValue)
-{
- this->initBasic(stringValue, true);
- this->value_.string_ = duplicateAndPrefixStringValue(
- beginValue, static_cast<unsigned>(endValue - beginValue));
+Value::Value(const char* beginValue, const char* endValue) {
+ initBasic(stringValue, true);
+ value_.string_ =
+ duplicateAndPrefixStringValue(beginValue, static_cast<unsigned>(endValue - beginValue));
}
-Value::Value(const JSONCPP_STRING& value)
-{
- this->initBasic(stringValue, true);
- this->value_.string_ = duplicateAndPrefixStringValue(
- value.data(), static_cast<unsigned>(value.length()));
+Value::Value(const JSONCPP_STRING& value) {
+ initBasic(stringValue, true);
+ value_.string_ =
+ duplicateAndPrefixStringValue(value.data(), static_cast<unsigned>(value.length()));
}
-Value::Value(const StaticString& value)
-{
- this->initBasic(stringValue);
- this->value_.string_ = const_cast<char*>(value.c_str());
+Value::Value(const StaticString& value) {
+ initBasic(stringValue);
+ value_.string_ = const_cast<char*>(value.c_str());
}
#ifdef JSON_USE_CPPTL
-Value::Value(const CppTL::ConstString& value)
-{
+Value::Value(const CppTL::ConstString& value) {
initBasic(stringValue, true);
- value_.string_ = duplicateAndPrefixStringValue(
- value, static_cast<unsigned>(value.length()));
+ value_.string_ = duplicateAndPrefixStringValue(value, static_cast<unsigned>(value.length()));
}
#endif
-Value::Value(bool value)
-{
- this->initBasic(booleanValue);
- this->value_.bool_ = value;
+Value::Value(bool value) {
+ initBasic(booleanValue);
+ value_.bool_ = value;
}
Value::Value(Value const& other)
- : type_(other.type_)
- , allocated_(false)
- , comments_(0)
- , start_(other.start_)
- , limit_(other.limit_)
-{
- switch (this->type_) {
- case nullValue:
- case intValue:
- case uintValue:
- case realValue:
- case booleanValue:
- this->value_ = other.value_;
- break;
- case stringValue:
- if (other.value_.string_ && other.allocated_) {
- unsigned len;
- char const* str;
- decodePrefixedString(other.allocated_, other.value_.string_, &len,
- &str);
- this->value_.string_ = duplicateAndPrefixStringValue(str, len);
- this->allocated_ = true;
- } else {
- this->value_.string_ = other.value_.string_;
- this->allocated_ = false;
- }
- break;
- case arrayValue:
- case objectValue:
- this->value_.map_ = new ObjectValues(*other.value_.map_);
- break;
- default:
- JSON_ASSERT_UNREACHABLE;
+ : type_(other.type_), allocated_(false)
+ ,
+ comments_(0), start_(other.start_), limit_(other.limit_)
+{
+ switch (type_) {
+ case nullValue:
+ case intValue:
+ case uintValue:
+ case realValue:
+ case booleanValue:
+ value_ = other.value_;
+ break;
+ case stringValue:
+ if (other.value_.string_ && other.allocated_) {
+ unsigned len;
+ char const* str;
+ decodePrefixedString(other.allocated_, other.value_.string_,
+ &len, &str);
+ value_.string_ = duplicateAndPrefixStringValue(str, len);
+ allocated_ = true;
+ } else {
+ value_.string_ = other.value_.string_;
+ allocated_ = false;
+ }
+ break;
+ case arrayValue:
+ case objectValue:
+ value_.map_ = new ObjectValues(*other.value_.map_);
+ break;
+ default:
+ JSON_ASSERT_UNREACHABLE;
}
if (other.comments_) {
- this->comments_ = new CommentInfo[numberOfCommentPlacement];
+ comments_ = new CommentInfo[numberOfCommentPlacement];
for (int comment = 0; comment < numberOfCommentPlacement; ++comment) {
const CommentInfo& otherComment = other.comments_[comment];
if (otherComment.comment_)
- this->comments_[comment].setComment(otherComment.comment_,
- strlen(otherComment.comment_));
+ comments_[comment].setComment(
+ otherComment.comment_, strlen(otherComment.comment_));
}
}
}
#if JSON_HAS_RVALUE_REFERENCES
// Move constructor
-Value::Value(Value&& other)
-{
- this->initBasic(nullValue);
- this->swap(other);
+Value::Value(Value&& other) {
+ initBasic(nullValue);
+ swap(other);
}
#endif
-Value::~Value()
-{
- switch (this->type_) {
- case nullValue:
- case intValue:
- case uintValue:
- case realValue:
- case booleanValue:
- break;
- case stringValue:
- if (this->allocated_)
- releasePrefixedStringValue(this->value_.string_);
- break;
- case arrayValue:
- case objectValue:
- delete this->value_.map_;
- break;
- default:
- JSON_ASSERT_UNREACHABLE;
+Value::~Value() {
+ switch (type_) {
+ case nullValue:
+ case intValue:
+ case uintValue:
+ case realValue:
+ case booleanValue:
+ break;
+ case stringValue:
+ if (allocated_)
+ releasePrefixedStringValue(value_.string_);
+ break;
+ case arrayValue:
+ case objectValue:
+ delete value_.map_;
+ break;
+ default:
+ JSON_ASSERT_UNREACHABLE;
}
- delete[] this->comments_;
+ delete[] comments_;
- this->value_.uint_ = 0;
+ value_.uint_ = 0;
}
-Value& Value::operator=(Value other)
-{
- this->swap(other);
+Value& Value::operator=(Value other) {
+ swap(other);
return *this;
}
-void Value::swapPayload(Value& other)
-{
- ValueType temp = this->type_;
- this->type_ = other.type_;
+void Value::swapPayload(Value& other) {
+ ValueType temp = type_;
+ type_ = other.type_;
other.type_ = temp;
- std::swap(this->value_, other.value_);
- int temp2 = this->allocated_;
- this->allocated_ = other.allocated_;
+ std::swap(value_, other.value_);
+ int temp2 = allocated_;
+ allocated_ = other.allocated_;
other.allocated_ = temp2 & 0x1;
}
-void Value::copyPayload(const Value& other)
-{
- this->type_ = other.type_;
- this->value_ = other.value_;
- this->allocated_ = other.allocated_;
+void Value::copyPayload(const Value& other) {
+ type_ = other.type_;
+ value_ = other.value_;
+ allocated_ = other.allocated_;
}
-void Value::swap(Value& other)
-{
- this->swapPayload(other);
- std::swap(this->comments_, other.comments_);
- std::swap(this->start_, other.start_);
- std::swap(this->limit_, other.limit_);
+void Value::swap(Value& other) {
+ swapPayload(other);
+ std::swap(comments_, other.comments_);
+ std::swap(start_, other.start_);
+ std::swap(limit_, other.limit_);
}
-void Value::copy(const Value& other)
-{
- this->copyPayload(other);
- this->comments_ = other.comments_;
- this->start_ = other.start_;
- this->limit_ = other.limit_;
+void Value::copy(const Value& other) {
+ copyPayload(other);
+ comments_ = other.comments_;
+ start_ = other.start_;
+ limit_ = other.limit_;
}
-ValueType Value::type() const
-{
- return this->type_;
-}
+ValueType Value::type() const { return type_; }
-int Value::compare(const Value& other) const
-{
+int Value::compare(const Value& other) const {
if (*this < other)
return -1;
if (*this > other)
@@ -649,568 +563,509 @@ int Value::compare(const Value& other) const
return 0;
}
-bool Value::operator<(const Value& other) const
-{
- int typeDelta = this->type_ - other.type_;
+bool Value::operator<(const Value& other) const {
+ int typeDelta = type_ - other.type_;
if (typeDelta)
return typeDelta < 0 ? true : false;
- switch (this->type_) {
- case nullValue:
- return false;
- case intValue:
- return this->value_.int_ < other.value_.int_;
- case uintValue:
- return this->value_.uint_ < other.value_.uint_;
- case realValue:
- return this->value_.real_ < other.value_.real_;
- case booleanValue:
- return this->value_.bool_ < other.value_.bool_;
- case stringValue: {
- if ((this->value_.string_ == 0) || (other.value_.string_ == 0)) {
- if (other.value_.string_)
- return true;
- else
- return false;
- }
- unsigned this_len;
- unsigned other_len;
- char const* this_str;
- char const* other_str;
- decodePrefixedString(this->allocated_, this->value_.string_, &this_len,
- &this_str);
- decodePrefixedString(other.allocated_, other.value_.string_, &other_len,
- &other_str);
- unsigned min_len = std::min<unsigned>(this_len, other_len);
- JSON_ASSERT(this_str && other_str);
- int comp = memcmp(this_str, other_str, min_len);
- if (comp < 0)
- return true;
- if (comp > 0)
- return false;
- return (this_len < other_len);
- }
- case arrayValue:
- case objectValue: {
- int delta = int(this->value_.map_->size() - other.value_.map_->size());
- if (delta)
- return delta < 0;
- return (*this->value_.map_) < (*other.value_.map_);
+ switch (type_) {
+ case nullValue:
+ return false;
+ case intValue:
+ return value_.int_ < other.value_.int_;
+ case uintValue:
+ return value_.uint_ < other.value_.uint_;
+ case realValue:
+ return value_.real_ < other.value_.real_;
+ case booleanValue:
+ return value_.bool_ < other.value_.bool_;
+ case stringValue:
+ {
+ if ((value_.string_ == 0) || (other.value_.string_ == 0)) {
+ if (other.value_.string_) return true;
+ else return false;
}
- default:
- JSON_ASSERT_UNREACHABLE;
+ unsigned this_len;
+ unsigned other_len;
+ char const* this_str;
+ char const* other_str;
+ decodePrefixedString(this->allocated_, this->value_.string_, &this_len, &this_str);
+ decodePrefixedString(other.allocated_, other.value_.string_, &other_len, &other_str);
+ unsigned min_len = std::min<unsigned>(this_len, other_len);
+ JSON_ASSERT(this_str && other_str);
+ int comp = memcmp(this_str, other_str, min_len);
+ if (comp < 0) return true;
+ if (comp > 0) return false;
+ return (this_len < other_len);
+ }
+ case arrayValue:
+ case objectValue: {
+ int delta = int(value_.map_->size() - other.value_.map_->size());
+ if (delta)
+ return delta < 0;
+ return (*value_.map_) < (*other.value_.map_);
+ }
+ default:
+ JSON_ASSERT_UNREACHABLE;
}
return false; // unreachable
}
-bool Value::operator<=(const Value& other) const
-{
- return !(other < *this);
-}
+bool Value::operator<=(const Value& other) const { return !(other < *this); }
-bool Value::operator>=(const Value& other) const
-{
- return !(*this < other);
-}
+bool Value::operator>=(const Value& other) const { return !(*this < other); }
-bool Value::operator>(const Value& other) const
-{
- return other < *this;
-}
+bool Value::operator>(const Value& other) const { return other < *this; }
-bool Value::operator==(const Value& other) const
-{
+bool Value::operator==(const Value& other) const {
// if ( type_ != other.type_ )
// GCC 2.95.3 says:
// attempt to take address of bit-field structure member `Json::Value::type_'
// Beats me, but a temp solves the problem.
int temp = other.type_;
- if (this->type_ != temp)
+ if (type_ != temp)
return false;
- switch (this->type_) {
- case nullValue:
- return true;
- case intValue:
- return this->value_.int_ == other.value_.int_;
- case uintValue:
- return this->value_.uint_ == other.value_.uint_;
- case realValue:
- return this->value_.real_ == other.value_.real_;
- case booleanValue:
- return this->value_.bool_ == other.value_.bool_;
- case stringValue: {
- if ((this->value_.string_ == 0) || (other.value_.string_ == 0)) {
- return (this->value_.string_ == other.value_.string_);
- }
- unsigned this_len;
- unsigned other_len;
- char const* this_str;
- char const* other_str;
- decodePrefixedString(this->allocated_, this->value_.string_, &this_len,
- &this_str);
- decodePrefixedString(other.allocated_, other.value_.string_, &other_len,
- &other_str);
- if (this_len != other_len)
- return false;
- JSON_ASSERT(this_str && other_str);
- int comp = memcmp(this_str, other_str, this_len);
- return comp == 0;
+ switch (type_) {
+ case nullValue:
+ return true;
+ case intValue:
+ return value_.int_ == other.value_.int_;
+ case uintValue:
+ return value_.uint_ == other.value_.uint_;
+ case realValue:
+ return value_.real_ == other.value_.real_;
+ case booleanValue:
+ return value_.bool_ == other.value_.bool_;
+ case stringValue:
+ {
+ if ((value_.string_ == 0) || (other.value_.string_ == 0)) {
+ return (value_.string_ == other.value_.string_);
}
- case arrayValue:
- case objectValue:
- return this->value_.map_->size() == other.value_.map_->size() &&
- (*this->value_.map_) == (*other.value_.map_);
- default:
- JSON_ASSERT_UNREACHABLE;
+ unsigned this_len;
+ unsigned other_len;
+ char const* this_str;
+ char const* other_str;
+ decodePrefixedString(this->allocated_, this->value_.string_, &this_len, &this_str);
+ decodePrefixedString(other.allocated_, other.value_.string_, &other_len, &other_str);
+ if (this_len != other_len) return false;
+ JSON_ASSERT(this_str && other_str);
+ int comp = memcmp(this_str, other_str, this_len);
+ return comp == 0;
+ }
+ case arrayValue:
+ case objectValue:
+ return value_.map_->size() == other.value_.map_->size() &&
+ (*value_.map_) == (*other.value_.map_);
+ default:
+ JSON_ASSERT_UNREACHABLE;
}
return false; // unreachable
}
-bool Value::operator!=(const Value& other) const
-{
- return !(*this == other);
-}
+bool Value::operator!=(const Value& other) const { return !(*this == other); }
-const char* Value::asCString() const
-{
+const char* Value::asCString() const {
JSON_ASSERT_MESSAGE(type_ == stringValue,
"in Json::Value::asCString(): requires stringValue");
- if (this->value_.string_ == 0)
- return 0;
+ if (value_.string_ == 0) return 0;
unsigned this_len;
char const* this_str;
- decodePrefixedString(this->allocated_, this->value_.string_, &this_len,
- &this_str);
+ decodePrefixedString(this->allocated_, this->value_.string_, &this_len, &this_str);
return this_str;
}
#if JSONCPP_USING_SECURE_MEMORY
-unsigned Value::getCStringLength() const
-{
+unsigned Value::getCStringLength() const {
JSON_ASSERT_MESSAGE(type_ == stringValue,
- "in Json::Value::asCString(): requires stringValue");
- if (value_.string_ == 0)
- return 0;
+ "in Json::Value::asCString(): requires stringValue");
+ if (value_.string_ == 0) return 0;
unsigned this_len;
char const* this_str;
- decodePrefixedString(this->allocated_, this->value_.string_, &this_len,
- &this_str);
+ decodePrefixedString(this->allocated_, this->value_.string_, &this_len, &this_str);
return this_len;
}
#endif
-bool Value::getString(char const** str, char const** cend) const
-{
- if (this->type_ != stringValue)
- return false;
- if (this->value_.string_ == 0)
- return false;
+bool Value::getString(char const** str, char const** cend) const {
+ if (type_ != stringValue) return false;
+ if (value_.string_ == 0) return false;
unsigned length;
decodePrefixedString(this->allocated_, this->value_.string_, &length, str);
*cend = *str + length;
return true;
}
-JSONCPP_STRING Value::asString() const
-{
- switch (this->type_) {
- case nullValue:
- return "";
- case stringValue: {
- if (this->value_.string_ == 0)
- return "";
- unsigned this_len;
- char const* this_str;
- decodePrefixedString(this->allocated_, this->value_.string_, &this_len,
- &this_str);
- return JSONCPP_STRING(this_str, this_len);
- }
- case booleanValue:
- return this->value_.bool_ ? "true" : "false";
- case intValue:
- return valueToString(this->value_.int_);
- case uintValue:
- return valueToString(this->value_.uint_);
- case realValue:
- return valueToString(this->value_.real_);
- default:
- JSON_FAIL_MESSAGE("Type is not convertible to string");
+JSONCPP_STRING Value::asString() const {
+ switch (type_) {
+ case nullValue:
+ return "";
+ case stringValue:
+ {
+ if (value_.string_ == 0) return "";
+ unsigned this_len;
+ char const* this_str;
+ decodePrefixedString(this->allocated_, this->value_.string_, &this_len, &this_str);
+ return JSONCPP_STRING(this_str, this_len);
+ }
+ case booleanValue:
+ return value_.bool_ ? "true" : "false";
+ case intValue:
+ return valueToString(value_.int_);
+ case uintValue:
+ return valueToString(value_.uint_);
+ case realValue:
+ return valueToString(value_.real_);
+ default:
+ JSON_FAIL_MESSAGE("Type is not convertible to string");
}
}
#ifdef JSON_USE_CPPTL
-CppTL::ConstString Value::asConstString() const
-{
+CppTL::ConstString Value::asConstString() const {
unsigned len;
char const* str;
- decodePrefixedString(allocated_, value_.string_, &len, &str);
+ decodePrefixedString(allocated_, value_.string_,
+ &len, &str);
return CppTL::ConstString(str, len);
}
#endif
-Value::Int Value::asInt() const
-{
- switch (this->type_) {
- case intValue:
- JSON_ASSERT_MESSAGE(isInt(), "LargestInt out of Int range");
- return Int(this->value_.int_);
- case uintValue:
- JSON_ASSERT_MESSAGE(isInt(), "LargestUInt out of Int range");
- return Int(this->value_.uint_);
- case realValue:
- JSON_ASSERT_MESSAGE(InRange(value_.real_, minInt, maxInt),
- "double out of Int range");
- return Int(this->value_.real_);
- case nullValue:
- return 0;
- case booleanValue:
- return this->value_.bool_ ? 1 : 0;
- default:
- break;
+Value::Int Value::asInt() const {
+ switch (type_) {
+ case intValue:
+ JSON_ASSERT_MESSAGE(isInt(), "LargestInt out of Int range");
+ return Int(value_.int_);
+ case uintValue:
+ JSON_ASSERT_MESSAGE(isInt(), "LargestUInt out of Int range");
+ return Int(value_.uint_);
+ case realValue:
+ JSON_ASSERT_MESSAGE(InRange(value_.real_, minInt, maxInt),
+ "double out of Int range");
+ return Int(value_.real_);
+ case nullValue:
+ return 0;
+ case booleanValue:
+ return value_.bool_ ? 1 : 0;
+ default:
+ break;
}
JSON_FAIL_MESSAGE("Value is not convertible to Int.");
}
-Value::UInt Value::asUInt() const
-{
- switch (this->type_) {
- case intValue:
- JSON_ASSERT_MESSAGE(isUInt(), "LargestInt out of UInt range");
- return UInt(this->value_.int_);
- case uintValue:
- JSON_ASSERT_MESSAGE(isUInt(), "LargestUInt out of UInt range");
- return UInt(this->value_.uint_);
- case realValue:
- JSON_ASSERT_MESSAGE(InRange(value_.real_, 0, maxUInt),
- "double out of UInt range");
- return UInt(this->value_.real_);
- case nullValue:
- return 0;
- case booleanValue:
- return this->value_.bool_ ? 1 : 0;
- default:
- break;
+Value::UInt Value::asUInt() const {
+ switch (type_) {
+ case intValue:
+ JSON_ASSERT_MESSAGE(isUInt(), "LargestInt out of UInt range");
+ return UInt(value_.int_);
+ case uintValue:
+ JSON_ASSERT_MESSAGE(isUInt(), "LargestUInt out of UInt range");
+ return UInt(value_.uint_);
+ case realValue:
+ JSON_ASSERT_MESSAGE(InRange(value_.real_, 0, maxUInt),
+ "double out of UInt range");
+ return UInt(value_.real_);
+ case nullValue:
+ return 0;
+ case booleanValue:
+ return value_.bool_ ? 1 : 0;
+ default:
+ break;
}
JSON_FAIL_MESSAGE("Value is not convertible to UInt.");
}
#if defined(JSON_HAS_INT64)
-Value::Int64 Value::asInt64() const
-{
- switch (this->type_) {
- case intValue:
- return Int64(this->value_.int_);
- case uintValue:
- JSON_ASSERT_MESSAGE(isInt64(), "LargestUInt out of Int64 range");
- return Int64(this->value_.uint_);
- case realValue:
- JSON_ASSERT_MESSAGE(InRange(value_.real_, minInt64, maxInt64),
- "double out of Int64 range");
- return Int64(this->value_.real_);
- case nullValue:
- return 0;
- case booleanValue:
- return this->value_.bool_ ? 1 : 0;
- default:
- break;
+Value::Int64 Value::asInt64() const {
+ switch (type_) {
+ case intValue:
+ return Int64(value_.int_);
+ case uintValue:
+ JSON_ASSERT_MESSAGE(isInt64(), "LargestUInt out of Int64 range");
+ return Int64(value_.uint_);
+ case realValue:
+ JSON_ASSERT_MESSAGE(InRange(value_.real_, minInt64, maxInt64),
+ "double out of Int64 range");
+ return Int64(value_.real_);
+ case nullValue:
+ return 0;
+ case booleanValue:
+ return value_.bool_ ? 1 : 0;
+ default:
+ break;
}
JSON_FAIL_MESSAGE("Value is not convertible to Int64.");
}
-Value::UInt64 Value::asUInt64() const
-{
- switch (this->type_) {
- case intValue:
- JSON_ASSERT_MESSAGE(isUInt64(), "LargestInt out of UInt64 range");
- return UInt64(this->value_.int_);
- case uintValue:
- return UInt64(this->value_.uint_);
- case realValue:
- JSON_ASSERT_MESSAGE(InRange(value_.real_, 0, maxUInt64),
- "double out of UInt64 range");
- return UInt64(this->value_.real_);
- case nullValue:
- return 0;
- case booleanValue:
- return this->value_.bool_ ? 1 : 0;
- default:
- break;
+Value::UInt64 Value::asUInt64() const {
+ switch (type_) {
+ case intValue:
+ JSON_ASSERT_MESSAGE(isUInt64(), "LargestInt out of UInt64 range");
+ return UInt64(value_.int_);
+ case uintValue:
+ return UInt64(value_.uint_);
+ case realValue:
+ JSON_ASSERT_MESSAGE(InRange(value_.real_, 0, maxUInt64),
+ "double out of UInt64 range");
+ return UInt64(value_.real_);
+ case nullValue:
+ return 0;
+ case booleanValue:
+ return value_.bool_ ? 1 : 0;
+ default:
+ break;
}
JSON_FAIL_MESSAGE("Value is not convertible to UInt64.");
}
#endif // if defined(JSON_HAS_INT64)
-LargestInt Value::asLargestInt() const
-{
+LargestInt Value::asLargestInt() const {
#if defined(JSON_NO_INT64)
return asInt();
#else
- return this->asInt64();
+ return asInt64();
#endif
}
-LargestUInt Value::asLargestUInt() const
-{
+LargestUInt Value::asLargestUInt() const {
#if defined(JSON_NO_INT64)
return asUInt();
#else
- return this->asUInt64();
+ return asUInt64();
#endif
}
-double Value::asDouble() const
-{
- switch (this->type_) {
- case intValue:
- return static_cast<double>(this->value_.int_);
- case uintValue:
+double Value::asDouble() const {
+ switch (type_) {
+ case intValue:
+ return static_cast<double>(value_.int_);
+ case uintValue:
#if !defined(JSON_USE_INT64_DOUBLE_CONVERSION)
- return static_cast<double>(this->value_.uint_);
+ return static_cast<double>(value_.uint_);
#else // if !defined(JSON_USE_INT64_DOUBLE_CONVERSION)
- return integerToDouble(value_.uint_);
+ return integerToDouble(value_.uint_);
#endif // if !defined(JSON_USE_INT64_DOUBLE_CONVERSION)
- case realValue:
- return this->value_.real_;
- case nullValue:
- return 0.0;
- case booleanValue:
- return this->value_.bool_ ? 1.0 : 0.0;
- default:
- break;
+ case realValue:
+ return value_.real_;
+ case nullValue:
+ return 0.0;
+ case booleanValue:
+ return value_.bool_ ? 1.0 : 0.0;
+ default:
+ break;
}
JSON_FAIL_MESSAGE("Value is not convertible to double.");
}
-float Value::asFloat() const
-{
- switch (this->type_) {
- case intValue:
- return static_cast<float>(this->value_.int_);
- case uintValue:
+float Value::asFloat() const {
+ switch (type_) {
+ case intValue:
+ return static_cast<float>(value_.int_);
+ case uintValue:
#if !defined(JSON_USE_INT64_DOUBLE_CONVERSION)
- return static_cast<float>(this->value_.uint_);
+ return static_cast<float>(value_.uint_);
#else // if !defined(JSON_USE_INT64_DOUBLE_CONVERSION)
- // This can fail (silently?) if the value is bigger than MAX_FLOAT.
- return static_cast<float>(integerToDouble(value_.uint_));
+ // This can fail (silently?) if the value is bigger than MAX_FLOAT.
+ return static_cast<float>(integerToDouble(value_.uint_));
#endif // if !defined(JSON_USE_INT64_DOUBLE_CONVERSION)
- case realValue:
- return static_cast<float>(this->value_.real_);
- case nullValue:
- return 0.0;
- case booleanValue:
- return this->value_.bool_ ? 1.0f : 0.0f;
- default:
- break;
+ case realValue:
+ return static_cast<float>(value_.real_);
+ case nullValue:
+ return 0.0;
+ case booleanValue:
+ return value_.bool_ ? 1.0f : 0.0f;
+ default:
+ break;
}
JSON_FAIL_MESSAGE("Value is not convertible to float.");
}
-bool Value::asBool() const
-{
- switch (this->type_) {
- case booleanValue:
- return this->value_.bool_;
- case nullValue:
- return false;
- case intValue:
- return this->value_.int_ ? true : false;
- case uintValue:
- return this->value_.uint_ ? true : false;
- case realValue:
- // This is kind of strange. Not recommended.
- return (this->value_.real_ != 0.0) ? true : false;
- default:
- break;
+bool Value::asBool() const {
+ switch (type_) {
+ case booleanValue:
+ return value_.bool_;
+ case nullValue:
+ return false;
+ case intValue:
+ return value_.int_ ? true : false;
+ case uintValue:
+ return value_.uint_ ? true : false;
+ case realValue:
+ // This is kind of strange. Not recommended.
+ return (value_.real_ != 0.0) ? true : false;
+ default:
+ break;
}
JSON_FAIL_MESSAGE("Value is not convertible to bool.");
}
-bool Value::isConvertibleTo(ValueType other) const
-{
+bool Value::isConvertibleTo(ValueType other) const {
switch (other) {
- case nullValue:
- return (this->isNumeric() && this->asDouble() == 0.0) ||
- (this->type_ == booleanValue && this->value_.bool_ == false) ||
- (this->type_ == stringValue && this->asString().empty()) ||
- (this->type_ == arrayValue && this->value_.map_->size() == 0) ||
- (this->type_ == objectValue && this->value_.map_->size() == 0) ||
- this->type_ == nullValue;
- case intValue:
- return this->isInt() ||
- (this->type_ == realValue &&
- InRange(this->value_.real_, minInt, maxInt)) ||
- this->type_ == booleanValue || this->type_ == nullValue;
- case uintValue:
- return this->isUInt() ||
- (this->type_ == realValue &&
- InRange(this->value_.real_, 0, maxUInt)) ||
- this->type_ == booleanValue || this->type_ == nullValue;
- case realValue:
- return this->isNumeric() || this->type_ == booleanValue ||
- this->type_ == nullValue;
- case booleanValue:
- return this->isNumeric() || this->type_ == booleanValue ||
- this->type_ == nullValue;
- case stringValue:
- return this->isNumeric() || this->type_ == booleanValue ||
- this->type_ == stringValue || this->type_ == nullValue;
- case arrayValue:
- return this->type_ == arrayValue || this->type_ == nullValue;
- case objectValue:
- return this->type_ == objectValue || this->type_ == nullValue;
+ case nullValue:
+ return (isNumeric() && asDouble() == 0.0) ||
+ (type_ == booleanValue && value_.bool_ == false) ||
+ (type_ == stringValue && asString().empty()) ||
+ (type_ == arrayValue && value_.map_->size() == 0) ||
+ (type_ == objectValue && value_.map_->size() == 0) ||
+ type_ == nullValue;
+ case intValue:
+ return isInt() ||
+ (type_ == realValue && InRange(value_.real_, minInt, maxInt)) ||
+ type_ == booleanValue || type_ == nullValue;
+ case uintValue:
+ return isUInt() ||
+ (type_ == realValue && InRange(value_.real_, 0, maxUInt)) ||
+ type_ == booleanValue || type_ == nullValue;
+ case realValue:
+ return isNumeric() || type_ == booleanValue || type_ == nullValue;
+ case booleanValue:
+ return isNumeric() || type_ == booleanValue || type_ == nullValue;
+ case stringValue:
+ return isNumeric() || type_ == booleanValue || type_ == stringValue ||
+ type_ == nullValue;
+ case arrayValue:
+ return type_ == arrayValue || type_ == nullValue;
+ case objectValue:
+ return type_ == objectValue || type_ == nullValue;
}
JSON_ASSERT_UNREACHABLE;
return false;
}
/// Number of values in array or object
-ArrayIndex Value::size() const
-{
- switch (this->type_) {
- case nullValue:
- case intValue:
- case uintValue:
- case realValue:
- case booleanValue:
- case stringValue:
- return 0;
- case arrayValue: // size of the array is highest index + 1
- if (!this->value_.map_->empty()) {
- ObjectValues::const_iterator itLast = this->value_.map_->end();
- --itLast;
- return (*itLast).first.index() + 1;
- }
- return 0;
- case objectValue:
- return ArrayIndex(this->value_.map_->size());
+ArrayIndex Value::size() const {
+ switch (type_) {
+ case nullValue:
+ case intValue:
+ case uintValue:
+ case realValue:
+ case booleanValue:
+ case stringValue:
+ return 0;
+ case arrayValue: // size of the array is highest index + 1
+ if (!value_.map_->empty()) {
+ ObjectValues::const_iterator itLast = value_.map_->end();
+ --itLast;
+ return (*itLast).first.index() + 1;
+ }
+ return 0;
+ case objectValue:
+ return ArrayIndex(value_.map_->size());
}
JSON_ASSERT_UNREACHABLE;
return 0; // unreachable;
}
-bool Value::empty() const
-{
- if (this->isNull() || this->isArray() || this->isObject())
- return this->size() == 0u;
+bool Value::empty() const {
+ if (isNull() || isArray() || isObject())
+ return size() == 0u;
else
return false;
}
-bool Value::operator!() const
-{
- return this->isNull();
-}
+bool Value::operator!() const { return isNull(); }
-void Value::clear()
-{
+void Value::clear() {
JSON_ASSERT_MESSAGE(type_ == nullValue || type_ == arrayValue ||
- type_ == objectValue,
+ type_ == objectValue,
"in Json::Value::clear(): requires complex value");
- this->start_ = 0;
- this->limit_ = 0;
- switch (this->type_) {
- case arrayValue:
- case objectValue:
- this->value_.map_->clear();
- break;
- default:
- break;
+ start_ = 0;
+ limit_ = 0;
+ switch (type_) {
+ case arrayValue:
+ case objectValue:
+ value_.map_->clear();
+ break;
+ default:
+ break;
}
}
-void Value::resize(ArrayIndex newSize)
-{
+void Value::resize(ArrayIndex newSize) {
JSON_ASSERT_MESSAGE(type_ == nullValue || type_ == arrayValue,
"in Json::Value::resize(): requires arrayValue");
- if (this->type_ == nullValue)
+ if (type_ == nullValue)
*this = Value(arrayValue);
- ArrayIndex oldSize = this->size();
+ ArrayIndex oldSize = size();
if (newSize == 0)
- this->clear();
+ clear();
else if (newSize > oldSize)
(*this)[newSize - 1];
else {
for (ArrayIndex index = newSize; index < oldSize; ++index) {
- this->value_.map_->erase(index);
+ value_.map_->erase(index);
}
JSON_ASSERT(size() == newSize);
}
}
-Value& Value::operator[](ArrayIndex index)
-{
+Value& Value::operator[](ArrayIndex index) {
JSON_ASSERT_MESSAGE(
- type_ == nullValue || type_ == arrayValue,
- "in Json::Value::operator[](ArrayIndex): requires arrayValue");
- if (this->type_ == nullValue)
+ type_ == nullValue || type_ == arrayValue,
+ "in Json::Value::operator[](ArrayIndex): requires arrayValue");
+ if (type_ == nullValue)
*this = Value(arrayValue);
CZString key(index);
- ObjectValues::iterator it = this->value_.map_->lower_bound(key);
- if (it != this->value_.map_->end() && (*it).first == key)
+ ObjectValues::iterator it = value_.map_->lower_bound(key);
+ if (it != value_.map_->end() && (*it).first == key)
return (*it).second;
ObjectValues::value_type defaultValue(key, nullSingleton());
- it = this->value_.map_->insert(it, defaultValue);
+ it = value_.map_->insert(it, defaultValue);
return (*it).second;
}
-Value& Value::operator[](int index)
-{
+Value& Value::operator[](int index) {
JSON_ASSERT_MESSAGE(
- index >= 0,
- "in Json::Value::operator[](int index): index cannot be negative");
+ index >= 0,
+ "in Json::Value::operator[](int index): index cannot be negative");
return (*this)[ArrayIndex(index)];
}
-const Value& Value::operator[](ArrayIndex index) const
-{
+const Value& Value::operator[](ArrayIndex index) const {
JSON_ASSERT_MESSAGE(
- type_ == nullValue || type_ == arrayValue,
- "in Json::Value::operator[](ArrayIndex)const: requires arrayValue");
- if (this->type_ == nullValue)
+ type_ == nullValue || type_ == arrayValue,
+ "in Json::Value::operator[](ArrayIndex)const: requires arrayValue");
+ if (type_ == nullValue)
return nullSingleton();
CZString key(index);
- ObjectValues::const_iterator it = this->value_.map_->find(key);
- if (it == this->value_.map_->end())
+ ObjectValues::const_iterator it = value_.map_->find(key);
+ if (it == value_.map_->end())
return nullSingleton();
return (*it).second;
}
-const Value& Value::operator[](int index) const
-{
+const Value& Value::operator[](int index) const {
JSON_ASSERT_MESSAGE(
- index >= 0,
- "in Json::Value::operator[](int index) const: index cannot be negative");
+ index >= 0,
+ "in Json::Value::operator[](int index) const: index cannot be negative");
return (*this)[ArrayIndex(index)];
}
-void Value::initBasic(ValueType vtype, bool allocated)
-{
- this->type_ = vtype;
- this->allocated_ = allocated;
- this->comments_ = 0;
- this->start_ = 0;
- this->limit_ = 0;
+void Value::initBasic(ValueType vtype, bool allocated) {
+ type_ = vtype;
+ allocated_ = allocated;
+ comments_ = 0;
+ start_ = 0;
+ limit_ = 0;
}
// Access an object value by name, create a null member if it does not exist.
// @pre Type of '*this' is object or null.
// @param key is null-terminated.
-Value& Value::resolveReference(const char* key)
-{
+Value& Value::resolveReference(const char* key) {
JSON_ASSERT_MESSAGE(
- type_ == nullValue || type_ == objectValue,
- "in Json::Value::resolveReference(): requires objectValue");
- if (this->type_ == nullValue)
+ type_ == nullValue || type_ == objectValue,
+ "in Json::Value::resolveReference(): requires objectValue");
+ if (type_ == nullValue)
*this = Value(objectValue);
- CZString actualKey(key, static_cast<unsigned>(strlen(key)),
- CZString::noDuplication); // NOTE!
- ObjectValues::iterator it = this->value_.map_->lower_bound(actualKey);
- if (it != this->value_.map_->end() && (*it).first == actualKey)
+ CZString actualKey(
+ key, static_cast<unsigned>(strlen(key)), CZString::noDuplication); // NOTE!
+ ObjectValues::iterator it = value_.map_->lower_bound(actualKey);
+ if (it != value_.map_->end() && (*it).first == actualKey)
return (*it).second;
ObjectValues::value_type defaultValue(actualKey, nullSingleton());
- it = this->value_.map_->insert(it, defaultValue);
+ it = value_.map_->insert(it, defaultValue);
Value& value = (*it).second;
return value;
}
@@ -1219,223 +1074,198 @@ Value& Value::resolveReference(const char* key)
Value& Value::resolveReference(char const* key, char const* cend)
{
JSON_ASSERT_MESSAGE(
- type_ == nullValue || type_ == objectValue,
- "in Json::Value::resolveReference(key, end): requires objectValue");
- if (this->type_ == nullValue)
+ type_ == nullValue || type_ == objectValue,
+ "in Json::Value::resolveReference(key, end): requires objectValue");
+ if (type_ == nullValue)
*this = Value(objectValue);
- CZString actualKey(key, static_cast<unsigned>(cend - key),
- CZString::duplicateOnCopy);
- ObjectValues::iterator it = this->value_.map_->lower_bound(actualKey);
- if (it != this->value_.map_->end() && (*it).first == actualKey)
+ CZString actualKey(
+ key, static_cast<unsigned>(cend-key), CZString::duplicateOnCopy);
+ ObjectValues::iterator it = value_.map_->lower_bound(actualKey);
+ if (it != value_.map_->end() && (*it).first == actualKey)
return (*it).second;
ObjectValues::value_type defaultValue(actualKey, nullSingleton());
- it = this->value_.map_->insert(it, defaultValue);
+ it = value_.map_->insert(it, defaultValue);
Value& value = (*it).second;
return value;
}
-Value Value::get(ArrayIndex index, const Value& defaultValue) const
-{
+Value Value::get(ArrayIndex index, const Value& defaultValue) const {
const Value* value = &((*this)[index]);
return value == &nullSingleton() ? defaultValue : *value;
}
-bool Value::isValidIndex(ArrayIndex index) const
-{
- return index < this->size();
-}
+bool Value::isValidIndex(ArrayIndex index) const { return index < size(); }
Value const* Value::find(char const* key, char const* cend) const
{
- JSON_ASSERT_MESSAGE(type_ == nullValue || type_ == objectValue,
- "in Json::Value::find(key, end, found): requires "
- "objectValue or nullValue");
- if (this->type_ == nullValue)
- return NULL;
- CZString actualKey(key, static_cast<unsigned>(cend - key),
- CZString::noDuplication);
- ObjectValues::const_iterator it = this->value_.map_->find(actualKey);
- if (it == this->value_.map_->end())
- return NULL;
+ JSON_ASSERT_MESSAGE(
+ type_ == nullValue || type_ == objectValue,
+ "in Json::Value::find(key, end, found): requires objectValue or nullValue");
+ if (type_ == nullValue) return NULL;
+ CZString actualKey(key, static_cast<unsigned>(cend-key), CZString::noDuplication);
+ ObjectValues::const_iterator it = value_.map_->find(actualKey);
+ if (it == value_.map_->end()) return NULL;
return &(*it).second;
}
const Value& Value::operator[](const char* key) const
{
- Value const* found = this->find(key, key + strlen(key));
- if (!found)
- return nullSingleton();
+ Value const* found = find(key, key + strlen(key));
+ if (!found) return nullSingleton();
return *found;
}
Value const& Value::operator[](JSONCPP_STRING const& key) const
{
- Value const* found = this->find(key.data(), key.data() + key.length());
- if (!found)
- return nullSingleton();
+ Value const* found = find(key.data(), key.data() + key.length());
+ if (!found) return nullSingleton();
return *found;
}
-Value& Value::operator[](const char* key)
-{
- return this->resolveReference(key, key + strlen(key));
+Value& Value::operator[](const char* key) {
+ return resolveReference(key, key + strlen(key));
}
-Value& Value::operator[](const JSONCPP_STRING& key)
-{
- return this->resolveReference(key.data(), key.data() + key.length());
+Value& Value::operator[](const JSONCPP_STRING& key) {
+ return resolveReference(key.data(), key.data() + key.length());
}
-Value& Value::operator[](const StaticString& key)
-{
- return this->resolveReference(key.c_str());
+Value& Value::operator[](const StaticString& key) {
+ return resolveReference(key.c_str());
}
#ifdef JSON_USE_CPPTL
-Value& Value::operator[](const CppTL::ConstString& key)
-{
+Value& Value::operator[](const CppTL::ConstString& key) {
return resolveReference(key.c_str(), key.end_c_str());
}
Value const& Value::operator[](CppTL::ConstString const& key) const
{
Value const* found = find(key.c_str(), key.end_c_str());
- if (!found)
- return nullSingleton();
+ if (!found) return nullSingleton();
return *found;
}
#endif
-Value& Value::append(const Value& value)
-{
- return (*this)[this->size()] = value;
-}
+Value& Value::append(const Value& value) { return (*this)[size()] = value; }
#if JSON_HAS_RVALUE_REFERENCES
-Value& Value::append(Value&& value)
-{
- return (*this)[this->size()] = value;
-}
+ Value& Value::append(Value&& value) { return (*this)[size()] = value; }
#endif
-Value Value::get(char const* key, char const* cend,
- Value const& defaultValue) const
+Value Value::get(char const* key, char const* cend, Value const& defaultValue) const
{
- Value const* found = this->find(key, cend);
+ Value const* found = find(key, cend);
return !found ? defaultValue : *found;
}
Value Value::get(char const* key, Value const& defaultValue) const
{
- return this->get(key, key + strlen(key), defaultValue);
+ return get(key, key + strlen(key), defaultValue);
}
Value Value::get(JSONCPP_STRING const& key, Value const& defaultValue) const
{
- return this->get(key.data(), key.data() + key.length(), defaultValue);
+ return get(key.data(), key.data() + key.length(), defaultValue);
}
+
bool Value::removeMember(const char* key, const char* cend, Value* removed)
{
- if (this->type_ != objectValue) {
+ if (type_ != objectValue) {
return false;
}
- CZString actualKey(key, static_cast<unsigned>(cend - key),
- CZString::noDuplication);
- ObjectValues::iterator it = this->value_.map_->find(actualKey);
- if (it == this->value_.map_->end())
+ CZString actualKey(key, static_cast<unsigned>(cend-key), CZString::noDuplication);
+ ObjectValues::iterator it = value_.map_->find(actualKey);
+ if (it == value_.map_->end())
return false;
*removed = it->second;
- this->value_.map_->erase(it);
+ value_.map_->erase(it);
return true;
}
bool Value::removeMember(const char* key, Value* removed)
{
- return this->removeMember(key, key + strlen(key), removed);
+ return removeMember(key, key + strlen(key), removed);
}
bool Value::removeMember(JSONCPP_STRING const& key, Value* removed)
{
- return this->removeMember(key.data(), key.data() + key.length(), removed);
+ return removeMember(key.data(), key.data() + key.length(), removed);
}
Value Value::removeMember(const char* key)
{
JSON_ASSERT_MESSAGE(type_ == nullValue || type_ == objectValue,
"in Json::Value::removeMember(): requires objectValue");
- if (this->type_ == nullValue)
+ if (type_ == nullValue)
return nullSingleton();
- Value removed; // null
- this->removeMember(key, key + strlen(key), &removed);
+ Value removed; // null
+ removeMember(key, key + strlen(key), &removed);
return removed; // still null if removeMember() did nothing
}
Value Value::removeMember(const JSONCPP_STRING& key)
{
- return this->removeMember(key.c_str());
+ return removeMember(key.c_str());
}
-bool Value::removeIndex(ArrayIndex index, Value* removed)
-{
- if (this->type_ != arrayValue) {
+bool Value::removeIndex(ArrayIndex index, Value* removed) {
+ if (type_ != arrayValue) {
return false;
}
CZString key(index);
- ObjectValues::iterator it = this->value_.map_->find(key);
- if (it == this->value_.map_->end()) {
+ ObjectValues::iterator it = value_.map_->find(key);
+ if (it == value_.map_->end()) {
return false;
}
*removed = it->second;
- ArrayIndex oldSize = this->size();
+ ArrayIndex oldSize = size();
// shift left all items left, into the place of the "removed"
- for (ArrayIndex i = index; i < (oldSize - 1); ++i) {
+ for (ArrayIndex i = index; i < (oldSize - 1); ++i){
CZString keey(i);
- (*this->value_.map_)[keey] = (*this)[i + 1];
+ (*value_.map_)[keey] = (*this)[i + 1];
}
// erase the last one ("leftover")
CZString keyLast(oldSize - 1);
- ObjectValues::iterator itLast = this->value_.map_->find(keyLast);
- this->value_.map_->erase(itLast);
+ ObjectValues::iterator itLast = value_.map_->find(keyLast);
+ value_.map_->erase(itLast);
return true;
}
#ifdef JSON_USE_CPPTL
Value Value::get(const CppTL::ConstString& key,
- const Value& defaultValue) const
-{
+ const Value& defaultValue) const {
return get(key.c_str(), key.end_c_str(), defaultValue);
}
#endif
bool Value::isMember(char const* key, char const* cend) const
{
- Value const* value = this->find(key, cend);
+ Value const* value = find(key, cend);
return NULL != value;
}
bool Value::isMember(char const* key) const
{
- return this->isMember(key, key + strlen(key));
+ return isMember(key, key + strlen(key));
}
bool Value::isMember(JSONCPP_STRING const& key) const
{
- return this->isMember(key.data(), key.data() + key.length());
+ return isMember(key.data(), key.data() + key.length());
}
#ifdef JSON_USE_CPPTL
-bool Value::isMember(const CppTL::ConstString& key) const
-{
+bool Value::isMember(const CppTL::ConstString& key) const {
return isMember(key.c_str(), key.end_c_str());
}
#endif
-Value::Members Value::getMemberNames() const
-{
+Value::Members Value::getMemberNames() const {
JSON_ASSERT_MESSAGE(
- type_ == nullValue || type_ == objectValue,
- "in Json::Value::getMemberNames(), value must be objectValue");
- if (this->type_ == nullValue)
+ type_ == nullValue || type_ == objectValue,
+ "in Json::Value::getMemberNames(), value must be objectValue");
+ if (type_ == nullValue)
return Value::Members();
Members members;
- members.reserve(this->value_.map_->size());
- ObjectValues::const_iterator it = this->value_.map_->begin();
- ObjectValues::const_iterator itEnd = this->value_.map_->end();
+ members.reserve(value_.map_->size());
+ ObjectValues::const_iterator it = value_.map_->begin();
+ ObjectValues::const_iterator itEnd = value_.map_->end();
for (; it != itEnd; ++it) {
- members.push_back(
- JSONCPP_STRING((*it).first.data(), (*it).first.length()));
+ members.push_back(JSONCPP_STRING((*it).first.data(),
+ (*it).first.length()));
}
return members;
}
@@ -1447,8 +1277,8 @@ Value::Members Value::getMemberNames() const
// if ( type_ == objectValue )
// {
// return CppTL::Enum::any( CppTL::Enum::transform(
-// CppTL::Enum::keys( *(value_.map_), CppTL::Type<const CZString &>()
-// ), MemberNamesTransform() ) );
+// CppTL::Enum::keys( *(value_.map_), CppTL::Type<const CZString &>() ),
+// MemberNamesTransform() ) );
// }
// return EnumMemberNames();
//}
@@ -1465,114 +1295,99 @@ Value::Members Value::getMemberNames() const
//
//# endif
-static bool IsIntegral(double d)
-{
+static bool IsIntegral(double d) {
double integral_part;
return modf(d, &integral_part) == 0.0;
}
-bool Value::isNull() const
-{
- return this->type_ == nullValue;
-}
+bool Value::isNull() const { return type_ == nullValue; }
-bool Value::isBool() const
-{
- return this->type_ == booleanValue;
-}
+bool Value::isBool() const { return type_ == booleanValue; }
-bool Value::isInt() const
-{
- switch (this->type_) {
- case intValue:
+bool Value::isInt() const {
+ switch (type_) {
+ case intValue:
#if defined(JSON_HAS_INT64)
- return this->value_.int_ >= minInt && this->value_.int_ <= maxInt;
+ return value_.int_ >= minInt && value_.int_ <= maxInt;
#else
- return true;
+ return true;
#endif
- case uintValue:
- return this->value_.uint_ <= UInt(maxInt);
- case realValue:
- return this->value_.real_ >= minInt && this->value_.real_ <= maxInt &&
- IsIntegral(this->value_.real_);
- default:
- break;
+ case uintValue:
+ return value_.uint_ <= UInt(maxInt);
+ case realValue:
+ return value_.real_ >= minInt && value_.real_ <= maxInt &&
+ IsIntegral(value_.real_);
+ default:
+ break;
}
return false;
}
-bool Value::isUInt() const
-{
- switch (this->type_) {
- case intValue:
+bool Value::isUInt() const {
+ switch (type_) {
+ case intValue:
#if defined(JSON_HAS_INT64)
- return this->value_.int_ >= 0 &&
- LargestUInt(this->value_.int_) <= LargestUInt(maxUInt);
+ return value_.int_ >= 0 && LargestUInt(value_.int_) <= LargestUInt(maxUInt);
#else
- return value_.int_ >= 0;
+ return value_.int_ >= 0;
#endif
- case uintValue:
+ case uintValue:
#if defined(JSON_HAS_INT64)
- return this->value_.uint_ <= maxUInt;
+ return value_.uint_ <= maxUInt;
#else
- return true;
+ return true;
#endif
- case realValue:
- return this->value_.real_ >= 0 && this->value_.real_ <= maxUInt &&
- IsIntegral(this->value_.real_);
- default:
- break;
+ case realValue:
+ return value_.real_ >= 0 && value_.real_ <= maxUInt &&
+ IsIntegral(value_.real_);
+ default:
+ break;
}
return false;
}
-bool Value::isInt64() const
-{
+bool Value::isInt64() const {
#if defined(JSON_HAS_INT64)
- switch (this->type_) {
- case intValue:
- return true;
- case uintValue:
- return this->value_.uint_ <= UInt64(maxInt64);
- case realValue:
- // Note that maxInt64 (= 2^63 - 1) is not exactly representable as a
- // double, so double(maxInt64) will be rounded up to 2^63. Therefore we
- // require the value to be strictly less than the limit.
- return this->value_.real_ >= double(minInt64) &&
- this->value_.real_ < double(maxInt64) &&
- IsIntegral(this->value_.real_);
- default:
- break;
+ switch (type_) {
+ case intValue:
+ return true;
+ case uintValue:
+ return value_.uint_ <= UInt64(maxInt64);
+ case realValue:
+ // Note that maxInt64 (= 2^63 - 1) is not exactly representable as a
+ // double, so double(maxInt64) will be rounded up to 2^63. Therefore we
+ // require the value to be strictly less than the limit.
+ return value_.real_ >= double(minInt64) &&
+ value_.real_ < double(maxInt64) && IsIntegral(value_.real_);
+ default:
+ break;
}
#endif // JSON_HAS_INT64
return false;
}
-bool Value::isUInt64() const
-{
+bool Value::isUInt64() const {
#if defined(JSON_HAS_INT64)
- switch (this->type_) {
- case intValue:
- return this->value_.int_ >= 0;
- case uintValue:
- return true;
- case realValue:
- // Note that maxUInt64 (= 2^64 - 1) is not exactly representable as a
- // double, so double(maxUInt64) will be rounded up to 2^64. Therefore we
- // require the value to be strictly less than the limit.
- return this->value_.real_ >= 0 &&
- this->value_.real_ < maxUInt64AsDouble &&
- IsIntegral(this->value_.real_);
- default:
- break;
+ switch (type_) {
+ case intValue:
+ return value_.int_ >= 0;
+ case uintValue:
+ return true;
+ case realValue:
+ // Note that maxUInt64 (= 2^64 - 1) is not exactly representable as a
+ // double, so double(maxUInt64) will be rounded up to 2^64. Therefore we
+ // require the value to be strictly less than the limit.
+ return value_.real_ >= 0 && value_.real_ < maxUInt64AsDouble &&
+ IsIntegral(value_.real_);
+ default:
+ break;
}
#endif // JSON_HAS_INT64
return false;
}
-bool Value::isIntegral() const
-{
- switch (this->type_) {
+bool Value::isIntegral() const {
+ switch (type_) {
case intValue:
case uintValue:
return true;
@@ -1581,12 +1396,9 @@ bool Value::isIntegral() const
// Note that maxUInt64 (= 2^64 - 1) is not exactly representable as a
// double, so double(maxUInt64) will be rounded up to 2^64. Therefore we
// require the value to be strictly less than the limit.
- return this->value_.real_ >= double(minInt64) &&
- this->value_.real_ < maxUInt64AsDouble &&
- IsIntegral(this->value_.real_);
+ return value_.real_ >= double(minInt64) && value_.real_ < maxUInt64AsDouble && IsIntegral(value_.real_);
#else
- return value_.real_ >= minInt && value_.real_ <= maxUInt &&
- IsIntegral(value_.real_);
+ return value_.real_ >= minInt && value_.real_ <= maxUInt && IsIntegral(value_.real_);
#endif // JSON_HAS_INT64
default:
break;
@@ -1594,89 +1406,53 @@ bool Value::isIntegral() const
return false;
}
-bool Value::isDouble() const
-{
- return this->type_ == intValue || this->type_ == uintValue ||
- this->type_ == realValue;
-}
+bool Value::isDouble() const { return type_ == intValue || type_ == uintValue || type_ == realValue; }
-bool Value::isNumeric() const
-{
- return this->isDouble();
-}
+bool Value::isNumeric() const { return isDouble(); }
-bool Value::isString() const
-{
- return this->type_ == stringValue;
-}
+bool Value::isString() const { return type_ == stringValue; }
-bool Value::isArray() const
-{
- return this->type_ == arrayValue;
-}
+bool Value::isArray() const { return type_ == arrayValue; }
-bool Value::isObject() const
-{
- return this->type_ == objectValue;
-}
+bool Value::isObject() const { return type_ == objectValue; }
-void Value::setComment(const char* comment, size_t len,
- CommentPlacement placement)
-{
- if (!this->comments_)
- this->comments_ = new CommentInfo[numberOfCommentPlacement];
- if ((len > 0) && (comment[len - 1] == '\n')) {
+void Value::setComment(const char* comment, size_t len, CommentPlacement placement) {
+ if (!comments_)
+ comments_ = new CommentInfo[numberOfCommentPlacement];
+ if ((len > 0) && (comment[len-1] == '\n')) {
// Always discard trailing newline, to aid indentation.
len -= 1;
}
- this->comments_[placement].setComment(comment, len);
+ comments_[placement].setComment(comment, len);
}
-void Value::setComment(const char* comment, CommentPlacement placement)
-{
- this->setComment(comment, strlen(comment), placement);
+void Value::setComment(const char* comment, CommentPlacement placement) {
+ setComment(comment, strlen(comment), placement);
}
-void Value::setComment(const JSONCPP_STRING& comment,
- CommentPlacement placement)
-{
- this->setComment(comment.c_str(), comment.length(), placement);
+void Value::setComment(const JSONCPP_STRING& comment, CommentPlacement placement) {
+ setComment(comment.c_str(), comment.length(), placement);
}
-bool Value::hasComment(CommentPlacement placement) const
-{
- return this->comments_ != 0 && this->comments_[placement].comment_ != 0;
+bool Value::hasComment(CommentPlacement placement) const {
+ return comments_ != 0 && comments_[placement].comment_ != 0;
}
-JSONCPP_STRING Value::getComment(CommentPlacement placement) const
-{
- if (this->hasComment(placement))
- return this->comments_[placement].comment_;
+JSONCPP_STRING Value::getComment(CommentPlacement placement) const {
+ if (hasComment(placement))
+ return comments_[placement].comment_;
return "";
}
-void Value::setOffsetStart(ptrdiff_t start)
-{
- this->start_ = start;
-}
+void Value::setOffsetStart(ptrdiff_t start) { start_ = start; }
-void Value::setOffsetLimit(ptrdiff_t limit)
-{
- this->limit_ = limit;
-}
+void Value::setOffsetLimit(ptrdiff_t limit) { limit_ = limit; }
-ptrdiff_t Value::getOffsetStart() const
-{
- return this->start_;
-}
+ptrdiff_t Value::getOffsetStart() const { return start_; }
-ptrdiff_t Value::getOffsetLimit() const
-{
- return this->limit_;
-}
+ptrdiff_t Value::getOffsetLimit() const { return limit_; }
-JSONCPP_STRING Value::toStyledString() const
-{
+JSONCPP_STRING Value::toStyledString() const {
StreamWriterBuilder builder;
JSONCPP_STRING out = this->hasComment(commentBefore) ? "\n" : "";
@@ -1686,58 +1462,54 @@ JSONCPP_STRING Value::toStyledString() const
return out;
}
-Value::const_iterator Value::begin() const
-{
- switch (this->type_) {
- case arrayValue:
- case objectValue:
- if (this->value_.map_)
- return const_iterator(this->value_.map_->begin());
- break;
- default:
- break;
+Value::const_iterator Value::begin() const {
+ switch (type_) {
+ case arrayValue:
+ case objectValue:
+ if (value_.map_)
+ return const_iterator(value_.map_->begin());
+ break;
+ default:
+ break;
}
return const_iterator();
}
-Value::const_iterator Value::end() const
-{
- switch (this->type_) {
- case arrayValue:
- case objectValue:
- if (this->value_.map_)
- return const_iterator(this->value_.map_->end());
- break;
- default:
- break;
+Value::const_iterator Value::end() const {
+ switch (type_) {
+ case arrayValue:
+ case objectValue:
+ if (value_.map_)
+ return const_iterator(value_.map_->end());
+ break;
+ default:
+ break;
}
return const_iterator();
}
-Value::iterator Value::begin()
-{
- switch (this->type_) {
- case arrayValue:
- case objectValue:
- if (this->value_.map_)
- return iterator(this->value_.map_->begin());
- break;
- default:
- break;
+Value::iterator Value::begin() {
+ switch (type_) {
+ case arrayValue:
+ case objectValue:
+ if (value_.map_)
+ return iterator(value_.map_->begin());
+ break;
+ default:
+ break;
}
return iterator();
}
-Value::iterator Value::end()
-{
- switch (this->type_) {
- case arrayValue:
- case objectValue:
- if (this->value_.map_)
- return iterator(this->value_.map_->end());
- break;
- default:
- break;
+Value::iterator Value::end() {
+ switch (type_) {
+ case arrayValue:
+ case objectValue:
+ if (value_.map_)
+ return iterator(value_.map_->end());
+ break;
+ default:
+ break;
}
return iterator();
}
@@ -1745,41 +1517,26 @@ Value::iterator Value::end()
// class PathArgument
// //////////////////////////////////////////////////////////////////
-PathArgument::PathArgument()
- : key_()
- , index_()
- , kind_(kindNone)
-{
-}
+PathArgument::PathArgument() : key_(), index_(), kind_(kindNone) {}
PathArgument::PathArgument(ArrayIndex index)
- : key_()
- , index_(index)
- , kind_(kindIndex)
-{
-}
+ : key_(), index_(index), kind_(kindIndex) {}
PathArgument::PathArgument(const char* key)
- : key_(key)
- , index_()
- , kind_(kindKey)
-{
-}
+ : key_(key), index_(), kind_(kindKey) {}
PathArgument::PathArgument(const JSONCPP_STRING& key)
- : key_(key.c_str())
- , index_()
- , kind_(kindKey)
-{
-}
+ : key_(key.c_str()), index_(), kind_(kindKey) {}
// class Path
// //////////////////////////////////////////////////////////////////
-Path::Path(const JSONCPP_STRING& path, const PathArgument& a1,
- const PathArgument& a2, const PathArgument& a3,
- const PathArgument& a4, const PathArgument& a5)
-{
+Path::Path(const JSONCPP_STRING& path,
+ const PathArgument& a1,
+ const PathArgument& a2,
+ const PathArgument& a3,
+ const PathArgument& a4,
+ const PathArgument& a5) {
InArgs in;
in.reserve(5);
in.push_back(&a1);
@@ -1787,11 +1544,10 @@ Path::Path(const JSONCPP_STRING& path, const PathArgument& a1,
in.push_back(&a3);
in.push_back(&a4);
in.push_back(&a5);
- this->makePath(path, in);
+ makePath(path, in);
}
-void Path::makePath(const JSONCPP_STRING& path, const InArgs& in)
-{
+void Path::makePath(const JSONCPP_STRING& path, const InArgs& in) {
const char* current = path.c_str();
const char* end = current + path.length();
InArgs::const_iterator itInArg = in.begin();
@@ -1799,17 +1555,17 @@ void Path::makePath(const JSONCPP_STRING& path, const InArgs& in)
if (*current == '[') {
++current;
if (*current == '%')
- this->addPathInArg(path, in, itInArg, PathArgument::kindIndex);
+ addPathInArg(path, in, itInArg, PathArgument::kindIndex);
else {
ArrayIndex index = 0;
for (; current != end && *current >= '0' && *current <= '9'; ++current)
index = index * 10 + ArrayIndex(*current - '0');
- this->args_.push_back(index);
+ args_.push_back(index);
}
if (current == end || *++current != ']')
- this->invalidPath(path, int(current - path.c_str()));
+ invalidPath(path, int(current - path.c_str()));
} else if (*current == '%') {
- this->addPathInArg(path, in, itInArg, PathArgument::kindKey);
+ addPathInArg(path, in, itInArg, PathArgument::kindKey);
++current;
} else if (*current == '.' || *current == ']') {
++current;
@@ -1817,34 +1573,31 @@ void Path::makePath(const JSONCPP_STRING& path, const InArgs& in)
const char* beginName = current;
while (current != end && !strchr("[.", *current))
++current;
- this->args_.push_back(JSONCPP_STRING(beginName, current));
+ args_.push_back(JSONCPP_STRING(beginName, current));
}
}
}
-void Path::addPathInArg(const JSONCPP_STRING& /*path*/, const InArgs& in,
+void Path::addPathInArg(const JSONCPP_STRING& /*path*/,
+ const InArgs& in,
InArgs::const_iterator& itInArg,
- PathArgument::Kind kind)
-{
+ PathArgument::Kind kind) {
if (itInArg == in.end()) {
// Error: missing argument %d
} else if ((*itInArg)->kind_ != kind) {
// Error: bad argument type
} else {
- this->args_.push_back(**itInArg++);
+ args_.push_back(**itInArg++);
}
}
-void Path::invalidPath(const JSONCPP_STRING& /*path*/, int /*location*/)
-{
+void Path::invalidPath(const JSONCPP_STRING& /*path*/, int /*location*/) {
// Error: invalid path.
}
-const Value& Path::resolve(const Value& root) const
-{
+const Value& Path::resolve(const Value& root) const {
const Value* node = &root;
- for (Args::const_iterator it = this->args_.begin(); it != this->args_.end();
- ++it) {
+ for (Args::const_iterator it = args_.begin(); it != args_.end(); ++it) {
const PathArgument& arg = *it;
if (arg.kind_ == PathArgument::kindIndex) {
if (!node->isArray() || !node->isValidIndex(arg.index_)) {
@@ -1868,11 +1621,9 @@ const Value& Path::resolve(const Value& root) const
return *node;
}
-Value Path::resolve(const Value& root, const Value& defaultValue) const
-{
+Value Path::resolve(const Value& root, const Value& defaultValue) const {
const Value* node = &root;
- for (Args::const_iterator it = this->args_.begin(); it != this->args_.end();
- ++it) {
+ for (Args::const_iterator it = args_.begin(); it != args_.end(); ++it) {
const PathArgument& arg = *it;
if (arg.kind_ == PathArgument::kindIndex) {
if (!node->isArray() || !node->isValidIndex(arg.index_))
@@ -1889,11 +1640,9 @@ Value Path::resolve(const Value& root, const Value& defaultValue) const
return *node;
}
-Value& Path::make(Value& root) const
-{
+Value& Path::make(Value& root) const {
Value* node = &root;
- for (Args::const_iterator it = this->args_.begin(); it != this->args_.end();
- ++it) {
+ for (Args::const_iterator it = args_.begin(); it != args_.end(); ++it) {
const PathArgument& arg = *it;
if (arg.kind_ == PathArgument::kindIndex) {
if (!node->isArray()) {