File tree 3 files changed +33
-12
lines changed
3 files changed +33
-12
lines changed Original file line number Diff line number Diff line change @@ -463,9 +463,10 @@ Json::Value obj_value(Json::objectValue); // {}
463
463
// /
464
464
// / Equivalent to jsonvalue[jsonvalue.size()] = value;
465
465
Value& append (const Value& value);
466
+ Value& append (Value&& value);
466
467
// / \brief Insert value in array at specific index
467
468
bool insert (ArrayIndex index, const Value& newValue);
468
- Value& append ( Value&& value );
469
+ bool insert (ArrayIndex index, const Value&& newValue );
469
470
// / Access an object value by name, create a null member if it does not exist.
470
471
// / \note Because of our implementation, keys are limited to 2^30 -1 chars.
471
472
// / Exceeding that will cause an exception.
Original file line number Diff line number Diff line change @@ -1193,7 +1193,25 @@ bool Value::insert(ArrayIndex index, const Value& newValue){
1193
1193
Value& Value::append (Value&& value) {
1194
1194
return (*this )[size ()] = std::move (value);
1195
1195
}
1196
-
1196
+ bool Value::insert (ArrayIndex index, const Value&& newValue){
1197
+ if (type () != arrayValue){
1198
+ return false ;
1199
+ }
1200
+ if (!isValidIndex ()){
1201
+ return false ;
1202
+ }
1203
+ ArrayIndex oldsize = size ();
1204
+ resize (oldsize+1 );
1205
+ ArrayIndex length = size ();
1206
+ if (length != oldsize +1 ){
1207
+ return false ;
1208
+ }
1209
+ for (ArrayIndex i = length ; i> index ; i--){
1210
+ (*this )[i] = (*this )[i-1 ];
1211
+ }
1212
+ (*this )[index ]= std::move (newValue);
1213
+ return true ;
1214
+ }
1197
1215
Value Value::get (char const * begin,
1198
1216
char const * end,
1199
1217
Value const & defaultValue) const {
Original file line number Diff line number Diff line change @@ -308,16 +308,18 @@ JSONTEST_FIXTURE(ValueTest, arrayIssue252) {
308
308
// JSONTEST_ASSERT_EQUAL(5, root["array"].size());
309
309
}
310
310
JSONTEST_FIXTURE (ValueTest, arrayIssue691) {
311
- Json::Value array2_;
312
- array2_.append (1 );
313
- array2_.append (2 );
314
- array2_.append (3 );
315
- array2_.append (5 );
316
- // //use insert method
317
- array2_.insert (3 ,4 );
318
- JSONTEST_ASSERT_EQUAL (Json::Value (3 ),array2_[2 ]);
319
- JSONTEST_ASSERT_EQUAL (Json::Value (4 ),array2_[3 ]);
320
- JSONTEST_ASSERT_EQUAL (Json::Value (5 ),array2_[4 ]);
311
+ Json::Value array2;
312
+ array2.append (10 ); // index 0
313
+ array2.append (20 ); // index 1
314
+ array2.append (30 ); // index 2
315
+ array2.append (50 ); // index 3
316
+
317
+ JSONTEST_ASSERT_EQUAL (Json::Value (50 ),array2[3 ]);
318
+
319
+ array2.insert (3 ,40 ); // index 3
320
+ // After updating, index 3 should be changed from 50 to 40, and 50 moved to index 4.
321
+ JSONTEST_ASSERT_EQUAL (Json::Value (40 ),array2[3 ]);
322
+ JSONTEST_ASSERT_EQUAL (Json::Value (50 ),array2[4 ]);
321
323
}
322
324
JSONTEST_FIXTURE (ValueTest, null) {
323
325
JSONTEST_ASSERT_EQUAL (Json::nullValue, null_.type ());
You can’t perform that action at this time.
0 commit comments