Compare commits
2 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
b4e88e35be | ||
![]() |
a888632781 |
@ -39,10 +39,6 @@
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if __cplusplus >= 201703L
|
|
||||||
#define JSONCPP_HAS_STRING_VIEW 1
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <array>
|
#include <array>
|
||||||
#include <exception>
|
#include <exception>
|
||||||
#include <map>
|
#include <map>
|
||||||
@ -50,10 +46,6 @@
|
|||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#ifdef JSONCPP_HAS_STRING_VIEW
|
|
||||||
#include <string_view>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Disable warning C4251: <data member>: <type> needs to have dll-interface to
|
// Disable warning C4251: <data member>: <type> needs to have dll-interface to
|
||||||
// be used by...
|
// be used by...
|
||||||
#if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING)
|
#if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING)
|
||||||
@ -350,9 +342,6 @@ public:
|
|||||||
*/
|
*/
|
||||||
Value(const StaticString& value);
|
Value(const StaticString& value);
|
||||||
Value(const String& value);
|
Value(const String& value);
|
||||||
#ifdef JSONCPP_HAS_STRING_VIEW
|
|
||||||
Value(std::string_view value);
|
|
||||||
#endif
|
|
||||||
Value(bool value);
|
Value(bool value);
|
||||||
Value(std::nullptr_t ptr) = delete;
|
Value(std::nullptr_t ptr) = delete;
|
||||||
Value(const Value& other);
|
Value(const Value& other);
|
||||||
@ -395,12 +384,6 @@ public:
|
|||||||
* \return false if !string. (Seg-fault if str or end are NULL.)
|
* \return false if !string. (Seg-fault if str or end are NULL.)
|
||||||
*/
|
*/
|
||||||
bool getString(char const** begin, char const** end) const;
|
bool getString(char const** begin, char const** end) const;
|
||||||
#ifdef JSONCPP_HAS_STRING_VIEW
|
|
||||||
/** Get string_view of string-value.
|
|
||||||
* \return false if !string. (Seg-fault if str is NULL.)
|
|
||||||
*/
|
|
||||||
bool getString(std::string_view* str) const;
|
|
||||||
#endif
|
|
||||||
Int asInt() const;
|
Int asInt() const;
|
||||||
UInt asUInt() const;
|
UInt asUInt() const;
|
||||||
#if defined(JSON_HAS_INT64)
|
#if defined(JSON_HAS_INT64)
|
||||||
@ -487,15 +470,6 @@ public:
|
|||||||
bool insert(ArrayIndex index, const Value& newValue);
|
bool insert(ArrayIndex index, const Value& newValue);
|
||||||
bool insert(ArrayIndex index, Value&& newValue);
|
bool insert(ArrayIndex index, Value&& newValue);
|
||||||
|
|
||||||
#ifdef JSONCPP_HAS_STRING_VIEW
|
|
||||||
/// Access an object value by name, create a null member if it does not exist.
|
|
||||||
/// \param key may contain embedded nulls.
|
|
||||||
Value& operator[](std::string_view key);
|
|
||||||
/// Access an object value by name, returns null if there is no member with
|
|
||||||
/// that name.
|
|
||||||
/// \param key may contain embedded nulls.
|
|
||||||
const Value& operator[](std::string_view key) const;
|
|
||||||
#else
|
|
||||||
/// Access an object value by name, create a null member if it does not exist.
|
/// Access an object value by name, create a null member if it does not exist.
|
||||||
/// \note Because of our implementation, keys are limited to 2^30 -1 chars.
|
/// \note Because of our implementation, keys are limited to 2^30 -1 chars.
|
||||||
/// Exceeding that will cause an exception.
|
/// Exceeding that will cause an exception.
|
||||||
@ -510,7 +484,6 @@ public:
|
|||||||
/// that name.
|
/// that name.
|
||||||
/// \param key may contain embedded nulls.
|
/// \param key may contain embedded nulls.
|
||||||
const Value& operator[](const String& key) const;
|
const Value& operator[](const String& key) const;
|
||||||
#endif
|
|
||||||
/** \brief Access an object value by name, create a null member if it does not
|
/** \brief Access an object value by name, create a null member if it does not
|
||||||
* exist.
|
* exist.
|
||||||
*
|
*
|
||||||
@ -524,24 +497,18 @@ public:
|
|||||||
* \endcode
|
* \endcode
|
||||||
*/
|
*/
|
||||||
Value& operator[](const StaticString& key);
|
Value& operator[](const StaticString& key);
|
||||||
#ifdef JSONCPP_HAS_STRING_VIEW
|
|
||||||
/// Return the member named key if it exist, defaultValue otherwise.
|
|
||||||
/// \note deep copy
|
|
||||||
Value get(std::string_view key, const Value& defaultValue) const;
|
|
||||||
#else
|
|
||||||
/// Return the member named key if it exist, defaultValue otherwise.
|
/// Return the member named key if it exist, defaultValue otherwise.
|
||||||
/// \note deep copy
|
/// \note deep copy
|
||||||
Value get(const char* key, const Value& defaultValue) const;
|
Value get(const char* key, const Value& defaultValue) const;
|
||||||
/// Return the member named key if it exist, defaultValue otherwise.
|
|
||||||
/// \note deep copy
|
|
||||||
/// \param key may contain embedded nulls.
|
|
||||||
Value get(const String& key, const Value& defaultValue) const;
|
|
||||||
#endif
|
|
||||||
/// Return the member named key if it exist, defaultValue otherwise.
|
/// Return the member named key if it exist, defaultValue otherwise.
|
||||||
/// \note deep copy
|
/// \note deep copy
|
||||||
/// \note key may contain embedded nulls.
|
/// \note key may contain embedded nulls.
|
||||||
Value get(const char* begin, const char* end,
|
Value get(const char* begin, const char* end,
|
||||||
const Value& defaultValue) const;
|
const Value& defaultValue) const;
|
||||||
|
/// Return the member named key if it exist, defaultValue otherwise.
|
||||||
|
/// \note deep copy
|
||||||
|
/// \param key may contain embedded nulls.
|
||||||
|
Value get(const String& key, const Value& defaultValue) const;
|
||||||
/// Most general and efficient version of isMember()const, get()const,
|
/// Most general and efficient version of isMember()const, get()const,
|
||||||
/// and operator[]const
|
/// and operator[]const
|
||||||
/// \note As stated elsewhere, behavior is undefined if (end-begin) >= 2^30
|
/// \note As stated elsewhere, behavior is undefined if (end-begin) >= 2^30
|
||||||
@ -549,29 +516,6 @@ public:
|
|||||||
/// Most general and efficient version of isMember()const, get()const,
|
/// Most general and efficient version of isMember()const, get()const,
|
||||||
/// and operator[]const
|
/// and operator[]const
|
||||||
Value const* find(const String& key) const;
|
Value const* find(const String& key) const;
|
||||||
|
|
||||||
/// Calls find and only returns a valid pointer if the type is found
|
|
||||||
template <typename T, bool (T::*TMemFn)() const>
|
|
||||||
Value const* findValue(const String& key) const {
|
|
||||||
Value const* found = find(key);
|
|
||||||
if (!found || !(found->*TMemFn)())
|
|
||||||
return nullptr;
|
|
||||||
return found;
|
|
||||||
}
|
|
||||||
|
|
||||||
Value const* findNull(const String& key) const;
|
|
||||||
Value const* findBool(const String& key) const;
|
|
||||||
Value const* findInt(const String& key) const;
|
|
||||||
Value const* findInt64(const String& key) const;
|
|
||||||
Value const* findUInt(const String& key) const;
|
|
||||||
Value const* findUInt64(const String& key) const;
|
|
||||||
Value const* findIntegral(const String& key) const;
|
|
||||||
Value const* findDouble(const String& key) const;
|
|
||||||
Value const* findNumeric(const String& key) const;
|
|
||||||
Value const* findString(const String& key) const;
|
|
||||||
Value const* findArray(const String& key) const;
|
|
||||||
Value const* findObject(const String& key) const;
|
|
||||||
|
|
||||||
/// Most general and efficient version of object-mutators.
|
/// Most general and efficient version of object-mutators.
|
||||||
/// \note As stated elsewhere, behavior is undefined if (end-begin) >= 2^30
|
/// \note As stated elsewhere, behavior is undefined if (end-begin) >= 2^30
|
||||||
/// \return non-zero, but JSON_ASSERT if this is neither object nor nullValue.
|
/// \return non-zero, but JSON_ASSERT if this is neither object nor nullValue.
|
||||||
@ -581,28 +525,20 @@ public:
|
|||||||
/// Do nothing if it did not exist.
|
/// Do nothing if it did not exist.
|
||||||
/// \pre type() is objectValue or nullValue
|
/// \pre type() is objectValue or nullValue
|
||||||
/// \post type() is unchanged
|
/// \post type() is unchanged
|
||||||
#if JSONCPP_HAS_STRING_VIEW
|
|
||||||
void removeMember(std::string_view key);
|
|
||||||
#else
|
|
||||||
void removeMember(const char* key);
|
void removeMember(const char* key);
|
||||||
/// Same as removeMember(const char*)
|
/// Same as removeMember(const char*)
|
||||||
/// \param key may contain embedded nulls.
|
/// \param key may contain embedded nulls.
|
||||||
void removeMember(const String& key);
|
void removeMember(const String& key);
|
||||||
#endif
|
/// Same as removeMember(const char* begin, const char* end, Value* removed),
|
||||||
|
/// but 'key' is null-terminated.
|
||||||
|
bool removeMember(const char* key, Value* removed);
|
||||||
/** \brief Remove the named map member.
|
/** \brief Remove the named map member.
|
||||||
*
|
*
|
||||||
* Update 'removed' iff removed.
|
* Update 'removed' iff removed.
|
||||||
* \param key may contain embedded nulls.
|
* \param key may contain embedded nulls.
|
||||||
* \return true iff removed (no exceptions)
|
* \return true iff removed (no exceptions)
|
||||||
*/
|
*/
|
||||||
#if JSONCPP_HAS_STRING_VIEW
|
|
||||||
bool removeMember(std::string_view key, Value* removed);
|
|
||||||
#else
|
|
||||||
bool removeMember(String const& key, Value* removed);
|
bool removeMember(String const& key, Value* removed);
|
||||||
/// Same as removeMember(const char* begin, const char* end, Value* removed),
|
|
||||||
/// but 'key' is null-terminated.
|
|
||||||
bool removeMember(const char* key, Value* removed);
|
|
||||||
#endif
|
|
||||||
/// Same as removeMember(String const& key, Value* removed)
|
/// Same as removeMember(String const& key, Value* removed)
|
||||||
bool removeMember(const char* begin, const char* end, Value* removed);
|
bool removeMember(const char* begin, const char* end, Value* removed);
|
||||||
/** \brief Remove the indexed array element.
|
/** \brief Remove the indexed array element.
|
||||||
@ -613,18 +549,12 @@ public:
|
|||||||
*/
|
*/
|
||||||
bool removeIndex(ArrayIndex index, Value* removed);
|
bool removeIndex(ArrayIndex index, Value* removed);
|
||||||
|
|
||||||
#ifdef JSONCPP_HAS_STRING_VIEW
|
|
||||||
/// Return true if the object has a member named key.
|
|
||||||
/// \param key may contain embedded nulls.
|
|
||||||
bool isMember(std::string_view key) const;
|
|
||||||
#else
|
|
||||||
/// Return true if the object has a member named key.
|
/// Return true if the object has a member named key.
|
||||||
/// \note 'key' must be null-terminated.
|
/// \note 'key' must be null-terminated.
|
||||||
bool isMember(const char* key) const;
|
bool isMember(const char* key) const;
|
||||||
/// Return true if the object has a member named key.
|
/// Return true if the object has a member named key.
|
||||||
/// \param key may contain embedded nulls.
|
/// \param key may contain embedded nulls.
|
||||||
bool isMember(const String& key) const;
|
bool isMember(const String& key) const;
|
||||||
#endif
|
|
||||||
/// Same as isMember(String const& key)const
|
/// Same as isMember(String const& key)const
|
||||||
bool isMember(const char* begin, const char* end) const;
|
bool isMember(const char* begin, const char* end) const;
|
||||||
|
|
||||||
|
@ -17,10 +17,6 @@
|
|||||||
#include <sstream>
|
#include <sstream>
|
||||||
#include <utility>
|
#include <utility>
|
||||||
|
|
||||||
#ifdef JSONCPP_HAS_STRING_VIEW
|
|
||||||
#include <string_view>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Provide implementation equivalent of std::snprintf for older _MSC compilers
|
// Provide implementation equivalent of std::snprintf for older _MSC compilers
|
||||||
#if defined(_MSC_VER) && _MSC_VER < 1900
|
#if defined(_MSC_VER) && _MSC_VER < 1900
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
@ -424,14 +420,6 @@ Value::Value(const String& value) {
|
|||||||
value.data(), static_cast<unsigned>(value.length()));
|
value.data(), static_cast<unsigned>(value.length()));
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef JSONCPP_HAS_STRING_VIEW
|
|
||||||
Value::Value(std::string_view value) {
|
|
||||||
initBasic(stringValue, true);
|
|
||||||
value_.string_ = duplicateAndPrefixStringValue(
|
|
||||||
value.data(), static_cast<unsigned>(value.length()));
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
Value::Value(const StaticString& value) {
|
Value::Value(const StaticString& value) {
|
||||||
initBasic(stringValue);
|
initBasic(stringValue);
|
||||||
value_.string_ = const_cast<char*>(value.c_str());
|
value_.string_ = const_cast<char*>(value.c_str());
|
||||||
@ -639,21 +627,6 @@ bool Value::getString(char const** begin, char const** end) const {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef JSONCPP_HAS_STRING_VIEW
|
|
||||||
bool Value::getString(std::string_view* str) const {
|
|
||||||
if (type() != stringValue)
|
|
||||||
return false;
|
|
||||||
if (value_.string_ == nullptr)
|
|
||||||
return false;
|
|
||||||
const char* begin;
|
|
||||||
unsigned length;
|
|
||||||
decodePrefixedString(this->isAllocated(), this->value_.string_, &length,
|
|
||||||
&begin);
|
|
||||||
*str = std::string_view(begin, length);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
String Value::asString() const {
|
String Value::asString() const {
|
||||||
switch (type()) {
|
switch (type()) {
|
||||||
case nullValue:
|
case nullValue:
|
||||||
@ -1129,61 +1102,12 @@ Value const* Value::find(char const* begin, char const* end) const {
|
|||||||
Value const* Value::find(const String& key) const {
|
Value const* Value::find(const String& key) const {
|
||||||
return find(key.data(), key.data() + key.length());
|
return find(key.data(), key.data() + key.length());
|
||||||
}
|
}
|
||||||
|
|
||||||
Value const* Value::findNull(const String& key) const {
|
|
||||||
return findValue<Value, &Value::isNull>(key);
|
|
||||||
}
|
|
||||||
Value const* Value::findBool(const String& key) const {
|
|
||||||
return findValue<Value, &Value::isBool>(key);
|
|
||||||
}
|
|
||||||
Value const* Value::findInt(const String& key) const {
|
|
||||||
return findValue<Value, &Value::isInt>(key);
|
|
||||||
}
|
|
||||||
Value const* Value::findInt64(const String& key) const {
|
|
||||||
return findValue<Value, &Value::isInt64>(key);
|
|
||||||
}
|
|
||||||
Value const* Value::findUInt(const String& key) const {
|
|
||||||
return findValue<Value, &Value::isUInt>(key);
|
|
||||||
}
|
|
||||||
Value const* Value::findUInt64(const String& key) const {
|
|
||||||
return findValue<Value, &Value::isUInt64>(key);
|
|
||||||
}
|
|
||||||
Value const* Value::findIntegral(const String& key) const {
|
|
||||||
return findValue<Value, &Value::isIntegral>(key);
|
|
||||||
}
|
|
||||||
Value const* Value::findDouble(const String& key) const {
|
|
||||||
return findValue<Value, &Value::isDouble>(key);
|
|
||||||
}
|
|
||||||
Value const* Value::findNumeric(const String& key) const {
|
|
||||||
return findValue<Value, &Value::isNumeric>(key);
|
|
||||||
}
|
|
||||||
Value const* Value::findString(const String& key) const {
|
|
||||||
return findValue<Value, &Value::isString>(key);
|
|
||||||
}
|
|
||||||
Value const* Value::findArray(const String& key) const {
|
|
||||||
return findValue<Value, &Value::isArray>(key);
|
|
||||||
}
|
|
||||||
Value const* Value::findObject(const String& key) const {
|
|
||||||
return findValue<Value, &Value::isObject>(key);
|
|
||||||
}
|
|
||||||
|
|
||||||
Value* Value::demand(char const* begin, char const* end) {
|
Value* Value::demand(char const* begin, char const* end) {
|
||||||
JSON_ASSERT_MESSAGE(type() == nullValue || type() == objectValue,
|
JSON_ASSERT_MESSAGE(type() == nullValue || type() == objectValue,
|
||||||
"in Json::Value::demand(begin, end): requires "
|
"in Json::Value::demand(begin, end): requires "
|
||||||
"objectValue or nullValue");
|
"objectValue or nullValue");
|
||||||
return &resolveReference(begin, end);
|
return &resolveReference(begin, end);
|
||||||
}
|
}
|
||||||
#ifdef JSONCPP_HAS_STRING_VIEW
|
|
||||||
const Value& Value::operator[](std::string_view key) const {
|
|
||||||
Value const* found = find(key.data(), key.data() + key.length());
|
|
||||||
if (!found)
|
|
||||||
return nullSingleton();
|
|
||||||
return *found;
|
|
||||||
}
|
|
||||||
Value& Value::operator[](std::string_view key) {
|
|
||||||
return resolveReference(key.data(), key.data() + key.length());
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
const Value& Value::operator[](const char* key) const {
|
const Value& Value::operator[](const char* key) const {
|
||||||
Value const* found = find(key, key + strlen(key));
|
Value const* found = find(key, key + strlen(key));
|
||||||
if (!found)
|
if (!found)
|
||||||
@ -1204,7 +1128,6 @@ Value& Value::operator[](const char* key) {
|
|||||||
Value& Value::operator[](const String& key) {
|
Value& Value::operator[](const String& key) {
|
||||||
return resolveReference(key.data(), key.data() + key.length());
|
return resolveReference(key.data(), key.data() + key.length());
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
Value& Value::operator[](const StaticString& key) {
|
Value& Value::operator[](const StaticString& key) {
|
||||||
return resolveReference(key.c_str());
|
return resolveReference(key.c_str());
|
||||||
@ -1244,18 +1167,12 @@ Value Value::get(char const* begin, char const* end,
|
|||||||
Value const* found = find(begin, end);
|
Value const* found = find(begin, end);
|
||||||
return !found ? defaultValue : *found;
|
return !found ? defaultValue : *found;
|
||||||
}
|
}
|
||||||
#ifdef JSONCPP_HAS_STRING_VIEW
|
|
||||||
Value Value::get(std::string_view key, const Value& defaultValue) const {
|
|
||||||
return get(key.data(), key.data() + key.length(), defaultValue);
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
Value Value::get(char const* key, Value const& defaultValue) const {
|
Value Value::get(char const* key, Value const& defaultValue) const {
|
||||||
return get(key, key + strlen(key), defaultValue);
|
return get(key, key + strlen(key), defaultValue);
|
||||||
}
|
}
|
||||||
Value Value::get(String const& key, Value const& defaultValue) const {
|
Value Value::get(String const& key, Value const& defaultValue) const {
|
||||||
return get(key.data(), key.data() + key.length(), defaultValue);
|
return get(key.data(), key.data() + key.length(), defaultValue);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
bool Value::removeMember(const char* begin, const char* end, Value* removed) {
|
bool Value::removeMember(const char* begin, const char* end, Value* removed) {
|
||||||
if (type() != objectValue) {
|
if (type() != objectValue) {
|
||||||
@ -1271,31 +1188,12 @@ bool Value::removeMember(const char* begin, const char* end, Value* removed) {
|
|||||||
value_.map_->erase(it);
|
value_.map_->erase(it);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
#ifdef JSONCPP_HAS_STRING_VIEW
|
|
||||||
bool Value::removeMember(std::string_view key, Value* removed) {
|
|
||||||
return removeMember(key.data(), key.data() + key.length(), removed);
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
bool Value::removeMember(const char* key, Value* removed) {
|
bool Value::removeMember(const char* key, Value* removed) {
|
||||||
return removeMember(key, key + strlen(key), removed);
|
return removeMember(key, key + strlen(key), removed);
|
||||||
}
|
}
|
||||||
bool Value::removeMember(String const& key, Value* removed) {
|
bool Value::removeMember(String const& key, Value* removed) {
|
||||||
return removeMember(key.data(), key.data() + key.length(), removed);
|
return removeMember(key.data(), key.data() + key.length(), removed);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef JSONCPP_HAS_STRING_VIEW
|
|
||||||
void Value::removeMember(std::string_view key) {
|
|
||||||
JSON_ASSERT_MESSAGE(type() == nullValue || type() == objectValue,
|
|
||||||
"in Json::Value::removeMember(): requires objectValue");
|
|
||||||
if (type() == nullValue)
|
|
||||||
return;
|
|
||||||
|
|
||||||
CZString actualKey(key.data(), unsigned(key.length()),
|
|
||||||
CZString::noDuplication);
|
|
||||||
value_.map_->erase(actualKey);
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
void Value::removeMember(const char* key) {
|
void Value::removeMember(const char* key) {
|
||||||
JSON_ASSERT_MESSAGE(type() == nullValue || type() == objectValue,
|
JSON_ASSERT_MESSAGE(type() == nullValue || type() == objectValue,
|
||||||
"in Json::Value::removeMember(): requires objectValue");
|
"in Json::Value::removeMember(): requires objectValue");
|
||||||
@ -1306,7 +1204,6 @@ void Value::removeMember(const char* key) {
|
|||||||
value_.map_->erase(actualKey);
|
value_.map_->erase(actualKey);
|
||||||
}
|
}
|
||||||
void Value::removeMember(const String& key) { removeMember(key.c_str()); }
|
void Value::removeMember(const String& key) { removeMember(key.c_str()); }
|
||||||
#endif
|
|
||||||
|
|
||||||
bool Value::removeIndex(ArrayIndex index, Value* removed) {
|
bool Value::removeIndex(ArrayIndex index, Value* removed) {
|
||||||
if (type() != arrayValue) {
|
if (type() != arrayValue) {
|
||||||
@ -1336,18 +1233,12 @@ bool Value::isMember(char const* begin, char const* end) const {
|
|||||||
Value const* value = find(begin, end);
|
Value const* value = find(begin, end);
|
||||||
return nullptr != value;
|
return nullptr != value;
|
||||||
}
|
}
|
||||||
#ifdef JSONCPP_HAS_STRING_VIEW
|
|
||||||
bool Value::isMember(std::string_view key) const {
|
|
||||||
return isMember(key.data(), key.data() + key.length());
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
bool Value::isMember(char const* key) const {
|
bool Value::isMember(char const* key) const {
|
||||||
return isMember(key, key + strlen(key));
|
return isMember(key, key + strlen(key));
|
||||||
}
|
}
|
||||||
bool Value::isMember(String const& key) const {
|
bool Value::isMember(String const& key) const {
|
||||||
return isMember(key.data(), key.data() + key.length());
|
return isMember(key.data(), key.data() + key.length());
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
Value::Members Value::getMemberNames() const {
|
Value::Members Value::getMemberNames() const {
|
||||||
JSON_ASSERT_MESSAGE(
|
JSON_ASSERT_MESSAGE(
|
||||||
|
@ -76,8 +76,6 @@ struct ValueTest : JsonTest::TestCase {
|
|||||||
Json::Value float_{0.00390625f};
|
Json::Value float_{0.00390625f};
|
||||||
Json::Value array1_;
|
Json::Value array1_;
|
||||||
Json::Value object1_;
|
Json::Value object1_;
|
||||||
Json::Value object2_;
|
|
||||||
Json::Value object3_;
|
|
||||||
Json::Value emptyString_{""};
|
Json::Value emptyString_{""};
|
||||||
Json::Value string1_{"a"};
|
Json::Value string1_{"a"};
|
||||||
Json::Value string_{"sometext with space"};
|
Json::Value string_{"sometext with space"};
|
||||||
@ -87,34 +85,6 @@ struct ValueTest : JsonTest::TestCase {
|
|||||||
ValueTest() {
|
ValueTest() {
|
||||||
array1_.append(1234);
|
array1_.append(1234);
|
||||||
object1_["id"] = 1234;
|
object1_["id"] = 1234;
|
||||||
|
|
||||||
// object2 with matching values
|
|
||||||
object2_["null"] = Json::nullValue;
|
|
||||||
object2_["bool"] = true;
|
|
||||||
object2_["int"] = Json::Int{Json::Value::maxInt};
|
|
||||||
object2_["int64"] = Json::Int64{Json::Value::maxInt64};
|
|
||||||
object2_["uint"] = Json::UInt{Json::Value::maxUInt};
|
|
||||||
object2_["uint64"] = Json::UInt64{Json::Value::maxUInt64};
|
|
||||||
object2_["integral"] = 1234;
|
|
||||||
object2_["double"] = 1234.56789;
|
|
||||||
object2_["numeric"] = 0.12345f;
|
|
||||||
object2_["string"] = "string";
|
|
||||||
object2_["array"] = Json::arrayValue;
|
|
||||||
object2_["object"] = Json::objectValue;
|
|
||||||
|
|
||||||
// object3 with not matching values
|
|
||||||
object3_["object"] = Json::nullValue;
|
|
||||||
object3_["null"] = true;
|
|
||||||
object3_["bool"] = Json::Int{Json::Value::maxInt};
|
|
||||||
object3_["int"] = "not_an_int";
|
|
||||||
object3_["int64"] = "not_an_int64";
|
|
||||||
object3_["uint"] = "not_an_uint";
|
|
||||||
object3_["uin64"] = "not_an_uint64";
|
|
||||||
object3_["integral"] = 1234.56789;
|
|
||||||
object3_["double"] = false;
|
|
||||||
object3_["numeric"] = "string";
|
|
||||||
object3_["string"] = Json::arrayValue;
|
|
||||||
object3_["array"] = Json::objectValue;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
struct IsCheck {
|
struct IsCheck {
|
||||||
@ -264,62 +234,6 @@ JSONTEST_FIXTURE_LOCAL(ValueTest, objects) {
|
|||||||
const Json::Value* stringFoundUnknownId = object1_.find(stringUnknownIdKey);
|
const Json::Value* stringFoundUnknownId = object1_.find(stringUnknownIdKey);
|
||||||
JSONTEST_ASSERT_EQUAL(nullptr, stringFoundUnknownId);
|
JSONTEST_ASSERT_EQUAL(nullptr, stringFoundUnknownId);
|
||||||
|
|
||||||
// Access through find<Type>()
|
|
||||||
const Json::Value* nullFound = object2_.findNull("null");
|
|
||||||
JSONTEST_ASSERT(nullFound != nullptr);
|
|
||||||
JSONTEST_ASSERT_EQUAL(Json::nullValue, *nullFound);
|
|
||||||
JSONTEST_ASSERT(object3_.findNull("null") == nullptr);
|
|
||||||
|
|
||||||
const Json::Value* boolFound = object2_.findBool("bool");
|
|
||||||
JSONTEST_ASSERT(boolFound != nullptr);
|
|
||||||
JSONTEST_ASSERT_EQUAL(true, *boolFound);
|
|
||||||
JSONTEST_ASSERT(object3_.findBool("bool") == nullptr);
|
|
||||||
|
|
||||||
const Json::Value* intFound = object2_.findInt("int");
|
|
||||||
JSONTEST_ASSERT(intFound != nullptr);
|
|
||||||
JSONTEST_ASSERT_EQUAL(Json::Int{Json::Value::maxInt}, *intFound);
|
|
||||||
JSONTEST_ASSERT(object3_.findInt("int") == nullptr);
|
|
||||||
|
|
||||||
const Json::Value* int64Found = object2_.findInt64("int64");
|
|
||||||
JSONTEST_ASSERT(int64Found != nullptr);
|
|
||||||
JSONTEST_ASSERT_EQUAL(Json::Int64{Json::Value::maxInt64}, *int64Found);
|
|
||||||
JSONTEST_ASSERT(object3_.findInt64("int64") == nullptr);
|
|
||||||
|
|
||||||
const Json::Value* uintFound = object2_.findUInt("uint");
|
|
||||||
JSONTEST_ASSERT(uintFound != nullptr);
|
|
||||||
JSONTEST_ASSERT_EQUAL(Json::UInt{Json::Value::maxUInt}, *uintFound);
|
|
||||||
JSONTEST_ASSERT(object3_.findUInt("uint") == nullptr);
|
|
||||||
|
|
||||||
const Json::Value* uint64Found = object2_.findUInt64("uint64");
|
|
||||||
JSONTEST_ASSERT(uint64Found != nullptr);
|
|
||||||
JSONTEST_ASSERT_EQUAL(Json::UInt64{Json::Value::maxUInt64}, *uint64Found);
|
|
||||||
JSONTEST_ASSERT(object3_.findUInt64("uint64") == nullptr);
|
|
||||||
|
|
||||||
const Json::Value* integralFound = object2_.findIntegral("integral");
|
|
||||||
JSONTEST_ASSERT(integralFound != nullptr);
|
|
||||||
JSONTEST_ASSERT_EQUAL(1234, *integralFound);
|
|
||||||
JSONTEST_ASSERT(object3_.findIntegral("integral") == nullptr);
|
|
||||||
|
|
||||||
const Json::Value* doubleFound = object2_.findDouble("double");
|
|
||||||
JSONTEST_ASSERT(doubleFound != nullptr);
|
|
||||||
JSONTEST_ASSERT_EQUAL(1234.56789, *doubleFound);
|
|
||||||
JSONTEST_ASSERT(object3_.findDouble("double") == nullptr);
|
|
||||||
|
|
||||||
const Json::Value* numericFound = object2_.findNumeric("numeric");
|
|
||||||
JSONTEST_ASSERT(numericFound != nullptr);
|
|
||||||
JSONTEST_ASSERT_EQUAL(0.12345f, *numericFound);
|
|
||||||
JSONTEST_ASSERT(object3_.findNumeric("numeric") == nullptr);
|
|
||||||
|
|
||||||
const Json::Value* stringFound = object2_.findString("string");
|
|
||||||
JSONTEST_ASSERT(stringFound != nullptr);
|
|
||||||
JSONTEST_ASSERT_EQUAL(std::string{"string"}, *stringFound);
|
|
||||||
JSONTEST_ASSERT(object3_.findString("string") == nullptr);
|
|
||||||
|
|
||||||
const Json::Value* arrayFound = object2_.findArray("array");
|
|
||||||
JSONTEST_ASSERT(arrayFound != nullptr);
|
|
||||||
JSONTEST_ASSERT_EQUAL(Json::arrayValue, *arrayFound);
|
|
||||||
JSONTEST_ASSERT(object3_.findArray("array") == nullptr);
|
|
||||||
|
|
||||||
// Access through demand()
|
// Access through demand()
|
||||||
const char yetAnotherIdKey[] = "yet another id";
|
const char yetAnotherIdKey[] = "yet another id";
|
||||||
const Json::Value* foundYetAnotherId =
|
const Json::Value* foundYetAnotherId =
|
||||||
|
Loading…
Reference in New Issue
Block a user