21 RAPIDJSON_DIAG_OFF(c++98-compat)
28 #if RAPIDJSON_48BITPOINTER_OPTIMIZATION 29 EXPECT_EQ(16,
sizeof(
Value));
31 EXPECT_EQ(24,
sizeof(
Value));
33 EXPECT_EQ(16,
sizeof(
Value));
41 EXPECT_TRUE(x.IsNull());
52 #if RAPIDJSON_HAS_CXX11_RVALUE_REFS 54 #if 0 // Many old compiler does not support these. Turn it off temporaily. 56 #include <type_traits> 98 V::AllocatorType allocator;
101 x.Reserve(4u, allocator);
102 x.PushBack(1, allocator).PushBack(2, allocator).PushBack(3, allocator).PushBack(4, allocator);
103 EXPECT_TRUE(x.IsArray());
104 EXPECT_EQ(4u, x.Size());
108 EXPECT_TRUE(x.IsNull());
109 EXPECT_TRUE(y.IsArray());
110 EXPECT_EQ(4u, y.Size());
114 EXPECT_TRUE(y.IsNull());
115 EXPECT_TRUE(z.IsArray());
116 EXPECT_EQ(4u, z.Size());
119 #endif // RAPIDJSON_HAS_CXX11_RVALUE_REFS 125 EXPECT_TRUE(x.IsNull());
126 EXPECT_EQ(1234, y.GetInt());
129 EXPECT_TRUE(y.IsInt());
130 EXPECT_EQ(5678, y.GetInt());
133 EXPECT_TRUE(x.IsString());
134 EXPECT_STREQ(x.GetString(),
"Hello");
136 y =
StringRef(x.GetString(),x.GetStringLength());
137 EXPECT_TRUE(y.IsString());
138 EXPECT_EQ(y.GetString(),x.GetString());
139 EXPECT_EQ(y.GetStringLength(),x.GetStringLength());
141 static char mstr[] =
"mutable";
144 EXPECT_TRUE(y.IsString());
145 EXPECT_EQ(y.GetString(),mstr);
147 #if RAPIDJSON_HAS_CXX11_RVALUE_REFS 150 EXPECT_TRUE(x.IsString());
151 EXPECT_STREQ(
"World", x.GetString());
154 EXPECT_TRUE(y.IsNull());
155 EXPECT_TRUE(x.IsString());
156 EXPECT_EQ(x.GetString(), mstr);
158 y = std::move(
Value().SetInt(1234));
159 EXPECT_TRUE(y.IsInt());
161 #endif // RAPIDJSON_HAS_CXX11_RVALUE_REFS 164 template <
typename A,
typename B>
166 EXPECT_TRUE (a == b);
167 EXPECT_FALSE(a != b);
168 EXPECT_TRUE (b == a);
169 EXPECT_FALSE(b != a);
172 template <
typename A,
typename B>
174 EXPECT_FALSE(a == b);
175 EXPECT_TRUE (a != b);
176 EXPECT_FALSE(b == a);
177 EXPECT_TRUE (b != a);
183 x.AddMember(
"hello",
"world", allocator)
184 .AddMember(
"t",
Value(
true).Move(), allocator)
185 .AddMember(
"f",
Value(
false).Move(), allocator)
187 .AddMember(
"i", 123, allocator)
188 .AddMember(
"pi", 3.14, allocator)
189 .AddMember(
"a",
Value(
kArrayType).Move().PushBack(1, allocator).PushBack(2, allocator).PushBack(3, allocator), allocator);
193 const char* cc =
"world";
195 char* c = strdup(
"world");
208 y.CopyFrom(x, crtAllocator);
215 EXPECT_TRUE(y.RemoveMember(
"t"));
218 EXPECT_TRUE(z.RemoveMember(
"t"));
221 y.AddMember(
"t",
false, crtAllocator);
232 x[
"a"][0].Swap(x[
"a"][1]);
234 x[
"a"][0].Swap(x[
"a"][1]);
238 x[
"a"].PushBack(4, allocator);
249 template <
typename Value>
254 EXPECT_TRUE(v1.GetType() == v2.GetType());
255 EXPECT_EQ(v1.GetInt(), v2.GetInt());
259 EXPECT_TRUE(v1.GetType() == v2.GetType());
260 EXPECT_STREQ(v1.GetString(), v2.GetString());
261 EXPECT_EQ(v1.GetString(), v2.GetString());
263 v1.SetString(
"bar", a);
265 EXPECT_TRUE(v1.GetType() == v2.GetType());
266 EXPECT_STREQ(v1.GetString(), v2.GetString());
267 EXPECT_NE(v1.GetString(), v2.GetString());
270 v1.SetArray().PushBack(1234, a);
272 EXPECT_TRUE(v2.IsArray());
273 EXPECT_EQ(v1.Size(), v2.Size());
275 v1.PushBack(
Value().SetString(
"foo", a), a);
276 EXPECT_TRUE(v1.Size() != v2.Size());
278 EXPECT_TRUE(v1.Size() == v2.Size());
279 EXPECT_STREQ(v1[1].GetString(), v2[1].GetString());
280 EXPECT_NE(v1[1].GetString(), v2[1].GetString());
284 TestCopyFrom<Value>();
292 EXPECT_EQ(&v1, &v1.Swap(v2));
293 EXPECT_TRUE(v1.IsObject());
294 EXPECT_TRUE(v2.IsInt());
295 EXPECT_EQ(1234, v2.GetInt());
300 EXPECT_TRUE(v1.IsInt());
301 EXPECT_TRUE(v2.IsObject());
308 EXPECT_TRUE(x.IsNull());
310 EXPECT_FALSE(x.IsTrue());
311 EXPECT_FALSE(x.IsFalse());
312 EXPECT_FALSE(x.IsNumber());
313 EXPECT_FALSE(x.IsString());
314 EXPECT_FALSE(x.IsObject());
315 EXPECT_FALSE(x.IsArray());
319 EXPECT_TRUE(y.IsNull());
324 EXPECT_TRUE(z.IsNull());
331 EXPECT_TRUE(x.GetBool());
332 EXPECT_TRUE(x.IsBool());
333 EXPECT_TRUE(x.IsTrue());
335 EXPECT_FALSE(x.IsNull());
336 EXPECT_FALSE(x.IsFalse());
337 EXPECT_FALSE(x.IsNumber());
338 EXPECT_FALSE(x.IsString());
339 EXPECT_FALSE(x.IsObject());
340 EXPECT_FALSE(x.IsArray());
344 EXPECT_TRUE(y.IsTrue());
349 EXPECT_TRUE(z.IsTrue());
352 EXPECT_TRUE(z.Is<
bool>());
353 EXPECT_TRUE(z.Get<
bool>());
354 EXPECT_FALSE(z.Set<
bool>(
false).Get<
bool>());
355 EXPECT_TRUE(z.Set(
true).Get<
bool>());
362 EXPECT_TRUE(x.IsBool());
363 EXPECT_TRUE(x.IsFalse());
365 EXPECT_FALSE(x.IsNull());
366 EXPECT_FALSE(x.IsTrue());
367 EXPECT_FALSE(x.GetBool());
369 EXPECT_FALSE(x.IsNumber());
370 EXPECT_FALSE(x.IsString());
371 EXPECT_FALSE(x.IsObject());
372 EXPECT_FALSE(x.IsArray());
376 EXPECT_TRUE(y.IsFalse());
381 EXPECT_TRUE(z.IsFalse());
388 EXPECT_EQ(1234, x.GetInt());
389 EXPECT_EQ(1234u, x.GetUint());
390 EXPECT_EQ(1234, x.GetInt64());
391 EXPECT_EQ(1234u, x.GetUint64());
392 EXPECT_NEAR(1234.0, x.GetDouble(), 0.0);
398 EXPECT_TRUE(x.IsNumber());
399 EXPECT_TRUE(x.IsInt());
400 EXPECT_TRUE(x.IsUint());
401 EXPECT_TRUE(x.IsInt64());
402 EXPECT_TRUE(x.IsUint64());
404 EXPECT_FALSE(x.IsDouble());
405 EXPECT_FALSE(x.IsFloat());
406 EXPECT_FALSE(x.IsNull());
407 EXPECT_FALSE(x.IsBool());
408 EXPECT_FALSE(x.IsFalse());
409 EXPECT_FALSE(x.IsTrue());
410 EXPECT_FALSE(x.IsString());
411 EXPECT_FALSE(x.IsObject());
412 EXPECT_FALSE(x.IsArray());
415 EXPECT_EQ(-1234, nx.GetInt());
416 EXPECT_EQ(-1234, nx.GetInt64());
417 EXPECT_TRUE(nx.IsInt());
418 EXPECT_TRUE(nx.IsInt64());
419 EXPECT_FALSE(nx.IsUint());
420 EXPECT_FALSE(nx.IsUint64());
424 EXPECT_TRUE(y.IsNumber());
425 EXPECT_TRUE(y.IsInt());
426 EXPECT_EQ(0, y.GetInt());
431 EXPECT_EQ(1234, z.GetInt());
435 EXPECT_EQ(5678, z.GetInt());
438 EXPECT_TRUE(z.Is<
int>());
439 EXPECT_EQ(5678, z.Get<
int>());
440 EXPECT_EQ(5679, z.Set(5679).Get<
int>());
441 EXPECT_EQ(5680, z.Set<
int>(5680).Get<
int>());
448 EXPECT_EQ(1234, x.GetInt());
449 EXPECT_EQ(1234u, x.GetUint());
450 EXPECT_EQ(1234, x.GetInt64());
451 EXPECT_EQ(1234u, x.GetUint64());
452 EXPECT_TRUE(x.IsNumber());
453 EXPECT_TRUE(x.IsInt());
454 EXPECT_TRUE(x.IsUint());
455 EXPECT_TRUE(x.IsInt64());
456 EXPECT_TRUE(x.IsUint64());
457 EXPECT_NEAR(1234.0, x.GetDouble(), 0.0);
459 EXPECT_FALSE(x.IsDouble());
460 EXPECT_FALSE(x.IsFloat());
461 EXPECT_FALSE(x.IsNull());
462 EXPECT_FALSE(x.IsBool());
463 EXPECT_FALSE(x.IsFalse());
464 EXPECT_FALSE(x.IsTrue());
465 EXPECT_FALSE(x.IsString());
466 EXPECT_FALSE(x.IsObject());
467 EXPECT_FALSE(x.IsArray());
472 EXPECT_EQ(1234u, z.GetUint());
476 EXPECT_EQ(5678u, z.GetUint());
479 EXPECT_EQ(2147483648u, z.GetUint());
480 EXPECT_FALSE(z.IsInt());
481 EXPECT_TRUE(z.IsInt64());
484 EXPECT_TRUE(z.Is<
unsigned>());
485 EXPECT_EQ(2147483648u, z.Get<
unsigned>());
486 EXPECT_EQ(2147483649u, z.Set(2147483649u).Get<
unsigned>());
487 EXPECT_EQ(2147483650u, z.Set<
unsigned>(2147483650u).Get<
unsigned>());
494 EXPECT_EQ(1234, x.GetInt());
495 EXPECT_EQ(1234u, x.GetUint());
496 EXPECT_EQ(1234, x.GetInt64());
497 EXPECT_EQ(1234u, x.GetUint64());
498 EXPECT_TRUE(x.IsNumber());
499 EXPECT_TRUE(x.IsInt());
500 EXPECT_TRUE(x.IsUint());
501 EXPECT_TRUE(x.IsInt64());
502 EXPECT_TRUE(x.IsUint64());
504 EXPECT_FALSE(x.IsDouble());
505 EXPECT_FALSE(x.IsFloat());
506 EXPECT_FALSE(x.IsNull());
507 EXPECT_FALSE(x.IsBool());
508 EXPECT_FALSE(x.IsFalse());
509 EXPECT_FALSE(x.IsTrue());
510 EXPECT_FALSE(x.IsString());
511 EXPECT_FALSE(x.IsObject());
512 EXPECT_FALSE(x.IsArray());
515 EXPECT_EQ(-1234, nx.GetInt());
516 EXPECT_EQ(-1234, nx.GetInt64());
517 EXPECT_TRUE(nx.IsInt());
518 EXPECT_TRUE(nx.IsInt64());
519 EXPECT_FALSE(nx.IsUint());
520 EXPECT_FALSE(nx.IsUint64());
525 EXPECT_EQ(1234, z.GetInt64());
527 z.SetInt64(2147483648u);
528 EXPECT_FALSE(z.IsInt());
529 EXPECT_TRUE(z.IsUint());
530 EXPECT_NEAR(2147483648.0, z.GetDouble(), 0.0);
532 z.SetInt64(
int64_t(4294967295u) + 1);
533 EXPECT_FALSE(z.IsInt());
534 EXPECT_FALSE(z.IsUint());
535 EXPECT_NEAR(4294967296.0, z.GetDouble(), 0.0);
537 z.SetInt64(-
int64_t(2147483648u) - 1);
538 EXPECT_FALSE(z.IsInt());
539 EXPECT_NEAR(-2147483649.0, z.GetDouble(), 0.0);
543 EXPECT_DOUBLE_EQ(-9223372036854775808.0, z.GetDouble());
547 EXPECT_EQ(i, z.Get<
int64_t>());
548 #if 0 // signed integer underflow is undefined behaviour 549 EXPECT_EQ(i - 1, z.Set(i - 1).Get<
int64_t>());
558 EXPECT_EQ(1234, x.GetInt());
559 EXPECT_EQ(1234u, x.GetUint());
560 EXPECT_EQ(1234, x.GetInt64());
561 EXPECT_EQ(1234u, x.GetUint64());
562 EXPECT_TRUE(x.IsNumber());
563 EXPECT_TRUE(x.IsInt());
564 EXPECT_TRUE(x.IsUint());
565 EXPECT_TRUE(x.IsInt64());
566 EXPECT_TRUE(x.IsUint64());
568 EXPECT_FALSE(x.IsDouble());
569 EXPECT_FALSE(x.IsFloat());
570 EXPECT_FALSE(x.IsNull());
571 EXPECT_FALSE(x.IsBool());
572 EXPECT_FALSE(x.IsFalse());
573 EXPECT_FALSE(x.IsTrue());
574 EXPECT_FALSE(x.IsString());
575 EXPECT_FALSE(x.IsObject());
576 EXPECT_FALSE(x.IsArray());
581 EXPECT_EQ(1234u, z.GetUint64());
584 EXPECT_FALSE(z.IsInt());
585 EXPECT_TRUE(z.IsUint());
586 EXPECT_TRUE(z.IsInt64());
588 z.SetUint64(
uint64_t(4294967295u) + 1);
589 EXPECT_FALSE(z.IsInt());
590 EXPECT_FALSE(z.IsUint());
591 EXPECT_TRUE(z.IsInt64());
595 EXPECT_FALSE(z.IsInt64());
596 EXPECT_EQ(u, z.GetUint64());
597 EXPECT_DOUBLE_EQ(9223372036854775808.0, z.GetDouble());
602 EXPECT_EQ(u + 1, z.Set(u + 1).Get<
uint64_t>());
610 EXPECT_NEAR(12.34, x.GetDouble(), 0.0);
611 EXPECT_TRUE(x.IsNumber());
612 EXPECT_TRUE(x.IsDouble());
614 EXPECT_FALSE(x.IsInt());
615 EXPECT_FALSE(x.IsNull());
616 EXPECT_FALSE(x.IsBool());
617 EXPECT_FALSE(x.IsFalse());
618 EXPECT_FALSE(x.IsTrue());
619 EXPECT_FALSE(x.IsString());
620 EXPECT_FALSE(x.IsObject());
621 EXPECT_FALSE(x.IsArray());
626 EXPECT_NEAR(12.34, z.GetDouble(), 0.0);
629 EXPECT_NEAR(56.78, z.GetDouble(), 0.0);
632 EXPECT_TRUE(z.Is<
double>());
633 EXPECT_EQ(56.78, z.Get<
double>());
634 EXPECT_EQ(57.78, z.Set(57.78).Get<
double>());
635 EXPECT_EQ(58.78, z.Set<
double>(58.78).Get<double>());
642 EXPECT_NEAR(12.34
f, x.GetFloat(), 0.0);
643 EXPECT_TRUE(x.IsNumber());
644 EXPECT_TRUE(x.IsDouble());
645 EXPECT_TRUE(x.IsFloat());
647 EXPECT_FALSE(x.IsInt());
648 EXPECT_FALSE(x.IsNull());
649 EXPECT_FALSE(x.IsBool());
650 EXPECT_FALSE(x.IsFalse());
651 EXPECT_FALSE(x.IsTrue());
652 EXPECT_FALSE(x.IsString());
653 EXPECT_FALSE(x.IsObject());
654 EXPECT_FALSE(x.IsArray());
659 EXPECT_NEAR(12.34
f, z.GetFloat(), 0.0f);
663 EXPECT_EQ(0.0
f, z.GetFloat());
666 EXPECT_NEAR(56.78
f, z.GetFloat(), 0.0f);
669 EXPECT_TRUE(z.Is<
float>());
670 EXPECT_EQ(56.78
f, z.Get<
float>());
671 EXPECT_EQ(57.78
f, z.Set(57.78f).Get<
float>());
672 EXPECT_EQ(58.78
f, z.Set<
float>(58.78f).Get<
float>());
676 EXPECT_TRUE(
Value(0.0).IsLosslessDouble());
677 EXPECT_TRUE(
Value(12.34).IsLosslessDouble());
678 EXPECT_TRUE(
Value(-123).IsLosslessDouble());
679 EXPECT_TRUE(
Value(2147483648u).IsLosslessDouble());
681 #if !(defined(_MSC_VER) && _MSC_VER < 1800) // VC2010 has problem 690 EXPECT_TRUE(
Value(3.4028234e38f).IsLosslessDouble());
691 EXPECT_TRUE(
Value(-3.4028234e38f).IsLosslessDouble());
692 EXPECT_TRUE(
Value(1.17549435e-38
f).IsLosslessDouble());
693 EXPECT_TRUE(
Value(-1.17549435e-38
f).IsLosslessDouble());
694 EXPECT_TRUE(
Value(1.7976931348623157e+308).IsLosslessDouble());
695 EXPECT_TRUE(
Value(-1.7976931348623157e+308).IsLosslessDouble());
696 EXPECT_TRUE(
Value(2.2250738585072014e-308).IsLosslessDouble());
697 EXPECT_TRUE(
Value(-2.2250738585072014e-308).IsLosslessDouble());
701 EXPECT_TRUE(
Value(12.25).IsLosslessFloat());
702 EXPECT_TRUE(
Value(-123).IsLosslessFloat());
703 EXPECT_TRUE(
Value(2147483648u).IsLosslessFloat());
704 EXPECT_TRUE(
Value(3.4028234e38f).IsLosslessFloat());
705 EXPECT_TRUE(
Value(-3.4028234e38f).IsLosslessFloat());
706 EXPECT_FALSE(
Value(3.4028235e38).IsLosslessFloat());
707 EXPECT_FALSE(
Value(0.3).IsLosslessFloat());
714 EXPECT_TRUE(x.IsString());
715 EXPECT_STREQ(
"Hello", x.GetString());
716 EXPECT_EQ(5u, x.GetStringLength());
718 EXPECT_FALSE(x.IsNumber());
719 EXPECT_FALSE(x.IsNull());
720 EXPECT_FALSE(x.IsBool());
721 EXPECT_FALSE(x.IsFalse());
722 EXPECT_FALSE(x.IsTrue());
723 EXPECT_FALSE(x.IsObject());
724 EXPECT_FALSE(x.IsArray());
726 static const char cstr[] =
"World";
728 EXPECT_TRUE(x.IsString());
729 EXPECT_EQ(x.GetString(), cstr);
730 EXPECT_EQ(x.GetStringLength(),
sizeof(cstr)-1);
732 static char mstr[] =
"Howdy";
735 EXPECT_TRUE(x.IsString());
736 EXPECT_EQ(x.GetString(), mstr);
737 EXPECT_EQ(x.GetStringLength(),
sizeof(mstr)-1);
738 strncpy(mstr,
"Hello",
sizeof(mstr));
739 EXPECT_STREQ(x.GetString(),
"Hello");
741 const char* pstr = cstr;
744 EXPECT_TRUE(x.IsString());
745 EXPECT_EQ(x.GetString(), cstr);
746 EXPECT_EQ(x.GetStringLength(),
sizeof(cstr)-1);
750 EXPECT_TRUE(x.IsString());
751 EXPECT_EQ(x.GetString(), mstr);
752 EXPECT_EQ(x.GetStringLength(), 5u);
753 EXPECT_STREQ(x.GetString(),
"Hello");
757 Value c(x.GetString(), x.GetStringLength(), allocator);
758 EXPECT_NE(x.GetString(), c.GetString());
759 EXPECT_EQ(x.GetStringLength(), c.GetStringLength());
760 EXPECT_STREQ(x.GetString(), c.GetString());
762 x.SetString(
"World", 5);
763 EXPECT_STREQ(
"Hello", c.GetString());
764 EXPECT_EQ(5u, c.GetStringLength());
768 EXPECT_TRUE(y.IsString());
769 EXPECT_STREQ(
"", y.GetString());
770 EXPECT_EQ(0u, y.GetStringLength());
774 z.SetString(
"Hello");
775 EXPECT_TRUE(x.IsString());
776 z.SetString(
"Hello", 5);
777 EXPECT_STREQ(
"Hello", z.GetString());
778 EXPECT_STREQ(
"Hello", z.GetString());
779 EXPECT_EQ(5u, z.GetStringLength());
781 z.SetString(
"Hello");
782 EXPECT_TRUE(z.IsString());
783 EXPECT_STREQ(
"Hello", z.GetString());
788 EXPECT_TRUE(z.IsString());
789 EXPECT_STREQ(z.GetString(), mstr);
792 EXPECT_TRUE(z.IsString());
793 EXPECT_EQ(cstr, z.GetString());
796 EXPECT_TRUE(z.IsString());
797 EXPECT_EQ(cstr, z.GetString());
802 w.SetString(s, static_cast<SizeType>(strlen(s)), allocator);
804 EXPECT_STREQ(
"World", w.GetString());
805 EXPECT_EQ(5u, w.GetStringLength());
808 EXPECT_TRUE(z.Is<
const char*>());
809 EXPECT_STREQ(cstr, z.Get<
const char*>());
810 EXPECT_STREQ(
"Apple", z.Set<
const char*>(
"Apple").Get<
const char*>());
812 #if RAPIDJSON_HAS_STDSTRING 814 std::string str =
"Hello World";
816 EXPECT_STREQ(str.data(),
"Hello");
817 EXPECT_EQ(str.size(), 11u);
821 EXPECT_TRUE(vs0.IsString());
822 EXPECT_EQ(vs0.GetString(), str.data());
823 EXPECT_EQ(vs0.GetStringLength(), str.size());
827 Value vs1(str, allocator);
828 EXPECT_TRUE(vs1.IsString());
829 EXPECT_NE(vs1.GetString(), str.data());
830 EXPECT_NE(vs1.GetString(), str);
831 EXPECT_EQ(vs1.GetStringLength(), str.size());
836 vs0.SetNull().SetString(str, allocator);
837 EXPECT_TRUE(vs0.IsString());
838 EXPECT_STREQ(vs0.GetString(), str.c_str());
839 EXPECT_EQ(vs0.GetStringLength(), str.size());
849 EXPECT_TRUE(vs0.Is<std::string>());
850 EXPECT_EQ(str, vs0.Get<std::string>());
851 vs0.Set<std::string>(std::string(
"Apple"), allocator);
852 EXPECT_EQ(std::string(
"Apple"), vs0.Get<std::string>());
853 vs0.Set(std::string(
"Orange"), allocator);
854 EXPECT_EQ(std::string(
"Orange"), vs0.Get<std::string>());
856 #endif // RAPIDJSON_HAS_STDSTRING 863 const char* nullPtr = 0;
867 EXPECT_NE(v.GetString(), nullPtr);
868 EXPECT_EQ(v.GetStringLength(), 0u);
880 v.SetString(nullPtr, 0u);
881 EXPECT_NE(v.GetString(), nullPtr);
882 EXPECT_EQ(v.GetStringLength(), 0u);
885 v.SetString(nullPtr, 0u, allocator);
886 EXPECT_NE(v.GetString(), nullPtr);
887 EXPECT_EQ(v.GetStringLength(), 0u);
892 EXPECT_NE(v.GetString(), nullPtr);
893 EXPECT_EQ(v.GetStringLength(), 0u);
896 Value v(nullPtr, 0u, allocator);
897 EXPECT_NE(v.GetString(), nullPtr);
898 EXPECT_EQ(v.GetStringLength(), 0u);
902 template <
typename T,
typename Allocator>
908 x.PushBack(v, allocator);
910 x.PushBack(v, allocator);
912 x.PushBack(v, allocator);
914 x.PushBack(v, allocator);
916 x.PushBack(
"foo", allocator);
918 EXPECT_FALSE(x.Empty());
919 EXPECT_EQ(5u, x.Size());
920 EXPECT_FALSE(y.Empty());
921 EXPECT_EQ(5u, y.Size());
922 EXPECT_TRUE(x[
SizeType(0)].IsNull());
923 EXPECT_TRUE(x[1].IsTrue());
924 EXPECT_TRUE(x[2].IsFalse());
925 EXPECT_TRUE(x[3].IsInt());
926 EXPECT_EQ(123, x[3].GetInt());
927 EXPECT_TRUE(y[
SizeType(0)].IsNull());
928 EXPECT_TRUE(y[1].IsTrue());
929 EXPECT_TRUE(y[2].IsFalse());
930 EXPECT_TRUE(y[3].IsInt());
931 EXPECT_EQ(123, y[3].GetInt());
932 EXPECT_TRUE(y[4].IsString());
933 EXPECT_STREQ(
"foo", y[4].GetString());
935 #if RAPIDJSON_HAS_CXX11_RVALUE_REFS 939 y2.PushBack(
Value(
true), allocator);
940 y2.PushBack(std::move(
Value(
kArrayType).PushBack(
Value(1), allocator).PushBack(
"foo", allocator)), allocator);
941 EXPECT_EQ(2u, y2.Size());
942 EXPECT_TRUE(y2[0].IsTrue());
943 EXPECT_TRUE(y2[1].IsArray());
944 EXPECT_EQ(2u, y2[1].Size());
945 EXPECT_TRUE(y2[1][0].IsInt());
946 EXPECT_TRUE(y2[1][1].IsString());
951 typename T::ValueIterator itr = x.Begin();
952 EXPECT_TRUE(itr != x.End());
953 EXPECT_TRUE(itr->IsNull());
955 EXPECT_TRUE(itr != x.End());
956 EXPECT_TRUE(itr->IsTrue());
958 EXPECT_TRUE(itr != x.End());
959 EXPECT_TRUE(itr->IsFalse());
961 EXPECT_TRUE(itr != x.End());
962 EXPECT_TRUE(itr->IsInt());
963 EXPECT_EQ(123, itr->GetInt());
965 EXPECT_TRUE(itr != x.End());
966 EXPECT_TRUE(itr->IsString());
967 EXPECT_STREQ(
"foo", itr->GetString());
970 typename T::ConstValueIterator citr = y.Begin();
971 EXPECT_TRUE(citr != y.End());
972 EXPECT_TRUE(citr->IsNull());
974 EXPECT_TRUE(citr != y.End());
975 EXPECT_TRUE(citr->IsTrue());
977 EXPECT_TRUE(citr != y.End());
978 EXPECT_TRUE(citr->IsFalse());
980 EXPECT_TRUE(citr != y.End());
981 EXPECT_TRUE(citr->IsInt());
982 EXPECT_EQ(123, citr->GetInt());
984 EXPECT_TRUE(citr != y.End());
985 EXPECT_TRUE(citr->IsString());
986 EXPECT_STREQ(
"foo", citr->GetString());
990 EXPECT_EQ(4u, x.Size());
991 EXPECT_TRUE(y[
SizeType(0)].IsNull());
992 EXPECT_TRUE(y[1].IsTrue());
993 EXPECT_TRUE(y[2].IsFalse());
994 EXPECT_TRUE(y[3].IsInt());
998 EXPECT_TRUE(x.Empty());
999 EXPECT_EQ(0u, x.Size());
1000 EXPECT_TRUE(y.Empty());
1001 EXPECT_EQ(0u, y.Size());
1007 for (
int i = 0; i < 10; i++)
1008 x.PushBack(
Value(
kArrayType).PushBack(i, allocator).Move(), allocator);
1011 itr = x.Erase(x.Begin());
1012 EXPECT_EQ(x.Begin(), itr);
1013 EXPECT_EQ(9u, x.Size());
1014 for (
int i = 0; i < 9; i++)
1015 EXPECT_EQ(i + 1, x[static_cast<SizeType>(i)][0].GetInt());
1018 itr = x.Erase(x.End() - 1);
1019 EXPECT_EQ(x.End(), itr);
1020 EXPECT_EQ(8u, x.Size());
1021 for (
int i = 0; i < 8; i++)
1022 EXPECT_EQ(i + 1, x[static_cast<SizeType>(i)][0].GetInt());
1025 itr = x.Erase(x.Begin() + 4);
1026 EXPECT_EQ(x.Begin() + 4, itr);
1027 EXPECT_EQ(7u, x.Size());
1028 for (
int i = 0; i < 4; i++)
1029 EXPECT_EQ(i + 1, x[static_cast<SizeType>(i)][0].GetInt());
1030 for (
int i = 4; i < 7; i++)
1031 EXPECT_EQ(i + 2, x[static_cast<SizeType>(i)][0].GetInt());
1035 const unsigned n = 10;
1036 for (
unsigned first = 0; first < n; first++) {
1037 for (
unsigned last = first; last <= n; last++) {
1039 for (
unsigned i = 0; i < n; i++)
1040 x.PushBack(
Value(
kArrayType).PushBack(i, allocator).Move(), allocator);
1042 itr = x.Erase(x.Begin() + first, x.Begin() + last);
1044 EXPECT_EQ(x.End(), itr);
1046 EXPECT_EQ(x.Begin() + first, itr);
1048 size_t removeCount = last - first;
1049 EXPECT_EQ(n - removeCount, x.Size());
1050 for (
unsigned i = 0; i < first; i++)
1051 EXPECT_EQ(i, x[i][0].GetUint());
1052 for (
unsigned i = first; i < n - removeCount; i++)
1053 EXPECT_EQ(i + removeCount, x[static_cast<SizeType>(i)][0].GetUint());
1064 EXPECT_TRUE(x.IsArray());
1065 EXPECT_TRUE(x.Empty());
1066 EXPECT_EQ(0u, x.Size());
1067 EXPECT_TRUE(y.IsArray());
1068 EXPECT_TRUE(y.Empty());
1069 EXPECT_EQ(0u, y.Size());
1071 EXPECT_FALSE(x.IsNull());
1072 EXPECT_FALSE(x.IsBool());
1073 EXPECT_FALSE(x.IsFalse());
1074 EXPECT_FALSE(x.IsTrue());
1075 EXPECT_FALSE(x.IsString());
1076 EXPECT_FALSE(x.IsObject());
1083 for (
int i = 0; i < 10; i++)
1085 x.PushBack(i, allocator);
1090 x.Erase(std::remove(x.Begin(), x.End(), null), x.End());
1091 EXPECT_EQ(5u, x.Size());
1092 for (
int i = 0; i < 5; i++)
1093 EXPECT_EQ(i * 2, x[static_cast<SizeType>(i)]);
1098 EXPECT_TRUE(z.IsArray());
1099 EXPECT_TRUE(z.Empty());
1116 EXPECT_EQ(1, a2.
Size());
1119 EXPECT_EQ(1, a3.Size());
1135 EXPECT_TRUE(x.IsArray());
1141 y.PushBack(123, allocator);
1143 Value x(y.GetArray());
1144 EXPECT_TRUE(x.IsArray());
1145 EXPECT_EQ(123, x[0].GetInt());
1146 EXPECT_TRUE(y.IsArray());
1147 EXPECT_TRUE(y.Empty());
1153 y.PushBack(123, allocator);
1154 x.PushBack(y.GetArray(), allocator);
1156 EXPECT_EQ(1, x.Size());
1157 EXPECT_EQ(123, x[0][0].GetInt());
1158 EXPECT_TRUE(y.IsArray());
1159 EXPECT_TRUE(y.Empty());
1163 #if RAPIDJSON_HAS_CXX11_RANGE_FOR 1168 for (
int i = 0; i < 10; i++)
1169 x.PushBack(i, allocator);
1173 for (
auto& v : x.GetArray()) {
1174 EXPECT_EQ(i, v.GetInt());
1181 for (
const auto& v : const_cast<const Value&>(x).GetArray()) {
1182 EXPECT_EQ(i, v.GetInt());
1193 template <
typename T,
typename Allocator>
1198 x.AddMember(
"A",
"Apple", allocator);
1199 EXPECT_FALSE(x.ObjectEmpty());
1200 EXPECT_EQ(1u, x.MemberCount());
1203 x.AddMember(
"B",
"Banana", allocator);
1204 EXPECT_EQ(2u, x.MemberCount());
1209 o.AddMember(
"true",
true, allocator);
1210 o.AddMember(
"false",
false, allocator);
1211 o.AddMember(
"int", -1, allocator);
1212 o.AddMember(
"uint", 1u, allocator);
1213 o.AddMember(
"int64",
int64_t(-4294967296), allocator);
1214 o.AddMember(
"uint64",
uint64_t(4294967296), allocator);
1215 o.AddMember(
"double", 3.14, allocator);
1216 o.AddMember(
"string",
"Jelly", allocator);
1218 EXPECT_TRUE(o[
"true"].GetBool());
1219 EXPECT_FALSE(o[
"false"].GetBool());
1220 EXPECT_EQ(-1, o[
"int"].GetInt());
1221 EXPECT_EQ(1u, o[
"uint"].GetUint());
1222 EXPECT_EQ(
int64_t(-4294967296), o[
"int64"].GetInt64());
1223 EXPECT_EQ(
uint64_t(4294967296), o[
"uint64"].GetUint64());
1224 EXPECT_STREQ(
"Jelly",o[
"string"].GetString());
1225 EXPECT_EQ(8u, o.MemberCount());
1233 o.AddMember(n,
"string", allocator);
1234 EXPECT_EQ(1u, o.MemberCount());
1237 o.AddMember(count, o.MemberCount(), allocator);
1238 EXPECT_EQ(2u, o.MemberCount());
1241 #if RAPIDJSON_HAS_STDSTRING 1245 o.AddMember(
"b", std::string(
"Banana"), allocator);
1246 EXPECT_STREQ(
"Banana", o[
"b"].GetString());
1249 o.RemoveMember(std::string(
"b"));
1250 EXPECT_TRUE(o.ObjectEmpty());
1254 #if RAPIDJSON_HAS_CXX11_RVALUE_REFS 1258 o.AddMember(
Value(
"true"),
Value(
true), allocator);
1259 o.AddMember(
Value(
"false"),
Value(
false).Move(), allocator);
1260 o.AddMember(
Value(
"int").Move(),
Value(-1), allocator);
1261 o.AddMember(
"uint", std::move(
Value().SetUint(1u)), allocator);
1262 EXPECT_TRUE(o[
"true"].GetBool());
1263 EXPECT_FALSE(o[
"false"].GetBool());
1264 EXPECT_EQ(-1, o[
"int"].GetInt());
1265 EXPECT_EQ(1u, o[
"uint"].GetUint());
1266 EXPECT_EQ(4u, o.MemberCount());
1272 const Value C0D(
"C\0D", 3);
1273 name.SetString(C0D.GetString(), 3);
1274 value.SetString(
"CherryD", 7);
1275 x.AddMember(name, value, allocator);
1278 EXPECT_TRUE(x.HasMember(
"A"));
1279 EXPECT_TRUE(x.HasMember(
"B"));
1280 EXPECT_TRUE(y.HasMember(
"A"));
1281 EXPECT_TRUE(y.HasMember(
"B"));
1283 #if RAPIDJSON_HAS_STDSTRING 1284 EXPECT_TRUE(x.HasMember(std::string(
"A")));
1287 name.SetString(
"C\0D");
1288 EXPECT_TRUE(x.HasMember(name));
1289 EXPECT_TRUE(y.HasMember(name));
1292 EXPECT_TRUE(x.HasMember(othername));
1293 EXPECT_TRUE(y.HasMember(othername));
1294 othername.SetString(
"C\0D");
1295 EXPECT_TRUE(x.HasMember(othername));
1296 EXPECT_TRUE(y.HasMember(othername));
1299 EXPECT_STREQ(
"Apple", x[
"A"].GetString());
1300 EXPECT_STREQ(
"Banana", x[
"B"].GetString());
1301 EXPECT_STREQ(
"CherryD", x[C0D].GetString());
1302 EXPECT_STREQ(
"CherryD", x[othername].GetString());
1306 EXPECT_STREQ(
"Apple", y[
"A"].GetString());
1307 EXPECT_STREQ(
"Banana", y[
"B"].GetString());
1308 EXPECT_STREQ(
"CherryD", y[C0D].GetString());
1310 #if RAPIDJSON_HAS_STDSTRING 1311 EXPECT_STREQ(
"Apple", x[
"A"].GetString());
1312 EXPECT_STREQ(
"Apple", y[std::string(
"A")].GetString());
1317 EXPECT_TRUE(itr != x.MemberEnd());
1318 EXPECT_STREQ(
"A", itr->name.GetString());
1319 EXPECT_STREQ(
"Apple", itr->value.GetString());
1321 EXPECT_TRUE(itr != x.MemberEnd());
1322 EXPECT_STREQ(
"B", itr->name.GetString());
1323 EXPECT_STREQ(
"Banana", itr->value.GetString());
1325 EXPECT_TRUE(itr != x.MemberEnd());
1326 EXPECT_TRUE(memcmp(itr->name.GetString(),
"C\0D", 4) == 0);
1327 EXPECT_STREQ(
"CherryD", itr->value.GetString());
1329 EXPECT_FALSE(itr != x.MemberEnd());
1333 EXPECT_TRUE(citr != y.MemberEnd());
1334 EXPECT_STREQ(
"A", citr->name.GetString());
1335 EXPECT_STREQ(
"Apple", citr->value.GetString());
1337 EXPECT_TRUE(citr != y.MemberEnd());
1338 EXPECT_STREQ(
"B", citr->name.GetString());
1339 EXPECT_STREQ(
"Banana", citr->value.GetString());
1341 EXPECT_TRUE(citr != y.MemberEnd());
1342 EXPECT_TRUE(memcmp(citr->name.GetString(),
"C\0D", 4) == 0);
1343 EXPECT_STREQ(
"CherryD", citr->value.GetString());
1345 EXPECT_FALSE(citr != y.MemberEnd());
1348 itr = x.MemberBegin();
1349 citr = x.MemberBegin();
1351 EXPECT_TRUE(itr < x.MemberEnd());
1352 EXPECT_FALSE(itr > y.MemberEnd());
1353 EXPECT_TRUE(citr < x.MemberEnd());
1354 EXPECT_FALSE(citr > y.MemberEnd());
1357 EXPECT_FALSE(itr < itr);
1358 EXPECT_TRUE(itr < citr);
1359 EXPECT_FALSE(itr > itr);
1360 EXPECT_TRUE(citr > itr);
1361 EXPECT_EQ(1, citr - x.MemberBegin());
1362 EXPECT_EQ(0, itr - y.MemberBegin());
1363 itr += citr - x.MemberBegin();
1364 EXPECT_EQ(1, itr - y.MemberBegin());
1366 EXPECT_TRUE(itr <= citr);
1367 EXPECT_TRUE(citr <= itr);
1369 EXPECT_TRUE(itr >= citr);
1370 EXPECT_FALSE(citr >= itr);
1373 EXPECT_TRUE(x.RemoveMember(
"A"));
1374 EXPECT_FALSE(x.HasMember(
"A"));
1376 EXPECT_TRUE(x.RemoveMember(
"B"));
1377 EXPECT_FALSE(x.HasMember(
"B"));
1379 EXPECT_FALSE(x.RemoveMember(
"nonexist"));
1381 EXPECT_TRUE(x.RemoveMember(othername));
1382 EXPECT_FALSE(x.HasMember(name));
1384 EXPECT_TRUE(x.MemberBegin() == x.MemberEnd());
1390 const char keys[][2] = {
"a",
"b",
"c",
"d",
"e",
"f",
"g",
"h",
"i",
"j" };
1391 for (
int i = 0; i < 10; i++)
1392 x.AddMember(keys[i],
Value(
kArrayType).PushBack(i, allocator), allocator);
1395 EXPECT_EQ(x.MemberCount(),
SizeType(x.MemberEnd() - x.MemberBegin()));
1398 itr = x.EraseMember(x.MemberBegin());
1399 EXPECT_FALSE(x.HasMember(keys[0]));
1400 EXPECT_EQ(x.MemberBegin(), itr);
1401 EXPECT_EQ(9u, x.MemberCount());
1402 for (; itr != x.MemberEnd(); ++itr) {
1403 size_t i =
static_cast<size_t>((itr - x.MemberBegin())) + 1;
1404 EXPECT_STREQ(itr->name.GetString(), keys[i]);
1405 EXPECT_EQ(i, itr->value[0].GetInt());
1409 itr = x.EraseMember(x.MemberEnd() - 1);
1410 EXPECT_FALSE(x.HasMember(keys[9]));
1411 EXPECT_EQ(x.MemberEnd(), itr);
1412 EXPECT_EQ(8u, x.MemberCount());
1413 for (; itr != x.MemberEnd(); ++itr) {
1414 size_t i =
static_cast<size_t>(itr - x.MemberBegin()) + 1;
1415 EXPECT_STREQ(itr->name.GetString(), keys[i]);
1416 EXPECT_EQ(i, itr->value[0].GetInt());
1420 itr = x.EraseMember(x.MemberBegin() + 4);
1421 EXPECT_FALSE(x.HasMember(keys[5]));
1422 EXPECT_EQ(x.MemberBegin() + 4, itr);
1423 EXPECT_EQ(7u, x.MemberCount());
1424 for (; itr != x.MemberEnd(); ++itr) {
1425 size_t i =
static_cast<size_t>(itr - x.MemberBegin());
1426 i += (i < 4) ? 1 : 2;
1427 EXPECT_STREQ(itr->name.GetString(), keys[i]);
1428 EXPECT_EQ(i, itr->value[0].GetInt());
1433 const unsigned n = 10;
1434 for (
unsigned first = 0; first < n; first++) {
1435 for (
unsigned last = first; last <= n; last++) {
1436 x.RemoveAllMembers();
1437 for (
unsigned i = 0; i < n; i++)
1438 x.AddMember(keys[i],
Value(
kArrayType).PushBack(i, allocator), allocator);
1440 itr = x.EraseMember(x.MemberBegin() +
static_cast<int>(first), x.MemberBegin() +
static_cast<int>(last));
1442 EXPECT_EQ(x.MemberEnd(), itr);
1444 EXPECT_EQ(x.MemberBegin() +
static_cast<int>(first), itr);
1446 size_t removeCount = last - first;
1447 EXPECT_EQ(n - removeCount, x.MemberCount());
1448 for (
unsigned i = 0; i < first; i++)
1449 EXPECT_EQ(i, x[keys[i]][0].GetUint());
1450 for (
unsigned i = first; i < n - removeCount; i++)
1451 EXPECT_EQ(i + removeCount, x[keys[i+removeCount]][0].GetUint());
1456 x.RemoveAllMembers();
1457 EXPECT_TRUE(x.ObjectEmpty());
1458 EXPECT_EQ(0u, x.MemberCount());
1467 EXPECT_TRUE(x.IsObject());
1468 EXPECT_TRUE(x.ObjectEmpty());
1469 EXPECT_EQ(0u, x.MemberCount());
1471 EXPECT_TRUE(y.IsObject());
1472 EXPECT_TRUE(y.ObjectEmpty());
1473 EXPECT_EQ(0u, y.MemberCount());
1480 EXPECT_TRUE(z.IsObject());
1500 EXPECT_EQ(1, o3.MemberCount());
1507 x.RemoveAllMembers();
1516 EXPECT_TRUE(x.IsObject());
1522 x.AddMember(
"a",
"apple", allocator);
1523 Value y(x.GetObject());
1524 EXPECT_STREQ(
"apple", y[
"a"].GetString());
1525 EXPECT_TRUE(x.IsObject());
1530 x.AddMember(
"a",
"apple", allocator);
1532 y.AddMember(
"fruits", x.GetObject(), allocator);
1533 EXPECT_STREQ(
"apple", y[
"fruits"][
"a"].GetString());
1534 EXPECT_TRUE(x.IsObject());
1538 #if RAPIDJSON_HAS_CXX11_RANGE_FOR 1543 for (
int i = 0; i < 10; i++) {
1545 Value n(name, static_cast<SizeType>(sprintf(name,
"%d", i)), allocator);
1546 x.AddMember(n, i, allocator);
1551 for (
auto& m : x.GetObject()) {
1553 sprintf(name,
"%d", i);
1554 EXPECT_STREQ(name, m.name.GetString());
1555 EXPECT_EQ(i, m.value.GetInt());
1562 for (
const auto& m : const_cast<const Value&>(x).GetObject()) {
1564 sprintf(name,
"%d", i);
1565 EXPECT_STREQ(name, m.name.GetString());
1566 EXPECT_EQ(i, m.value.GetInt());
1580 x.AddMember(
"A",
"Apple", allocator);
1581 x.AddMember(
"B",
"Banana", allocator);
1583 EXPECT_TRUE(x.EraseMember(
"B"));
1584 EXPECT_FALSE(x.HasMember(
"B"));
1586 EXPECT_FALSE(x.EraseMember(
"nonexist"));
1589 EXPECT_TRUE(x.EraseMember(othername));
1590 EXPECT_FALSE(x.HasMember(
"A"));
1592 EXPECT_TRUE(x.MemberBegin() == x.MemberEnd());
1603 Value number(static_cast<int>(i * n + j));
1604 y.PushBack(number, allocator);
1606 x.PushBack(y, allocator);
1611 EXPECT_TRUE(x[i][j].IsInt());
1612 EXPECT_EQ(static_cast<int>(i * n + j), x[i][j].GetInt());
1623 sprintf(name1,
"%d", i);
1626 Value name(name1, static_cast<SizeType>(strlen(name1)), allocator);
1631 sprintf(name2,
"%d", j);
1633 Value name3(name2, static_cast<SizeType>(strlen(name2)), allocator);
1634 Value number(static_cast<int>(i * n + j));
1635 object.AddMember(name3, number, allocator);
1639 x.AddMember(name,
object, allocator);
1644 sprintf(name1,
"%d", i);
1648 sprintf(name2,
"%d", j);
1650 EXPECT_EQ(static_cast<int>(i * n + j), x[name1][name2].GetInt());
1661 objVal.AddMember(
"var1", 123, allocator);
1662 objVal.AddMember(
"var2",
"444", allocator);
1663 objVal.AddMember(
"var3", 555, allocator);
1664 EXPECT_TRUE(objVal.HasMember(
"var3"));
1665 objVal.RemoveMember(
"var3");
1666 EXPECT_FALSE(objVal.HasMember(
"var3"));
1673 V::AllocatorType allocator;
1675 o.AddMember(
"x", 1, allocator);
1678 a.PushBack(1, allocator);
1686 val.SetString(str, len, doc.GetAllocator());
1688 EXPECT_EQ(val.GetStringLength(), len);
1689 EXPECT_STREQ(val.GetString(), str);
1705 bool Int(
int) {
return e != 2; }
1706 bool Uint(
unsigned) {
return e != 3; }
1719 #define TEST_TERMINATION(e, json)\ 1722 EXPECT_FALSE(d.Parse(json).HasParseError()); \ 1724 TerminateHandler<e> h;\ 1725 EXPECT_FALSE(d.Accept(h));\ 1748 return lhs.GetInt() < rhs.GetInt();
1752 #if RAPIDJSON_HAS_CXX11_RVALUE_REFS 1756 a.PushBack(5, allocator);
1757 a.PushBack(1, allocator);
1758 a.PushBack(3, allocator);
1760 EXPECT_EQ(1, a[0].GetInt());
1761 EXPECT_EQ(3, a[1].GetInt());
1762 EXPECT_EQ(5, a[2].GetInt());
1778 itr2->value.PushBack(itr->value[0], a);
1779 itr = v.EraseMember(itr);
1787 if (itr->value.Size() == 1)
1788 itr->value = itr->value[0];
1792 else if (v.IsArray())
void TestUnequal(const A &a, const B &b)
void TestEqual(const A &a, const B &b)
RAPIDJSON_NAMESPACE_BEGIN typedef unsigned SizeType
Size type (for string lengths, array sizes, etc.)
GenericObject AddMember(ValueType &name, ValueType &value, AllocatorType &allocator) const
#define RAPIDJSON_UINT64_C2(high32, low32)
Construct a 64-bit literal by a pair of 32-bit integer.
Helper class for accessing Value of array type.
static void TestShortStringOptimization(const char *str)
(Constant) member iterator for a JSON object value
GenericArray PushBack(ValueType &value, AllocatorType &allocator) const
A document for parsing JSON text as DOM.
bool operator()(const Value &lhs, const Value &rhs) const
bool Key(const char *, SizeType, bool)
GenericValue< UTF8<> > Value
GenericValue with UTF8 encoding.
Helper class for accessing Value of object type.
unsigned __int64 uint64_t
#define TEST_TERMINATION(e, json)
Concept for allocating, resizing and freeing memory block.
Allocator & GetAllocator()
Get the allocator of this document.
GenericDocument< UTF8<> > Document
GenericDocument with UTF8 encoding.
void Swap(T &a, T &b) RAPIDJSON_NOEXCEPT
Custom swap() to avoid dependency on C++ <algorithm> header.
GenericDocument & Parse(const typename SourceEncoding::Ch *str)
Parse JSON text from a read-only string (with Encoding conversion)
SizeType MemberCount() const
bool RawNumber(const char *, SizeType, bool)
const GenericPointer< typename T::ValueType > T2 T::AllocatorType & a
C-runtime library allocator.
bool String(const char *, SizeType, bool)
GenericStringRef< CharType > StringRef(const CharType *str)
Mark a character pointer as constant string.
static void TestArray(T &x, Allocator &allocator)
const GenericPointer< typename T::ValueType > T2 value
static void TestObject(T &x, Allocator &allocator)
static void MergeDuplicateKey(Value &v, Value::AllocatorType &a)