mirror of
https://github.com/open-source-parsers/jsoncpp.git
synced 2024-12-26 18:51:04 +08:00
feat: adds front and back methods to Value type (#1458)
Value::front and Value::back
This commit is contained in:
parent
8190e061bc
commit
3d9bf8ee54
@ -585,6 +585,22 @@ public:
|
|||||||
iterator begin();
|
iterator begin();
|
||||||
iterator end();
|
iterator end();
|
||||||
|
|
||||||
|
/// \brief Returns a reference to the first element in the `Value`.
|
||||||
|
/// Requires that this value holds an array or json object, with at least one element.
|
||||||
|
const Value& front() const;
|
||||||
|
|
||||||
|
/// \brief Returns a reference to the first element in the `Value`.
|
||||||
|
/// Requires that this value holds an array or json object, with at least one element.
|
||||||
|
Value& front();
|
||||||
|
|
||||||
|
/// \brief Returns a reference to the last element in the `Value`.
|
||||||
|
/// Requires that value holds an array or json object, with at least one element.
|
||||||
|
const Value& back() const;
|
||||||
|
|
||||||
|
/// \brief Returns a reference to the last element in the `Value`.
|
||||||
|
/// Requires that this value holds an array or json object, with at least one element.
|
||||||
|
Value& back();
|
||||||
|
|
||||||
// Accessors for the [start, limit) range of bytes within the JSON text from
|
// Accessors for the [start, limit) range of bytes within the JSON text from
|
||||||
// which this value was parsed, if any.
|
// which this value was parsed, if any.
|
||||||
void setOffsetStart(ptrdiff_t start);
|
void setOffsetStart(ptrdiff_t start);
|
||||||
@ -925,6 +941,14 @@ public:
|
|||||||
|
|
||||||
inline void swap(Value& a, Value& b) { a.swap(b); }
|
inline void swap(Value& a, Value& b) { a.swap(b); }
|
||||||
|
|
||||||
|
inline const Value& Value::front() const { return *begin(); }
|
||||||
|
|
||||||
|
inline Value& Value::front() { return *begin(); }
|
||||||
|
|
||||||
|
inline const Value& Value::back() const { return *(--end()); }
|
||||||
|
|
||||||
|
inline Value& Value::back() { return *(--end()); }
|
||||||
|
|
||||||
} // namespace Json
|
} // namespace Json
|
||||||
|
|
||||||
#pragma pack(pop)
|
#pragma pack(pop)
|
||||||
|
@ -310,10 +310,14 @@ JSONTEST_FIXTURE_LOCAL(ValueTest, arrays) {
|
|||||||
const Json::Value& constArray = array1_;
|
const Json::Value& constArray = array1_;
|
||||||
JSONTEST_ASSERT_EQUAL(Json::Value(1234), constArray[index0]);
|
JSONTEST_ASSERT_EQUAL(Json::Value(1234), constArray[index0]);
|
||||||
JSONTEST_ASSERT_EQUAL(Json::Value(1234), constArray[0]);
|
JSONTEST_ASSERT_EQUAL(Json::Value(1234), constArray[0]);
|
||||||
|
JSONTEST_ASSERT_EQUAL(Json::Value(1234), constArray.front());
|
||||||
|
JSONTEST_ASSERT_EQUAL(Json::Value(1234), constArray.back());
|
||||||
|
|
||||||
// Access through non-const reference
|
// Access through non-const reference
|
||||||
JSONTEST_ASSERT_EQUAL(Json::Value(1234), array1_[index0]);
|
JSONTEST_ASSERT_EQUAL(Json::Value(1234), array1_[index0]);
|
||||||
JSONTEST_ASSERT_EQUAL(Json::Value(1234), array1_[0]);
|
JSONTEST_ASSERT_EQUAL(Json::Value(1234), array1_[0]);
|
||||||
|
JSONTEST_ASSERT_EQUAL(Json::Value(1234), array1_.front());
|
||||||
|
JSONTEST_ASSERT_EQUAL(Json::Value(1234), array1_.back());
|
||||||
|
|
||||||
array1_[2] = Json::Value(17);
|
array1_[2] = Json::Value(17);
|
||||||
JSONTEST_ASSERT_EQUAL(Json::Value(), array1_[1]);
|
JSONTEST_ASSERT_EQUAL(Json::Value(), array1_[1]);
|
||||||
@ -356,6 +360,8 @@ JSONTEST_FIXTURE_LOCAL(ValueTest, resizePopulatesAllMissingElements) {
|
|||||||
v.resize(n);
|
v.resize(n);
|
||||||
JSONTEST_ASSERT_EQUAL(n, v.size());
|
JSONTEST_ASSERT_EQUAL(n, v.size());
|
||||||
JSONTEST_ASSERT_EQUAL(n, std::distance(v.begin(), v.end()));
|
JSONTEST_ASSERT_EQUAL(n, std::distance(v.begin(), v.end()));
|
||||||
|
JSONTEST_ASSERT_EQUAL(v.front(), Json::Value{});
|
||||||
|
JSONTEST_ASSERT_EQUAL(v.back(), Json::Value{});
|
||||||
for (const Json::Value& e : v)
|
for (const Json::Value& e : v)
|
||||||
JSONTEST_ASSERT_EQUAL(e, Json::Value{});
|
JSONTEST_ASSERT_EQUAL(e, Json::Value{});
|
||||||
}
|
}
|
||||||
@ -406,6 +412,8 @@ JSONTEST_FIXTURE_LOCAL(ValueTest, arrayInsertAtRandomIndex) {
|
|||||||
JSONTEST_ASSERT_EQUAL(Json::Value("index0"), array[0]); // check append
|
JSONTEST_ASSERT_EQUAL(Json::Value("index0"), array[0]); // check append
|
||||||
JSONTEST_ASSERT_EQUAL(Json::Value("index1"), array[1]);
|
JSONTEST_ASSERT_EQUAL(Json::Value("index1"), array[1]);
|
||||||
JSONTEST_ASSERT_EQUAL(Json::Value("index2"), array[2]);
|
JSONTEST_ASSERT_EQUAL(Json::Value("index2"), array[2]);
|
||||||
|
JSONTEST_ASSERT_EQUAL(Json::Value("index0"), array.front());
|
||||||
|
JSONTEST_ASSERT_EQUAL(Json::Value("index2"), array.back());
|
||||||
|
|
||||||
// insert lvalue at the head
|
// insert lvalue at the head
|
||||||
JSONTEST_ASSERT(array.insert(0, str1));
|
JSONTEST_ASSERT(array.insert(0, str1));
|
||||||
@ -413,6 +421,8 @@ JSONTEST_FIXTURE_LOCAL(ValueTest, arrayInsertAtRandomIndex) {
|
|||||||
JSONTEST_ASSERT_EQUAL(Json::Value("index0"), array[1]);
|
JSONTEST_ASSERT_EQUAL(Json::Value("index0"), array[1]);
|
||||||
JSONTEST_ASSERT_EQUAL(Json::Value("index1"), array[2]);
|
JSONTEST_ASSERT_EQUAL(Json::Value("index1"), array[2]);
|
||||||
JSONTEST_ASSERT_EQUAL(Json::Value("index2"), array[3]);
|
JSONTEST_ASSERT_EQUAL(Json::Value("index2"), array[3]);
|
||||||
|
JSONTEST_ASSERT_EQUAL(Json::Value("index3"), array.front());
|
||||||
|
JSONTEST_ASSERT_EQUAL(Json::Value("index2"), array.back());
|
||||||
// checking address
|
// checking address
|
||||||
for (Json::ArrayIndex i = 0; i < 3; i++) {
|
for (Json::ArrayIndex i = 0; i < 3; i++) {
|
||||||
JSONTEST_ASSERT_EQUAL(vec[i], &array[i]);
|
JSONTEST_ASSERT_EQUAL(vec[i], &array[i]);
|
||||||
@ -425,6 +435,8 @@ JSONTEST_FIXTURE_LOCAL(ValueTest, arrayInsertAtRandomIndex) {
|
|||||||
JSONTEST_ASSERT_EQUAL(Json::Value("index4"), array[2]);
|
JSONTEST_ASSERT_EQUAL(Json::Value("index4"), array[2]);
|
||||||
JSONTEST_ASSERT_EQUAL(Json::Value("index1"), array[3]);
|
JSONTEST_ASSERT_EQUAL(Json::Value("index1"), array[3]);
|
||||||
JSONTEST_ASSERT_EQUAL(Json::Value("index2"), array[4]);
|
JSONTEST_ASSERT_EQUAL(Json::Value("index2"), array[4]);
|
||||||
|
JSONTEST_ASSERT_EQUAL(Json::Value("index3"), array.front());
|
||||||
|
JSONTEST_ASSERT_EQUAL(Json::Value("index2"), array.back());
|
||||||
// checking address
|
// checking address
|
||||||
for (Json::ArrayIndex i = 0; i < 4; i++) {
|
for (Json::ArrayIndex i = 0; i < 4; i++) {
|
||||||
JSONTEST_ASSERT_EQUAL(vec[i], &array[i]);
|
JSONTEST_ASSERT_EQUAL(vec[i], &array[i]);
|
||||||
@ -438,6 +450,8 @@ JSONTEST_FIXTURE_LOCAL(ValueTest, arrayInsertAtRandomIndex) {
|
|||||||
JSONTEST_ASSERT_EQUAL(Json::Value("index1"), array[3]);
|
JSONTEST_ASSERT_EQUAL(Json::Value("index1"), array[3]);
|
||||||
JSONTEST_ASSERT_EQUAL(Json::Value("index2"), array[4]);
|
JSONTEST_ASSERT_EQUAL(Json::Value("index2"), array[4]);
|
||||||
JSONTEST_ASSERT_EQUAL(Json::Value("index5"), array[5]);
|
JSONTEST_ASSERT_EQUAL(Json::Value("index5"), array[5]);
|
||||||
|
JSONTEST_ASSERT_EQUAL(Json::Value("index3"), array.front());
|
||||||
|
JSONTEST_ASSERT_EQUAL(Json::Value("index5"), array.back());
|
||||||
// checking address
|
// checking address
|
||||||
for (Json::ArrayIndex i = 0; i < 5; i++) {
|
for (Json::ArrayIndex i = 0; i < 5; i++) {
|
||||||
JSONTEST_ASSERT_EQUAL(vec[i], &array[i]);
|
JSONTEST_ASSERT_EQUAL(vec[i], &array[i]);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user