mirror of
https://github.com/open-source-parsers/jsoncpp.git
synced 2025-04-24 00:57:05 +02:00
Implement Value::demand()
This commit is contained in:
parent
eb7bd9546e
commit
d76fe5687d
@ -524,7 +524,7 @@ Json::Value obj_value(Json::objectValue); // {}
|
|||||||
/// 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.
|
||||||
Value const* demand(char const* begin, char const* end);
|
Value* demand(char const* begin, char const* end);
|
||||||
/// \brief Remove and return the named member.
|
/// \brief Remove and return the named member.
|
||||||
///
|
///
|
||||||
/// Do nothing if it did not exist.
|
/// Do nothing if it did not exist.
|
||||||
|
@ -1126,6 +1126,12 @@ Value const* Value::find(char const* begin, char const* end) const {
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
return &(*it).second;
|
return &(*it).second;
|
||||||
}
|
}
|
||||||
|
Value* Value::demand(char const* begin, char const* end) {
|
||||||
|
JSON_ASSERT_MESSAGE(type() == nullValue || type() == objectValue,
|
||||||
|
"in Json::Value::demand(begin, end): requires "
|
||||||
|
"objectValue or nullValue");
|
||||||
|
return &resolveReference(begin, end);
|
||||||
|
}
|
||||||
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)
|
||||||
|
@ -214,6 +214,15 @@ JSONTEST_FIXTURE(ValueTest, objects) {
|
|||||||
const Json::Value* foundUnknownId = object1_.find(unknownIdKey, unknownIdKey + strlen(unknownIdKey));
|
const Json::Value* foundUnknownId = object1_.find(unknownIdKey, unknownIdKey + strlen(unknownIdKey));
|
||||||
JSONTEST_ASSERT_EQUAL(nullptr, foundUnknownId);
|
JSONTEST_ASSERT_EQUAL(nullptr, foundUnknownId);
|
||||||
|
|
||||||
|
const char yetAnotherIdKey[] = "yet another id";
|
||||||
|
const Json::Value* foundYetAnotherId = object1_.find(yetAnotherIdKey, yetAnotherIdKey + strlen(yetAnotherIdKey));
|
||||||
|
JSONTEST_ASSERT_EQUAL(nullptr, foundYetAnotherId);
|
||||||
|
Json::Value* demandedYetAnotherId = object1_.demand(yetAnotherIdKey, yetAnotherIdKey + strlen(yetAnotherIdKey));
|
||||||
|
JSONTEST_ASSERT(demandedYetAnotherId != nullptr);
|
||||||
|
*demandedYetAnotherId = "baz";
|
||||||
|
|
||||||
|
JSONTEST_ASSERT_EQUAL(Json::Value("baz"), object1_["yet another id"]);
|
||||||
|
|
||||||
// Access through non-const reference
|
// Access through non-const reference
|
||||||
JSONTEST_ASSERT_EQUAL(Json::Value(1234), object1_["id"]);
|
JSONTEST_ASSERT_EQUAL(Json::Value(1234), object1_["id"]);
|
||||||
JSONTEST_ASSERT_EQUAL(Json::Value(), object1_["unknown id"]);
|
JSONTEST_ASSERT_EQUAL(Json::Value(), object1_["unknown id"]);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user