diff --git a/include/json/value.h b/include/json/value.h index 78e7546..18355d0 100644 --- a/include/json/value.h +++ b/include/json/value.h @@ -395,6 +395,15 @@ Json::Value obj_value(Json::objectValue); // {} Value removeMember(const char* key); /// Same as removeMember(const char*) Value removeMember(const std::string& key); + /** \brief Remove the indexed array element. + + O(n) expensive operations. + Update 'removed' iff removed. + (This is a better pattern than removeMember().) + JSON_FAIL if !isValidIndex(i) or if not arrayObject + \return true iff removed + */ + bool removeIndex(ArrayIndex i, Value* removed); /// Return true if the object has a member named key. bool isMember(const char* key) const; diff --git a/src/lib_json/json_value.cpp b/src/lib_json/json_value.cpp index 0a7fb85..aa9bfb4 100644 --- a/src/lib_json/json_value.cpp +++ b/src/lib_json/json_value.cpp @@ -1018,6 +1018,14 @@ Value Value::removeMember(const std::string& key) { return removeMember(key.c_str()); } +bool Value::removeIndex(ArrayIndex i, Value* removed) { + JSON_ASSERT_MESSAGE(this->type_ == arrayValue, + "in Json::Value::removeIndex(): requires arrayValue"); + JSON_ASSERT_MESSAGE(this->isValidIndex(i), + "invalid index i=" << i << " for array of size " << this->size()); + return true; +} + #ifdef JSON_USE_CPPTL Value Value::get(const CppTL::ConstString& key, const Value& defaultValue) const {