From 84a4ff85c552c708100887c83a41899da93cd60b Mon Sep 17 00:00:00 2001 From: miloyip Date: Tue, 1 Jul 2014 19:17:44 +0800 Subject: [PATCH 01/12] tutorial draft --- doc/tutorial.md | 100 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 doc/tutorial.md diff --git a/doc/tutorial.md b/doc/tutorial.md new file mode 100644 index 0000000..02d61cf --- /dev/null +++ b/doc/tutorial.md @@ -0,0 +1,100 @@ +# RapidJSON Tutorial + +This tutorial introduces Document Object Model(DOM) API of RapidJSON. + +As shown in [Usage at a glance](../readme.md#usage-at-a-glance), a JSON text can be parsed into DOM, and then be quried and modfied easily, and finally convert back to JSON text. + +## Value + +Each JSON value is stored in a type called `Value`. A `Document`, representing the DOM, contains the root of `Value`. + +### Querying Value + +In this section, we will use excerpt of [`example/tutorial/tutorial.cpp`](../example/tutorial/tutorial.cpp). + +Assumes we have a JSON text stored in a C string (`const char* json`): +```js +{ + "hello": "world", + "t": true , + "f": false, + "n": null, + "i": 123, + "pi": 3.1416, + "a": [1, 2, 3, 4] +} +``` + +Parse it into a `Document` +```cpp +#include "rapidjson/document.h" + +using namespace rapidjson; + +// ... +Document document; +document.Parse(json); +``` + +The JSON text is now parsed into `document` as a DOM tree. + +The root of a conforming JSON should be either an object or an array. In this case, the root is an object with 7 members. +```cpp +assert(document.IsObject()); +``` + +Query whether a `"hello"` member exists in the root object. Since a `Value` can contain different types of value, we may need to verify its type and use suitable API to obtain the value. In this example, `"hello"` member associates with a JSON string. +```cpp +assert(document.HasMember("hello")); +assert(document["hello"].IsString()); +printf("hello = %s\n", document["hello"].GetString()); +``` + +JSON true/false values are represented as `bool`. +```cpp +assert(document["t"].IsBool()); +printf("t = %s\n", document["t"].GetBool() ? "true" : "false"); +``` + +JSON null can be queryed by `IsNull()`. +```cpp +printf("n = %s\n", document["n"].IsNull() ? "null" : "?"); +``` + +JSON number type represents all numeric values. However, C++ needs more specific type for manipulation. + +```cpp +assert(document["i"].IsNumber()); + +// In this case, IsUint()/IsInt64()/IsUInt64() also return true. +assert(document["i"].IsInt()); +printf("i = %d\n", document["i"].GetInt()); +// Alternative (int)document["i"] + +assert(document["pi"].IsNumber()); +assert(document["pi"].IsDouble()); +printf("pi = %g\n", document["pi"].GetDouble()); +``` + +JSON array contains a number of elements +```cpp +// Using a reference for consecutive access is handy and faster. +const Value& a = document["a"]; +assert(a.IsArray()); +for (SizeType i = 0; i < a.Size(); i++) // Uses SizeType instead of size_t + printf("a[%d] = %d\n", i, a[i].GetInt()); +``` + +Note that, RapidJSON do not automatically converting between JSON types. if a value is a string, it is invalid to call `GetInt()`. In debug mode it will assert. In release mode, the behavior is undefined. + +## Create/Modify Values + +## Object + +## Array + +## String + +## Number + +## True/False/Null From bc2daea2f67c024af1c5e4905e6dde80c4a8c856 Mon Sep 17 00:00:00 2001 From: Milo Yip Date: Wed, 2 Jul 2014 00:20:36 +0800 Subject: [PATCH 02/12] Add other query sections in tutorial --- doc/diagram/.gitignore | 1 + doc/diagram/makefile | 2 +- doc/diagram/tutorial.dot | 58 ++++++++++++++ doc/diagram/tutorial.png | Bin 0 -> 31206 bytes doc/tutorial.md | 161 +++++++++++++++++++++++++++++++++++---- 5 files changed, 208 insertions(+), 14 deletions(-) create mode 100644 doc/diagram/.gitignore create mode 100644 doc/diagram/tutorial.dot create mode 100644 doc/diagram/tutorial.png diff --git a/doc/diagram/.gitignore b/doc/diagram/.gitignore new file mode 100644 index 0000000..a136337 --- /dev/null +++ b/doc/diagram/.gitignore @@ -0,0 +1 @@ +*.pdf diff --git a/doc/diagram/makefile b/doc/diagram/makefile index 4699438..3483977 100644 --- a/doc/diagram/makefile +++ b/doc/diagram/makefile @@ -5,4 +5,4 @@ dot $< -Tpng -o $@ DOTFILES = $(basename $(wildcard *.dot)) -all: $(addsuffix .png, $(DOTFILES)) #$(addsuffix .pdf, $(DOTFILES)) +all: $(addsuffix .png, $(DOTFILES)) $(addsuffix .pdf, $(DOTFILES)) diff --git a/doc/diagram/tutorial.dot b/doc/diagram/tutorial.dot new file mode 100644 index 0000000..b4f5d5f --- /dev/null +++ b/doc/diagram/tutorial.dot @@ -0,0 +1,58 @@ +digraph { + compound=true + fontname="Inconsolata, Consolas" + fontsize=10 + margin="0,0" + ranksep=0.2 + penwidth=0.5 + + node [fontname="Inconsolata, Consolas", fontsize=10, penwidth=0.5] + edge [fontname="Inconsolata, Consolas", fontsize=10] + + subgraph cluster1 { + margin="10,10" + labeljust="left" + label = "Document" + style=filled + fillcolor=gray95 + node [shape=Mrecord, style=filled, colorscheme=spectral7] + + root [label="{object|}", fillcolor=3] + + { + hello [label="{string|\"hello\"}", fillcolor=5] + t [label="{string|\"t\"}", fillcolor=5] + f [label="{string|\"f\"}", fillcolor=5] + n [label="{string|\"n\"}", fillcolor=5] + i [label="{string|\"i\"}", fillcolor=5] + pi [label="{string|\"pi\"}", fillcolor=5] + a [label="{string|\"a\"}", fillcolor=5] + + world [label="{string|\"world\"}", fillcolor=5] + true [label="{true|}", fillcolor=7] + false [label="{false|}", fillcolor=2] + null [label="{null|}", fillcolor=1] + i1 [label="{number|123}", fillcolor=6] + pi1 [label="{number|3.1416}", fillcolor=6] + array [label="{array|size=4}", fillcolor=4] + + a1 [label="{number|1}", fillcolor=6] + a2 [label="{number|2}", fillcolor=6] + a3 [label="{number|3}", fillcolor=6] + a4 [label="{number|4}", fillcolor=6] + } + + edge [arrowhead=vee] + root -> { hello, t, f, n, i, pi, a } + array -> { a1, a2, a3, a4} + + edge [arrowhead=none] + hello -> world + t -> true + f -> false + n -> null + i -> i1 + pi -> pi1 + a -> array + } +} \ No newline at end of file diff --git a/doc/diagram/tutorial.png b/doc/diagram/tutorial.png new file mode 100644 index 0000000000000000000000000000000000000000..77c3a6d2c6b8a00b7e361adeae947d0c92659c3d GIT binary patch literal 31206 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 NH@WZT literal 0 HcmV?d00001 diff --git a/doc/tutorial.md b/doc/tutorial.md index 02d61cf..2af1758 100644 --- a/doc/tutorial.md +++ b/doc/tutorial.md @@ -1,10 +1,10 @@ # RapidJSON Tutorial -This tutorial introduces Document Object Model(DOM) API of RapidJSON. +This tutorial introduces the basics of the Document Object Model(DOM) API. -As shown in [Usage at a glance](../readme.md#usage-at-a-glance), a JSON text can be parsed into DOM, and then be quried and modfied easily, and finally convert back to JSON text. +As shown in [Usage at a glance](../readme.md#usage-at-a-glance), a JSON text can be parsed into DOM, and then the DOM can be queried and modfied easily, and finally be converted back to JSON text. -## Value +## Value & Document Each JSON value is stored in a type called `Value`. A `Document`, representing the DOM, contains the root of `Value`. @@ -36,9 +36,11 @@ Document document; document.Parse(json); ``` -The JSON text is now parsed into `document` as a DOM tree. +The JSON text is now parsed into `document` as a DOM tree: -The root of a conforming JSON should be either an object or an array. In this case, the root is an object with 7 members. +![tutorial](diagram/tutorial.png?raw=true) + +The root of a conforming JSON should be either an object or an array. In this case, the root is an object. ```cpp assert(document.IsObject()); ``` @@ -50,17 +52,29 @@ assert(document["hello"].IsString()); printf("hello = %s\n", document["hello"].GetString()); ``` +``` +world +``` + JSON true/false values are represented as `bool`. ```cpp assert(document["t"].IsBool()); printf("t = %s\n", document["t"].GetBool() ? "true" : "false"); ``` +``` +true +``` + JSON null can be queryed by `IsNull()`. ```cpp printf("n = %s\n", document["n"].IsNull() ? "null" : "?"); ``` +``` +null +``` + JSON number type represents all numeric values. However, C++ needs more specific type for manipulation. ```cpp @@ -76,7 +90,12 @@ assert(document["pi"].IsDouble()); printf("pi = %g\n", document["pi"].GetDouble()); ``` -JSON array contains a number of elements +``` +i = 123 +pi = 3.1416 +``` + +JSON array contains a number of elements. ```cpp // Using a reference for consecutive access is handy and faster. const Value& a = document["a"]; @@ -85,16 +104,132 @@ for (SizeType i = 0; i < a.Size(); i++) // Uses SizeType instead of size_t printf("a[%d] = %d\n", i, a[i].GetInt()); ``` -Note that, RapidJSON do not automatically converting between JSON types. if a value is a string, it is invalid to call `GetInt()`. In debug mode it will assert. In release mode, the behavior is undefined. +``` +a[0] = 1 +a[1] = 2 +a[2] = 3 +a[3] = 4 +``` + +Note that, RapidJSON does not automatically convert values between JSON types. If a value is a string, it is invalid to call `GetInt()`, for example. In debug mode it will fail an assertion. In release mode, the behavior is undefined. + +In the following, details about querying individual types are discussed. + +### Querying Array + +By default, `SizeType` is typedef of `unsigned`. In most systems, array is limited to store up to 2^32-1 elements. + +You may access the elements in array by integer literal, for example, `a[1]`, `a[2]`. However, `a[0]` will generate a compiler error. It is because two overloaded operators `operator[](SizeType)` and `operator[](const char*)` is avaliable, and C++ can treat `0` as a null pointer. Workarounds: +* `a[SizeType(0)]` +* `a[0u]` + +Array is similar to `std::vector`, instead of using indices, you may also use iterator to access all the elements. +```cpp +for (Value::ConstValueIterator itr = a.Begin(); itr != a.End(); ++itr) + printf("%d ", itr->GetInt()); +``` + +And other familar query functions: +* `SizeType Capacity() const` +* `bool Empty() const` + +### Quering Object + +Similarly, we can iterate object members by iterator: + +```cpp +static const char* kTypeNames[] = + { "Null", "False", "True", "Object", "Array", "String", "Number" }; + +for (Value::ConstMemberIterator itr = document.MemberBegin(); + itr != document.MemberEnd(); ++itr) +{ + printf("Type of member %s is %s\n", + itr->name.GetString(), kTypeNames[itr->value.GetType()]); +} +``` + +``` +Type of member hello is String +Type of member t is True +Type of member f is False +Type of member n is Null +Type of member i is Number +Type of member pi is Number +Type of member a is Array +``` + +Note that, when `operator[](const char*)` cannot find the member, it will fail an assertion. + +If we are unsure whether a member exists, we need to call `HasMember()` before calling `operator[](const char*)`. However, this incurs two lookup. A better way is to call `FindMember()`, which can check the existence of member and obtain its value at once: + +```cpp +Value::ConstMemberIerator itr = document.FindMember("hello"); +if (itr != 0) + printf("%s %s\n", itr->value.GetString()); +``` + +### Querying Number + +JSON provide a single numerical type called Number. Number can be integer or real numbers. RFC 4627 says the range of Number is specified by parser. + +As C++ provides several integer and floating point number types, the DOM trys to handle these with widest possible range and good performance. + +When the DOM parses a Number, it stores it as either one of the following type: + +Type | Description +--------------------------------------------------- +`unsigned` | 32-bit unsigned integer +`int` | 32-bit signed integer +`uint64_t` | 64-bit unsigned integer +`int64_t` | 64-bit signed integer +`double` | 64-bit double precision floating point + +When querying a number, you can check whether the number can be obtained as target type: + +Function | Description +----------------------------------------------- +`IsNumber()` | whether the value is a number +`IsInt()` | whether the number is a int +`IsUint()` | whether the number is a uint +`IsInt64()` | whether the number is a int64_t +`IsUint64()` | whether the number is a uint64_t +`IsDouble()` | whether the number is a double + +Note that, an integer value may be obtained in various ways without conversion. For example, A value `x` containing `123` will make `x.IsInt() == x.IsUint() == x.Int64() == x.Uint64() == ture`. But a value `y` containing `-3000000000` will only makes `x.int64() == true`. + +When obtaining the numeric values, `GetDouble()` will convert internal integer representation to a `double`. Note that, `int` and `uint` can be safely convert to `double`, but `int64_t` and `uint64_t` may lose precision (since mantissa of `double` is only 52-bits). + +### Querying String + +In addition to `GetString()`, the `Value` class also contains `GetStringLength()`. Here explains why. + +According to RFC 4627, JSON strings can contain unicode character `U+0000`, which must be escaped as `"\u0000"`. The problem is that, C/C++ often uses null-terminated string, which treats ``\0'` as the terminator symbol. + +To conform RFC 4627, RapidJSON supports string containing `U+0000`. If you need to handle this, you can use `GetStringLength()` API to obtain the correct length of string. + +For example, after parsing a the following JSON string to `Document d`. + +```js +{ "s" : "a\u0000b" } +``` +The correct length of the value `"a\u0000b"` is 3. But `strlen()` returns 1. + +`GetStringLength()` can also improve performance, as user may often need to call `strlen()` for allocating buffer. + +Besides, `std::string` also support a constructor: + +```cpp +string( const char* s, size_type count); +``` + +which accepts the length of string as parameter. This constructor supports storing null character within the string, and should also provide better performance. ## Create/Modify Values -## Object +### Object -## Array +### Array -## String +### String -## Number - -## True/False/Null From cbc2c46bb8266543c370de6b63bab93d7c0f0250 Mon Sep 17 00:00:00 2001 From: Milo Yip Date: Wed, 2 Jul 2014 00:27:27 +0800 Subject: [PATCH 03/12] Update tutorial.md Fixes table --- doc/tutorial.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/doc/tutorial.md b/doc/tutorial.md index 2af1758..ea0d56b 100644 --- a/doc/tutorial.md +++ b/doc/tutorial.md @@ -178,7 +178,7 @@ As C++ provides several integer and floating point number types, the DOM trys to When the DOM parses a Number, it stores it as either one of the following type: Type | Description ---------------------------------------------------- +-----------|--------------------------------------- `unsigned` | 32-bit unsigned integer `int` | 32-bit signed integer `uint64_t` | 64-bit unsigned integer @@ -187,14 +187,14 @@ Type | Description When querying a number, you can check whether the number can be obtained as target type: -Function | Description ------------------------------------------------ -`IsNumber()` | whether the value is a number -`IsInt()` | whether the number is a int -`IsUint()` | whether the number is a uint -`IsInt64()` | whether the number is a int64_t -`IsUint64()` | whether the number is a uint64_t -`IsDouble()` | whether the number is a double +Checking | Obtaining +-------------|-------------- +`IsNumber()` | N/A +`IsInt()` | `GetInt()` +`IsUint()` | `GetUint()` +`IsInt64()` | `GetInt64()` +`IsUint64()` | `GetUint()` +`IsDouble()` | `GetDouble()` Note that, an integer value may be obtained in various ways without conversion. For example, A value `x` containing `123` will make `x.IsInt() == x.IsUint() == x.Int64() == x.Uint64() == ture`. But a value `y` containing `-3000000000` will only makes `x.int64() == true`. From c1035cb9701ea59ebb079112f8fa71c63614016a Mon Sep 17 00:00:00 2001 From: Milo Yip Date: Wed, 2 Jul 2014 00:29:33 +0800 Subject: [PATCH 04/12] Update tutorial.md --- doc/tutorial.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/doc/tutorial.md b/doc/tutorial.md index ea0d56b..bbd00be 100644 --- a/doc/tutorial.md +++ b/doc/tutorial.md @@ -187,14 +187,14 @@ Type | Description When querying a number, you can check whether the number can be obtained as target type: -Checking | Obtaining --------------|-------------- -`IsNumber()` | N/A -`IsInt()` | `GetInt()` -`IsUint()` | `GetUint()` -`IsInt64()` | `GetInt64()` -`IsUint64()` | `GetUint()` -`IsDouble()` | `GetDouble()` +Checking | Obtaining +------------------|--------------------- +`bool IsNumber()` | N/A +`bool IsInt()` | `int GetInt()` +`bool IsUint()` | `unsigned GetUint()` +`bool IsInt64()` | `uint64_t GetInt64()` +`bool IsUint64()` | `int64_t GetUint()` +`bool IsDouble()` | `double GetDouble()` Note that, an integer value may be obtained in various ways without conversion. For example, A value `x` containing `123` will make `x.IsInt() == x.IsUint() == x.Int64() == x.Uint64() == ture`. But a value `y` containing `-3000000000` will only makes `x.int64() == true`. From a74c5da9dae8e5958f3c5f49c9da03c3b1b17246 Mon Sep 17 00:00:00 2001 From: Milo Yip Date: Wed, 2 Jul 2014 00:31:30 +0800 Subject: [PATCH 05/12] Update tutorial.md --- doc/tutorial.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/tutorial.md b/doc/tutorial.md index bbd00be..113bc30 100644 --- a/doc/tutorial.md +++ b/doc/tutorial.md @@ -190,10 +190,10 @@ When querying a number, you can check whether the number can be obtained as targ Checking | Obtaining ------------------|--------------------- `bool IsNumber()` | N/A -`bool IsInt()` | `int GetInt()` `bool IsUint()` | `unsigned GetUint()` -`bool IsInt64()` | `uint64_t GetInt64()` -`bool IsUint64()` | `int64_t GetUint()` +`bool IsInt()` | `int GetInt()` +`bool IsUint64()` | `uint64_t GetUint()` +`bool IsInt64()` | `int64_t GetInt64()` `bool IsDouble()` | `double GetDouble()` Note that, an integer value may be obtained in various ways without conversion. For example, A value `x` containing `123` will make `x.IsInt() == x.IsUint() == x.Int64() == x.Uint64() == ture`. But a value `y` containing `-3000000000` will only makes `x.int64() == true`. From dfcf4f26ddbf2576e59d38dfa684bf3eb7c90bf1 Mon Sep 17 00:00:00 2001 From: Milo Yip Date: Wed, 2 Jul 2014 00:35:42 +0800 Subject: [PATCH 06/12] Update tutorial.md --- doc/tutorial.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/tutorial.md b/doc/tutorial.md index 113bc30..0af5112 100644 --- a/doc/tutorial.md +++ b/doc/tutorial.md @@ -196,7 +196,7 @@ Checking | Obtaining `bool IsInt64()` | `int64_t GetInt64()` `bool IsDouble()` | `double GetDouble()` -Note that, an integer value may be obtained in various ways without conversion. For example, A value `x` containing `123` will make `x.IsInt() == x.IsUint() == x.Int64() == x.Uint64() == ture`. But a value `y` containing `-3000000000` will only makes `x.int64() == true`. +Note that, an integer value may be obtained in various ways without conversion. For example, A value `x` containing 123 will make `x.IsInt() == x.IsUint() == x.Int64() == x.Uint64() == ture`. But a value `y` containing -3000000000 will only makes `x.int64() == true`. When obtaining the numeric values, `GetDouble()` will convert internal integer representation to a `double`. Note that, `int` and `uint` can be safely convert to `double`, but `int64_t` and `uint64_t` may lose precision (since mantissa of `double` is only 52-bits). From 553a251b5abc45d9a7f3b1d653e234ac92345e35 Mon Sep 17 00:00:00 2001 From: Milo Yip Date: Wed, 2 Jul 2014 00:41:49 +0800 Subject: [PATCH 07/12] Update tutorial.md --- doc/tutorial.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/tutorial.md b/doc/tutorial.md index 0af5112..03e7e57 100644 --- a/doc/tutorial.md +++ b/doc/tutorial.md @@ -173,7 +173,7 @@ if (itr != 0) JSON provide a single numerical type called Number. Number can be integer or real numbers. RFC 4627 says the range of Number is specified by parser. -As C++ provides several integer and floating point number types, the DOM trys to handle these with widest possible range and good performance. +As C++ provides several integer and floating point number types, the DOM tries to handle these with widest possible range and good performance. When the DOM parses a Number, it stores it as either one of the following type: From f3ac1de5895e2d2cd93c3b2ee030a5b49e0fa085 Mon Sep 17 00:00:00 2001 From: miloyip Date: Wed, 2 Jul 2014 19:13:14 +0800 Subject: [PATCH 08/12] Added creatie/modify value section to tutorial --- doc/diagram/move1.dot | 40 ++++++++++ doc/diagram/move1.png | Bin 0 -> 6513 bytes doc/diagram/simpledom.dot | 2 +- doc/diagram/simpledom.png | Bin 23116 -> 23990 bytes doc/diagram/tutorial.dot | 4 +- doc/diagram/tutorial.png | Bin 31206 -> 33154 bytes doc/tutorial.md | 163 +++++++++++++++++++++++++++++++++++++- 7 files changed, 204 insertions(+), 5 deletions(-) create mode 100644 doc/diagram/move1.dot create mode 100644 doc/diagram/move1.png diff --git a/doc/diagram/move1.dot b/doc/diagram/move1.dot new file mode 100644 index 0000000..e280212 --- /dev/null +++ b/doc/diagram/move1.dot @@ -0,0 +1,40 @@ +digraph { + compound=true + fontname="Inconsolata, Consolas" + fontsize=10 + margin="0,0" + ranksep=0.2 + penwidth=0.5 + forcelabels=true + + node [fontname="Inconsolata, Consolas", fontsize=10, penwidth=0.5] + edge [fontname="Inconsolata, Consolas", fontsize=10, arrowhead=normal] + + subgraph cluster1 { + margin="10,10" + labeljust="left" + label = "Before" + style=filled + fillcolor=gray95 + + node [shape=Mrecord, style=filled, colorscheme=spectral7] + + b1 [label="{b:number|456}", fillcolor=6] + a1 [label="{a:number|123}", fillcolor=6] + + b1 -> a1 [style="dashed", constraint=false, label="Move"] + } + + subgraph cluster2 { + margin="10,10" + labeljust="left" + label = "After" + style=filled + fillcolor=gray95 + + node [shape=Mrecord, style=filled, colorscheme=spectral7] + + b2 [label="{b:null|}", fillcolor=1] + a2 [label="{a:number|456}", fillcolor=6] + } +} \ No newline at end of file diff --git a/doc/diagram/move1.png b/doc/diagram/move1.png new file mode 100644 index 0000000000000000000000000000000000000000..54053939aeb2a369f60b23a41bd501c68ac72952 GIT binary patch literal 6513 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 R@wNh>uB@e0u4w)4KLB3T`i}qr literal 0 HcmV?d00001 diff --git a/doc/diagram/simpledom.dot b/doc/diagram/simpledom.dot index 1e9edb5..28f017a 100644 --- a/doc/diagram/simpledom.dot +++ b/doc/diagram/simpledom.dot @@ -39,7 +39,7 @@ digraph { } edge [arrowhead=vee] - root -> { project, stars } + root -> { project; stars } edge [arrowhead="none"] project -> rapidjson diff --git a/doc/diagram/simpledom.png b/doc/diagram/simpledom.png index dd9e9aef916abd5d580795a5df9fdd83a65d2181..2443eeb545316f474bbd6d08a3d1910e306cd8fc 100644 GIT binary patch literal 23990 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 aHdIAOUahMiQGuuoVfM4NNzt)$zy1q&&@7n% diff --git a/doc/diagram/tutorial.dot b/doc/diagram/tutorial.dot index b4f5d5f..138ddc3 100644 --- a/doc/diagram/tutorial.dot +++ b/doc/diagram/tutorial.dot @@ -43,8 +43,8 @@ digraph { } edge [arrowhead=vee] - root -> { hello, t, f, n, i, pi, a } - array -> { a1, a2, a3, a4} + root -> { hello; t; f; n; i; pi; a } + array -> { a1; a2; a3; a4 } edge [arrowhead=none] hello -> world diff --git a/doc/diagram/tutorial.png b/doc/diagram/tutorial.png index 77c3a6d2c6b8a00b7e361adeae947d0c92659c3d..a2b0b54761d73a34564d8636edfb805b5068b3d6 100644 GIT binary patch literal 33154 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μ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 LMW#U7==Fa9bO-YM literal 31206 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 NH@WZT diff --git a/doc/tutorial.md b/doc/tutorial.md index 03e7e57..a7f0eb7 100644 --- a/doc/tutorial.md +++ b/doc/tutorial.md @@ -164,7 +164,7 @@ Note that, when `operator[](const char*)` cannot find the member, it will fail a If we are unsure whether a member exists, we need to call `HasMember()` before calling `operator[](const char*)`. However, this incurs two lookup. A better way is to call `FindMember()`, which can check the existence of member and obtain its value at once: ```cpp -Value::ConstMemberIerator itr = document.FindMember("hello"); +Value::ConstMemberIterator itr = document.FindMember("hello"); if (itr != 0) printf("%s %s\n", itr->value.GetString()); ``` @@ -196,7 +196,7 @@ Checking | Obtaining `bool IsInt64()` | `int64_t GetInt64()` `bool IsDouble()` | `double GetDouble()` -Note that, an integer value may be obtained in various ways without conversion. For example, A value `x` containing 123 will make `x.IsInt() == x.IsUint() == x.Int64() == x.Uint64() == ture`. But a value `y` containing -3000000000 will only makes `x.int64() == true`. +Note that, an integer value may be obtained in various ways without conversion. For example, A value `x` containing 123 will make `x.IsInt() == x.IsUint() == x.IsInt64() == x.IsUint64() == ture`. But a value `y` containing -3000000000 will only makes `x.IsInt64() == true`. When obtaining the numeric values, `GetDouble()` will convert internal integer representation to a `double`. Note that, `int` and `uint` can be safely convert to `double`, but `int64_t` and `uint64_t` may lose precision (since mantissa of `double` is only 52-bits). @@ -227,6 +227,165 @@ which accepts the length of string as parameter. This constructor supports stori ## Create/Modify Values +There are several ways to create values. After a DOM tree is created and/or modified, it can be saved as JSON again using `Writer`. + +### Changing Value Type +When creating a Value or Document by default constructor, its type is Null. To change its type, call `SetXXX()` or assignment operator, for example: + +```cpp +Document d; // Null +d.SetObject(); + +Value v; // Null +v.SetInt(10); +v = 10; // Shortcut, same as above +``` + +### Overloaded Constructors +There are also overloaded constructors for several types: + +```cpp +Value b(true); // calls Value(bool) +Value i(-123); // calls Value(int) +Value u(123u); // calls Value(unsigned) +Value d(1.5); // calls Value(double) +``` + +To create empty object or array, you may use `SetObject()`/`SetArray()` after default constructor, or using the `Value(Type)` in one shot: + +```cpp +Value o(kObjectType); +Value a(kArrayType); +``` + +### Move Semantics +A very special decision during design of RapidJSON is that, assignment of value does not copy the source value to destination value. Instead, the value from source is moved to the destination. For example, + +```cpp +Value a(123); +Value b(456); +b = a; // a becomes a Null value, b becomes number 123. +``` + +![move1](diagram/move1.png?raw=true) + +Why? What is the advantage of this semantics? + +The simple answer is performance. For fixed size JSON types (Number, True, False, Null), copying them is fast and easy. However, For variable size JSON types (String, Array, Object), copying them will incur a lot of overheads. And these overheads are often unnoticed. Especially when we need to create temporary object, copy it to another variable, and then destruct it. + +For example, if normal copy semantics is used + +```cpp +Value o(kObjectType); +{ + Value contacts(kArrayType); + // adding elements to contacts array. + // ... + o.AddMember("contacts", contacts); // deep clone contacts (may be with lots of allocations) + // destruct contacts. +} +``` + +The object o needs to allocate a same size buffer as contacts, makes a deep clone of it, and then finally contacts is destructed. This will incur a lot of unnecessary allocations/deallocations. + +There are solutions to prevent actual copying these data, such as reference counting and garbage collection(GC). + +To make rapidjson simple and fast, we chose to use move semantics for assignment. It is similar to auto_ptr<> which transfer ownership during assignment. Move is much faster and simpler, it just destructs the original value, memcpy() the source to destination, and finally sets the source as Null type. + +So, with move semantics, the above example become: + +```cpp +Value o(kObjectType); +{ + Value contacts(kArrayType); + // adding elements to contacts array. + o.AddMember("contacts", contacts); // just memcpy() of contacts itself to the value of new member (16 bytes) + // contacts became Null here. Its destruction is trivial. +} +``` + +This is called move assignment operator in C++11. As RapidJSON supports C++03, it adopts move semantics as default. + +### Manipulating String +RapidJSON provide two strategies for storing string. + +1. copy-string: allocates a buffer, and then copy the source data into it. +2. const-string: simply store a pointer of string. + +Copy-string is always safe because it owns a copy of the data. Const-string can be used for storing string literal, and in-situ parsing which we will mentioned in Document. + +To make memory allocation customizable, rapidjson needs user to pass an instance of allocator, whenever that operation may require allocation. This design is more flexible than STL's allocator type per class, as we can assign a allocator instance for each allocation. + +Therefore, when we assign a copy-string, we call this overloaded SetString() with allocator: + +```cpp +Document document; +Value author; +char buffer[10]; +int len = sprintf(buffer, "%s %s", "Milo", "Yip"); // dynamically created string. +author.SetString(buffer, len, document.GetAllocator()); +memset(buffer, 0, sizeof(buffer)); +// author.GetString() still contains "Milo Yip" after buffer is destroyed +``` + +In this example, we get the allocator from a Document instance. This is a common idiom when using rapidjson. But you may use other instances of allocator. + +Besides, the above SetString() requires the length of a string. This can handle null characters within a string. There is another SetString() overloaded function without the length parameter. And it actually assumes the input is null-terminated and calls a strlen()-like function to obtain the length. + +Finally, for literal string or string with safe life-cycle can use const-string version of SetString(), which are without alloactor parameter: + +```cpp +Value s; +s.SetString("rapidjson", 9); // faster, can contain null character +s.SetString("rapidjson"); // slower, assumes null-terminated +s = "rapidjson"; // shortcut, same as above +``` + +### Manipulating Array +Value with array type provides similar APIs as `std::vector`. + +* `Clear()` +* `Reserve(SizeType, Allocator&)` +* `Value& PushBack(Value&, Allocator&)` +* `template GenericValue& PushBack(T, Allocator&)` +* `Value& PopBack()` + +Note that, `Reserve(...)` and `PushBack(...)` may allocate memory, therefore requires an allocator. + +Here is an example of `PushBack()`: + +```cpp +Value a(kArrayType); +Document::AllocatorType& allocator = document.GetAllocator(); + +for (int i = 5; i <= 10; i++) + a.PushBack(i, allocator); // allocator is needed for potentially realloc. + +// Fluent interface +a.PushBack("Lua", allocator).PushBack("Mio", allocator); +``` + +Differs from STL, `PushBack()`/`PopBack()` returns the array reference itself. This is called fluent interface. + +### Manipulating Object +Object is a collection of key-value pairs. Each key must be a string value. The way to manipulating object is to add/remove members: + +* `Value& AddMember(Value&, Value&, Allocator& allocator)` +* `Value& AddMember(const Ch*, Allocator&, GenericValue& value, Allocator&)` +* `Value& AddMember(const Ch*, Value&, Allocator&)` +* `template Value& AddMember(const Ch*, T value, Allocator&)` +* `bool RemoveMember(const Ch*)` + +There are 4 overloaded version of AddMember(). They are 4 combinations for supplying the name string (copy- or const-), whether to supply a different allocator for name string, and whether use generic type for value. + +Here is an example. + +```cpp +Value contact(kObejct); +contact.AddMember("name", "Milo", document.GetAllocator()); +contact.AddMember("married", true, document.GetAllocator()); +``` + ### Object ### Array From f3fa423de0349bbadd2fa777f0400acbfb6e4ebd Mon Sep 17 00:00:00 2001 From: miloyip Date: Thu, 3 Jul 2014 19:20:33 +0800 Subject: [PATCH 09/12] Updates "Create/Modify Values" section --- doc/diagram/move2.dot | 63 +++++++++++++++++++++++++++++++++++++ doc/diagram/move2.png | Bin 0 -> 23536 bytes doc/diagram/move3.dot | 57 ++++++++++++++++++++++++++++++++++ doc/diagram/move3.png | Bin 0 -> 22932 bytes doc/tutorial.md | 70 +++++++++++++++++++++++++++++------------- 5 files changed, 168 insertions(+), 22 deletions(-) create mode 100644 doc/diagram/move2.dot create mode 100644 doc/diagram/move2.png create mode 100644 doc/diagram/move3.dot create mode 100644 doc/diagram/move3.png diff --git a/doc/diagram/move2.dot b/doc/diagram/move2.dot new file mode 100644 index 0000000..9c63162 --- /dev/null +++ b/doc/diagram/move2.dot @@ -0,0 +1,63 @@ +digraph { + compound=true + fontname="Inconsolata, Consolas" + fontsize=10 + margin="0,0" + ranksep=0.2 + penwidth=0.5 + forcelabels=true + + node [fontname="Inconsolata, Consolas", fontsize=10, penwidth=0.5] + edge [fontname="Inconsolata, Consolas", fontsize=10, arrowhead=normal] + + subgraph cluster1 { + margin="10,10" + labeljust="left" + label = "Before Copying" + style=filled + fillcolor=gray95 + + node [shape=Mrecord, style=filled, colorscheme=spectral7] + + c1 [label="{contact:array|}", fillcolor=4] + c11 [label="{|}"] + c12 [label="{|}"] + c13 [shape="none", label="...", style="solid"] + o1 [label="{o:object|}", fillcolor=3] + + c1 -> o1 [style="dashed", constraint=false, label="AddMember"] + + edge [arrowhead=vee] + c1 -> { c11; c12; c13 } + } + + subgraph cluster2 { + margin="10,10" + labeljust="left" + label = "After Copying" + style=filled + fillcolor=gray95 + + node [shape=Mrecord, style=filled, colorscheme=spectral7] + + { + rank = same + c2 [label="{contact:array|}", fillcolor=4] + c3 [label="{array|}", fillcolor=4] + } + c21 [label="{|}"] + c22 [label="{|}"] + c23 [shape=none, label="...", style="solid"] + o2 [label="{o:object|}", fillcolor=3] + cs [label="{string|\"contact\"}", fillcolor=5] + c31 [label="{|}"] + c32 [label="{|}"] + c33 [shape="none", label="...", style="solid"] + + edge [arrowhead=vee] + c2 -> { c21; c22; c23 } + o2 -> cs + cs -> c3 [arrowhead=none] + c3 -> { c31; c32; c33 } + } +} \ No newline at end of file diff --git a/doc/diagram/move2.png b/doc/diagram/move2.png new file mode 100644 index 0000000000000000000000000000000000000000..a65966ec9e4a1a1793e519c55a0c7cc29f92c2f2 GIT binary patch literal 23536 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 z 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 anv~oeUXj}u&-cNf5Ox`u>KE%ep8YrU-&Mf? literal 0 HcmV?d00001 diff --git a/doc/diagram/move3.dot b/doc/diagram/move3.dot new file mode 100644 index 0000000..4c2177d --- /dev/null +++ b/doc/diagram/move3.dot @@ -0,0 +1,57 @@ +digraph { + compound=true + fontname="Inconsolata, Consolas" + fontsize=10 + margin="0,0" + ranksep=0.2 + penwidth=0.5 + forcelabels=true + + node [fontname="Inconsolata, Consolas", fontsize=10, penwidth=0.5] + edge [fontname="Inconsolata, Consolas", fontsize=10, arrowhead=normal] + + subgraph cluster1 { + margin="10,10" + labeljust="left" + label = "Before Moving" + style=filled + fillcolor=gray95 + + node [shape=Mrecord, style=filled, colorscheme=spectral7] + + c1 [label="{contact:array|}", fillcolor=4] + c11 [label="{|}"] + c12 [label="{|}"] + c13 [shape=none, label="...", style="none"] + o1 [label="{o:object|}", fillcolor=3] + + c1 -> o1 [style="dashed", constraint=false, label="AddMember"] + + edge [arrowhead=vee] + c1 -> { c11; c12; c13 } + } + + subgraph cluster2 { + margin="10,10" + labeljust="left" + label = "After Moving" + style=filled + fillcolor=gray95 + + node [shape=Mrecord, style=filled, colorscheme=spectral7] + + rank = same + c2 [label="{contact:null|}", fillcolor=1] + c3 [label="{array|}", fillcolor=4] + c21 [label="{|}"] + c22 [label="{|}"] + c23 [shape="none", label="...", style="solid"] + o2 [label="{o:object|}", fillcolor=3] + cs [label="{string|\"contact\"}", fillcolor=5] + + edge [arrowhead=vee] + c3 -> { c21; c22; c23 } + o2 -> cs + cs -> c3 [arrowhead=none] + } +} \ No newline at end of file diff --git a/doc/diagram/move3.png b/doc/diagram/move3.png new file mode 100644 index 0000000000000000000000000000000000000000..f666acad9778897ad4410fb6403b635fa398509d GIT binary patch literal 22932 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 X(UsKK_3zPUnP6gQwm-|@ which transfer ownership during assignment. Move is much faster and simpler, it just destructs the original value, memcpy() the source to destination, and finally sets the source as Null type. +To make RapidJSON simple and fast, we chose to use *move* semantics for assignment. It is similar to `std::auto_ptr` which transfer ownership during assignment. Move is much faster and simpler, it just destructs the original value, `memcpy()` the source to destination, and finally sets the source as Null type. -So, with move semantics, the above example become: +So, with move semantics, the above example becomes: ```cpp Value o(kObjectType); @@ -304,19 +306,21 @@ Value o(kObjectType); } ``` -This is called move assignment operator in C++11. As RapidJSON supports C++03, it adopts move semantics as default. +![move3](diagram/move3.png?raw=true) -### Manipulating String +This is called move assignment operator in C++11. As RapidJSON supports C++03, it adopts move semantics using normal copy constructor, assignment operator, and all other modifying function like `AddMember()`, `PushBack()`, which will be discussed soon. + +### Create String RapidJSON provide two strategies for storing string. 1. copy-string: allocates a buffer, and then copy the source data into it. 2. const-string: simply store a pointer of string. -Copy-string is always safe because it owns a copy of the data. Const-string can be used for storing string literal, and in-situ parsing which we will mentioned in Document. +Copy-string is always safe because it owns a copy of the data. Const-string can be used for storing string literal, and in-situ parsing which we will mentioned in Document section. -To make memory allocation customizable, rapidjson needs user to pass an instance of allocator, whenever that operation may require allocation. This design is more flexible than STL's allocator type per class, as we can assign a allocator instance for each allocation. +To make memory allocation customizable, RapidJSON requires user to pass an instance of allocator, whenever an operation may require allocation. This design is more flexible than STL's allocator type per class, as we can assign an allocator instance for each allocation. -Therefore, when we assign a copy-string, we call this overloaded SetString() with allocator: +Therefore, when we assign a copy-string, we call this overloaded `SetString()` with allocator: ```cpp Document document; @@ -328,11 +332,11 @@ memset(buffer, 0, sizeof(buffer)); // author.GetString() still contains "Milo Yip" after buffer is destroyed ``` -In this example, we get the allocator from a Document instance. This is a common idiom when using rapidjson. But you may use other instances of allocator. +In this example, we get the allocator from a `Document` instance. This is a common idiom when using RapidJSON. But you may use other instances of allocator. -Besides, the above SetString() requires the length of a string. This can handle null characters within a string. There is another SetString() overloaded function without the length parameter. And it actually assumes the input is null-terminated and calls a strlen()-like function to obtain the length. +Besides, the above `SetString()` requires length. This can handle null characters within a string. There is another `SetString()` overloaded function without the length parameter. And it assumes the input is null-terminated and calls a `strlen()`-like function to obtain the length. -Finally, for literal string or string with safe life-cycle can use const-string version of SetString(), which are without alloactor parameter: +Finally, for literal string or string with safe life-cycle can use const-string version of `SetString()`, which lacks alloactor parameter: ```cpp Value s; @@ -341,7 +345,7 @@ s.SetString("rapidjson"); // slower, assumes null-terminated s = "rapidjson"; // shortcut, same as above ``` -### Manipulating Array +### Modify Array Value with array type provides similar APIs as `std::vector`. * `Clear()` @@ -359,7 +363,7 @@ Value a(kArrayType); Document::AllocatorType& allocator = document.GetAllocator(); for (int i = 5; i <= 10; i++) - a.PushBack(i, allocator); // allocator is needed for potentially realloc. + a.PushBack(i, allocator); // allocator is needed for potential realloc(). // Fluent interface a.PushBack("Lua", allocator).PushBack("Mio", allocator); @@ -367,7 +371,7 @@ a.PushBack("Lua", allocator).PushBack("Mio", allocator); Differs from STL, `PushBack()`/`PopBack()` returns the array reference itself. This is called fluent interface. -### Manipulating Object +### Modify Object Object is a collection of key-value pairs. Each key must be a string value. The way to manipulating object is to add/remove members: * `Value& AddMember(Value&, Value&, Allocator& allocator)` @@ -376,7 +380,7 @@ Object is a collection of key-value pairs. Each key must be a string value. The * `template Value& AddMember(const Ch*, T value, Allocator&)` * `bool RemoveMember(const Ch*)` -There are 4 overloaded version of AddMember(). They are 4 combinations for supplying the name string (copy- or const-), whether to supply a different allocator for name string, and whether use generic type for value. +There are 4 overloaded version of `AddMember()`. They are 4 combinations for supplying the name string (copy- or const-), whether to supply a different allocator for name string, and whether use generic type for value. Here is an example. @@ -386,9 +390,31 @@ contact.AddMember("name", "Milo", document.GetAllocator()); contact.AddMember("married", true, document.GetAllocator()); ``` -### Object +### Deep Copy Value +Although we mentioned that copying values implicitly may have performance problem, sometimes, explicit copying is needed. Threr are two APIs for deep copy: constructor with allocator and `CopyFrom()`. -### Array +```cpp +Document d; +Document::AllocatorType& a = d.GetAllocator(); +Value v1("foo"); +// Value v2(v1); // not allowed -### String +Value v2(v1, a); // make a copy +RAPIDJSON_ASSERT(v1.IsString()); // v1 untouched +d.SetArray().PushBack(v1, a).PushBack(v2, a); +RAPIDJSON_ASSERT(v1.IsNull() && v2.IsNull()); // both moved to d +v2.CopyFrom(d, a); // copy whole document to v2 +RAPIDJSON_ASSERT(d.IsArray() && d.Size() == 2); // d untouched +v1.SetObject().AddMember( "array", v2, a ); +d.PushBack(v1,a); +``` + +### Swap Values + +## What's next + +Stream +Encoding +DOM +SAX From 23318f2557cd18a07ce1ae401ff5c253422e6e6b Mon Sep 17 00:00:00 2001 From: Milo Yip Date: Thu, 3 Jul 2014 23:46:30 +0800 Subject: [PATCH 10/12] Complete tutorial draft --- doc/tutorial.md | 50 ++++++++++++++++++++++++++++++++----------------- 1 file changed, 33 insertions(+), 17 deletions(-) diff --git a/doc/tutorial.md b/doc/tutorial.md index ffe9fe6..dcad7f2 100644 --- a/doc/tutorial.md +++ b/doc/tutorial.md @@ -36,7 +36,7 @@ Document document; document.Parse(json); ``` -The JSON text is now parsed into `document` as a DOM tree: +The JSON text is now parsed into `document` as a *DOM tree*: ![tutorial](diagram/tutorial.png?raw=true) @@ -135,7 +135,7 @@ And other familar query functions: ### Quering Object -Similarly, we can iterate object members by iterator: +Similar to array, we can iterate object members by iterator: ```cpp static const char* kTypeNames[] = @@ -165,7 +165,7 @@ If we are unsure whether a member exists, we need to call `HasMember()` before c ```cpp Value::ConstMemberIterator itr = document.FindMember("hello"); -if (itr != 0) +if (itr != document.MemberEnd()) printf("%s %s\n", itr->value.GetString()); ``` @@ -259,6 +259,7 @@ Value a(kArrayType); ``` ### Move Semantics + A very special decision during design of RapidJSON is that, assignment of value does not copy the source value to destination value. Instead, the value from source is moved to the destination. For example, ```cpp @@ -308,7 +309,7 @@ Value o(kObjectType); ![move3](diagram/move3.png?raw=true) -This is called move assignment operator in C++11. As RapidJSON supports C++03, it adopts move semantics using normal copy constructor, assignment operator, and all other modifying function like `AddMember()`, `PushBack()`, which will be discussed soon. +This is called move assignment operator in C++11. As RapidJSON supports C++03, it adopts move semantics using assignment operator, and all other modifying function like `AddMember()`, `PushBack()`. ### Create String RapidJSON provide two strategies for storing string. @@ -375,13 +376,10 @@ Differs from STL, `PushBack()`/`PopBack()` returns the array reference itself. T Object is a collection of key-value pairs. Each key must be a string value. The way to manipulating object is to add/remove members: * `Value& AddMember(Value&, Value&, Allocator& allocator)` -* `Value& AddMember(const Ch*, Allocator&, GenericValue& value, Allocator&)` * `Value& AddMember(const Ch*, Value&, Allocator&)` * `template Value& AddMember(const Ch*, T value, Allocator&)` * `bool RemoveMember(const Ch*)` -There are 4 overloaded version of `AddMember()`. They are 4 combinations for supplying the name string (copy- or const-), whether to supply a different allocator for name string, and whether use generic type for value. - Here is an example. ```cpp @@ -391,7 +389,7 @@ contact.AddMember("married", true, document.GetAllocator()); ``` ### Deep Copy Value -Although we mentioned that copying values implicitly may have performance problem, sometimes, explicit copying is needed. Threr are two APIs for deep copy: constructor with allocator and `CopyFrom()`. +If we really need to copy a DOM tree, we can use two APIs for deep copy: constructor with allocator, and `CopyFrom()`. ```cpp Document d; @@ -399,22 +397,40 @@ Document::AllocatorType& a = d.GetAllocator(); Value v1("foo"); // Value v2(v1); // not allowed -Value v2(v1, a); // make a copy -RAPIDJSON_ASSERT(v1.IsString()); // v1 untouched +Value v2(v1, a); // make a copy +assert(v1.IsString()); // v1 untouched d.SetArray().PushBack(v1, a).PushBack(v2, a); -RAPIDJSON_ASSERT(v1.IsNull() && v2.IsNull()); // both moved to d +assert(v1.IsNull() && v2.IsNull()); // both moved to d -v2.CopyFrom(d, a); // copy whole document to v2 -RAPIDJSON_ASSERT(d.IsArray() && d.Size() == 2); // d untouched +v2.CopyFrom(d, a); // copy whole document to v2 +assert(d.IsArray() && d.Size() == 2); // d untouched v1.SetObject().AddMember( "array", v2, a ); d.PushBack(v1,a); ``` ### Swap Values +`Swap()` is also provided. + +```cpp +Value a(123); +Value b("Hello"); +a.Swap(b); +assert(a.IsString()); +assert(b.IsInt()); +``` + +Swapping two DOM trees is fast (constant time), despite the complexity of the tress. + ## What's next -Stream -Encoding -DOM -SAX +This tutorial shows the basics of DOM tree query and manipulation. There are several important concepts in RapidJSON: + +1. [Streams](stream.md) are channels for reading/writing JSON, which can be a in-memory string, or file stream, etc. Uesr can also create their streams. +2. [Encoding](encoding.md) defines which character set is used in streams and memory. RapidJSON also provide Unicode conversion/validation internally. +3. [DOM](dom.md)'s basics are already covered in this tutorial. Uncover more advanced features such as insitu-parsing, other parsing options and advanced usages. +4. [SAX](sax.md) is the foundation of parsing/generating facility in RapidJSON. Learn how to use `Reader`/`Writer` to implement even faster applications. Also try `PrettyWriter` to format the JSON. +5. [Performance](performance.md) shows some in-house and thirdparty benchmarks. +6. [Implementation](implementation.md) describes some internal designs and techniques of RapidJSON. + +You may also refer to the FAQ, API documentation, examples and unit tests. From 3e4e68b099cb4f1613755d8f8bae3d956713cdb5 Mon Sep 17 00:00:00 2001 From: Milo Yip Date: Fri, 4 Jul 2014 10:35:29 +0800 Subject: [PATCH 11/12] Rearrange diagrams and fix typos in tutorial --- doc/diagram/move1.dot | 19 +++++++++++++------ doc/diagram/move1.png | Bin 6513 -> 8181 bytes doc/diagram/move2.dot | 17 ++++++++--------- doc/diagram/move2.png | Bin 23536 -> 26753 bytes doc/diagram/move3.dot | 7 +++++-- doc/diagram/move3.png | Bin 22932 -> 22630 bytes doc/features.md | 6 +++--- doc/tutorial.md | 20 ++++++++++---------- 8 files changed, 39 insertions(+), 30 deletions(-) diff --git a/doc/diagram/move1.dot b/doc/diagram/move1.dot index e280212..a7c1464 100644 --- a/doc/diagram/move1.dot +++ b/doc/diagram/move1.dot @@ -5,7 +5,6 @@ digraph { margin="0,0" ranksep=0.2 penwidth=0.5 - forcelabels=true node [fontname="Inconsolata, Consolas", fontsize=10, penwidth=0.5] edge [fontname="Inconsolata, Consolas", fontsize=10, arrowhead=normal] @@ -19,10 +18,13 @@ digraph { node [shape=Mrecord, style=filled, colorscheme=spectral7] - b1 [label="{b:number|456}", fillcolor=6] - a1 [label="{a:number|123}", fillcolor=6] + { + rank = same + b1 [label="{b:number|456}", fillcolor=6] + a1 [label="{a:number|123}", fillcolor=6] + } - b1 -> a1 [style="dashed", constraint=false, label="Move"] + a1 -> b1 [style="dashed", label="Move", dir=back] } subgraph cluster2 { @@ -34,7 +36,12 @@ digraph { node [shape=Mrecord, style=filled, colorscheme=spectral7] - b2 [label="{b:null|}", fillcolor=1] - a2 [label="{a:number|456}", fillcolor=6] + { + rank = same + b2 [label="{b:null|}", fillcolor=1] + a2 [label="{a:number|456}", fillcolor=6] + } + a2 -> b2 [style=invis, dir=back] } + b1 -> b2 [style=invis] } \ No newline at end of file diff --git a/doc/diagram/move1.png b/doc/diagram/move1.png index 54053939aeb2a369f60b23a41bd501c68ac72952..bf4938dfecb90dede0f42df0c52e87ca7c16a417 100644 GIT binary patch literal 8181 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 xQ6QQh literal 6513 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 R@wNh>uB@e0u4w)4KLB3T`i}qr diff --git a/doc/diagram/move2.dot b/doc/diagram/move2.dot index 9c63162..7037ea6 100644 --- a/doc/diagram/move2.dot +++ b/doc/diagram/move2.dot @@ -5,7 +5,6 @@ digraph { margin="0,0" ranksep=0.2 penwidth=0.5 - forcelabels=true node [fontname="Inconsolata, Consolas", fontsize=10, penwidth=0.5] edge [fontname="Inconsolata, Consolas", fontsize=10, arrowhead=normal] @@ -13,7 +12,7 @@ digraph { subgraph cluster1 { margin="10,10" labeljust="left" - label = "Before Copying" + label = "Before Copying (Hypothetic)" style=filled fillcolor=gray95 @@ -24,27 +23,26 @@ digraph { c12 [label="{|}"] c13 [shape="none", label="...", style="solid"] o1 [label="{o:object|}", fillcolor=3] + ghost [label="{o:object|}", style=invis] - c1 -> o1 [style="dashed", constraint=false, label="AddMember"] + c1 -> o1 [style="dashed", label="AddMember", constraint=false] edge [arrowhead=vee] c1 -> { c11; c12; c13 } + o1 -> ghost [style=invis] } subgraph cluster2 { margin="10,10" labeljust="left" - label = "After Copying" + label = "After Copying (Hypothetic)" style=filled fillcolor=gray95 node [shape=Mrecord, style=filled, colorscheme=spectral7] - { - rank = same - c2 [label="{contact:array|}", fillcolor=4] - c3 [label="{array|}", fillcolor=4] - } + c2 [label="{contact:array|}", fillcolor=4] + c3 [label="{array|}", fillcolor=4] c21 [label="{|}"] c22 [label="{|}"] c23 [shape=none, label="...", style="solid"] @@ -60,4 +58,5 @@ digraph { cs -> c3 [arrowhead=none] c3 -> { c31; c32; c33 } } + ghost -> o2 [style=invis] } \ No newline at end of file diff --git a/doc/diagram/move2.png b/doc/diagram/move2.png index a65966ec9e4a1a1793e519c55a0c7cc29f92c2f2..1d1f0bf532159dfb61bb28b2029de593383bb8f7 100644 GIT binary patch literal 26753 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 V32%I)nT_&*Vrywnzhusc{2!y7PWJ!+ literal 23536 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 z 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 anv~oeUXj}u&-cNf5Ox`u>KE%ep8YrU-&Mf? diff --git a/doc/diagram/move3.dot b/doc/diagram/move3.dot index 4c2177d..c197b99 100644 --- a/doc/diagram/move3.dot +++ b/doc/diagram/move3.dot @@ -22,13 +22,15 @@ digraph { c1 [label="{contact:array|}", fillcolor=4] c11 [label="{|}"] c12 [label="{|}"] - c13 [shape=none, label="...", style="none"] + c13 [shape=none, label="...", style="solid"] o1 [label="{o:object|}", fillcolor=3] + ghost [label="{o:object|}", style=invis] c1 -> o1 [style="dashed", constraint=false, label="AddMember"] edge [arrowhead=vee] c1 -> { c11; c12; c13 } + o1 -> ghost [style=invis] } subgraph cluster2 { @@ -40,7 +42,6 @@ digraph { node [shape=Mrecord, style=filled, colorscheme=spectral7] - rank = same c2 [label="{contact:null|}", fillcolor=1] c3 [label="{array|}", fillcolor=4] c21 [label="{|}"] @@ -48,10 +49,12 @@ digraph { c23 [shape="none", label="...", style="solid"] o2 [label="{o:object|}", fillcolor=3] cs [label="{string|\"contact\"}", fillcolor=5] + c2 -> o2 [style="dashed", constraint=false, label="AddMember", style=invis] edge [arrowhead=vee] c3 -> { c21; c22; c23 } o2 -> cs cs -> c3 [arrowhead=none] } + ghost -> o2 [style=invis] } \ No newline at end of file diff --git a/doc/diagram/move3.png b/doc/diagram/move3.png index f666acad9778897ad4410fb6403b635fa398509d..a52ad46de7ae75df223a7a03ece5a78fa82f6d92 100644 GIT binary patch literal 22630 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 B_q6~3 literal 22932 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 X(UsKK_3zPUnP6gQwm-|@GetInt()); ``` -And other familar query functions: +And other familiar query functions: * `SizeType Capacity() const` * `bool Empty() const` -### Quering Object +### Query Object Similar to array, we can iterate object members by iterator: @@ -196,7 +196,7 @@ Checking | Obtaining `bool IsInt64()` | `int64_t GetInt64()` `bool IsDouble()` | `double GetDouble()` -Note that, an integer value may be obtained in various ways without conversion. For example, A value `x` containing 123 will make `x.IsInt() == x.IsUint() == x.IsInt64() == x.IsUint64() == ture`. But a value `y` containing -3000000000 will only makes `x.IsInt64() == true`. +Note that, an integer value may be obtained in various ways without conversion. For example, A value `x` containing 123 will make `x.IsInt() == x.IsUint() == x.IsInt64() == x.IsUint64() == true`. But a value `y` containing -3000000000 will only makes `x.IsInt64() == true`. When obtaining the numeric values, `GetDouble()` will convert internal integer representation to a `double`. Note that, `int` and `uint` can be safely convert to `double`, but `int64_t` and `uint64_t` may lose precision (since mantissa of `double` is only 52-bits). @@ -204,7 +204,7 @@ When obtaining the numeric values, `GetDouble()` will convert internal integer r In addition to `GetString()`, the `Value` class also contains `GetStringLength()`. Here explains why. -According to RFC 4627, JSON strings can contain unicode character `U+0000`, which must be escaped as `"\u0000"`. The problem is that, C/C++ often uses null-terminated string, which treats ``\0'` as the terminator symbol. +According to RFC 4627, JSON strings can contain Unicode character `U+0000`, which must be escaped as `"\u0000"`. The problem is that, C/C++ often uses null-terminated string, which treats ``\0'` as the terminator symbol. To conform RFC 4627, RapidJSON supports string containing `U+0000`. If you need to handle this, you can use `GetStringLength()` API to obtain the correct length of string. @@ -337,7 +337,7 @@ In this example, we get the allocator from a `Document` instance. This is a comm Besides, the above `SetString()` requires length. This can handle null characters within a string. There is another `SetString()` overloaded function without the length parameter. And it assumes the input is null-terminated and calls a `strlen()`-like function to obtain the length. -Finally, for literal string or string with safe life-cycle can use const-string version of `SetString()`, which lacks alloactor parameter: +Finally, for literal string or string with safe life-cycle can use const-string version of `SetString()`, which lacks allocator parameter: ```cpp Value s; @@ -426,11 +426,11 @@ Swapping two DOM trees is fast (constant time), despite the complexity of the tr This tutorial shows the basics of DOM tree query and manipulation. There are several important concepts in RapidJSON: -1. [Streams](stream.md) are channels for reading/writing JSON, which can be a in-memory string, or file stream, etc. Uesr can also create their streams. +1. [Streams](stream.md) are channels for reading/writing JSON, which can be a in-memory string, or file stream, etc. User can also create their streams. 2. [Encoding](encoding.md) defines which character set is used in streams and memory. RapidJSON also provide Unicode conversion/validation internally. -3. [DOM](dom.md)'s basics are already covered in this tutorial. Uncover more advanced features such as insitu-parsing, other parsing options and advanced usages. +3. [DOM](dom.md)'s basics are already covered in this tutorial. Uncover more advanced features such as *in situ* parsing, other parsing options and advanced usages. 4. [SAX](sax.md) is the foundation of parsing/generating facility in RapidJSON. Learn how to use `Reader`/`Writer` to implement even faster applications. Also try `PrettyWriter` to format the JSON. -5. [Performance](performance.md) shows some in-house and thirdparty benchmarks. +5. [Performance](performance.md) shows some in-house and third-party benchmarks. 6. [Implementation](implementation.md) describes some internal designs and techniques of RapidJSON. You may also refer to the FAQ, API documentation, examples and unit tests. From 99ea434eef9da265e4125e138476eb45971aa3a4 Mon Sep 17 00:00:00 2001 From: Milo Yip Date: Fri, 4 Jul 2014 10:36:15 +0800 Subject: [PATCH 12/12] Typo in readme --- readme.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/readme.md b/readme.md index fb06812..6c1fa80 100644 --- a/readme.md +++ b/readme.md @@ -16,7 +16,7 @@ RapidJSON is a JSON parser and generator for C++. It was inspired by [rapidxml]( * RapidJSON is memory friendly. Each JSON value occupies exactly 16/20 bytes for most 32/64-bit machines (excluding text string). By default it uses a fast memory allocator, and the parser allocates memory compactly during parsing. -* RapidJSON is Unicode friendly. It supports UTF-8, UTF-16, UTF-32 (LE & BE), and their detection, validataton and transcoding internally. For example, you can read a UTF-8 file and let RapidJSON transcode the JSON strings into UTF-16 in the DOM. It also supports surrogates and "\u0000" (null character). +* RapidJSON is Unicode friendly. It supports UTF-8, UTF-16, UTF-32 (LE & BE), and their detection, validation and transcoding internally. For example, you can read a UTF-8 file and let RapidJSON transcode the JSON strings into UTF-16 in the DOM. It also supports surrogates and "\u0000" (null character). More features can be read [here](doc/features.md). @@ -82,10 +82,10 @@ int main() { } ``` -Note that this exmample did not handle potential errors. +Note that this example did not handle potential errors. The following diagram shows the process. ![simpledom](doc/diagram/simpledom.png?raw=true) -More [examples](example/) are avaliable. +More [examples](example/) are available.