mirror of https://gitee.com/bigwinds/arangodb
added TRI_DeleteArrayJson() function
This commit is contained in:
parent
b96c29204f
commit
ac4069d9de
|
@ -436,18 +436,88 @@ BOOST_AUTO_TEST_CASE (tst_json_string_utf8_3) {
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
/// @brief test empty json list
|
/// @brief test empty json list
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
BOOST_AUTO_TEST_CASE (tst_json_list_empty) {
|
BOOST_AUTO_TEST_CASE (tst_json_list_empty) {
|
||||||
INIT_BUFFER
|
INIT_BUFFER
|
||||||
|
|
||||||
TRI_json_t* json = TRI_CreateArrayJson(TRI_UNKNOWN_MEM_ZONE);
|
TRI_json_t* json = TRI_CreateArrayJson(TRI_UNKNOWN_MEM_ZONE);
|
||||||
|
|
||||||
STRINGIFY
|
STRINGIFY
|
||||||
BOOST_CHECK_EQUAL("[]", STRING_VALUE);
|
BOOST_CHECK_EQUAL("[]", STRING_VALUE);
|
||||||
FREE_JSON
|
FREE_JSON
|
||||||
FREE_BUFFER
|
FREE_BUFFER
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// @brief test remove from array
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE (tst_remove_from_array_empty) {
|
||||||
|
TRI_json_t* json = TRI_CreateArrayJson(TRI_UNKNOWN_MEM_ZONE);
|
||||||
|
|
||||||
|
BOOST_CHECK_EQUAL(0ULL, TRI_LengthArrayJson(json));
|
||||||
|
BOOST_CHECK_EQUAL(false, TRI_DeleteArrayJson(TRI_UNKNOWN_MEM_ZONE, json, 0));
|
||||||
|
BOOST_CHECK_EQUAL(false, TRI_DeleteArrayJson(TRI_UNKNOWN_MEM_ZONE, json, 10));
|
||||||
|
BOOST_CHECK_EQUAL(false, TRI_DeleteArrayJson(TRI_UNKNOWN_MEM_ZONE, json, 5));
|
||||||
|
BOOST_CHECK_EQUAL(false, TRI_DeleteArrayJson(TRI_UNKNOWN_MEM_ZONE, json, 2));
|
||||||
|
BOOST_CHECK_EQUAL(false, TRI_DeleteArrayJson(TRI_UNKNOWN_MEM_ZONE, json, 1));
|
||||||
|
BOOST_CHECK_EQUAL(false, TRI_DeleteArrayJson(TRI_UNKNOWN_MEM_ZONE, json, 0));
|
||||||
|
|
||||||
|
FREE_JSON
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// @brief test remove from array
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE (tst_remove_from_array_nonempty1) {
|
||||||
|
TRI_json_t* json = TRI_CreateArrayJson(TRI_UNKNOWN_MEM_ZONE);
|
||||||
|
TRI_PushBack3ArrayJson(TRI_UNKNOWN_MEM_ZONE, json, TRI_CreateNullJson(TRI_UNKNOWN_MEM_ZONE));
|
||||||
|
TRI_PushBack3ArrayJson(TRI_UNKNOWN_MEM_ZONE, json, TRI_CreateNumberJson(TRI_UNKNOWN_MEM_ZONE, 3.5));
|
||||||
|
|
||||||
|
BOOST_CHECK_EQUAL(2ULL, TRI_LengthArrayJson(json));
|
||||||
|
BOOST_CHECK_EQUAL(false, TRI_DeleteArrayJson(TRI_UNKNOWN_MEM_ZONE, json, 10));
|
||||||
|
BOOST_CHECK_EQUAL(false, TRI_DeleteArrayJson(TRI_UNKNOWN_MEM_ZONE, json, 5));
|
||||||
|
BOOST_CHECK_EQUAL(false, TRI_DeleteArrayJson(TRI_UNKNOWN_MEM_ZONE, json, 2));
|
||||||
|
|
||||||
|
BOOST_CHECK_EQUAL(true, TRI_DeleteArrayJson(TRI_UNKNOWN_MEM_ZONE, json, 1));
|
||||||
|
BOOST_CHECK_EQUAL(static_cast<TRI_json_t*>(0), TRI_LookupArrayJson(json, 1));
|
||||||
|
BOOST_CHECK_EQUAL(1ULL, TRI_LengthArrayJson(json));
|
||||||
|
BOOST_CHECK_EQUAL(true, TRI_IsNullJson(TRI_LookupArrayJson(json, 0)));
|
||||||
|
|
||||||
|
BOOST_CHECK_EQUAL(true, TRI_DeleteArrayJson(TRI_UNKNOWN_MEM_ZONE, json, 0));
|
||||||
|
BOOST_CHECK_EQUAL(0ULL, TRI_LengthArrayJson(json));
|
||||||
|
BOOST_CHECK_EQUAL(static_cast<TRI_json_t*>(0), TRI_LookupArrayJson(json, 0));
|
||||||
|
|
||||||
|
FREE_JSON
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// @brief test remove from array
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE (tst_remove_from_array_nonempty2) {
|
||||||
|
TRI_json_t* json = TRI_CreateArrayJson(TRI_UNKNOWN_MEM_ZONE);
|
||||||
|
TRI_PushBack3ArrayJson(TRI_UNKNOWN_MEM_ZONE, json, TRI_CreateNullJson(TRI_UNKNOWN_MEM_ZONE));
|
||||||
|
TRI_PushBack3ArrayJson(TRI_UNKNOWN_MEM_ZONE, json, TRI_CreateNumberJson(TRI_UNKNOWN_MEM_ZONE, 3.5));
|
||||||
|
|
||||||
|
BOOST_CHECK_EQUAL(2ULL, TRI_LengthArrayJson(json));
|
||||||
|
BOOST_CHECK_EQUAL(false, TRI_DeleteArrayJson(TRI_UNKNOWN_MEM_ZONE, json, 10));
|
||||||
|
BOOST_CHECK_EQUAL(false, TRI_DeleteArrayJson(TRI_UNKNOWN_MEM_ZONE, json, 5));
|
||||||
|
BOOST_CHECK_EQUAL(false, TRI_DeleteArrayJson(TRI_UNKNOWN_MEM_ZONE, json, 2));
|
||||||
|
|
||||||
|
BOOST_CHECK_EQUAL(true, TRI_DeleteArrayJson(TRI_UNKNOWN_MEM_ZONE, json, 0));
|
||||||
|
BOOST_CHECK_EQUAL(1ULL, TRI_LengthArrayJson(json));
|
||||||
|
BOOST_CHECK_EQUAL(static_cast<TRI_json_t*>(0), TRI_LookupArrayJson(json, 1));
|
||||||
|
BOOST_CHECK_EQUAL(true, TRI_IsNumberJson(TRI_LookupArrayJson(json, 0)));
|
||||||
|
|
||||||
|
BOOST_CHECK_EQUAL(true, TRI_DeleteArrayJson(TRI_UNKNOWN_MEM_ZONE, json, 0));
|
||||||
|
BOOST_CHECK_EQUAL(0ULL, TRI_LengthArrayJson(json));
|
||||||
|
BOOST_CHECK_EQUAL(static_cast<TRI_json_t*>(0), TRI_LookupArrayJson(json, 0));
|
||||||
|
|
||||||
|
FREE_JSON
|
||||||
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
/// @brief test json list mixed
|
/// @brief test json list mixed
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
|
@ -669,6 +669,27 @@ TRI_json_t* TRI_LookupArrayJson (TRI_json_t const* array, size_t pos) {
|
||||||
return static_cast<TRI_json_t*>(TRI_AtVector(&array->_value._objects, pos));
|
return static_cast<TRI_json_t*>(TRI_AtVector(&array->_value._objects, pos));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// @brief deletes an element from a json array
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
bool TRI_DeleteArrayJson (TRI_memory_zone_t* zone, TRI_json_t* array, size_t index) {
|
||||||
|
TRI_ASSERT(TRI_IsArrayJson(array));
|
||||||
|
|
||||||
|
size_t const n = TRI_LengthArrayJson(array);
|
||||||
|
|
||||||
|
if (index >= n) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
TRI_json_t* element = static_cast<TRI_json_t*>(TRI_AtVector(&array->_value._objects, index));
|
||||||
|
TRI_ASSERT(element != nullptr);
|
||||||
|
TRI_DestroyJson(zone, element);
|
||||||
|
TRI_RemoveVector(&array->_value._objects, index);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
/// @brief adds a new attribute to an object, using copy
|
/// @brief adds a new attribute to an object, using copy
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
|
@ -292,6 +292,14 @@ int TRI_PushBack3ArrayJson (TRI_memory_zone_t*,
|
||||||
TRI_json_t* TRI_LookupArrayJson (TRI_json_t const*,
|
TRI_json_t* TRI_LookupArrayJson (TRI_json_t const*,
|
||||||
size_t);
|
size_t);
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// @brief deletes an element from a json array
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
bool TRI_DeleteArrayJson (TRI_memory_zone_t* zone,
|
||||||
|
TRI_json_t* object,
|
||||||
|
size_t index);
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
/// @brief adds a new attribute to an object, using copy
|
/// @brief adds a new attribute to an object, using copy
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
Loading…
Reference in New Issue