Skip to content

Commit ee8b58f

Browse files
committed
Merge pull request #135 from cdunn2001/removeMember
Deprecate old `removeMember()`. Add new. [Deprecated methods will be removed at the next major version bump](http://apr.apache.org/versioning.html#binary).
2 parents 70b795b + 9132aa9 commit ee8b58f

File tree

5 files changed

+41
-19
lines changed

5 files changed

+41
-19
lines changed

include/json/value.h

+8-1
Original file line numberDiff line numberDiff line change
@@ -392,14 +392,21 @@ Json::Value obj_value(Json::objectValue); // {}
392392
/// \return the removed Value, or null.
393393
/// \pre type() is objectValue or nullValue
394394
/// \post type() is unchanged
395+
/// \deprecated
395396
Value removeMember(const char* key);
396397
/// Same as removeMember(const char*)
398+
/// \deprecated
397399
Value removeMember(const std::string& key);
400+
/** \brief Remove the named map member.
401+
402+
Update 'removed' iff removed.
403+
\return true iff removed (no exceptions)
404+
*/
405+
bool removeMember(const char* key, Value* removed);
398406
/** \brief Remove the indexed array element.
399407
400408
O(n) expensive operations.
401409
Update 'removed' iff removed.
402-
(This is a better pattern than removeMember().)
403410
\return true iff removed (no exceptions)
404411
*/
405412
bool removeIndex(ArrayIndex i, Value* removed);

include/json/version.h

+3-3
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@
44
#ifndef JSON_VERSION_H_INCLUDED
55
# define JSON_VERSION_H_INCLUDED
66

7-
# define JSONCPP_VERSION_STRING "1.2.1"
7+
# define JSONCPP_VERSION_STRING "1.3.0"
88
# define JSONCPP_VERSION_MAJOR 1
9-
# define JSONCPP_VERSION_MINOR 2
10-
# define JSONCPP_VERSION_PATCH 1
9+
# define JSONCPP_VERSION_MINOR 3
10+
# define JSONCPP_VERSION_PATCH 0
1111
# define JSONCPP_VERSION_QUALIFIER
1212
# define JSONCPP_VERSION_HEXA ((JSONCPP_VERSION_MAJOR << 24) | (JSONCPP_VERSION_MINOR << 16) | (JSONCPP_VERSION_PATCH << 8))
1313

src/lib_json/json_value.cpp

+22-11
Original file line numberDiff line numberDiff line change
@@ -989,31 +989,42 @@ Value Value::get(const std::string& key, const Value& defaultValue) const {
989989
return get(key.c_str(), defaultValue);
990990
}
991991

992-
Value Value::removeMember(const char* key) {
993-
JSON_ASSERT_MESSAGE(type_ == nullValue || type_ == objectValue,
994-
"in Json::Value::removeMember(): requires objectValue");
995-
if (type_ == nullValue)
996-
return null;
992+
993+
bool Value::removeMember(const char* key, Value* removed) {
994+
if (type_ != objectValue) {
995+
return false;
996+
}
997997
#ifndef JSON_VALUE_USE_INTERNAL_MAP
998998
CZString actualKey(key, CZString::noDuplication);
999999
ObjectValues::iterator it = value_.map_->find(actualKey);
10001000
if (it == value_.map_->end())
1001-
return null;
1002-
Value old(it->second);
1001+
return false;
1002+
*removed = it->second;
10031003
value_.map_->erase(it);
1004-
return old;
1004+
return true;
10051005
#else
10061006
Value* value = value_.map_->find(key);
10071007
if (value) {
1008-
Value old(*value);
1008+
*removed = *value;
10091009
value_.map_.remove(key);
1010-
return old;
1010+
return true;
10111011
} else {
1012-
return null;
1012+
return false;
10131013
}
10141014
#endif
10151015
}
10161016

1017+
Value Value::removeMember(const char* key) {
1018+
JSON_ASSERT_MESSAGE(type_ == nullValue || type_ == objectValue,
1019+
"in Json::Value::removeMember(): requires objectValue");
1020+
if (type_ == nullValue)
1021+
return null;
1022+
1023+
Value removed; // null
1024+
removeMember(key, &removed);
1025+
return removed; // still null if removeMember() did nothing
1026+
}
1027+
10171028
Value Value::removeMember(const std::string& key) {
10181029
return removeMember(key.c_str());
10191030
}

src/test_lib_json/main.cpp

+7-3
Original file line numberDiff line numberDiff line change
@@ -202,10 +202,14 @@ JSONTEST_FIXTURE(ValueTest, objects) {
202202

203203
// Remove.
204204
Json::Value got;
205-
got = object1_.removeMember("some other id");
205+
bool did;
206+
did = object1_.removeMember("some other id", &got);
206207
JSONTEST_ASSERT_EQUAL(Json::Value("foo"), got);
207-
got = object1_.removeMember("some other id");
208-
JSONTEST_ASSERT_EQUAL(Json::nullValue, got);
208+
JSONTEST_ASSERT_EQUAL(true, did);
209+
got = Json::Value("bar");
210+
did = object1_.removeMember("some other id", &got);
211+
JSONTEST_ASSERT_EQUAL(Json::Value("bar"), got);
212+
JSONTEST_ASSERT_EQUAL(false, did);
209213
}
210214

211215
JSONTEST_FIXTURE(ValueTest, arrays) {

version

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1.2.1
1+
1.3.0

0 commit comments

Comments
 (0)