Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/miloyip/rapidjson.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/zh-cn
diff options
context:
space:
mode:
Diffstat (limited to 'zh-cn')
-rw-r--r--zh-cn/allocators_8h_source.html4
-rw-r--r--zh-cn/biginteger_8h_source.html2
-rw-r--r--zh-cn/document_8h_source.html323
-rw-r--r--zh-cn/fwd_8h_source.html14
-rw-r--r--zh-cn/globals.html3
-rw-r--r--zh-cn/globals_defs.html3
-rw-r--r--zh-cn/group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html25
-rw-r--r--zh-cn/group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.js1
-rw-r--r--zh-cn/ieee754_8h_source.html2
-rw-r--r--zh-cn/meta_8h_source.html4
-rw-r--r--zh-cn/navtreedata.js2
-rw-r--r--zh-cn/navtreeindex3.js34
-rw-r--r--zh-cn/navtreeindex4.js3
-rw-r--r--zh-cn/pointer_8h_source.html16
-rw-r--r--zh-cn/prettywriter_8h_source.html16
-rw-r--r--zh-cn/rapidjson_8h.html6
-rw-r--r--zh-cn/rapidjson_8h.js2
-rw-r--r--zh-cn/rapidjson_8h_source.html16
-rw-r--r--zh-cn/reader_8h_source.html2
-rw-r--r--zh-cn/regex_8h_source.html4
-rw-r--r--zh-cn/schema_8h_source.html42
-rw-r--r--zh-cn/search/all_f.js1
-rw-r--r--zh-cn/stack_8h_source.html4
-rw-r--r--zh-cn/writer_8h_source.html16
24 files changed, 290 insertions, 255 deletions
diff --git a/zh-cn/allocators_8h_source.html b/zh-cn/allocators_8h_source.html
index 082d4c43..7720d2ee 100644
--- a/zh-cn/allocators_8h_source.html
+++ b/zh-cn/allocators_8h_source.html
@@ -88,10 +88,10 @@ $(document).ready(function(){initNavTree('allocators_8h_source.html','');});
<div class="ttc" id="classrapidjson_1_1_memory_pool_allocator_html_aa050d52c62503ca6d6f66289ce83a18e"><div class="ttname"><a href="classrapidjson_1_1_memory_pool_allocator.html#aa050d52c62503ca6d6f66289ce83a18e">rapidjson::MemoryPoolAllocator::Clear</a></div><div class="ttdeci">void Clear()</div><div class="ttdoc">Deallocates all memory chunks, excluding the user-supplied buffer. </div><div class="ttdef"><b>Definition:</b> allocators.h:158</div></div>
<div class="ttc" id="classrapidjson_1_1_memory_pool_allocator_html_a59d783f4feba17dcd35d9f25fcbc09f4"><div class="ttname"><a href="classrapidjson_1_1_memory_pool_allocator.html#a59d783f4feba17dcd35d9f25fcbc09f4">rapidjson::MemoryPoolAllocator::MemoryPoolAllocator</a></div><div class="ttdeci">MemoryPoolAllocator(size_t chunkSize=kDefaultChunkCapacity, BaseAllocator *baseAllocator=0)</div><div class="ttdoc">Constructor with chunkSize. </div><div class="ttdef"><b>Definition:</b> allocators.h:123</div></div>
<div class="ttc" id="classrapidjson_1_1_crt_allocator_html"><div class="ttname"><a href="classrapidjson_1_1_crt_allocator.html">rapidjson::CrtAllocator</a></div><div class="ttdoc">C-runtime library allocator. </div><div class="ttdef"><b>Definition:</b> allocators.h:75</div></div>
-<div class="ttc" id="rapidjson_8h_html_abdc7cd7902748ffe6626d71c59a73c3b"><div class="ttname"><a href="rapidjson_8h.html#abdc7cd7902748ffe6626d71c59a73c3b">RAPIDJSON_NEW</a></div><div class="ttdeci">#define RAPIDJSON_NEW(TypeName)</div><div class="ttdoc">! customization point for global new </div><div class="ttdef"><b>Definition:</b> rapidjson.h:614</div></div>
+<div class="ttc" id="rapidjson_8h_html_abdc7cd7902748ffe6626d71c59a73c3b"><div class="ttname"><a href="rapidjson_8h.html#abdc7cd7902748ffe6626d71c59a73c3b">RAPIDJSON_NEW</a></div><div class="ttdeci">#define RAPIDJSON_NEW(TypeName)</div><div class="ttdoc">! customization point for global new </div><div class="ttdef"><b>Definition:</b> rapidjson.h:625</div></div>
<div class="ttc" id="classrapidjson_1_1_memory_pool_allocator_html_a208c29e04b1d748bfe068444b7044344"><div class="ttname"><a href="classrapidjson_1_1_memory_pool_allocator.html#a208c29e04b1d748bfe068444b7044344">rapidjson::MemoryPoolAllocator::Malloc</a></div><div class="ttdeci">void * Malloc(size_t size)</div><div class="ttdoc">Allocates a memory block. (concept Allocator) </div><div class="ttdef"><b>Definition:</b> allocators.h:189</div></div>
<div class="ttc" id="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g_html_ga583915242504c7fdb36e826f02f76242"><div class="ttname"><a href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga583915242504c7fdb36e826f02f76242">RAPIDJSON_ALIGN</a></div><div class="ttdeci">#define RAPIDJSON_ALIGN(x)</div><div class="ttdoc">Data alignment of the machine. </div><div class="ttdef"><b>Definition:</b> rapidjson.h:276</div></div>
-<div class="ttc" id="rapidjson_8h_html_a52c941c3fdd646527cdcd42aa846a28a"><div class="ttname"><a href="rapidjson_8h.html#a52c941c3fdd646527cdcd42aa846a28a">RAPIDJSON_DELETE</a></div><div class="ttdeci">#define RAPIDJSON_DELETE(x)</div><div class="ttdoc">! customization point for global delete </div><div class="ttdef"><b>Definition:</b> rapidjson.h:618</div></div>
+<div class="ttc" id="rapidjson_8h_html_a52c941c3fdd646527cdcd42aa846a28a"><div class="ttname"><a href="rapidjson_8h.html#a52c941c3fdd646527cdcd42aa846a28a">RAPIDJSON_DELETE</a></div><div class="ttdeci">#define RAPIDJSON_DELETE(x)</div><div class="ttdoc">! customization point for global delete </div><div class="ttdef"><b>Definition:</b> rapidjson.h:629</div></div>
<div class="ttc" id="rapidjson_8h_html"><div class="ttname"><a href="rapidjson_8h.html">rapidjson.h</a></div><div class="ttdoc">common definitions and configuration </div></div>
<div class="ttc" id="classrapidjson_1_1_memory_pool_allocator_html_aa08b368c54e7643fcd23ef55139b9b40"><div class="ttname"><a href="classrapidjson_1_1_memory_pool_allocator.html#aa08b368c54e7643fcd23ef55139b9b40">rapidjson::MemoryPoolAllocator::Size</a></div><div class="ttdeci">size_t Size() const</div><div class="ttdoc">Computes the memory blocks allocated. </div><div class="ttdef"><b>Definition:</b> allocators.h:181</div></div>
<div class="ttc" id="classrapidjson_1_1_memory_pool_allocator_html"><div class="ttname"><a href="classrapidjson_1_1_memory_pool_allocator.html">rapidjson::MemoryPoolAllocator</a></div><div class="ttdoc">Default memory allocator used by the parser and DOM. </div><div class="ttdef"><b>Definition:</b> allocators.h:115</div></div>
diff --git a/zh-cn/biginteger_8h_source.html b/zh-cn/biginteger_8h_source.html
index 981ab3e6..b934f917 100644
--- a/zh-cn/biginteger_8h_source.html
+++ b/zh-cn/biginteger_8h_source.html
@@ -82,7 +82,7 @@ $(document).ready(function(){initNavTree('biginteger_8h_source.html','');});
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">// Tencent is pleased to support the open source community by making RapidJSON available.</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">// </span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">// Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved.</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment">// Licensed under the MIT License (the &quot;License&quot;); you may not use this file except</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment">// in compliance with the License. You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment">// http://opensource.org/licenses/MIT</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment">// Unless required by applicable law or agreed to in writing, software distributed </span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment">// under the License is distributed on an &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR </span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment">// CONDITIONS OF ANY KIND, either express or implied. See the License for the </span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment">// specific language governing permissions and limitations under the License.</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;</div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#ifndef RAPIDJSON_BIGINTEGER_H_</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#define RAPIDJSON_BIGINTEGER_H_</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#include &quot;../rapidjson.h&quot;</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#if defined(_MSC_VER) &amp;&amp; !__INTEL_COMPILER &amp;&amp; defined(_M_AMD64)</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="preprocessor">#include &lt;intrin.h&gt;</span> <span class="comment">// for _umul128</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="preprocessor">#pragma intrinsic(_umul128)</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;RAPIDJSON_NAMESPACE_BEGIN</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="keyword">namespace </span>internal {</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="keyword">class </span>BigInteger {</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keyword">typedef</span> uint64_t <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">Type</a>;</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; BigInteger(<span class="keyword">const</span> BigInteger&amp; rhs) : count_(rhs.count_) {</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; std::memcpy(digits_, rhs.digits_, count_ * <span class="keyword">sizeof</span>(Type));</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; }</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keyword">explicit</span> BigInteger(uint64_t u) : count_(1) {</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; digits_[0] = u;</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; }</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; BigInteger(<span class="keyword">const</span> <span class="keywordtype">char</span>* decimals, <span class="keywordtype">size_t</span> length) : count_(1) {</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(length &gt; 0);</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; digits_[0] = 0;</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keywordtype">size_t</span> i = 0;</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keyword">const</span> <span class="keywordtype">size_t</span> kMaxDigitPerIteration = 19; <span class="comment">// 2^64 = 18446744073709551616 &gt; 10^19</span></div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keywordflow">while</span> (length &gt;= kMaxDigitPerIteration) {</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; AppendDecimal64(decimals + i, decimals + i + kMaxDigitPerIteration);</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; length -= kMaxDigitPerIteration;</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; i += kMaxDigitPerIteration;</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; }</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keywordflow">if</span> (length &gt; 0)</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; AppendDecimal64(decimals + i, decimals + i + length);</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; }</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; </div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; BigInteger&amp; operator=(<span class="keyword">const</span> BigInteger &amp;rhs)</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; {</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">this</span> != &amp;rhs) {</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; count_ = rhs.count_;</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; std::memcpy(digits_, rhs.digits_, count_ * <span class="keyword">sizeof</span>(Type));</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; }</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; }</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; </div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; BigInteger&amp; operator=(uint64_t u) {</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; digits_[0] = u; </div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; count_ = 1;</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; }</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; BigInteger&amp; operator+=(uint64_t u) {</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; Type backup = digits_[0];</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; digits_[0] += u;</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; count_ - 1; i++) {</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keywordflow">if</span> (digits_[i] &gt;= backup)</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>; <span class="comment">// no carry</span></div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; backup = digits_[i + 1];</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; digits_[i + 1] += 1;</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; }</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="comment">// Last carry</span></div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="keywordflow">if</span> (digits_[count_ - 1] &lt; backup)</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; PushBack(1);</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; }</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160;</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; BigInteger&amp; operator*=(uint64_t u) {</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="keywordflow">if</span> (u == 0) <span class="keywordflow">return</span> *<span class="keyword">this</span> = 0;</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="keywordflow">if</span> (u == 1) <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="keywordflow">if</span> (*<span class="keyword">this</span> == 1) <span class="keywordflow">return</span> *<span class="keyword">this</span> = u;</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; uint64_t k = 0;</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; count_; i++) {</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; uint64_t hi;</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; digits_[i] = MulAdd64(digits_[i], u, k, &amp;hi);</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; k = hi;</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; }</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; </div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="keywordflow">if</span> (k &gt; 0)</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; PushBack(k);</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160;</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; }</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160;</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; BigInteger&amp; operator*=(uint32_t u) {</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="keywordflow">if</span> (u == 0) <span class="keywordflow">return</span> *<span class="keyword">this</span> = 0;</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <span class="keywordflow">if</span> (u == 1) <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <span class="keywordflow">if</span> (*<span class="keyword">this</span> == 1) <span class="keywordflow">return</span> *<span class="keyword">this</span> = u;</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160;</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; uint64_t k = 0;</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; count_; i++) {</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="keyword">const</span> uint64_t c = digits_[i] &gt;&gt; 32;</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <span class="keyword">const</span> uint64_t d = digits_[i] &amp; 0xFFFFFFFF;</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="keyword">const</span> uint64_t uc = u * c;</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <span class="keyword">const</span> uint64_t ud = u * d;</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="keyword">const</span> uint64_t p0 = ud + k;</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <span class="keyword">const</span> uint64_t p1 = uc + (p0 &gt;&gt; 32);</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; digits_[i] = (p0 &amp; 0xFFFFFFFF) | (p1 &lt;&lt; 32);</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; k = p1 &gt;&gt; 32;</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; }</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; </div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <span class="keywordflow">if</span> (k &gt; 0)</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; PushBack(k);</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160;</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; }</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160;</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; BigInteger&amp; operator&lt;&lt;=(<span class="keywordtype">size_t</span> shift) {</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <span class="keywordflow">if</span> (IsZero() || shift == 0) <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160;</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="keywordtype">size_t</span> offset = shift / kTypeBit;</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <span class="keywordtype">size_t</span> interShift = shift % kTypeBit;</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(count_ + offset &lt;= kCapacity);</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160;</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <span class="keywordflow">if</span> (interShift == 0) {</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; std::memmove(digits_ + offset, digits_, count_ * <span class="keyword">sizeof</span>(Type));</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; count_ += offset;</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; }</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <span class="keywordflow">else</span> {</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; digits_[count_] = 0;</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = count_; i &gt; 0; i--)</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; digits_[i + offset] = (digits_[i] &lt;&lt; interShift) | (digits_[i - 1] &gt;&gt; (kTypeBit - interShift));</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; digits_[offset] = digits_[0] &lt;&lt; interShift;</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; count_ += offset;</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <span class="keywordflow">if</span> (digits_[count_])</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; count_++;</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; }</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160;</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; std::memset(digits_, 0, offset * <span class="keyword">sizeof</span>(Type));</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160;</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; }</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160;</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <span class="keywordtype">bool</span> operator==(<span class="keyword">const</span> BigInteger&amp; rhs)<span class="keyword"> const </span>{</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <span class="keywordflow">return</span> count_ == rhs.count_ &amp;&amp; std::memcmp(digits_, rhs.digits_, count_ * <span class="keyword">sizeof</span>(Type)) == 0;</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; }</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160;</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; <span class="keywordtype">bool</span> operator==(<span class="keyword">const</span> Type rhs)<span class="keyword"> const </span>{</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <span class="keywordflow">return</span> count_ == 1 &amp;&amp; digits_[0] == rhs;</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; }</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160;</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; BigInteger&amp; MultiplyPow5(<span class="keywordtype">unsigned</span> exp) {</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> uint32_t kPow5[12] = {</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; 5,</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; 5 * 5,</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; 5 * 5 * 5,</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; 5 * 5 * 5 * 5,</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; 5 * 5 * 5 * 5 * 5,</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; 5 * 5 * 5 * 5 * 5 * 5,</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; 5 * 5 * 5 * 5 * 5 * 5 * 5,</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5,</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5,</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5,</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5,</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; };</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <span class="keywordflow">if</span> (exp == 0) <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; <span class="keywordflow">for</span> (; exp &gt;= 27; exp -= 27) *<span class="keyword">this</span> *= <a class="code" href="rapidjson_8h.html#aaee1245f375a71be1ac9b8a07ba5fb8f">RAPIDJSON_UINT64_C2</a>(0X6765C793, 0XFA10079D); <span class="comment">// 5^27</span></div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; <span class="keywordflow">for</span> (; exp &gt;= 13; exp -= 13) *<span class="keyword">this</span> *= static_cast&lt;uint32_t&gt;(1220703125u); <span class="comment">// 5^13</span></div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; <span class="keywordflow">if</span> (exp &gt; 0) *<span class="keyword">this</span> *= kPow5[exp - 1];</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; }</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160;</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; <span class="comment">// Compute absolute difference of this and rhs.</span></div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; <span class="comment">// Assume this != rhs</span></div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; <span class="keywordtype">bool</span> Difference(<span class="keyword">const</span> BigInteger&amp; rhs, BigInteger* out)<span class="keyword"> const </span>{</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; <span class="keywordtype">int</span> cmp = Compare(rhs);</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(cmp != 0);</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; <span class="keyword">const</span> BigInteger *a, *b; <span class="comment">// Makes a &gt; b</span></div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <span class="keywordtype">bool</span> ret;</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; <span class="keywordflow">if</span> (cmp &lt; 0) { a = &amp;rhs; b = <span class="keyword">this</span>; ret = <span class="keyword">true</span>; }</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; <span class="keywordflow">else</span> { a = <span class="keyword">this</span>; b = &amp;rhs; ret = <span class="keyword">false</span>; }</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160;</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; Type borrow = 0;</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; a-&gt;count_; i++) {</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; Type d = a-&gt;digits_[i] - borrow;</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; <span class="keywordflow">if</span> (i &lt; b-&gt;count_)</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; d -= b-&gt;digits_[i];</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; borrow = (d &gt; a-&gt;digits_[i]) ? 1 : 0;</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; out-&gt;digits_[i] = d;</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; <span class="keywordflow">if</span> (d != 0)</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; out-&gt;count_ = i + 1;</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; }</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160;</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; <span class="keywordflow">return</span> ret;</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; }</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160;</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; <span class="keywordtype">int</span> Compare(<span class="keyword">const</span> BigInteger&amp; rhs)<span class="keyword"> const </span>{</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <span class="keywordflow">if</span> (count_ != rhs.count_)</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; <span class="keywordflow">return</span> count_ &lt; rhs.count_ ? -1 : 1;</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160;</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = count_; i-- &gt; 0;)</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; <span class="keywordflow">if</span> (digits_[i] != rhs.digits_[i])</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; <span class="keywordflow">return</span> digits_[i] &lt; rhs.digits_[i] ? -1 : 1;</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160;</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; }</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160;</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; <span class="keywordtype">size_t</span> GetCount()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> count_; }</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; Type GetDigit(<span class="keywordtype">size_t</span> index)<span class="keyword"> const </span>{ <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(index &lt; count_); <span class="keywordflow">return</span> digits_[index]; }</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; <span class="keywordtype">bool</span> IsZero()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> count_ == 1 &amp;&amp; digits_[0] == 0; }</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160;</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <span class="keywordtype">void</span> AppendDecimal64(<span class="keyword">const</span> <span class="keywordtype">char</span>* begin, <span class="keyword">const</span> <span class="keywordtype">char</span>* end) {</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; uint64_t u = ParseUint64(begin, end);</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <span class="keywordflow">if</span> (IsZero())</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; *<span class="keyword">this</span> = u;</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; <span class="keywordflow">else</span> {</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; <span class="keywordtype">unsigned</span> exp = <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span><span class="keyword">&gt;</span>(end - begin);</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; (MultiplyPow5(exp) &lt;&lt;= exp) += u; <span class="comment">// *this = *this * 10^exp + u</span></div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; }</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; }</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160;</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <span class="keywordtype">void</span> PushBack(Type digit) {</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(count_ &lt; kCapacity);</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; digits_[count_++] = digit;</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; }</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160;</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; <span class="keyword">static</span> uint64_t ParseUint64(<span class="keyword">const</span> <span class="keywordtype">char</span>* begin, <span class="keyword">const</span> <span class="keywordtype">char</span>* end) {</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; uint64_t r = 0;</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keywordtype">char</span>* p = begin; p != end; ++p) {</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(*p &gt;= <span class="charliteral">&#39;0&#39;</span> &amp;&amp; *p &lt;= <span class="charliteral">&#39;9&#39;</span>);</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; r = r * 10u + <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span><span class="keyword">&gt;</span>(*p - <span class="charliteral">&#39;0&#39;</span>);</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; }</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; <span class="keywordflow">return</span> r;</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; }</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160;</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <span class="comment">// Assume a * b + k &lt; 2^128</span></div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; <span class="keyword">static</span> uint64_t MulAdd64(uint64_t a, uint64_t b, uint64_t k, uint64_t* outHigh) {</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160;<span class="preprocessor">#if defined(_MSC_VER) &amp;&amp; defined(_M_AMD64)</span></div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; uint64_t low = _umul128(a, b, outHigh) + k;</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; <span class="keywordflow">if</span> (low &lt; k)</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; (*outHigh)++;</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; <span class="keywordflow">return</span> low;</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160;<span class="preprocessor">#elif (__GNUC__ &gt; 4 || (__GNUC__ == 4 &amp;&amp; __GNUC_MINOR__ &gt;= 6)) &amp;&amp; defined(__x86_64__)</span></div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; __extension__ <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> __int128 uint128;</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; uint128 p = <span class="keyword">static_cast&lt;</span>uint128<span class="keyword">&gt;</span>(a) * static_cast&lt;uint128&gt;(b);</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; p += k;</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; *outHigh = <span class="keyword">static_cast&lt;</span>uint64_t<span class="keyword">&gt;</span>(p &gt;&gt; 64);</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span>uint64_t<span class="keyword">&gt;</span>(p);</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; <span class="keyword">const</span> uint64_t a0 = a &amp; 0xFFFFFFFF, a1 = a &gt;&gt; 32, b0 = b &amp; 0xFFFFFFFF, b1 = b &gt;&gt; 32;</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; uint64_t x0 = a0 * b0, x1 = a0 * b1, x2 = a1 * b0, x3 = a1 * b1;</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; x1 += (x0 &gt;&gt; 32); <span class="comment">// can&#39;t give carry</span></div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; x1 += x2;</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; <span class="keywordflow">if</span> (x1 &lt; x2)</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; x3 += (<span class="keyword">static_cast&lt;</span>uint64_t<span class="keyword">&gt;</span>(1) &lt;&lt; 32);</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; uint64_t lo = (x1 &lt;&lt; 32) + (x0 &amp; 0xFFFFFFFF);</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; uint64_t hi = x3 + (x1 &gt;&gt; 32);</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160;</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; lo += k;</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; <span class="keywordflow">if</span> (lo &lt; k)</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; hi++;</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; *outHigh = hi;</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; <span class="keywordflow">return</span> lo;</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; }</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160;</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">size_t</span> kBitCount = 3328; <span class="comment">// 64bit * 54 &gt; 10^1000</span></div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">size_t</span> kCapacity = kBitCount / <span class="keyword">sizeof</span>(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">Type</a>);</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">size_t</span> kTypeBit = <span class="keyword">sizeof</span>(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">Type</a>) * 8;</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160;</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; Type digits_[kCapacity];</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; <span class="keywordtype">size_t</span> count_;</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160;};</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160;</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160;} <span class="comment">// namespace internal</span></div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160;RAPIDJSON_NAMESPACE_END</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160;</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160;<span class="preprocessor">#endif // RAPIDJSON_BIGINTEGER_H_</span></div><div class="ttc" id="rapidjson_8h_html_aaee1245f375a71be1ac9b8a07ba5fb8f"><div class="ttname"><a href="rapidjson_8h.html#aaee1245f375a71be1ac9b8a07ba5fb8f">RAPIDJSON_UINT64_C2</a></div><div class="ttdeci">#define RAPIDJSON_UINT64_C2(high32, low32)</div><div class="ttdoc">Construct a 64-bit literal by a pair of 32-bit integer. </div><div class="ttdef"><b>Definition:</b> rapidjson.h:289</div></div>
-<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">rapidjson::Type</a></div><div class="ttdeci">Type</div><div class="ttdoc">Type of JSON value </div><div class="ttdef"><b>Definition:</b> rapidjson.h:631</div></div>
+<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">rapidjson::Type</a></div><div class="ttdeci">Type</div><div class="ttdoc">Type of JSON value </div><div class="ttdef"><b>Definition:</b> rapidjson.h:642</div></div>
<div class="ttc" id="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g_html_gabeba18d612187bad2ac62aed9276d47c"><div class="ttname"><a href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a></div><div class="ttdeci">#define RAPIDJSON_ASSERT(x)</div><div class="ttdoc">Assertion. </div><div class="ttdef"><b>Definition:</b> rapidjson.h:406</div></div>
</div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->
diff --git a/zh-cn/document_8h_source.html b/zh-cn/document_8h_source.html
index acb2ba01..b3e63ed6 100644
--- a/zh-cn/document_8h_source.html
+++ b/zh-cn/document_8h_source.html
@@ -81,183 +81,184 @@ $(document).ready(function(){initNavTree('document_8h_source.html','');});
<div class="title">document.h</div> </div>
</div><!--header-->
<div class="contents">
-<a href="document_8h.html">浏览该文件的文档.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">// Tencent is pleased to support the open source community by making RapidJSON available.</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">// </span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">// Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved.</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment">// Licensed under the MIT License (the &quot;License&quot;); you may not use this file except</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment">// in compliance with the License. You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment">// http://opensource.org/licenses/MIT</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment">// Unless required by applicable law or agreed to in writing, software distributed </span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment">// under the License is distributed on an &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR </span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment">// CONDITIONS OF ANY KIND, either express or implied. See the License for the </span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment">// specific language governing permissions and limitations under the License.</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;</div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#ifndef RAPIDJSON_DOCUMENT_H_</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#define RAPIDJSON_DOCUMENT_H_</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment">/*! \file document.h */</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="reader_8h.html">reader.h</a>&quot;</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="preprocessor">#include &quot;internal/meta.h&quot;</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="preprocessor">#include &quot;internal/strfunc.h&quot;</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#include &quot;memorystream.h&quot;</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#include &quot;encodedstream.h&quot;</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor">#include &lt;new&gt;</span> <span class="comment">// placement new</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#include &lt;limits&gt;</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;RAPIDJSON_DIAG_PUSH</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="preprocessor">#ifdef __clang__</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;RAPIDJSON_DIAG_OFF(padded)</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;RAPIDJSON_DIAG_OFF(<span class="keywordflow">switch</span>-<span class="keyword">enum</span>)</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;RAPIDJSON_DIAG_OFF(c++98-compat)</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="preprocessor">#elif defined(_MSC_VER)</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;RAPIDJSON_DIAG_OFF(4127) <span class="comment">// conditional expression is constant</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;RAPIDJSON_DIAG_OFF(4244) <span class="comment">// conversion from kXxxFlags to &#39;uint16_t&#39;, possible loss of data</span></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;<span class="preprocessor">#ifdef __GNUC__</span></div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;RAPIDJSON_DIAG_OFF(effc++)</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;<span class="preprocessor">#if __GNUC__ &gt;= 6</span></div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;RAPIDJSON_DIAG_OFF(terminate) <span class="comment">// ignore throwing RAPIDJSON_ASSERT in RAPIDJSON_NOEXCEPT functions</span></div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;<span class="preprocessor">#endif // __GNUC__</span></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;<span class="preprocessor">#ifndef RAPIDJSON_NOMEMBERITERATORCLASS</span></div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;<span class="preprocessor">#include &lt;iterator&gt;</span> <span class="comment">// std::random_access_iterator_tag</span></div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;<span class="preprocessor">#include &lt;utility&gt;</span> <span class="comment">// std::move</span></div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;RAPIDJSON_NAMESPACE_BEGIN</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;<span class="comment">// Forward declaration.</span></div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> Encoding, <span class="keyword">typename</span> Allocator&gt;</div><div class="line"><a name="l00057"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html"> 57</a></span>&#160;<span class="keyword">class </span><a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>;</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> Encoding, <span class="keyword">typename</span> Allocator, <span class="keyword">typename</span> StackAllocator&gt;</div><div class="line"><a name="l00060"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_document.html"> 60</a></span>&#160;<span class="keyword">class </span><a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>;</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;<span class="comment">//! Name-value pair in a JSON object value.</span></div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;<span class="comment"></span><span class="comment">/*!</span></div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;<span class="comment"> This class was internal to GenericValue. It used to be a inner struct.</span></div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;<span class="comment"> But a compiler (IBM XL C/C++ for AIX) have reported to have problem with that so it moved as a namespace scope struct.</span></div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;<span class="comment"> https://code.google.com/p/rapidjson/issues/detail?id=64</span></div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> Encoding, <span class="keyword">typename</span> Allocator&gt; </div><div class="line"><a name="l00069"></a><span class="lineno"><a class="line" href="structrapidjson_1_1_generic_member.html"> 69</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structrapidjson_1_1_generic_member.html">GenericMember</a> { </div><div class="line"><a name="l00070"></a><span class="lineno"><a class="line" href="structrapidjson_1_1_generic_member.html#ae820eaa74b415a9073f3f3855f6c6607"> 70</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue&lt;Encoding, Allocator&gt;</a> <a class="code" href="structrapidjson_1_1_generic_member.html#ae820eaa74b415a9073f3f3855f6c6607">name</a>; <span class="comment">//!&lt; name of member (must be a string)</span></div><div class="line"><a name="l00071"></a><span class="lineno"><a class="line" href="structrapidjson_1_1_generic_member.html#a8ffff2076e62d988a070a136da6ffca6"> 71</a></span>&#160;<span class="comment"></span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue&lt;Encoding, Allocator&gt;</a> <a class="code" href="structrapidjson_1_1_generic_member.html#a8ffff2076e62d988a070a136da6ffca6">value</a>; <span class="comment">//!&lt; value of member.</span></div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;<span class="comment"></span>};</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;<span class="comment"></span><span class="comment">// GenericMemberIterator</span></div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;<span class="preprocessor">#ifndef RAPIDJSON_NOMEMBERITERATORCLASS</span></div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;<span class="comment">//! (Constant) member iterator for a JSON object value</span></div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;<span class="comment"></span><span class="comment">/*!</span></div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;<span class="comment"> \tparam Const Is this a constant iterator?</span></div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;<span class="comment"> \tparam Encoding Encoding of the value. (Even non-string values need to have the same encoding in a document)</span></div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;<span class="comment"> \tparam Allocator Allocator type for allocating memory of object, array and string.</span></div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160;<span class="comment"> This class implements a Random Access Iterator for GenericMember elements</span></div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160;<span class="comment"> of a GenericValue, see ISO/IEC 14882:2003(E) C++ standard, 24.1 [lib.iterator.requirements].</span></div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160;<span class="comment"> \note This iterator implementation is mainly intended to avoid implicit</span></div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;<span class="comment"> conversions from iterator values to \c NULL,</span></div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160;<span class="comment"> e.g. from GenericValue::FindMember.</span></div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160;<span class="comment"> \note Define \c RAPIDJSON_NOMEMBERITERATORCLASS to fall back to a</span></div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;<span class="comment"> pointer-based implementation, if your platform doesn&#39;t provide</span></div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;<span class="comment"> the C++ &lt;iterator&gt; header.</span></div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160;<span class="comment"> \see GenericMember, GenericValue::MemberIterator, GenericValue::ConstMemberIterator</span></div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">bool</span> Const, <span class="keyword">typename</span> Encoding, <span class="keyword">typename</span> Allocator&gt;</div><div class="line"><a name="l00099"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_member_iterator.html"> 99</a></span>&#160;<span class="keyword">class </span><a class="code" href="classrapidjson_1_1_generic_member_iterator.html">GenericMemberIterator</a> {</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160;</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&lt;Encoding,Allocator&gt;;</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="keyword">template</span> &lt;<span class="keywordtype">bool</span>, <span class="keyword">typename</span>, <span class="keyword">typename</span>&gt; <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classrapidjson_1_1_generic_member_iterator.html">GenericMemberIterator</a>;</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160;</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <span class="keyword">typedef</span> <a class="code" href="structrapidjson_1_1_generic_member.html">GenericMember&lt;Encoding,Allocator&gt;</a> <a class="code" href="structrapidjson_1_1_generic_member.html">PlainType</a>;</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">internal::MaybeAddConst&lt;Const,PlainType&gt;::Type</a> ValueType;</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160;</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160;<span class="keyword">public</span>:<span class="comment"></span></div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160;<span class="comment"> //! Iterator type itself</span></div><div class="line"><a name="l00109"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_member_iterator.html#a37091c3dd8470486ef5188f3c1108653"> 109</a></span>&#160;<span class="comment"></span> <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">GenericMemberIterator</a> <a class="code" href="classrapidjson_1_1_generic_member_iterator.html#a37091c3dd8470486ef5188f3c1108653">Iterator</a>;<span class="comment"></span></div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160;<span class="comment"> //! Constant iterator type</span></div><div class="line"><a name="l00111"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_member_iterator.html#a61b9a9ba8a5917d90406532f104605cc"> 111</a></span>&#160;<span class="comment"></span> <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">GenericMemberIterator&lt;true,Encoding,Allocator&gt;</a> <a class="code" href="classrapidjson_1_1_generic_member_iterator.html#a61b9a9ba8a5917d90406532f104605cc">ConstIterator</a>;<span class="comment"></span></div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160;<span class="comment"> //! Non-constant iterator type</span></div><div class="line"><a name="l00113"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_member_iterator.html#a1a91868fa388664bb301061e3e24badb"> 113</a></span>&#160;<span class="comment"></span> <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">GenericMemberIterator&lt;false,Encoding,Allocator&gt;</a> <a class="code" href="classrapidjson_1_1_generic_member_iterator.html#a1a91868fa388664bb301061e3e24badb">NonConstIterator</a>;</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160;<span class="comment"> /** \name std::iterator_traits support */</span><span class="comment"></span></div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160;<span class="comment"> //@{</span></div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160;<span class="comment"></span> <span class="keyword">typedef</span> ValueType value_type;</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <span class="keyword">typedef</span> ValueType * pointer;</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="keyword">typedef</span> ValueType &amp; reference;</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <span class="keyword">typedef</span> std::ptrdiff_t difference_type;</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="keyword">typedef</span> std::random_access_iterator_tag iterator_category;<span class="comment"></span></div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160;<span class="comment"> //@}</span></div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160;<span class="comment"> //! Pointer to (const) GenericMember</span></div><div class="line"><a name="l00125"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_member_iterator.html#aa9d53504374c7c6bdf46775482c5b107"> 125</a></span>&#160;<span class="comment"></span> <span class="keyword">typedef</span> pointer <a class="code" href="classrapidjson_1_1_generic_member_iterator.html#aa9d53504374c7c6bdf46775482c5b107">Pointer</a>;<span class="comment"></span></div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160;<span class="comment"> //! Reference to (const) GenericMember</span></div><div class="line"><a name="l00127"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_member_iterator.html#abe27838f8dc71fdb38028ef27ae0b4f2"> 127</a></span>&#160;<span class="comment"></span> <span class="keyword">typedef</span> reference <a class="code" href="classrapidjson_1_1_generic_member_iterator.html#abe27838f8dc71fdb38028ef27ae0b4f2">Reference</a>;<span class="comment"></span></div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160;<span class="comment"> //! Signed integer type (e.g. \c ptrdiff_t)</span></div><div class="line"><a name="l00129"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_member_iterator.html#aff2739a9265639a7a4be8c3e6216b31a"> 129</a></span>&#160;<span class="comment"></span> <span class="keyword">typedef</span> difference_type <a class="code" href="classrapidjson_1_1_generic_member_iterator.html#aff2739a9265639a7a4be8c3e6216b31a">DifferenceType</a>;</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160;<span class="comment"> //! Default constructor (singular value)</span></div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160;<span class="comment"></span><span class="comment"> /*! Creates an iterator pointing to no element.</span></div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160;<span class="comment"> \note All operations, except for comparisons, are undefined on such values.</span></div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00135"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_member_iterator.html#ac920af483c9e31a6746c22acf0dffc50"> 135</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_member_iterator.html#ac920af483c9e31a6746c22acf0dffc50">GenericMemberIterator</a>() : ptr_() {}</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160;<span class="comment"> //! Iterator conversions to more const</span></div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160;<span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160;<span class="comment"> \param it (Non-const) iterator to copy from</span></div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160;<span class="comment"> Allows the creation of an iterator from another GenericMemberIterator</span></div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160;<span class="comment"> that is &quot;less const&quot;. Especially, creating a non-constant iterator</span></div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160;<span class="comment"> from a constant iterator are disabled:</span></div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160;<span class="comment"> \li const -&gt; non-const (not ok)</span></div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160;<span class="comment"> \li const -&gt; const (ok)</span></div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160;<span class="comment"> \li non-const -&gt; const (ok)</span></div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160;<span class="comment"> \li non-const -&gt; non-const (ok)</span></div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160;<span class="comment"> \note If the \c Const template parameter is already \c false, this</span></div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160;<span class="comment"> constructor effectively defines a regular copy-constructor.</span></div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160;<span class="comment"> Otherwise, the copy constructor is implicitly defined.</span></div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00153"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_member_iterator.html#aa30ffef74b3f4978b403024d81b484e4"> 153</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_member_iterator.html#aa30ffef74b3f4978b403024d81b484e4">GenericMemberIterator</a>(<span class="keyword">const</span> NonConstIterator &amp; it) : ptr_(it.ptr_) {}</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; Iterator&amp; operator=(<span class="keyword">const</span> NonConstIterator &amp; it) { ptr_ = it.ptr_; <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160;<span class="comment"> //! @name stepping</span></div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160;<span class="comment"></span><span class="comment"> //@{</span></div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160;<span class="comment"></span> Iterator&amp; operator++(){ ++ptr_; <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; Iterator&amp; operator--(){ --ptr_; <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; Iterator operator++(<span class="keywordtype">int</span>){ Iterator old(*<span class="keyword">this</span>); ++ptr_; <span class="keywordflow">return</span> old; }</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; Iterator operator--(<span class="keywordtype">int</span>){ Iterator old(*<span class="keyword">this</span>); --ptr_; <span class="keywordflow">return</span> old; }<span class="comment"></span></div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160;<span class="comment"> //@}</span></div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160;<span class="comment"> //! @name increment/decrement</span></div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160;<span class="comment"></span><span class="comment"> //@{</span></div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160;<span class="comment"></span> Iterator operator+(DifferenceType n)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> Iterator(ptr_+n); }</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; Iterator operator-(DifferenceType n)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> Iterator(ptr_-n); }</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160;</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; Iterator&amp; operator+=(DifferenceType n) { ptr_+=n; <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; Iterator&amp; operator-=(DifferenceType n) { ptr_-=n; <span class="keywordflow">return</span> *<span class="keyword">this</span>; }<span class="comment"></span></div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160;<span class="comment"> //@}</span></div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160;<span class="comment"> //! @name relations</span></div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160;<span class="comment"></span><span class="comment"> //@{</span></div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160;<span class="comment"></span> <span class="keywordtype">bool</span> operator==(ConstIterator that)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> ptr_ == that.ptr_; }</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; <span class="keywordtype">bool</span> operator!=(ConstIterator that)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> ptr_ != that.ptr_; }</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <span class="keywordtype">bool</span> operator&lt;=(ConstIterator that)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> ptr_ &lt;= that.ptr_; }</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; <span class="keywordtype">bool</span> operator&gt;=(ConstIterator that)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> ptr_ &gt;= that.ptr_; }</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; <span class="keywordtype">bool</span> operator&lt; (ConstIterator that)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> ptr_ &lt; that.ptr_; }</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; <span class="keywordtype">bool</span> operator&gt; (ConstIterator that)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> ptr_ &gt; that.ptr_; }<span class="comment"></span></div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160;<span class="comment"> //@}</span></div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160;<span class="comment"> //! @name dereference</span></div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160;<span class="comment"></span><span class="comment"> //@{</span></div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160;<span class="comment"></span> Reference operator*()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> *ptr_; }</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; Pointer operator-&gt;()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> ptr_; }</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; Reference operator[](DifferenceType n)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> ptr_[n]; }<span class="comment"></span></div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160;<span class="comment"> //@}</span></div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160;<span class="comment"> //! Distance</span></div><div class="line"><a name="l00191"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_member_iterator.html#abfad2c34a97f82178cbf9464e958e2c2"> 191</a></span>&#160;<span class="comment"></span> DifferenceType <a class="code" href="classrapidjson_1_1_generic_member_iterator.html#abfad2c34a97f82178cbf9464e958e2c2">operator-</a>(ConstIterator that)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> ptr_-that.ptr_; }</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160;</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160;<span class="keyword">private</span>:<span class="comment"></span></div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160;<span class="comment"> //! Internal constructor from plain pointer</span></div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160;<span class="comment"></span> <span class="keyword">explicit</span> <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">GenericMemberIterator</a>(Pointer p) : ptr_(p) {}</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160;</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; Pointer ptr_; <span class="comment">//!&lt; raw pointer</span></div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160;<span class="comment"></span>};</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160;</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160;<span class="preprocessor">#else // RAPIDJSON_NOMEMBERITERATORCLASS</span></div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160;</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160;<span class="comment">// class-based member iterator implementation disabled, use plain pointers</span></div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160;</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">bool</span> Const, <span class="keyword">typename</span> Encoding, <span class="keyword">typename</span> Allocator&gt;</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160;<span class="keyword">struct </span><a class="code" href="classrapidjson_1_1_generic_member_iterator.html">GenericMemberIterator</a>;</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160;<span class="comment">//! non-const GenericMemberIterator</span></div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160;<span class="comment"></span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> Encoding, <span class="keyword">typename</span> Allocator&gt;</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160;<span class="keyword">struct </span><a class="code" href="classrapidjson_1_1_generic_member_iterator.html">GenericMemberIterator</a>&lt;false,Encoding,Allocator&gt; {<span class="comment"></span></div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160;<span class="comment"> //! use plain pointer as iterator type</span></div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160;<span class="comment"></span> <span class="keyword">typedef</span> <a class="code" href="structrapidjson_1_1_generic_member.html">GenericMember&lt;Encoding,Allocator&gt;</a>* <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">Iterator</a>;</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160;};<span class="comment"></span></div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160;<span class="comment">//! const GenericMemberIterator</span></div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160;<span class="comment"></span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> Encoding, <span class="keyword">typename</span> Allocator&gt;</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160;<span class="keyword">struct </span><a class="code" href="classrapidjson_1_1_generic_member_iterator.html">GenericMemberIterator</a>&lt;true,Encoding,Allocator&gt; {<span class="comment"></span></div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160;<span class="comment"> //! use plain const pointer as iterator type</span></div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160;<span class="comment"></span> <span class="keyword">typedef</span> <span class="keyword">const</span> <a class="code" href="structrapidjson_1_1_generic_member.html">GenericMember&lt;Encoding,Allocator&gt;</a>* <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">Iterator</a>;</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160;};</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160;</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160;<span class="preprocessor">#endif // RAPIDJSON_NOMEMBERITERATORCLASS</span></div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160;<span class="comment"></span><span class="comment">// GenericStringRef</span></div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160;<span class="comment">//! Reference to a constant string (not taking a copy)</span></div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160;<span class="comment"></span><span class="comment">/*!</span></div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160;<span class="comment"> \tparam CharType character type of the string</span></div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160;<span class="comment"> This helper class is used to automatically infer constant string</span></div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160;<span class="comment"> references for string literals, especially from \c const \b (!)</span></div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160;<span class="comment"> character arrays.</span></div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160;<span class="comment"> The main use is for creating JSON string values without copying the</span></div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160;<span class="comment"> source string via an \ref Allocator. This requires that the referenced</span></div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160;<span class="comment"> string pointers have a sufficient lifetime, which exceeds the lifetime</span></div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160;<span class="comment"> of the associated GenericValue.</span></div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160;<span class="comment"> \b Example</span></div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160;<span class="comment"> \code</span></div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160;<span class="comment"> Value v(&quot;foo&quot;); // ok, no need to copy &amp; calculate length</span></div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160;<span class="comment"> const char foo[] = &quot;foo&quot;;</span></div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160;<span class="comment"> v.SetString(foo); // ok</span></div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160;<span class="comment"> const char* bar = foo;</span></div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160;<span class="comment"> // Value x(bar); // not ok, can&#39;t rely on bar&#39;s lifetime</span></div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160;<span class="comment"> Value x(StringRef(bar)); // lifetime explicitly guaranteed by user</span></div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160;<span class="comment"> Value y(StringRef(bar, 3)); // ok, explicitly pass length</span></div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160;<span class="comment"> \endcode</span></div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160;<span class="comment"> \see StringRef, GenericValue::SetString</span></div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> CharType&gt;</div><div class="line"><a name="l00253"></a><span class="lineno"><a class="line" href="structrapidjson_1_1_generic_string_ref.html"> 253</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structrapidjson_1_1_generic_string_ref.html">GenericStringRef</a> {</div><div class="line"><a name="l00254"></a><span class="lineno"><a class="line" href="structrapidjson_1_1_generic_string_ref.html#aa2a8eccae3d7eb14c30bc21afb7d6fba"> 254</a></span>&#160; <span class="keyword">typedef</span> CharType <a class="code" href="structrapidjson_1_1_generic_string_ref.html#aa2a8eccae3d7eb14c30bc21afb7d6fba">Ch</a>; <span class="comment">//!&lt; character type of the string</span></div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160;<span class="comment"> //! Create string reference from \c const character array</span></div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160;<span class="comment"></span><span class="preprocessor">#ifndef __clang__ // -Wdocumentation</span></div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160;<span class="comment"> /*!</span></div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160;<span class="comment"> This constructor implicitly creates a constant string reference from</span></div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160;<span class="comment"> a \c const character array. It has better performance than</span></div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160;<span class="comment"> \ref StringRef(const CharType*) by inferring the string \ref length</span></div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160;<span class="comment"> from the array length, and also supports strings containing null</span></div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160;<span class="comment"> characters.</span></div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160;<span class="comment"> \tparam N length of the string, automatically inferred</span></div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160;<span class="comment"> \param str Constant character array, lifetime assumed to be longer</span></div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160;<span class="comment"> than the use of the string in e.g. a GenericValue</span></div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160;<span class="comment"> \post \ref s == str</span></div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160;<span class="comment"> \note Constant complexity.</span></div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160;<span class="comment"> \note There is a hidden, private overload to disallow references to</span></div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160;<span class="comment"> non-const character arrays to be created via this constructor.</span></div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160;<span class="comment"> By this, e.g. function-scope arrays used to be filled via</span></div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160;<span class="comment"> \c snprintf are excluded from consideration.</span></div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160;<span class="comment"> In such cases, the referenced string should be \b copied to the</span></div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160;<span class="comment"> GenericValue instead.</span></div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; <span class="keyword">template</span>&lt;SizeType N&gt;</div><div class="line"><a name="l00282"></a><span class="lineno"><a class="line" href="structrapidjson_1_1_generic_string_ref.html#acd4d5ebac2b610ce647356aa52998002"> 282</a></span>&#160; <a class="code" href="structrapidjson_1_1_generic_string_ref.html#acd4d5ebac2b610ce647356aa52998002">GenericStringRef</a>(<span class="keyword">const</span> CharType (&amp;str)[N]) RAPIDJSON_NOEXCEPT</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; : s(str), length(N-1) {}</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160;<span class="comment"> //! Explicitly create string reference from \c const character pointer</span></div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160;<span class="comment"></span><span class="preprocessor">#ifndef __clang__ // -Wdocumentation</span></div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160;<span class="comment"> /*!</span></div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160;<span class="comment"> This constructor can be used to \b explicitly create a reference to</span></div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160;<span class="comment"> a constant string pointer.</span></div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160;<span class="comment"> \see StringRef(const CharType*)</span></div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160;<span class="comment"> \param str Constant character pointer, lifetime assumed to be longer</span></div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160;<span class="comment"> than the use of the string in e.g. a GenericValue</span></div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160;<span class="comment"> \post \ref s == str</span></div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160;<span class="comment"> \note There is a hidden, private overload to disallow references to</span></div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160;<span class="comment"> non-const character arrays to be created via this constructor.</span></div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160;<span class="comment"> By this, e.g. function-scope arrays used to be filled via</span></div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160;<span class="comment"> \c snprintf are excluded from consideration.</span></div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160;<span class="comment"> In such cases, the referenced string should be \b copied to the</span></div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160;<span class="comment"> GenericValue instead.</span></div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00306"></a><span class="lineno"><a class="line" href="structrapidjson_1_1_generic_string_ref.html#a29cf407c6aa2313f13dff78d6ce02687"> 306</a></span>&#160; <span class="keyword">explicit</span> <a class="code" href="structrapidjson_1_1_generic_string_ref.html#a29cf407c6aa2313f13dff78d6ce02687">GenericStringRef</a>(<span class="keyword">const</span> CharType* str)</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; : s(str), length(NotNullStrLen(str)) {}</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160;<span class="comment"> //! Create constant string reference from pointer and length</span></div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160;<span class="comment"></span><span class="preprocessor">#ifndef __clang__ // -Wdocumentation</span></div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160;<span class="comment"> /*! \param str constant string, lifetime assumed to be longer than the use of the string in e.g. a GenericValue</span></div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160;<span class="comment"> \param len length of the string, excluding the trailing NULL terminator</span></div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160;<span class="comment"> \post \ref s == str &amp;&amp; \ref length == len</span></div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160;<span class="comment"> \note Constant complexity.</span></div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00318"></a><span class="lineno"><a class="line" href="structrapidjson_1_1_generic_string_ref.html#ad9eb120a58cee500ff3bd5706779c4e4"> 318</a></span>&#160; <a class="code" href="structrapidjson_1_1_generic_string_ref.html#ad9eb120a58cee500ff3bd5706779c4e4">GenericStringRef</a>(<span class="keyword">const</span> CharType* str, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> len)</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; : s(<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga5dc14176a9e71ace282404b0bcda57a1">RAPIDJSON_LIKELY</a>(str) ? str : emptyString), length(len) { <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(str != 0 || len == 0u); }</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160;</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; <a class="code" href="structrapidjson_1_1_generic_string_ref.html">GenericStringRef</a>(<span class="keyword">const</span> <a class="code" href="structrapidjson_1_1_generic_string_ref.html">GenericStringRef</a>&amp; rhs) : s(rhs.<a class="code" href="structrapidjson_1_1_generic_string_ref.html#a001276ee57cbcbd3c14449045c71e994">s</a>), length(rhs.<a class="code" href="structrapidjson_1_1_generic_string_ref.html#ae223535ec20edf0c1db44a40b7735111">length</a>) {}</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160;<span class="comment"> //! implicit conversion to plain CharType pointer</span></div><div class="line"><a name="l00324"></a><span class="lineno"><a class="line" href="structrapidjson_1_1_generic_string_ref.html#a86d30bb594a41619a7a5ba6c8dcce2bd"> 324</a></span>&#160;<span class="comment"></span> <span class="keyword">operator</span> <span class="keyword">const</span> Ch *() <span class="keyword">const</span> { <span class="keywordflow">return</span> s; }</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160;</div><div class="line"><a name="l00326"></a><span class="lineno"><a class="line" href="structrapidjson_1_1_generic_string_ref.html#a001276ee57cbcbd3c14449045c71e994"> 326</a></span>&#160; <span class="keyword">const</span> Ch* <span class="keyword">const</span> <a class="code" href="structrapidjson_1_1_generic_string_ref.html#a001276ee57cbcbd3c14449045c71e994">s</a>; <span class="comment">//!&lt; plain CharType pointer</span></div><div class="line"><a name="l00327"></a><span class="lineno"><a class="line" href="structrapidjson_1_1_generic_string_ref.html#ae223535ec20edf0c1db44a40b7735111"> 327</a></span>&#160;<span class="comment"></span> <span class="keyword">const</span> <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> <a class="code" href="structrapidjson_1_1_generic_string_ref.html#ae223535ec20edf0c1db44a40b7735111">length</a>; <span class="comment">//!&lt; length of the string (excluding the trailing NULL terminator)</span></div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> NotNullStrLen(<span class="keyword">const</span> CharType* str) {</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(str != 0);</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; <span class="keywordflow">return</span> internal::StrLen(str);</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; }</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160;<span class="comment"> /// Empty string - used when passing in a NULL pointer</span></div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160;<span class="comment"></span> <span class="keyword">static</span> <span class="keyword">const</span> Ch emptyString[];</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160;<span class="comment"> //! Disallow construction from non-const array</span></div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160;<span class="comment"></span> <span class="keyword">template</span>&lt;SizeType N&gt;</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; <a class="code" href="structrapidjson_1_1_generic_string_ref.html">GenericStringRef</a>(CharType (&amp;str)[N]) <span class="comment">/* = delete */</span>;<span class="comment"></span></div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160;<span class="comment"> //! Copy assignment operator not permitted - immutable type</span></div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160;<span class="comment"></span> <a class="code" href="structrapidjson_1_1_generic_string_ref.html">GenericStringRef</a>&amp; operator=(<span class="keyword">const</span> <a class="code" href="structrapidjson_1_1_generic_string_ref.html">GenericStringRef</a>&amp; rhs) <span class="comment">/* = delete */</span>;</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160;};</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160;</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> CharType&gt;</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160;<span class="keyword">const</span> CharType <a class="code" href="structrapidjson_1_1_generic_string_ref.html">GenericStringRef&lt;CharType&gt;::emptyString</a>[] = { CharType() };</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160;<span class="comment">//! Mark a character pointer as constant string</span></div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160;<span class="comment"></span><span class="comment">/*! Mark a plain character pointer as a &quot;string literal&quot;. This function</span></div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160;<span class="comment"> can be used to avoid copying a character string to be referenced as a</span></div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160;<span class="comment"> value in a JSON GenericValue object, if the string&#39;s lifetime is known</span></div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160;<span class="comment"> to be valid long enough.</span></div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160;<span class="comment"> \tparam CharType Character type of the string</span></div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160;<span class="comment"> \param str Constant string, lifetime assumed to be longer than the use of the string in e.g. a GenericValue</span></div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160;<span class="comment"> \return GenericStringRef string reference object</span></div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160;<span class="comment"> \relatesalso GenericStringRef</span></div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160;<span class="comment"> \see GenericValue::GenericValue(StringRefType), GenericValue::operator=(StringRefType), GenericValue::SetString(StringRefType), GenericValue::PushBack(StringRefType, Allocator&amp;), GenericValue::AddMember</span></div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> CharType&gt;</div><div class="line"><a name="l00361"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#aa6b9fd9f6aa49405a574c362ba9af6b5"> 361</a></span>&#160;<span class="keyword">inline</span> <a class="code" href="structrapidjson_1_1_generic_string_ref.html">GenericStringRef&lt;CharType&gt;</a> <a class="code" href="namespacerapidjson.html#af94951529a5d51e8c4e6e770bb707c1f">StringRef</a>(<span class="keyword">const</span> CharType* str) {</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; <span class="keywordflow">return</span> <a class="code" href="structrapidjson_1_1_generic_string_ref.html">GenericStringRef&lt;CharType&gt;</a>(str);</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160;}</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160;<span class="comment">//! Mark a character pointer as constant string</span></div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160;<span class="comment"></span><span class="comment">/*! Mark a plain character pointer as a &quot;string literal&quot;. This function</span></div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160;<span class="comment"> can be used to avoid copying a character string to be referenced as a</span></div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160;<span class="comment"> value in a JSON GenericValue object, if the string&#39;s lifetime is known</span></div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160;<span class="comment"> to be valid long enough.</span></div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160;<span class="comment"> This version has better performance with supplied length, and also</span></div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160;<span class="comment"> supports string containing null characters.</span></div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160;<span class="comment"> \tparam CharType character type of the string</span></div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160;<span class="comment"> \param str Constant string, lifetime assumed to be longer than the use of the string in e.g. a GenericValue</span></div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160;<span class="comment"> \param length The length of source string.</span></div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160;<span class="comment"> \return GenericStringRef string reference object</span></div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160;<span class="comment"> \relatesalso GenericStringRef</span></div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> CharType&gt;</div><div class="line"><a name="l00381"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#a578c51ab574a50a9c760b9da7c7562f2"> 381</a></span>&#160;<span class="keyword">inline</span> <a class="code" href="structrapidjson_1_1_generic_string_ref.html">GenericStringRef&lt;CharType&gt;</a> <a class="code" href="namespacerapidjson.html#af94951529a5d51e8c4e6e770bb707c1f">StringRef</a>(<span class="keyword">const</span> CharType* str, <span class="keywordtype">size_t</span> length) {</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; <span class="keywordflow">return</span> <a class="code" href="structrapidjson_1_1_generic_string_ref.html">GenericStringRef&lt;CharType&gt;</a>(str, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a>(length));</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160;}</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160;</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160;<span class="comment">//! Mark a string object as constant string</span></div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160;<span class="comment"></span><span class="comment">/*! Mark a string object (e.g. \c std::string) as a &quot;string literal&quot;.</span></div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160;<span class="comment"> This function can be used to avoid copying a string to be referenced as a</span></div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160;<span class="comment"> value in a JSON GenericValue object, if the string&#39;s lifetime is known</span></div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160;<span class="comment"> to be valid long enough.</span></div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160;<span class="comment"> \tparam CharType character type of the string</span></div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160;<span class="comment"> \param str Constant string, lifetime assumed to be longer than the use of the string in e.g. a GenericValue</span></div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160;<span class="comment"> \return GenericStringRef string reference object</span></div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160;<span class="comment"> \relatesalso GenericStringRef</span></div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160;<span class="comment"> \note Requires the definition of the preprocessor symbol \ref RAPIDJSON_HAS_STDSTRING.</span></div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> CharType&gt;</div><div class="line"><a name="l00399"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#af94951529a5d51e8c4e6e770bb707c1f"> 399</a></span>&#160;<span class="keyword">inline</span> <a class="code" href="structrapidjson_1_1_generic_string_ref.html">GenericStringRef&lt;CharType&gt;</a> <a class="code" href="namespacerapidjson.html#af94951529a5d51e8c4e6e770bb707c1f">StringRef</a>(<span class="keyword">const</span> std::basic_string&lt;CharType&gt;&amp; str) {</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; <span class="keywordflow">return</span> <a class="code" href="structrapidjson_1_1_generic_string_ref.html">GenericStringRef&lt;CharType&gt;</a>(str.data(), <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a>(str.size()));</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160;}</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160;<span class="comment"></span><span class="comment">// GenericValue type traits</span></div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160;<span class="keyword">namespace </span>internal {</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160;</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T, <span class="keyword">typename</span> Encoding = <span class="keywordtype">void</span>, <span class="keyword">typename</span> Allocator = <span class="keywordtype">void</span>&gt;</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160;<span class="keyword">struct </span>IsGenericValueImpl : FalseType {};</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160;</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160;<span class="comment">// select candidates according to nested encoding and allocator types</span></div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt; <span class="keyword">struct </span>IsGenericValueImpl&lt;T, typename Void&lt;typename T::EncodingType&gt;<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">::Type</a>, typename Void&lt;typename T::AllocatorType&gt;<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">::Type</a>&gt;</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; : IsBaseOf&lt;GenericValue&lt;typename T::EncodingType, typename T::AllocatorType&gt;, T&gt;<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">::Type</a> {};</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160;</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160;<span class="comment">// helper to match arbitrary GenericValue instantiations, including derived classes</span></div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt; <span class="keyword">struct </span>IsGenericValue : IsGenericValueImpl&lt;T&gt;<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">::Type</a> {};</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160;</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160;} <span class="comment">// namespace internal</span></div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160;<span class="comment"></span><span class="comment">// TypeHelper</span></div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160;</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160;<span class="keyword">namespace </span>internal {</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160;</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> ValueType, <span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160;<span class="keyword">struct </span>TypeHelper {};</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160;</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> ValueType&gt; </div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160;<span class="keyword">struct </span>TypeHelper&lt;ValueType, bool&gt; {</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; <span class="keyword">static</span> <span class="keywordtype">bool</span> Is(<span class="keyword">const</span> ValueType&amp; v) { <span class="keywordflow">return</span> v.IsBool(); }</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; <span class="keyword">static</span> <span class="keywordtype">bool</span> Get(<span class="keyword">const</span> ValueType&amp; v) { <span class="keywordflow">return</span> v.GetBool(); }</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; <span class="keyword">static</span> ValueType&amp; Set(ValueType&amp; v, <span class="keywordtype">bool</span> data) { <span class="keywordflow">return</span> v.SetBool(data); }</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; <span class="keyword">static</span> ValueType&amp; Set(ValueType&amp; v, <span class="keywordtype">bool</span> data, <span class="keyword">typename</span> ValueType::AllocatorType&amp;) { <span class="keywordflow">return</span> v.SetBool(data); }</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160;};</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160;</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> ValueType&gt; </div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160;<span class="keyword">struct </span>TypeHelper&lt;ValueType, int&gt; {</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; <span class="keyword">static</span> <span class="keywordtype">bool</span> Is(<span class="keyword">const</span> ValueType&amp; v) { <span class="keywordflow">return</span> v.IsInt(); }</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; <span class="keyword">static</span> <span class="keywordtype">int</span> Get(<span class="keyword">const</span> ValueType&amp; v) { <span class="keywordflow">return</span> v.GetInt(); }</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; <span class="keyword">static</span> ValueType&amp; Set(ValueType&amp; v, <span class="keywordtype">int</span> data) { <span class="keywordflow">return</span> v.SetInt(data); }</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; <span class="keyword">static</span> ValueType&amp; Set(ValueType&amp; v, <span class="keywordtype">int</span> data, <span class="keyword">typename</span> ValueType::AllocatorType&amp;) { <span class="keywordflow">return</span> v.SetInt(data); }</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160;};</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160;</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> ValueType&gt; </div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160;<span class="keyword">struct </span>TypeHelper&lt;ValueType, unsigned&gt; {</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; <span class="keyword">static</span> <span class="keywordtype">bool</span> Is(<span class="keyword">const</span> ValueType&amp; v) { <span class="keywordflow">return</span> v.IsUint(); }</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; <span class="keyword">static</span> <span class="keywordtype">unsigned</span> Get(<span class="keyword">const</span> ValueType&amp; v) { <span class="keywordflow">return</span> v.GetUint(); }</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; <span class="keyword">static</span> ValueType&amp; Set(ValueType&amp; v, <span class="keywordtype">unsigned</span> data) { <span class="keywordflow">return</span> v.SetUint(data); }</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; <span class="keyword">static</span> ValueType&amp; Set(ValueType&amp; v, <span class="keywordtype">unsigned</span> data, <span class="keyword">typename</span> ValueType::AllocatorType&amp;) { <span class="keywordflow">return</span> v.SetUint(data); }</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160;};</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160;</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160;<span class="preprocessor">#ifdef _MSC_VER</span></div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160;<a class="code" href="rapidjson_8h.html#af95188da1d8eb6d4b148fe9ce71cd7c4">RAPIDJSON_STATIC_ASSERT</a>(<span class="keyword">sizeof</span>(<span class="keywordtype">long</span>) == <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> ValueType&gt;</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160;<span class="keyword">struct </span>TypeHelper&lt;ValueType, long&gt; {</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160; <span class="keyword">static</span> <span class="keywordtype">bool</span> Is(<span class="keyword">const</span> ValueType&amp; v) { <span class="keywordflow">return</span> v.IsInt(); }</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160; <span class="keyword">static</span> <span class="keywordtype">long</span> Get(<span class="keyword">const</span> ValueType&amp; v) { <span class="keywordflow">return</span> v.GetInt(); }</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; <span class="keyword">static</span> ValueType&amp; Set(ValueType&amp; v, <span class="keywordtype">long</span> data) { <span class="keywordflow">return</span> v.SetInt(data); }</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; <span class="keyword">static</span> ValueType&amp; Set(ValueType&amp; v, <span class="keywordtype">long</span> data, <span class="keyword">typename</span> ValueType::AllocatorType&amp;) { <span class="keywordflow">return</span> v.SetInt(data); }</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160;};</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160;</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160;<a class="code" href="rapidjson_8h.html#af95188da1d8eb6d4b148fe9ce71cd7c4">RAPIDJSON_STATIC_ASSERT</a>(<span class="keyword">sizeof</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>) == <span class="keyword">sizeof</span>(<span class="keywordtype">unsigned</span>));</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> ValueType&gt;</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160;<span class="keyword">struct </span>TypeHelper&lt;ValueType, unsigned long&gt; {</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; <span class="keyword">static</span> <span class="keywordtype">bool</span> Is(<span class="keyword">const</span> ValueType&amp; v) { <span class="keywordflow">return</span> v.IsUint(); }</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; <span class="keyword">static</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> Get(<span class="keyword">const</span> ValueType&amp; v) { <span class="keywordflow">return</span> v.GetUint(); }</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; <span class="keyword">static</span> ValueType&amp; Set(ValueType&amp; v, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> data) { <span class="keywordflow">return</span> v.SetUint(data); }</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; <span class="keyword">static</span> ValueType&amp; Set(ValueType&amp; v, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> data, <span class="keyword">typename</span> ValueType::AllocatorType&amp;) { <span class="keywordflow">return</span> v.SetUint(data); }</div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160;};</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160;</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> ValueType&gt; </div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160;<span class="keyword">struct </span>TypeHelper&lt;ValueType, int64_t&gt; {</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; <span class="keyword">static</span> <span class="keywordtype">bool</span> Is(<span class="keyword">const</span> ValueType&amp; v) { <span class="keywordflow">return</span> v.IsInt64(); }</div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; <span class="keyword">static</span> int64_t Get(<span class="keyword">const</span> ValueType&amp; v) { <span class="keywordflow">return</span> v.GetInt64(); }</div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; <span class="keyword">static</span> ValueType&amp; Set(ValueType&amp; v, int64_t data) { <span class="keywordflow">return</span> v.SetInt64(data); }</div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; <span class="keyword">static</span> ValueType&amp; Set(ValueType&amp; v, int64_t data, <span class="keyword">typename</span> ValueType::AllocatorType&amp;) { <span class="keywordflow">return</span> v.SetInt64(data); }</div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160;};</div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160;</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> ValueType&gt; </div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160;<span class="keyword">struct </span>TypeHelper&lt;ValueType, uint64_t&gt; {</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; <span class="keyword">static</span> <span class="keywordtype">bool</span> Is(<span class="keyword">const</span> ValueType&amp; v) { <span class="keywordflow">return</span> v.IsUint64(); }</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; <span class="keyword">static</span> uint64_t Get(<span class="keyword">const</span> ValueType&amp; v) { <span class="keywordflow">return</span> v.GetUint64(); }</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; <span class="keyword">static</span> ValueType&amp; Set(ValueType&amp; v, uint64_t data) { <span class="keywordflow">return</span> v.SetUint64(data); }</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; <span class="keyword">static</span> ValueType&amp; Set(ValueType&amp; v, uint64_t data, <span class="keyword">typename</span> ValueType::AllocatorType&amp;) { <span class="keywordflow">return</span> v.SetUint64(data); }</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160;};</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160;</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> ValueType&gt; </div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160;<span class="keyword">struct </span>TypeHelper&lt;ValueType, double&gt; {</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; <span class="keyword">static</span> <span class="keywordtype">bool</span> Is(<span class="keyword">const</span> ValueType&amp; v) { <span class="keywordflow">return</span> v.IsDouble(); }</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; <span class="keyword">static</span> <span class="keywordtype">double</span> Get(<span class="keyword">const</span> ValueType&amp; v) { <span class="keywordflow">return</span> v.GetDouble(); }</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; <span class="keyword">static</span> ValueType&amp; Set(ValueType&amp; v, <span class="keywordtype">double</span> data) { <span class="keywordflow">return</span> v.SetDouble(data); }</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; <span class="keyword">static</span> ValueType&amp; Set(ValueType&amp; v, <span class="keywordtype">double</span> data, <span class="keyword">typename</span> ValueType::AllocatorType&amp;) { <span class="keywordflow">return</span> v.SetDouble(data); }</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160;};</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160;</div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> ValueType&gt; </div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160;<span class="keyword">struct </span>TypeHelper&lt;ValueType, float&gt; {</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; <span class="keyword">static</span> <span class="keywordtype">bool</span> Is(<span class="keyword">const</span> ValueType&amp; v) { <span class="keywordflow">return</span> v.IsFloat(); }</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; <span class="keyword">static</span> <span class="keywordtype">float</span> Get(<span class="keyword">const</span> ValueType&amp; v) { <span class="keywordflow">return</span> v.GetFloat(); }</div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; <span class="keyword">static</span> ValueType&amp; Set(ValueType&amp; v, <span class="keywordtype">float</span> data) { <span class="keywordflow">return</span> v.SetFloat(data); }</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; <span class="keyword">static</span> ValueType&amp; Set(ValueType&amp; v, <span class="keywordtype">float</span> data, <span class="keyword">typename</span> ValueType::AllocatorType&amp;) { <span class="keywordflow">return</span> v.SetFloat(data); }</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160;};</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160;</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> ValueType&gt; </div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160;<span class="keyword">struct </span>TypeHelper&lt;ValueType, const typename ValueType::Ch*&gt; {</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; <span class="keyword">typedef</span> <span class="keyword">const</span> <span class="keyword">typename</span> ValueType::Ch* StringType;</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; <span class="keyword">static</span> <span class="keywordtype">bool</span> Is(<span class="keyword">const</span> ValueType&amp; v) { <span class="keywordflow">return</span> v.IsString(); }</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; <span class="keyword">static</span> StringType Get(<span class="keyword">const</span> ValueType&amp; v) { <span class="keywordflow">return</span> v.GetString(); }</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160; <span class="keyword">static</span> ValueType&amp; Set(ValueType&amp; v, <span class="keyword">const</span> StringType data) { <span class="keywordflow">return</span> v.SetString(<span class="keyword">typename</span> ValueType::StringRefType(data)); }</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; <span class="keyword">static</span> ValueType&amp; Set(ValueType&amp; v, <span class="keyword">const</span> StringType data, <span class="keyword">typename</span> ValueType::AllocatorType&amp; a) { <span class="keywordflow">return</span> v.SetString(data, a); }</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160;};</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160;</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> ValueType&gt; </div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160;<span class="keyword">struct </span>TypeHelper&lt;ValueType, std::basic_string&lt;typename ValueType::Ch&gt; &gt; {</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; <span class="keyword">typedef</span> std::basic_string&lt;typename ValueType::Ch&gt; StringType;</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; <span class="keyword">static</span> <span class="keywordtype">bool</span> Is(<span class="keyword">const</span> ValueType&amp; v) { <span class="keywordflow">return</span> v.IsString(); }</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; <span class="keyword">static</span> StringType Get(<span class="keyword">const</span> ValueType&amp; v) { <span class="keywordflow">return</span> StringType(v.GetString(), v.GetStringLength()); }</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; <span class="keyword">static</span> ValueType&amp; Set(ValueType&amp; v, <span class="keyword">const</span> StringType&amp; data, <span class="keyword">typename</span> ValueType::AllocatorType&amp; a) { <span class="keywordflow">return</span> v.SetString(data, a); }</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160;};</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160;</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> ValueType&gt; </div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160;<span class="keyword">struct </span>TypeHelper&lt;ValueType, typename ValueType::Array&gt; {</div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; <span class="keyword">typedef</span> <span class="keyword">typename</span> ValueType::Array ArrayType;</div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; <span class="keyword">static</span> <span class="keywordtype">bool</span> Is(<span class="keyword">const</span> ValueType&amp; v) { <span class="keywordflow">return</span> v.IsArray(); }</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; <span class="keyword">static</span> ArrayType Get(ValueType&amp; v) { <span class="keywordflow">return</span> v.GetArray(); }</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; <span class="keyword">static</span> ValueType&amp; Set(ValueType&amp; v, ArrayType data) { <span class="keywordflow">return</span> v = data; }</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; <span class="keyword">static</span> ValueType&amp; Set(ValueType&amp; v, ArrayType data, <span class="keyword">typename</span> ValueType::AllocatorType&amp;) { <span class="keywordflow">return</span> v = data; }</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160;};</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160;</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> ValueType&gt; </div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160;<span class="keyword">struct </span>TypeHelper&lt;ValueType, typename ValueType::ConstArray&gt; {</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; <span class="keyword">typedef</span> <span class="keyword">typename</span> ValueType::ConstArray ArrayType;</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; <span class="keyword">static</span> <span class="keywordtype">bool</span> Is(<span class="keyword">const</span> ValueType&amp; v) { <span class="keywordflow">return</span> v.IsArray(); }</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; <span class="keyword">static</span> ArrayType Get(<span class="keyword">const</span> ValueType&amp; v) { <span class="keywordflow">return</span> v.GetArray(); }</div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160;};</div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160;</div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> ValueType&gt; </div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160;<span class="keyword">struct </span>TypeHelper&lt;ValueType, typename ValueType::Object&gt; {</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; <span class="keyword">typedef</span> <span class="keyword">typename</span> ValueType::Object ObjectType;</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; <span class="keyword">static</span> <span class="keywordtype">bool</span> Is(<span class="keyword">const</span> ValueType&amp; v) { <span class="keywordflow">return</span> v.IsObject(); }</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160; <span class="keyword">static</span> ObjectType Get(ValueType&amp; v) { <span class="keywordflow">return</span> v.GetObject(); }</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160; <span class="keyword">static</span> ValueType&amp; Set(ValueType&amp; v, ObjectType data) { <span class="keywordflow">return</span> v = data; }</div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160; <span class="keyword">static</span> ValueType&amp; Set(ValueType&amp; v, ObjectType data, <span class="keyword">typename</span> ValueType::AllocatorType&amp;) { <span class="keywordflow">return</span> v = data; }</div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160;};</div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160;</div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> ValueType&gt; </div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160;<span class="keyword">struct </span>TypeHelper&lt;ValueType, typename ValueType::ConstObject&gt; {</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160; <span class="keyword">typedef</span> <span class="keyword">typename</span> ValueType::ConstObject ObjectType;</div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160; <span class="keyword">static</span> <span class="keywordtype">bool</span> Is(<span class="keyword">const</span> ValueType&amp; v) { <span class="keywordflow">return</span> v.IsObject(); }</div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160; <span class="keyword">static</span> ObjectType Get(<span class="keyword">const</span> ValueType&amp; v) { <span class="keywordflow">return</span> v.GetObject(); }</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160;};</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160;</div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160;} <span class="comment">// namespace internal</span></div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160;</div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160;<span class="comment">// Forward declarations</span></div><div class="line"><a name="l00558"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_array.html"> 558</a></span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">bool</span>, <span class="keyword">typename</span>&gt; <span class="keyword">class </span><a class="code" href="classrapidjson_1_1_generic_array.html">GenericArray</a>;</div><div class="line"><a name="l00559"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_object.html"> 559</a></span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">bool</span>, <span class="keyword">typename</span>&gt; <span class="keyword">class </span><a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject</a>;</div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160;<span class="comment"></span><span class="comment">// GenericValue</span></div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160;<span class="comment">//! Represents a JSON value. Use Value for UTF8 encoding and default allocator.</span></div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160;<span class="comment"></span><span class="comment">/*!</span></div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160;<span class="comment"> A JSON value can be one of 7 types. This class is a variant type supporting</span></div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160;<span class="comment"> these types.</span></div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160;<span class="comment"> Use the Value if UTF8 and default allocator</span></div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160;<span class="comment"> \tparam Encoding Encoding of the value. (Even non-string values need to have the same encoding in a document)</span></div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160;<span class="comment"> \tparam Allocator Allocator type for allocating memory of object, array and string.</span></div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> Encoding, <span class="keyword">typename</span> Allocator = MemoryPoolAllocator&lt;&gt; &gt; </div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160;<span class="keyword">class </span><a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a> {</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160;<span class="keyword">public</span>:<span class="comment"></span></div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160;<span class="comment"> //! Name-value pair in an object.</span></div><div class="line"><a name="l00578"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a0220ddebe2f023fa75b643a50e90e559"> 578</a></span>&#160;<span class="comment"></span> <span class="keyword">typedef</span> <a class="code" href="structrapidjson_1_1_generic_member.html">GenericMember&lt;Encoding, Allocator&gt;</a> <a class="code" href="classrapidjson_1_1_generic_value.html#a0220ddebe2f023fa75b643a50e90e559">Member</a>;</div><div class="line"><a name="l00579"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a05906384808645a2e798d29a9b2d441d"> 579</a></span>&#160; <span class="keyword">typedef</span> Encoding <a class="code" href="classrapidjson_1_1_generic_value.html#a05906384808645a2e798d29a9b2d441d">EncodingType</a>; <span class="comment">//!&lt; Encoding type from template parameter.</span></div><div class="line"><a name="l00580"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a5d47340c96346c5028fee4c9068d783d"> 580</a></span>&#160;<span class="comment"></span> <span class="keyword">typedef</span> Allocator <a class="code" href="classrapidjson_1_1_generic_value.html#a5d47340c96346c5028fee4c9068d783d">AllocatorType</a>; <span class="comment">//!&lt; Allocator type from template parameter.</span></div><div class="line"><a name="l00581"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#adcdbc7fa85a9a41b78966d7e0dcc2ac4"> 581</a></span>&#160;<span class="comment"></span> <span class="keyword">typedef</span> <span class="keyword">typename</span> Encoding::Ch <a class="code" href="classrapidjson_1_1_generic_value.html#adcdbc7fa85a9a41b78966d7e0dcc2ac4">Ch</a>; <span class="comment">//!&lt; Character type derived from Encoding.</span></div><div class="line"><a name="l00582"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a559eb9cea54364a35518b02f6d74f379"> 582</a></span>&#160;<span class="comment"></span> <span class="keyword">typedef</span> <a class="code" href="structrapidjson_1_1_generic_string_ref.html">GenericStringRef&lt;Ch&gt;</a> <a class="code" href="classrapidjson_1_1_generic_value.html#a559eb9cea54364a35518b02f6d74f379">StringRefType</a>; <span class="comment">//!&lt; Reference to a constant string</span></div><div class="line"><a name="l00583"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#aca5596987335016c1a7c2a9467baf80b"> 583</a></span>&#160;<span class="comment"></span> <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">GenericMemberIterator&lt;false,Encoding,Allocator&gt;::Iterator</a> <a class="code" href="classrapidjson_1_1_generic_value.html#aca5596987335016c1a7c2a9467baf80b">MemberIterator</a>; <span class="comment">//!&lt; Member iterator for iterating in object.</span></div><div class="line"><a name="l00584"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a6cd2b09795c48d2892bebc0ae350d51f"> 584</a></span>&#160;<span class="comment"></span> <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">GenericMemberIterator&lt;true,Encoding,Allocator&gt;::Iterator</a> <a class="code" href="classrapidjson_1_1_generic_value.html#a6cd2b09795c48d2892bebc0ae350d51f">ConstMemberIterator</a>; <span class="comment">//!&lt; Constant member iterator for iterating in object.</span></div><div class="line"><a name="l00585"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a06ce0e14ec83b53c83e1b1699b53a25e"> 585</a></span>&#160;<span class="comment"></span> <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>* <a class="code" href="classrapidjson_1_1_generic_value.html#a06ce0e14ec83b53c83e1b1699b53a25e">ValueIterator</a>; <span class="comment">//!&lt; Value iterator for iterating in array.</span></div><div class="line"><a name="l00586"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a89a6588121742fc3f154b10b8f15f45f"> 586</a></span>&#160;<span class="comment"></span> <span class="keyword">typedef</span> <span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>* <a class="code" href="classrapidjson_1_1_generic_value.html#a89a6588121742fc3f154b10b8f15f45f">ConstValueIterator</a>; <span class="comment">//!&lt; Constant value iterator for iterating in array.</span></div><div class="line"><a name="l00587"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#ad2935191ab28c2c2e472b739a9d58202"> 587</a></span>&#160;<span class="comment"></span> <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue&lt;Encoding, Allocator&gt;</a> <a class="code" href="classrapidjson_1_1_generic_value.html#ad2935191ab28c2c2e472b739a9d58202">ValueType</a>; <span class="comment">//!&lt; Value type of itself.</span></div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160;<span class="comment"></span> <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_array.html">GenericArray&lt;false, ValueType&gt;</a> <a class="code" href="classrapidjson_1_1_generic_array.html">Array</a>;</div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_array.html">GenericArray&lt;true, ValueType&gt;</a> <a class="code" href="classrapidjson_1_1_generic_array.html">ConstArray</a>;</div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject&lt;false, ValueType&gt;</a> <a class="code" href="classrapidjson_1_1_generic_object.html">Object</a>;</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject&lt;true, ValueType&gt;</a> <a class="code" href="classrapidjson_1_1_generic_object.html">ConstObject</a>;</div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160;<span class="comment"> //!@name Constructors and destructor.</span></div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160;<span class="comment"></span><span class="comment"> //@{</span></div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160;<span class="comment"> //! Default constructor creates a null value.</span></div><div class="line"><a name="l00597"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#ad1f8199e65662e0d52a13a1577d4e4a5"> 597</a></span>&#160;<span class="comment"></span> <a class="code" href="classrapidjson_1_1_generic_value.html#ad1f8199e65662e0d52a13a1577d4e4a5">GenericValue</a>() RAPIDJSON_NOEXCEPT : data_() { data_.f.flags = kNullFlag; }</div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160;</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160;<span class="comment"> //! Move constructor in C++11</span></div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160;<span class="comment"></span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp;&amp; rhs) RAPIDJSON_NOEXCEPT : data_(rhs.data_) {</div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; rhs.data_.f.flags = kNullFlag; <span class="comment">// give up contents</span></div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; }</div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160;</div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160;<span class="keyword">private</span>:<span class="comment"></span></div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160;<span class="comment"> //! Copy constructor is not permitted.</span></div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160;<span class="comment"></span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; rhs);</div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160;</div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160;<span class="comment"> //! Moving from a GenericDocument is not permitted.</span></div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160;<span class="comment"></span> <span class="keyword">template</span> &lt;<span class="keyword">typename</span> StackAllocator&gt;</div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(<a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument&lt;Encoding,Allocator,StackAllocator&gt;</a>&amp;&amp; rhs);</div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160;<span class="comment"> //! Move assignment from a GenericDocument is not permitted.</span></div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160;<span class="comment"></span> <span class="keyword">template</span> &lt;<span class="keyword">typename</span> StackAllocator&gt;</div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; operator=(<a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument&lt;Encoding,Allocator,StackAllocator&gt;</a>&amp;&amp; rhs);</div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160;</div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160;<span class="comment"> //! Constructor with JSON value type.</span></div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160;<span class="comment"></span><span class="comment"> /*! This creates a Value of specified type with default content.</span></div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160;<span class="comment"> \param type Type of the value.</span></div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160;<span class="comment"> \note Default content for number is zero.</span></div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00627"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a646b6d4d3d98799a0926d96ffa127a58"> 627</a></span>&#160; <span class="keyword">explicit</span> <a class="code" href="classrapidjson_1_1_generic_value.html#a646b6d4d3d98799a0926d96ffa127a58">GenericValue</a>(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">Type</a> type) RAPIDJSON_NOEXCEPT : data_() {</div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> uint16_t defaultFlags[7] = {</div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160; kNullFlag, kFalseFlag, kTrueFlag, kObjectFlag, kArrayFlag, kShortStringFlag,</div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160; kNumberAnyFlag</div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160; };</div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160; RAPIDJSON_NOEXCEPT_ASSERT(type &gt;= <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a952871e4326b527154fc8aac1ac1f6ff">kNullType</a> &amp;&amp; type &lt;= <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a">kNumberType</a>);</div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160; data_.f.flags = defaultFlags[type];</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160;</div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160; <span class="comment">// Use ShortString to store empty string.</span></div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160; <span class="keywordflow">if</span> (type == <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4ad6379da3dc04b83a591992bfb9fabba7">kStringType</a>)</div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160; data_.ss.SetLength(0);</div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160; }</div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160;<span class="comment"> //! Explicit copy constructor (with allocator)</span></div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160;<span class="comment"></span><span class="comment"> /*! Creates a copy of a Value by using the given Allocator</span></div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160;<span class="comment"> \tparam SourceAllocator allocator of \c rhs</span></div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160;<span class="comment"> \param rhs Value to copy from (read-only)</span></div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160;<span class="comment"> \param allocator Allocator for allocating copied elements and buffers. Commonly use GenericDocument::GetAllocator().</span></div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160;<span class="comment"> \param copyConstStrings Force copying of constant strings (e.g. referencing an in-situ buffer)</span></div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160;<span class="comment"> \see CopyFrom()</span></div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> SourceAllocator&gt;</div><div class="line"><a name="l00649"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#adca019775f68f012643781cd2c2515ac"> 649</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html#adca019775f68f012643781cd2c2515ac">GenericValue</a>(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue&lt;Encoding,SourceAllocator&gt;</a>&amp; rhs, Allocator&amp; allocator, <span class="keywordtype">bool</span> copyConstStrings = <span class="keyword">false</span>) {</div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; <span class="keywordflow">switch</span> (rhs.GetType()) {</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4acf030b422a32c3647c7c5973bd4dd0a9">kObjectType</a>: {</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160; <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> count = rhs.data_.o.size;</div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; Member* lm = <span class="keyword">reinterpret_cast&lt;</span>Member*<span class="keyword">&gt;</span>(allocator.Malloc(count * <span class="keyword">sizeof</span>(Member)));</div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="structrapidjson_1_1_generic_member.html">GenericValue&lt;Encoding,SourceAllocator&gt;::Member</a>* rm = rhs.GetMembersPointer();</div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> i = 0; i &lt; count; i++) {</div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; <span class="keyword">new</span> (&amp;lm[i].<a class="code" href="structrapidjson_1_1_generic_member.html#ae820eaa74b415a9073f3f3855f6c6607">name</a>) <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(rm[i].name, allocator, copyConstStrings);</div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160; <span class="keyword">new</span> (&amp;lm[i].<a class="code" href="structrapidjson_1_1_generic_member.html#a8ffff2076e62d988a070a136da6ffca6">value</a>) <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(rm[i].value, allocator, copyConstStrings);</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160; }</div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; data_.f.flags = kObjectFlag;</div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160; data_.o.size = data_.o.capacity = count;</div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160; SetMembersPointer(lm);</div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160; }</div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a058c622e1e7d59419ae58b895cbce468">kArrayType</a>: {</div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160; <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> count = rhs.data_.a.size;</div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>* le = <span class="keyword">reinterpret_cast&lt;</span><a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>*<span class="keyword">&gt;</span>(allocator.Malloc(count * <span class="keyword">sizeof</span>(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>)));</div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160; <span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue&lt;Encoding,SourceAllocator&gt;</a>* re = rhs.GetElementsPointer();</div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> i = 0; i &lt; count; i++)</div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160; <span class="keyword">new</span> (&amp;le[i]) <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(re[i], allocator, copyConstStrings);</div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160; data_.f.flags = kArrayFlag;</div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160; data_.a.size = data_.a.capacity = count;</div><div class="line"><a name="l00672"></a><span class="lineno"> 672</span>&#160; SetElementsPointer(le);</div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160; }</div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4ad6379da3dc04b83a591992bfb9fabba7">kStringType</a>:</div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160; <span class="keywordflow">if</span> (rhs.data_.f.flags == kConstStringFlag &amp;&amp; !copyConstStrings) {</div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160; data_.f.flags = rhs.data_.f.flags;</div><div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160; data_ = *<span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span>Data*<span class="keyword">&gt;</span>(&amp;rhs.data_);</div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160; }</div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160; SetStringRaw(<a class="code" href="namespacerapidjson.html#af94951529a5d51e8c4e6e770bb707c1f">StringRef</a>(rhs.GetString(), rhs.<a class="code" href="classrapidjson_1_1_generic_value.html#a18599e0d1a7e70a11b35f5e219390fea">GetStringLength</a>()), allocator);</div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160; data_.f.flags = rhs.data_.f.flags;</div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; data_ = *<span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span>Data*<span class="keyword">&gt;</span>(&amp;rhs.data_);</div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160; }</div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160; }</div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160;<span class="comment"> //! Constructor for boolean value.</span></div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160;<span class="comment"></span><span class="comment"> /*! \param b Boolean value</span></div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160;<span class="comment"> \note This constructor is limited to \em real boolean values and rejects</span></div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160;<span class="comment"> implicitly converted types like arbitrary pointers. Use an explicit cast</span></div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160;<span class="comment"> to \c bool, if you want to construct a boolean JSON value in such cases.</span></div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160;<span class="preprocessor">#ifndef RAPIDJSON_DOXYGEN_RUNNING // hide SFINAE from Doxygen</span></div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160; <span class="keyword">explicit</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(T b, RAPIDJSON_ENABLEIF((internal::IsSame&lt;bool, T&gt;))) RAPIDJSON_NOEXCEPT <span class="comment">// See #472</span></div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00700"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#ab933ad7ff8c9d08f73cebaecb700dbe9"> 700</a></span>&#160; <span class="keyword">explicit</span> <a class="code" href="classrapidjson_1_1_generic_value.html#ab933ad7ff8c9d08f73cebaecb700dbe9">GenericValue</a>(<span class="keywordtype">bool</span> b) RAPIDJSON_NOEXCEPT</div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160; : data_() {</div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160; <span class="comment">// safe-guard against failing SFINAE</span></div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160; <a class="code" href="rapidjson_8h.html#af95188da1d8eb6d4b148fe9ce71cd7c4">RAPIDJSON_STATIC_ASSERT</a>((<a class="code" href="namespacerapidjson.html#aa65fc9fb381b2cbc54f98673eadd6505">internal::IsSame&lt;bool,T&gt;::Value</a>));</div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160; data_.f.flags = b ? kTrueFlag : kFalseFlag;</div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160; }</div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160;<span class="comment"> //! Constructor for int value.</span></div><div class="line"><a name="l00709"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#abba0c9ccfd90726f916c36013a2e9e19"> 709</a></span>&#160;<span class="comment"></span> <span class="keyword">explicit</span> <a class="code" href="classrapidjson_1_1_generic_value.html#abba0c9ccfd90726f916c36013a2e9e19">GenericValue</a>(<span class="keywordtype">int</span> i) RAPIDJSON_NOEXCEPT : data_() {</div><div class="line"><a name="l00710"></a><span class="lineno"> 710</span>&#160; data_.n.i64 = i;</div><div class="line"><a name="l00711"></a><span class="lineno"> 711</span>&#160; data_.f.flags = (i &gt;= 0) ? (kNumberIntFlag | kUintFlag | kUint64Flag) : kNumberIntFlag;</div><div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160; }</div><div class="line"><a name="l00713"></a><span class="lineno"> 713</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00714"></a><span class="lineno"> 714</span>&#160;<span class="comment"> //! Constructor for unsigned value.</span></div><div class="line"><a name="l00715"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a4a8060a42b7953a2981ad892180ca5a6"> 715</a></span>&#160;<span class="comment"></span> <span class="keyword">explicit</span> <a class="code" href="classrapidjson_1_1_generic_value.html#a4a8060a42b7953a2981ad892180ca5a6">GenericValue</a>(<span class="keywordtype">unsigned</span> u) RAPIDJSON_NOEXCEPT : data_() {</div><div class="line"><a name="l00716"></a><span class="lineno"> 716</span>&#160; data_.n.u64 = u; </div><div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160; data_.f.flags = (u &amp; 0x80000000) ? kNumberUintFlag : (kNumberUintFlag | kIntFlag | kInt64Flag);</div><div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160; }</div><div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00720"></a><span class="lineno"> 720</span>&#160;<span class="comment"> //! Constructor for int64_t value.</span></div><div class="line"><a name="l00721"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#acd4ae9a8dba4498d1d7cce6667529bb8"> 721</a></span>&#160;<span class="comment"></span> <span class="keyword">explicit</span> <a class="code" href="classrapidjson_1_1_generic_value.html#acd4ae9a8dba4498d1d7cce6667529bb8">GenericValue</a>(int64_t i64) RAPIDJSON_NOEXCEPT : data_() {</div><div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160; data_.n.i64 = i64;</div><div class="line"><a name="l00723"></a><span class="lineno"> 723</span>&#160; data_.f.flags = kNumberInt64Flag;</div><div class="line"><a name="l00724"></a><span class="lineno"> 724</span>&#160; <span class="keywordflow">if</span> (i64 &gt;= 0) {</div><div class="line"><a name="l00725"></a><span class="lineno"> 725</span>&#160; data_.f.flags |= kNumberUint64Flag;</div><div class="line"><a name="l00726"></a><span class="lineno"> 726</span>&#160; <span class="keywordflow">if</span> (!(static_cast&lt;uint64_t&gt;(i64) &amp; <a class="code" href="rapidjson_8h.html#aaee1245f375a71be1ac9b8a07ba5fb8f">RAPIDJSON_UINT64_C2</a>(0xFFFFFFFF, 0x00000000)))</div><div class="line"><a name="l00727"></a><span class="lineno"> 727</span>&#160; data_.f.flags |= kUintFlag;</div><div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160; <span class="keywordflow">if</span> (!(static_cast&lt;uint64_t&gt;(i64) &amp; <a class="code" href="rapidjson_8h.html#aaee1245f375a71be1ac9b8a07ba5fb8f">RAPIDJSON_UINT64_C2</a>(0xFFFFFFFF, 0x80000000)))</div><div class="line"><a name="l00729"></a><span class="lineno"> 729</span>&#160; data_.f.flags |= kIntFlag;</div><div class="line"><a name="l00730"></a><span class="lineno"> 730</span>&#160; }</div><div class="line"><a name="l00731"></a><span class="lineno"> 731</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (i64 &gt;= static_cast&lt;int64_t&gt;(<a class="code" href="rapidjson_8h.html#aaee1245f375a71be1ac9b8a07ba5fb8f">RAPIDJSON_UINT64_C2</a>(0xFFFFFFFF, 0x80000000)))</div><div class="line"><a name="l00732"></a><span class="lineno"> 732</span>&#160; data_.f.flags |= kIntFlag;</div><div class="line"><a name="l00733"></a><span class="lineno"> 733</span>&#160; }</div><div class="line"><a name="l00734"></a><span class="lineno"> 734</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00735"></a><span class="lineno"> 735</span>&#160;<span class="comment"> //! Constructor for uint64_t value.</span></div><div class="line"><a name="l00736"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a1f125e735577aae64c0306345de45563"> 736</a></span>&#160;<span class="comment"></span> <span class="keyword">explicit</span> <a class="code" href="classrapidjson_1_1_generic_value.html#a1f125e735577aae64c0306345de45563">GenericValue</a>(uint64_t u64) RAPIDJSON_NOEXCEPT : data_() {</div><div class="line"><a name="l00737"></a><span class="lineno"> 737</span>&#160; data_.n.u64 = u64;</div><div class="line"><a name="l00738"></a><span class="lineno"> 738</span>&#160; data_.f.flags = kNumberUint64Flag;</div><div class="line"><a name="l00739"></a><span class="lineno"> 739</span>&#160; <span class="keywordflow">if</span> (!(u64 &amp; <a class="code" href="rapidjson_8h.html#aaee1245f375a71be1ac9b8a07ba5fb8f">RAPIDJSON_UINT64_C2</a>(0x80000000, 0x00000000)))</div><div class="line"><a name="l00740"></a><span class="lineno"> 740</span>&#160; data_.f.flags |= kInt64Flag;</div><div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160; <span class="keywordflow">if</span> (!(u64 &amp; <a class="code" href="rapidjson_8h.html#aaee1245f375a71be1ac9b8a07ba5fb8f">RAPIDJSON_UINT64_C2</a>(0xFFFFFFFF, 0x00000000)))</div><div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160; data_.f.flags |= kUintFlag;</div><div class="line"><a name="l00743"></a><span class="lineno"> 743</span>&#160; <span class="keywordflow">if</span> (!(u64 &amp; <a class="code" href="rapidjson_8h.html#aaee1245f375a71be1ac9b8a07ba5fb8f">RAPIDJSON_UINT64_C2</a>(0xFFFFFFFF, 0x80000000)))</div><div class="line"><a name="l00744"></a><span class="lineno"> 744</span>&#160; data_.f.flags |= kIntFlag;</div><div class="line"><a name="l00745"></a><span class="lineno"> 745</span>&#160; }</div><div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00747"></a><span class="lineno"> 747</span>&#160;<span class="comment"> //! Constructor for double value.</span></div><div class="line"><a name="l00748"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a71b9e2ec1f7bf9e2f034126ca7b4945a"> 748</a></span>&#160;<span class="comment"></span> <span class="keyword">explicit</span> <a class="code" href="classrapidjson_1_1_generic_value.html#a71b9e2ec1f7bf9e2f034126ca7b4945a">GenericValue</a>(<span class="keywordtype">double</span> d) RAPIDJSON_NOEXCEPT : data_() { data_.n.d = d; data_.f.flags = kNumberDoubleFlag; }</div><div class="line"><a name="l00749"></a><span class="lineno"> 749</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00750"></a><span class="lineno"> 750</span>&#160;<span class="comment"> //! Constructor for float value.</span></div><div class="line"><a name="l00751"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#afe94e5e86a5b1a3fb605a9f8422f048b"> 751</a></span>&#160;<span class="comment"></span> <span class="keyword">explicit</span> <a class="code" href="classrapidjson_1_1_generic_value.html#afe94e5e86a5b1a3fb605a9f8422f048b">GenericValue</a>(<span class="keywordtype">float</span> f) RAPIDJSON_NOEXCEPT : data_() { data_.n.d = <span class="keyword">static_cast&lt;</span><span class="keywordtype">double</span><span class="keyword">&gt;</span>(f); data_.f.flags = kNumberDoubleFlag; }</div><div class="line"><a name="l00752"></a><span class="lineno"> 752</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00753"></a><span class="lineno"> 753</span>&#160;<span class="comment"> //! Constructor for constant string (i.e. do not make a copy of string)</span></div><div class="line"><a name="l00754"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a51e93a4fb57f77a39767acb076bf43c1"> 754</a></span>&#160;<span class="comment"></span> <a class="code" href="classrapidjson_1_1_generic_value.html#a51e93a4fb57f77a39767acb076bf43c1">GenericValue</a>(<span class="keyword">const</span> Ch* s, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> length) RAPIDJSON_NOEXCEPT : data_() { SetStringRaw(<a class="code" href="namespacerapidjson.html#af94951529a5d51e8c4e6e770bb707c1f">StringRef</a>(s, length)); }</div><div class="line"><a name="l00755"></a><span class="lineno"> 755</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00756"></a><span class="lineno"> 756</span>&#160;<span class="comment"> //! Constructor for constant string (i.e. do not make a copy of string)</span></div><div class="line"><a name="l00757"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a65bfc3073fa80ee5eba8e985abe2f941"> 757</a></span>&#160;<span class="comment"></span> <span class="keyword">explicit</span> <a class="code" href="classrapidjson_1_1_generic_value.html#a65bfc3073fa80ee5eba8e985abe2f941">GenericValue</a>(StringRefType s) RAPIDJSON_NOEXCEPT : data_() { SetStringRaw(s); }</div><div class="line"><a name="l00758"></a><span class="lineno"> 758</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00759"></a><span class="lineno"> 759</span>&#160;<span class="comment"> //! Constructor for copy-string (i.e. do make a copy of string)</span></div><div class="line"><a name="l00760"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#ad9553bb9ccbfd19547c473a95405a8b2"> 760</a></span>&#160;<span class="comment"></span> <a class="code" href="classrapidjson_1_1_generic_value.html#ad9553bb9ccbfd19547c473a95405a8b2">GenericValue</a>(<span class="keyword">const</span> Ch* s, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> length, Allocator&amp; allocator) : data_() { SetStringRaw(<a class="code" href="namespacerapidjson.html#af94951529a5d51e8c4e6e770bb707c1f">StringRef</a>(s, length), allocator); }</div><div class="line"><a name="l00761"></a><span class="lineno"> 761</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00762"></a><span class="lineno"> 762</span>&#160;<span class="comment"> //! Constructor for copy-string (i.e. do make a copy of string)</span></div><div class="line"><a name="l00763"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a83ba61e8a5170c2e172fd60ebc11016f"> 763</a></span>&#160;<span class="comment"></span> <a class="code" href="classrapidjson_1_1_generic_value.html#a83ba61e8a5170c2e172fd60ebc11016f">GenericValue</a>(<span class="keyword">const</span> Ch*s, Allocator&amp; allocator) : data_() { SetStringRaw(<a class="code" href="namespacerapidjson.html#af94951529a5d51e8c4e6e770bb707c1f">StringRef</a>(s), allocator); }</div><div class="line"><a name="l00764"></a><span class="lineno"> 764</span>&#160;</div><div class="line"><a name="l00765"></a><span class="lineno"> 765</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l00766"></a><span class="lineno"> 766</span>&#160;<span class="comment"> //! Constructor for copy-string from a string object (i.e. do make a copy of string)</span></div><div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160;<span class="comment"></span><span class="comment"> /*! \note Requires the definition of the preprocessor symbol \ref RAPIDJSON_HAS_STDSTRING.</span></div><div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00769"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a852788b35257762cd8d6c4bf5c5d77bc"> 769</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html#a852788b35257762cd8d6c4bf5c5d77bc">GenericValue</a>(<span class="keyword">const</span> std::basic_string&lt;Ch&gt;&amp; s, Allocator&amp; allocator) : data_() { SetStringRaw(<a class="code" href="namespacerapidjson.html#af94951529a5d51e8c4e6e770bb707c1f">StringRef</a>(s), allocator); }</div><div class="line"><a name="l00770"></a><span class="lineno"> 770</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00771"></a><span class="lineno"> 771</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00772"></a><span class="lineno"> 772</span>&#160;<span class="comment"> //! Constructor for Array.</span></div><div class="line"><a name="l00773"></a><span class="lineno"> 773</span>&#160;<span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l00774"></a><span class="lineno"> 774</span>&#160;<span class="comment"> \param a An array obtained by \c GetArray().</span></div><div class="line"><a name="l00775"></a><span class="lineno"> 775</span>&#160;<span class="comment"> \note \c Array is always pass-by-value.</span></div><div class="line"><a name="l00776"></a><span class="lineno"> 776</span>&#160;<span class="comment"> \note the source array is moved into this value and the sourec array becomes empty.</span></div><div class="line"><a name="l00777"></a><span class="lineno"> 777</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00778"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a77b0f41557b3c34b57a180698312c4a8"> 778</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html#a77b0f41557b3c34b57a180698312c4a8">GenericValue</a>(Array a) RAPIDJSON_NOEXCEPT : data_(a.value_.data_) {</div><div class="line"><a name="l00779"></a><span class="lineno"> 779</span>&#160; a.value_.data_ = Data();</div><div class="line"><a name="l00780"></a><span class="lineno"> 780</span>&#160; a.value_.data_.f.flags = kArrayFlag;</div><div class="line"><a name="l00781"></a><span class="lineno"> 781</span>&#160; }</div><div class="line"><a name="l00782"></a><span class="lineno"> 782</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00783"></a><span class="lineno"> 783</span>&#160;<span class="comment"> //! Constructor for Object.</span></div><div class="line"><a name="l00784"></a><span class="lineno"> 784</span>&#160;<span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l00785"></a><span class="lineno"> 785</span>&#160;<span class="comment"> \param o An object obtained by \c GetObject().</span></div><div class="line"><a name="l00786"></a><span class="lineno"> 786</span>&#160;<span class="comment"> \note \c Object is always pass-by-value.</span></div><div class="line"><a name="l00787"></a><span class="lineno"> 787</span>&#160;<span class="comment"> \note the source object is moved into this value and the sourec object becomes empty.</span></div><div class="line"><a name="l00788"></a><span class="lineno"> 788</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00789"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a893da1069660536fd3943a0149206a6e"> 789</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html#a893da1069660536fd3943a0149206a6e">GenericValue</a>(Object o) RAPIDJSON_NOEXCEPT : data_(o.value_.data_) {</div><div class="line"><a name="l00790"></a><span class="lineno"> 790</span>&#160; o.value_.data_ = Data();</div><div class="line"><a name="l00791"></a><span class="lineno"> 791</span>&#160; o.value_.data_.f.flags = kObjectFlag;</div><div class="line"><a name="l00792"></a><span class="lineno"> 792</span>&#160; }</div><div class="line"><a name="l00793"></a><span class="lineno"> 793</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00794"></a><span class="lineno"> 794</span>&#160;<span class="comment"> //! Destructor.</span></div><div class="line"><a name="l00795"></a><span class="lineno"> 795</span>&#160;<span class="comment"></span><span class="comment"> /*! Need to destruct elements of array, members of object, or copy-string.</span></div><div class="line"><a name="l00796"></a><span class="lineno"> 796</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00797"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a433a64b466c80cadf7d1acaa6f065437"> 797</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html#a433a64b466c80cadf7d1acaa6f065437">~GenericValue</a>() {</div><div class="line"><a name="l00798"></a><span class="lineno"> 798</span>&#160; <span class="keywordflow">if</span> (Allocator::kNeedFree) { <span class="comment">// Shortcut by Allocator&#39;s trait</span></div><div class="line"><a name="l00799"></a><span class="lineno"> 799</span>&#160; <span class="keywordflow">switch</span>(data_.f.flags) {</div><div class="line"><a name="l00800"></a><span class="lineno"> 800</span>&#160; <span class="keywordflow">case</span> kArrayFlag:</div><div class="line"><a name="l00801"></a><span class="lineno"> 801</span>&#160; {</div><div class="line"><a name="l00802"></a><span class="lineno"> 802</span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>* e = GetElementsPointer();</div><div class="line"><a name="l00803"></a><span class="lineno"> 803</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>* v = e; v != e + data_.a.size; ++v)</div><div class="line"><a name="l00804"></a><span class="lineno"> 804</span>&#160; v-&gt;~GenericValue();</div><div class="line"><a name="l00805"></a><span class="lineno"> 805</span>&#160; Allocator::Free(e);</div><div class="line"><a name="l00806"></a><span class="lineno"> 806</span>&#160; }</div><div class="line"><a name="l00807"></a><span class="lineno"> 807</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00808"></a><span class="lineno"> 808</span>&#160;</div><div class="line"><a name="l00809"></a><span class="lineno"> 809</span>&#160; <span class="keywordflow">case</span> kObjectFlag:</div><div class="line"><a name="l00810"></a><span class="lineno"> 810</span>&#160; <span class="keywordflow">for</span> (MemberIterator m = MemberBegin(); m != MemberEnd(); ++m)</div><div class="line"><a name="l00811"></a><span class="lineno"> 811</span>&#160; m-&gt;~Member();</div><div class="line"><a name="l00812"></a><span class="lineno"> 812</span>&#160; Allocator::Free(GetMembersPointer());</div><div class="line"><a name="l00813"></a><span class="lineno"> 813</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00814"></a><span class="lineno"> 814</span>&#160;</div><div class="line"><a name="l00815"></a><span class="lineno"> 815</span>&#160; <span class="keywordflow">case</span> kCopyStringFlag:</div><div class="line"><a name="l00816"></a><span class="lineno"> 816</span>&#160; Allocator::Free(const_cast&lt;Ch*&gt;(GetStringPointer()));</div><div class="line"><a name="l00817"></a><span class="lineno"> 817</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00818"></a><span class="lineno"> 818</span>&#160;</div><div class="line"><a name="l00819"></a><span class="lineno"> 819</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l00820"></a><span class="lineno"> 820</span>&#160; <span class="keywordflow">break</span>; <span class="comment">// Do nothing for other types.</span></div><div class="line"><a name="l00821"></a><span class="lineno"> 821</span>&#160; }</div><div class="line"><a name="l00822"></a><span class="lineno"> 822</span>&#160; }</div><div class="line"><a name="l00823"></a><span class="lineno"> 823</span>&#160; }</div><div class="line"><a name="l00824"></a><span class="lineno"> 824</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00825"></a><span class="lineno"> 825</span>&#160;<span class="comment"> //@}</span></div><div class="line"><a name="l00826"></a><span class="lineno"> 826</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00827"></a><span class="lineno"> 827</span>&#160;<span class="comment"> //!@name Assignment operators</span></div><div class="line"><a name="l00828"></a><span class="lineno"> 828</span>&#160;<span class="comment"></span><span class="comment"> //@{</span></div><div class="line"><a name="l00829"></a><span class="lineno"> 829</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00830"></a><span class="lineno"> 830</span>&#160;<span class="comment"> //! Assignment with move semantics.</span></div><div class="line"><a name="l00831"></a><span class="lineno"> 831</span>&#160;<span class="comment"></span><span class="comment"> /*! \param rhs Source of the assignment. It will become a null value after assignment.</span></div><div class="line"><a name="l00832"></a><span class="lineno"> 832</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00833"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#ae8bcedd951f50b69786aaaa1828e9fac"> 833</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#ae8bcedd951f50b69786aaaa1828e9fac">operator=</a>(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; rhs) RAPIDJSON_NOEXCEPT {</div><div class="line"><a name="l00834"></a><span class="lineno"> 834</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">this</span> != &amp;rhs) {</div><div class="line"><a name="l00835"></a><span class="lineno"> 835</span>&#160; this-&gt;~<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>();</div><div class="line"><a name="l00836"></a><span class="lineno"> 836</span>&#160; RawAssign(rhs);</div><div class="line"><a name="l00837"></a><span class="lineno"> 837</span>&#160; }</div><div class="line"><a name="l00838"></a><span class="lineno"> 838</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00839"></a><span class="lineno"> 839</span>&#160; }</div><div class="line"><a name="l00840"></a><span class="lineno"> 840</span>&#160;</div><div class="line"><a name="l00841"></a><span class="lineno"> 841</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l00842"></a><span class="lineno"> 842</span>&#160;<span class="comment"> //! Move assignment in C++11</span></div><div class="line"><a name="l00843"></a><span class="lineno"> 843</span>&#160;<span class="comment"></span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; operator=(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp;&amp; rhs) RAPIDJSON_NOEXCEPT {</div><div class="line"><a name="l00844"></a><span class="lineno"> 844</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span> = rhs.<a class="code" href="classrapidjson_1_1_generic_value.html#a07b19e65fb756cae13e5bdc515cfbd4b">Move</a>();</div><div class="line"><a name="l00845"></a><span class="lineno"> 845</span>&#160; }</div><div class="line"><a name="l00846"></a><span class="lineno"> 846</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00847"></a><span class="lineno"> 847</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00848"></a><span class="lineno"> 848</span>&#160;<span class="comment"> //! Assignment of constant string reference (no copy)</span></div><div class="line"><a name="l00849"></a><span class="lineno"> 849</span>&#160;<span class="comment"></span><span class="comment"> /*! \param str Constant string reference to be assigned</span></div><div class="line"><a name="l00850"></a><span class="lineno"> 850</span>&#160;<span class="comment"> \note This overload is needed to avoid clashes with the generic primitive type assignment overload below.</span></div><div class="line"><a name="l00851"></a><span class="lineno"> 851</span>&#160;<span class="comment"> \see GenericStringRef, operator=(T)</span></div><div class="line"><a name="l00852"></a><span class="lineno"> 852</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00853"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#aecc9d0a6aafe31f4fdf9f6e75e5f089c"> 853</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#aecc9d0a6aafe31f4fdf9f6e75e5f089c">operator=</a>(StringRefType str) RAPIDJSON_NOEXCEPT {</div><div class="line"><a name="l00854"></a><span class="lineno"> 854</span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a> s(str);</div><div class="line"><a name="l00855"></a><span class="lineno"> 855</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span> = s;</div><div class="line"><a name="l00856"></a><span class="lineno"> 856</span>&#160; }</div><div class="line"><a name="l00857"></a><span class="lineno"> 857</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00858"></a><span class="lineno"> 858</span>&#160;<span class="comment"> //! Assignment with primitive types.</span></div><div class="line"><a name="l00859"></a><span class="lineno"> 859</span>&#160;<span class="comment"></span><span class="comment"> /*! \tparam T Either \ref Type, \c int, \c unsigned, \c int64_t, \c uint64_t</span></div><div class="line"><a name="l00860"></a><span class="lineno"> 860</span>&#160;<span class="comment"> \param value The value to be assigned.</span></div><div class="line"><a name="l00861"></a><span class="lineno"> 861</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00862"></a><span class="lineno"> 862</span>&#160;<span class="comment"> \note The source type \c T explicitly disallows all pointer types,</span></div><div class="line"><a name="l00863"></a><span class="lineno"> 863</span>&#160;<span class="comment"> especially (\c const) \ref Ch*. This helps avoiding implicitly</span></div><div class="line"><a name="l00864"></a><span class="lineno"> 864</span>&#160;<span class="comment"> referencing character strings with insufficient lifetime, use</span></div><div class="line"><a name="l00865"></a><span class="lineno"> 865</span>&#160;<span class="comment"> \ref SetString(const Ch*, Allocator&amp;) (for copying) or</span></div><div class="line"><a name="l00866"></a><span class="lineno"> 866</span>&#160;<span class="comment"> \ref StringRef() (to explicitly mark the pointer as constant) instead.</span></div><div class="line"><a name="l00867"></a><span class="lineno"> 867</span>&#160;<span class="comment"> All other pointer types would implicitly convert to \c bool,</span></div><div class="line"><a name="l00868"></a><span class="lineno"> 868</span>&#160;<span class="comment"> use \ref SetBool() instead.</span></div><div class="line"><a name="l00869"></a><span class="lineno"> 869</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00870"></a><span class="lineno"> 870</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l00871"></a><span class="lineno"> 871</span>&#160; RAPIDJSON_DISABLEIF_RETURN((internal::IsPointer&lt;T&gt;), (<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp;))</div><div class="line"><a name="l00872"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#ab7446da62fdc61d6d987d508cdb6ac13"> 872</a></span>&#160; operator=(T value) {</div><div class="line"><a name="l00873"></a><span class="lineno"> 873</span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a> v(value);</div><div class="line"><a name="l00874"></a><span class="lineno"> 874</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span> = v;</div><div class="line"><a name="l00875"></a><span class="lineno"> 875</span>&#160; }</div><div class="line"><a name="l00876"></a><span class="lineno"> 876</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00877"></a><span class="lineno"> 877</span>&#160;<span class="comment"> //! Deep-copy assignment from Value</span></div><div class="line"><a name="l00878"></a><span class="lineno"> 878</span>&#160;<span class="comment"></span><span class="comment"> /*! Assigns a \b copy of the Value to the current Value object</span></div><div class="line"><a name="l00879"></a><span class="lineno"> 879</span>&#160;<span class="comment"> \tparam SourceAllocator Allocator type of \c rhs</span></div><div class="line"><a name="l00880"></a><span class="lineno"> 880</span>&#160;<span class="comment"> \param rhs Value to copy from (read-only)</span></div><div class="line"><a name="l00881"></a><span class="lineno"> 881</span>&#160;<span class="comment"> \param allocator Allocator to use for copying</span></div><div class="line"><a name="l00882"></a><span class="lineno"> 882</span>&#160;<span class="comment"> \param copyConstStrings Force copying of constant strings (e.g. referencing an in-situ buffer)</span></div><div class="line"><a name="l00883"></a><span class="lineno"> 883</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00884"></a><span class="lineno"> 884</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> SourceAllocator&gt;</div><div class="line"><a name="l00885"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#ad9399a2a69444c44a9db2f63c3aa3eae"> 885</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#ad9399a2a69444c44a9db2f63c3aa3eae">CopyFrom</a>(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue&lt;Encoding, SourceAllocator&gt;</a>&amp; rhs, Allocator&amp; allocator, <span class="keywordtype">bool</span> copyConstStrings = <span class="keyword">false</span>) {</div><div class="line"><a name="l00886"></a><span class="lineno"> 886</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(static_cast&lt;void*&gt;(<span class="keyword">this</span>) != static_cast&lt;void const*&gt;(&amp;rhs));</div><div class="line"><a name="l00887"></a><span class="lineno"> 887</span>&#160; this-&gt;~<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>();</div><div class="line"><a name="l00888"></a><span class="lineno"> 888</span>&#160; <span class="keyword">new</span> (<span class="keyword">this</span>) <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(rhs, allocator, copyConstStrings);</div><div class="line"><a name="l00889"></a><span class="lineno"> 889</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00890"></a><span class="lineno"> 890</span>&#160; }</div><div class="line"><a name="l00891"></a><span class="lineno"> 891</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00892"></a><span class="lineno"> 892</span>&#160;<span class="comment"> //! Exchange the contents of this value with those of other.</span></div><div class="line"><a name="l00893"></a><span class="lineno"> 893</span>&#160;<span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l00894"></a><span class="lineno"> 894</span>&#160;<span class="comment"> \param other Another value.</span></div><div class="line"><a name="l00895"></a><span class="lineno"> 895</span>&#160;<span class="comment"> \note Constant complexity.</span></div><div class="line"><a name="l00896"></a><span class="lineno"> 896</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00897"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a06f10ef54f5692ce08206c26624a21db"> 897</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#a06f10ef54f5692ce08206c26624a21db">Swap</a>(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; other) RAPIDJSON_NOEXCEPT {</div><div class="line"><a name="l00898"></a><span class="lineno"> 898</span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a> temp;</div><div class="line"><a name="l00899"></a><span class="lineno"> 899</span>&#160; temp.RawAssign(*<span class="keyword">this</span>);</div><div class="line"><a name="l00900"></a><span class="lineno"> 900</span>&#160; RawAssign(other);</div><div class="line"><a name="l00901"></a><span class="lineno"> 901</span>&#160; other.RawAssign(temp);</div><div class="line"><a name="l00902"></a><span class="lineno"> 902</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00903"></a><span class="lineno"> 903</span>&#160; }</div><div class="line"><a name="l00904"></a><span class="lineno"> 904</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00905"></a><span class="lineno"> 905</span>&#160;<span class="comment"> //! free-standing swap function helper</span></div><div class="line"><a name="l00906"></a><span class="lineno"> 906</span>&#160;<span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l00907"></a><span class="lineno"> 907</span>&#160;<span class="comment"> Helper function to enable support for common swap implementation pattern based on \c std::swap:</span></div><div class="line"><a name="l00908"></a><span class="lineno"> 908</span>&#160;<span class="comment"> \code</span></div><div class="line"><a name="l00909"></a><span class="lineno"> 909</span>&#160;<span class="comment"> void swap(MyClass&amp; a, MyClass&amp; b) {</span></div><div class="line"><a name="l00910"></a><span class="lineno"> 910</span>&#160;<span class="comment"> using std::swap;</span></div><div class="line"><a name="l00911"></a><span class="lineno"> 911</span>&#160;<span class="comment"> swap(a.value, b.value);</span></div><div class="line"><a name="l00912"></a><span class="lineno"> 912</span>&#160;<span class="comment"> // ...</span></div><div class="line"><a name="l00913"></a><span class="lineno"> 913</span>&#160;<span class="comment"> }</span></div><div class="line"><a name="l00914"></a><span class="lineno"> 914</span>&#160;<span class="comment"> \endcode</span></div><div class="line"><a name="l00915"></a><span class="lineno"> 915</span>&#160;<span class="comment"> \see Swap()</span></div><div class="line"><a name="l00916"></a><span class="lineno"> 916</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00917"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a58ecce8a34fc029039b8079de246bdaa"> 917</a></span>&#160; <span class="keyword">friend</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classrapidjson_1_1_generic_value.html#a58ecce8a34fc029039b8079de246bdaa">swap</a>(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; a, <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; b) RAPIDJSON_NOEXCEPT { a.Swap(b); }</div><div class="line"><a name="l00918"></a><span class="lineno"> 918</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00919"></a><span class="lineno"> 919</span>&#160;<span class="comment"> //! Prepare Value for move semantics</span></div><div class="line"><a name="l00920"></a><span class="lineno"> 920</span>&#160;<span class="comment"></span><span class="comment"> /*! \return *this */</span></div><div class="line"><a name="l00921"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a07b19e65fb756cae13e5bdc515cfbd4b"> 921</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#a07b19e65fb756cae13e5bdc515cfbd4b">Move</a>() RAPIDJSON_NOEXCEPT { <span class="keywordflow">return</span> *<span class="keyword">this</span>; }<span class="comment"></span></div><div class="line"><a name="l00922"></a><span class="lineno"> 922</span>&#160;<span class="comment"> //@}</span></div><div class="line"><a name="l00923"></a><span class="lineno"> 923</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00924"></a><span class="lineno"> 924</span>&#160;<span class="comment"> //!@name Equal-to and not-equal-to operators</span></div><div class="line"><a name="l00925"></a><span class="lineno"> 925</span>&#160;<span class="comment"></span><span class="comment"> //@{</span></div><div class="line"><a name="l00926"></a><span class="lineno"> 926</span>&#160;<span class="comment"></span><span class="comment"> //! Equal-to operator</span></div><div class="line"><a name="l00927"></a><span class="lineno"> 927</span>&#160;<span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l00928"></a><span class="lineno"> 928</span>&#160;<span class="comment"> \note If an object contains duplicated named member, comparing equality with any object is always \c false.</span></div><div class="line"><a name="l00929"></a><span class="lineno"> 929</span>&#160;<span class="comment"> \note Linear time complexity (number of all values in the subtree and total lengths of all strings).</span></div><div class="line"><a name="l00930"></a><span class="lineno"> 930</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00931"></a><span class="lineno"> 931</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> SourceAllocator&gt;</div><div class="line"><a name="l00932"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#ab4e5285102bb686f39bca2855a17a181"> 932</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_generic_value.html#ab4e5285102bb686f39bca2855a17a181">operator==</a>(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue&lt;Encoding, SourceAllocator&gt;</a>&amp; rhs)<span class="keyword"> const </span>{</div><div class="line"><a name="l00933"></a><span class="lineno"> 933</span>&#160; <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue&lt;Encoding, SourceAllocator&gt;</a> RhsType;</div><div class="line"><a name="l00934"></a><span class="lineno"> 934</span>&#160; <span class="keywordflow">if</span> (GetType() != rhs.GetType())</div><div class="line"><a name="l00935"></a><span class="lineno"> 935</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00936"></a><span class="lineno"> 936</span>&#160;</div><div class="line"><a name="l00937"></a><span class="lineno"> 937</span>&#160; <span class="keywordflow">switch</span> (GetType()) {</div><div class="line"><a name="l00938"></a><span class="lineno"> 938</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4acf030b422a32c3647c7c5973bd4dd0a9">kObjectType</a>: <span class="comment">// Warning: O(n^2) inner-loop</span></div><div class="line"><a name="l00939"></a><span class="lineno"> 939</span>&#160; <span class="keywordflow">if</span> (data_.o.size != rhs.data_.o.size)</div><div class="line"><a name="l00940"></a><span class="lineno"> 940</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>; </div><div class="line"><a name="l00941"></a><span class="lineno"> 941</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classrapidjson_1_1_generic_member_iterator.html">ConstMemberIterator</a> lhsMemberItr = MemberBegin(); lhsMemberItr != MemberEnd(); ++lhsMemberItr) {</div><div class="line"><a name="l00942"></a><span class="lineno"> 942</span>&#160; <span class="keyword">typename</span> RhsType::ConstMemberIterator rhsMemberItr = rhs.<a class="code" href="classrapidjson_1_1_generic_value.html#ad22fdeac87ec6c370dd43075d3586811">FindMember</a>(lhsMemberItr-&gt;name);</div><div class="line"><a name="l00943"></a><span class="lineno"> 943</span>&#160; <span class="keywordflow">if</span> (rhsMemberItr == rhs.<a class="code" href="classrapidjson_1_1_generic_value.html#a34ee3d75a7aa308043fb34b0743bfe7c">MemberEnd</a>() || lhsMemberItr-&gt;value != rhsMemberItr-&gt;value)</div><div class="line"><a name="l00944"></a><span class="lineno"> 944</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00945"></a><span class="lineno"> 945</span>&#160; }</div><div class="line"><a name="l00946"></a><span class="lineno"> 946</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00947"></a><span class="lineno"> 947</span>&#160; </div><div class="line"><a name="l00948"></a><span class="lineno"> 948</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a058c622e1e7d59419ae58b895cbce468">kArrayType</a>:</div><div class="line"><a name="l00949"></a><span class="lineno"> 949</span>&#160; <span class="keywordflow">if</span> (data_.a.size != rhs.data_.a.size)</div><div class="line"><a name="l00950"></a><span class="lineno"> 950</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00951"></a><span class="lineno"> 951</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> i = 0; i &lt; data_.a.size; i++)</div><div class="line"><a name="l00952"></a><span class="lineno"> 952</span>&#160; <span class="keywordflow">if</span> ((*<span class="keyword">this</span>)[i] != rhs[i])</div><div class="line"><a name="l00953"></a><span class="lineno"> 953</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00954"></a><span class="lineno"> 954</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00955"></a><span class="lineno"> 955</span>&#160;</div><div class="line"><a name="l00956"></a><span class="lineno"> 956</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4ad6379da3dc04b83a591992bfb9fabba7">kStringType</a>:</div><div class="line"><a name="l00957"></a><span class="lineno"> 957</span>&#160; <span class="keywordflow">return</span> StringEqual(rhs);</div><div class="line"><a name="l00958"></a><span class="lineno"> 958</span>&#160;</div><div class="line"><a name="l00959"></a><span class="lineno"> 959</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a">kNumberType</a>:</div><div class="line"><a name="l00960"></a><span class="lineno"> 960</span>&#160; <span class="keywordflow">if</span> (IsDouble() || rhs.IsDouble()) {</div><div class="line"><a name="l00961"></a><span class="lineno"> 961</span>&#160; <span class="keywordtype">double</span> a = GetDouble(); <span class="comment">// May convert from integer to double.</span></div><div class="line"><a name="l00962"></a><span class="lineno"> 962</span>&#160; <span class="keywordtype">double</span> b = rhs.<a class="code" href="classrapidjson_1_1_generic_value.html#aa27d086d265f0ce447b15b15f0a2ed6e">GetDouble</a>(); <span class="comment">// Ditto</span></div><div class="line"><a name="l00963"></a><span class="lineno"> 963</span>&#160; <span class="keywordflow">return</span> a &gt;= b &amp;&amp; a &lt;= b; <span class="comment">// Prevent -Wfloat-equal</span></div><div class="line"><a name="l00964"></a><span class="lineno"> 964</span>&#160; }</div><div class="line"><a name="l00965"></a><span class="lineno"> 965</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00966"></a><span class="lineno"> 966</span>&#160; <span class="keywordflow">return</span> data_.n.u64 == rhs.data_.n.u64;</div><div class="line"><a name="l00967"></a><span class="lineno"> 967</span>&#160;</div><div class="line"><a name="l00968"></a><span class="lineno"> 968</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l00969"></a><span class="lineno"> 969</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00970"></a><span class="lineno"> 970</span>&#160; }</div><div class="line"><a name="l00971"></a><span class="lineno"> 971</span>&#160; }</div><div class="line"><a name="l00972"></a><span class="lineno"> 972</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00973"></a><span class="lineno"> 973</span>&#160;<span class="comment"> //! Equal-to operator with const C-string pointer</span></div><div class="line"><a name="l00974"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#af03ef6020e188bbfceb018da5cd8becc"> 974</a></span>&#160;<span class="comment"></span> <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_generic_value.html#af03ef6020e188bbfceb018da5cd8becc">operator==</a>(<span class="keyword">const</span> Ch* rhs)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> *<span class="keyword">this</span> == <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(<a class="code" href="namespacerapidjson.html#af94951529a5d51e8c4e6e770bb707c1f">StringRef</a>(rhs)); }</div><div class="line"><a name="l00975"></a><span class="lineno"> 975</span>&#160;</div><div class="line"><a name="l00976"></a><span class="lineno"> 976</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l00977"></a><span class="lineno"> 977</span>&#160;<span class="comment"> //! Equal-to operator with string object</span></div><div class="line"><a name="l00978"></a><span class="lineno"> 978</span>&#160;<span class="comment"></span><span class="comment"> /*! \note Requires the definition of the preprocessor symbol \ref RAPIDJSON_HAS_STDSTRING.</span></div><div class="line"><a name="l00979"></a><span class="lineno"> 979</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00980"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#af089d2bee0386ca7504ff4fab466c87f"> 980</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_generic_value.html#af089d2bee0386ca7504ff4fab466c87f">operator==</a>(<span class="keyword">const</span> std::basic_string&lt;Ch&gt;&amp; rhs)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> *<span class="keyword">this</span> == <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(<a class="code" href="namespacerapidjson.html#af94951529a5d51e8c4e6e770bb707c1f">StringRef</a>(rhs)); }</div><div class="line"><a name="l00981"></a><span class="lineno"> 981</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00982"></a><span class="lineno"> 982</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00983"></a><span class="lineno"> 983</span>&#160;<span class="comment"> //! Equal-to operator with primitive types</span></div><div class="line"><a name="l00984"></a><span class="lineno"> 984</span>&#160;<span class="comment"></span><span class="comment"> /*! \tparam T Either \ref Type, \c int, \c unsigned, \c int64_t, \c uint64_t, \c double, \c true, \c false</span></div><div class="line"><a name="l00985"></a><span class="lineno"> 985</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00986"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#aaddbbbb35cd783f209f889cf8dea9570"> 986</a></span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt; RAPIDJSON_DISABLEIF_RETURN((internal::OrExpr&lt;internal::IsPointer&lt;T&gt;,internal::IsGenericValue&lt;T&gt; &gt;), (<span class="keywordtype">bool</span>)) <a class="code" href="classrapidjson_1_1_generic_value.html#aaddbbbb35cd783f209f889cf8dea9570">operator==</a>(<span class="keyword">const</span> T&amp; rhs)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> *<span class="keyword">this</span> == <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(rhs); }</div><div class="line"><a name="l00987"></a><span class="lineno"> 987</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00988"></a><span class="lineno"> 988</span>&#160;<span class="comment"> //! Not-equal-to operator</span></div><div class="line"><a name="l00989"></a><span class="lineno"> 989</span>&#160;<span class="comment"></span><span class="comment"> /*! \return !(*this == rhs)</span></div><div class="line"><a name="l00990"></a><span class="lineno"> 990</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00991"></a><span class="lineno"> 991</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> SourceAllocator&gt;</div><div class="line"><a name="l00992"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#ad5bf5afd53f21f370f917041b3be4bfc"> 992</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_generic_value.html#ad5bf5afd53f21f370f917041b3be4bfc">operator!=</a>(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue&lt;Encoding, SourceAllocator&gt;</a>&amp; rhs)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> !(*<span class="keyword">this</span> == rhs); }</div><div class="line"><a name="l00993"></a><span class="lineno"> 993</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00994"></a><span class="lineno"> 994</span>&#160;<span class="comment"> //! Not-equal-to operator with const C-string pointer</span></div><div class="line"><a name="l00995"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a6443cf5323fb46c4c51cd15a365da49b"> 995</a></span>&#160;<span class="comment"></span> <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_generic_value.html#a6443cf5323fb46c4c51cd15a365da49b">operator!=</a>(<span class="keyword">const</span> Ch* rhs)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> !(*<span class="keyword">this</span> == rhs); }</div><div class="line"><a name="l00996"></a><span class="lineno"> 996</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00997"></a><span class="lineno"> 997</span>&#160;<span class="comment"> //! Not-equal-to operator with arbitrary types</span></div><div class="line"><a name="l00998"></a><span class="lineno"> 998</span>&#160;<span class="comment"></span><span class="comment"> /*! \return !(*this == rhs)</span></div><div class="line"><a name="l00999"></a><span class="lineno"> 999</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01000"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#ae6fe0576ff0336f6e2b09fe32f3ff809"> 1000</a></span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt; RAPIDJSON_DISABLEIF_RETURN((internal::IsGenericValue&lt;T&gt;), (<span class="keywordtype">bool</span>)) <a class="code" href="classrapidjson_1_1_generic_value.html#ae6fe0576ff0336f6e2b09fe32f3ff809">operator!=</a>(<span class="keyword">const</span> T&amp; rhs)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> !(*<span class="keyword">this</span> == rhs); }</div><div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>&#160;<span class="comment"> //! Equal-to operator with arbitrary types (symmetric version)</span></div><div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>&#160;<span class="comment"></span><span class="comment"> /*! \return (rhs == lhs)</span></div><div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01005"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#aaa465706fda1e1ef4513ce877e0b4b69"> 1005</a></span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt; <span class="keyword">friend</span> RAPIDJSON_DISABLEIF_RETURN((internal::IsGenericValue&lt;T&gt;), (<span class="keywordtype">bool</span>)) <a class="code" href="classrapidjson_1_1_generic_value.html#aaa465706fda1e1ef4513ce877e0b4b69">operator==</a>(<span class="keyword">const</span> T&amp; lhs, <span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; rhs) { <span class="keywordflow">return</span> rhs == lhs; }</div><div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>&#160;<span class="comment"> //! Not-Equal-to operator with arbitrary types (symmetric version)</span></div><div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>&#160;<span class="comment"></span><span class="comment"> /*! \return !(rhs == lhs)</span></div><div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01010"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#ae08898bef949f217f0e5d28e19f05992"> 1010</a></span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt; <span class="keyword">friend</span> RAPIDJSON_DISABLEIF_RETURN((internal::IsGenericValue&lt;T&gt;), (<span class="keywordtype">bool</span>)) <a class="code" href="classrapidjson_1_1_generic_value.html#ae08898bef949f217f0e5d28e19f05992">operator!=</a>(<span class="keyword">const</span> T&amp; lhs, <span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; rhs) { <span class="keywordflow">return</span> !(rhs == lhs); }<span class="comment"></span></div><div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>&#160;<span class="comment"> //@}</span></div><div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>&#160;<span class="comment"> //!@name Type</span></div><div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>&#160;<span class="comment"></span><span class="comment"> //@{</span></div><div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>&#160; <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">Type</a> GetType()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span><a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">Type</a><span class="keyword">&gt;</span>(data_.f.flags &amp; kTypeMask); }</div><div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>&#160; <span class="keywordtype">bool</span> IsNull()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> data_.f.flags == kNullFlag; }</div><div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>&#160; <span class="keywordtype">bool</span> IsFalse()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> data_.f.flags == kFalseFlag; }</div><div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>&#160; <span class="keywordtype">bool</span> IsTrue()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> data_.f.flags == kTrueFlag; }</div><div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>&#160; <span class="keywordtype">bool</span> IsBool()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (data_.f.flags &amp; kBoolFlag) != 0; }</div><div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>&#160; <span class="keywordtype">bool</span> IsObject()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> data_.f.flags == kObjectFlag; }</div><div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>&#160; <span class="keywordtype">bool</span> IsArray()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> data_.f.flags == kArrayFlag; }</div><div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>&#160; <span class="keywordtype">bool</span> IsNumber()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (data_.f.flags &amp; kNumberFlag) != 0; }</div><div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>&#160; <span class="keywordtype">bool</span> IsInt()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (data_.f.flags &amp; kIntFlag) != 0; }</div><div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>&#160; <span class="keywordtype">bool</span> IsUint()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (data_.f.flags &amp; kUintFlag) != 0; }</div><div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>&#160; <span class="keywordtype">bool</span> IsInt64()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (data_.f.flags &amp; kInt64Flag) != 0; }</div><div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>&#160; <span class="keywordtype">bool</span> IsUint64()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (data_.f.flags &amp; kUint64Flag) != 0; }</div><div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>&#160; <span class="keywordtype">bool</span> IsDouble()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (data_.f.flags &amp; kDoubleFlag) != 0; }</div><div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>&#160; <span class="keywordtype">bool</span> IsString()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (data_.f.flags &amp; kStringFlag) != 0; }</div><div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>&#160;</div><div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>&#160; <span class="comment">// Checks whether a number can be losslessly converted to a double.</span></div><div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>&#160; <span class="keywordtype">bool</span> IsLosslessDouble()<span class="keyword"> const </span>{</div><div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>&#160; <span class="keywordflow">if</span> (!IsNumber()) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>&#160; <span class="keywordflow">if</span> (IsUint64()) {</div><div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>&#160; uint64_t u = GetUint64();</div><div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>&#160; <span class="keyword">volatile</span> <span class="keywordtype">double</span> d = <span class="keyword">static_cast&lt;</span><span class="keywordtype">double</span><span class="keyword">&gt;</span>(u);</div><div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>&#160; <span class="keywordflow">return</span> (d &gt;= 0.0)</div><div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>&#160; &amp;&amp; (d &lt; static_cast&lt;double&gt;((std::numeric_limits&lt;uint64_t&gt;::max)()))</div><div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>&#160; &amp;&amp; (u == <span class="keyword">static_cast&lt;</span>uint64_t<span class="keyword">&gt;</span>(d));</div><div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>&#160; }</div><div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>&#160; <span class="keywordflow">if</span> (IsInt64()) {</div><div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>&#160; int64_t i = GetInt64();</div><div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>&#160; <span class="keyword">volatile</span> <span class="keywordtype">double</span> d = <span class="keyword">static_cast&lt;</span><span class="keywordtype">double</span><span class="keyword">&gt;</span>(i);</div><div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>&#160; <span class="keywordflow">return</span> (d &gt;= static_cast&lt;double&gt;((std::numeric_limits&lt;int64_t&gt;::min)()))</div><div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>&#160; &amp;&amp; (d &lt; static_cast&lt;double&gt;((std::numeric_limits&lt;int64_t&gt;::max)()))</div><div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>&#160; &amp;&amp; (i == static_cast&lt;int64_t&gt;(d));</div><div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>&#160; }</div><div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>; <span class="comment">// double, int, uint are always lossless</span></div><div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>&#160; }</div><div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>&#160;</div><div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>&#160; <span class="comment">// Checks whether a number is a float (possible lossy).</span></div><div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>&#160; <span class="keywordtype">bool</span> IsFloat()<span class="keyword"> const </span>{</div><div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>&#160; <span class="keywordflow">if</span> ((data_.f.flags &amp; kDoubleFlag) == 0)</div><div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>&#160; <span class="keywordtype">double</span> d = GetDouble();</div><div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>&#160; <span class="keywordflow">return</span> d &gt;= -3.4028234e38 &amp;&amp; d &lt;= 3.4028234e38;</div><div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>&#160; }</div><div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>&#160; <span class="comment">// Checks whether a number can be losslessly converted to a float.</span></div><div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>&#160; <span class="keywordtype">bool</span> IsLosslessFloat()<span class="keyword"> const </span>{</div><div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>&#160; <span class="keywordflow">if</span> (!IsNumber()) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>&#160; <span class="keywordtype">double</span> a = GetDouble();</div><div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>&#160; <span class="keywordflow">if</span> (a &lt; static_cast&lt;double&gt;(-(std::numeric_limits&lt;float&gt;::max)())</div><div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>&#160; || a &gt; static_cast&lt;double&gt;((std::numeric_limits&lt;float&gt;::max)()))</div><div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>&#160; <span class="keywordtype">double</span> b = <span class="keyword">static_cast&lt;</span><span class="keywordtype">double</span><span class="keyword">&gt;</span>(<span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span>(a));</div><div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>&#160; <span class="keywordflow">return</span> a &gt;= b &amp;&amp; a &lt;= b; <span class="comment">// Prevent -Wfloat-equal</span></div><div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>&#160; }</div><div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>&#160;<span class="comment"> //@}</span></div><div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>&#160;<span class="comment"> //!@name Null</span></div><div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>&#160;<span class="comment"></span><span class="comment"> //@{</span></div><div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; SetNull() { this-&gt;~<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(); <span class="keyword">new</span> (<span class="keyword">this</span>) <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>&#160;<span class="comment"> //@}</span></div><div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>&#160;<span class="comment"> //!@name Bool</span></div><div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>&#160;<span class="comment"></span><span class="comment"> //@{</span></div><div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01081"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a78d80b935babeedbfa71914a8fe5baa7"> 1081</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_generic_value.html#a78d80b935babeedbfa71914a8fe5baa7">GetBool</a>()<span class="keyword"> const </span>{ <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsBool()); <span class="keywordflow">return</span> data_.f.flags == kTrueFlag; }<span class="comment"></span></div><div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>&#160;<span class="comment"> //!&lt; Set boolean value</span></div><div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>&#160;<span class="comment"></span><span class="comment"> /*! \post IsBool() == true */</span></div><div class="line"><a name="l01084"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a5623c9039977ca0daf394e5c12f10c2d"> 1084</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#a5623c9039977ca0daf394e5c12f10c2d">SetBool</a>(<span class="keywordtype">bool</span> b) { this-&gt;~<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(); <span class="keyword">new</span> (<span class="keyword">this</span>) <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(b); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>&#160;<span class="comment"> //@}</span></div><div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>&#160;<span class="comment"> //!@name Object</span></div><div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>&#160;<span class="comment"></span><span class="comment"> //@{</span></div><div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>&#160;<span class="comment"> //! Set this value as an empty object.</span></div><div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>&#160;<span class="comment"></span><span class="comment"> /*! \post IsObject() == true */</span></div><div class="line"><a name="l01093"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a7cb3cbaefe4fb99aaf9f155fb4ee039b"> 1093</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#a7cb3cbaefe4fb99aaf9f155fb4ee039b">SetObject</a>() { this-&gt;~<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(); <span class="keyword">new</span> (<span class="keyword">this</span>) <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4acf030b422a32c3647c7c5973bd4dd0a9">kObjectType</a>); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>&#160;<span class="comment"> //! Get the number of members in the object.</span></div><div class="line"><a name="l01096"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a8b7e47c57a20d0de0cd19eee799ebd88"> 1096</a></span>&#160;<span class="comment"></span> <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> <a class="code" href="classrapidjson_1_1_generic_value.html#a8b7e47c57a20d0de0cd19eee799ebd88">MemberCount</a>()<span class="keyword"> const </span>{ <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsObject()); <span class="keywordflow">return</span> data_.o.size; }</div><div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>&#160;<span class="comment"> //! Get the capacity of object.</span></div><div class="line"><a name="l01099"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#af2a406c67f2d6a7849f0c167025827b2"> 1099</a></span>&#160;<span class="comment"></span> <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> <a class="code" href="classrapidjson_1_1_generic_value.html#af2a406c67f2d6a7849f0c167025827b2">MemberCapacity</a>()<span class="keyword"> const </span>{ <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsObject()); <span class="keywordflow">return</span> data_.o.capacity; }</div><div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>&#160;<span class="comment"> //! Check whether the object is empty.</span></div><div class="line"><a name="l01102"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a1f4835373e05abae52b91e1c6b7ec92c"> 1102</a></span>&#160;<span class="comment"></span> <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_generic_value.html#a1f4835373e05abae52b91e1c6b7ec92c">ObjectEmpty</a>()<span class="keyword"> const </span>{ <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsObject()); <span class="keywordflow">return</span> data_.o.size == 0; }</div><div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>&#160;<span class="comment"> //! Get a value from an object associated with the name.</span></div><div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>&#160;<span class="comment"></span><span class="comment"> /*! \pre IsObject() == true</span></div><div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>&#160;<span class="comment"> \tparam T Either \c Ch or \c const \c Ch (template used for disambiguation with \ref operator[](SizeType))</span></div><div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>&#160;<span class="comment"> \note In version 0.1x, if the member is not found, this function returns a null value. This makes issue 7.</span></div><div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>&#160;<span class="comment"> Since 0.2, if the name is not correct, it will assert.</span></div><div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>&#160;<span class="comment"> If user is unsure whether a member exists, user should use HasMember() first.</span></div><div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>&#160;<span class="comment"> A better approach is to use FindMember().</span></div><div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>&#160;<span class="comment"> \note Linear time complexity.</span></div><div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l01114"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a8ec7fc7f221306925c7674dccbe02b07"> 1114</a></span>&#160; RAPIDJSON_DISABLEIF_RETURN((internal::NotExpr&lt;internal::IsSame&lt;<span class="keyword">typename</span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">internal::RemoveConst&lt;T&gt;::Type</a>, Ch&gt; &gt;),(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp;)) <a class="code" href="classrapidjson_1_1_generic_value.html#a8ec7fc7f221306925c7674dccbe02b07">operator[]</a>(T* name) {</div><div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a> n(<a class="code" href="namespacerapidjson.html#af94951529a5d51e8c4e6e770bb707c1f">StringRef</a>(name));</div><div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>&#160; <span class="keywordflow">return</span> (*<span class="keyword">this</span>)[n];</div><div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>&#160; }</div><div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>&#160; RAPIDJSON_DISABLEIF_RETURN((internal::NotExpr&lt;internal::IsSame&lt;<span class="keyword">typename</span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">internal::RemoveConst&lt;T&gt;::Type</a>, Ch&gt; &gt;),(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp;)) operator[](T* name)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">const_cast&lt;</span><a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp;<span class="keyword">&gt;</span>(*this)[name]; }</div><div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>&#160;<span class="comment"> //! Get a value from an object associated with the name.</span></div><div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>&#160;<span class="comment"></span><span class="comment"> /*! \pre IsObject() == true</span></div><div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>&#160;<span class="comment"> \tparam SourceAllocator Allocator of the \c name value</span></div><div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>&#160;<span class="comment"> \note Compared to \ref operator[](T*), this version is faster because it does not need a StrLen().</span></div><div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>&#160;<span class="comment"> And it can also handle strings with embedded null characters.</span></div><div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>&#160;<span class="comment"> \note Linear time complexity.</span></div><div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> SourceAllocator&gt;</div><div class="line"><a name="l01131"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#aa62b57746c96ce3d264b2fe178196062"> 1131</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#aa62b57746c96ce3d264b2fe178196062">operator[]</a>(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue&lt;Encoding, SourceAllocator&gt;</a>&amp; name) {</div><div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>&#160; <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">MemberIterator</a> member = FindMember(name);</div><div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>&#160; <span class="keywordflow">if</span> (member != MemberEnd())</div><div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>&#160; <span class="keywordflow">return</span> member-&gt;value;</div><div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>&#160; <span class="keywordflow">else</span> {</div><div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(<span class="keyword">false</span>); <span class="comment">// see above note</span></div><div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>&#160;</div><div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>&#160; <span class="comment">// This will generate -Wexit-time-destructors in clang</span></div><div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>&#160; <span class="comment">// static GenericValue NullValue;</span></div><div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>&#160; <span class="comment">// return NullValue;</span></div><div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>&#160;</div><div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>&#160; <span class="comment">// Use static buffer and placement-new to prevent destruction</span></div><div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>&#160; <span class="keyword">static</span> <span class="keywordtype">char</span> buffer[<span class="keyword">sizeof</span>(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>)];</div><div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">new</span> (buffer) <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>();</div><div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>&#160; }</div><div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>&#160; }</div><div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> SourceAllocator&gt;</div><div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>&#160; <span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; operator[](<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue&lt;Encoding, SourceAllocator&gt;</a>&amp; name)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">const_cast&lt;</span><a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp;<span class="keyword">&gt;</span>(*this)[name]; }</div><div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>&#160;</div><div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>&#160;<span class="comment"> //! Get a value from an object associated with name (string object).</span></div><div class="line"><a name="l01152"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a4d337239ee3e2096462f6a36b9ab0811"> 1152</a></span>&#160;<span class="comment"></span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#a4d337239ee3e2096462f6a36b9ab0811">operator[]</a>(<span class="keyword">const</span> std::basic_string&lt;Ch&gt;&amp; name) { <span class="keywordflow">return</span> (*<span class="keyword">this</span>)[<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(<a class="code" href="namespacerapidjson.html#af94951529a5d51e8c4e6e770bb707c1f">StringRef</a>(name))]; }</div><div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>&#160; <span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; operator[](<span class="keyword">const</span> std::basic_string&lt;Ch&gt;&amp; name)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (*<span class="keyword">this</span>)[<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(<a class="code" href="namespacerapidjson.html#af94951529a5d51e8c4e6e770bb707c1f">StringRef</a>(name))]; }</div><div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>&#160;<span class="comment"> //! Const member iterator</span></div><div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>&#160;<span class="comment"></span><span class="comment"> /*! \pre IsObject() == true */</span></div><div class="line"><a name="l01158"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#ae89a77887aa3eb1f1f913727cbff6786"> 1158</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">ConstMemberIterator</a> <a class="code" href="classrapidjson_1_1_generic_value.html#ae89a77887aa3eb1f1f913727cbff6786">MemberBegin</a>()<span class="keyword"> const </span>{ <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsObject()); <span class="keywordflow">return</span> <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">ConstMemberIterator</a>(GetMembersPointer()); }<span class="comment"></span></div><div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>&#160;<span class="comment"> //! Const \em past-the-end member iterator</span></div><div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>&#160;<span class="comment"></span><span class="comment"> /*! \pre IsObject() == true */</span></div><div class="line"><a name="l01161"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a34ee3d75a7aa308043fb34b0743bfe7c"> 1161</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">ConstMemberIterator</a> <a class="code" href="classrapidjson_1_1_generic_value.html#a34ee3d75a7aa308043fb34b0743bfe7c">MemberEnd</a>()<span class="keyword"> const </span>{ <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsObject()); <span class="keywordflow">return</span> <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">ConstMemberIterator</a>(GetMembersPointer() + data_.o.size); }<span class="comment"></span></div><div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>&#160;<span class="comment"> //! Member iterator</span></div><div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>&#160;<span class="comment"></span><span class="comment"> /*! \pre IsObject() == true */</span></div><div class="line"><a name="l01164"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a93f0f317f397c36a24a0f3c32648623a"> 1164</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">MemberIterator</a> <a class="code" href="classrapidjson_1_1_generic_value.html#a93f0f317f397c36a24a0f3c32648623a">MemberBegin</a>() { <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsObject()); <span class="keywordflow">return</span> <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">MemberIterator</a>(GetMembersPointer()); }<span class="comment"></span></div><div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>&#160;<span class="comment"> //! \em Past-the-end member iterator</span></div><div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>&#160;<span class="comment"></span><span class="comment"> /*! \pre IsObject() == true */</span></div><div class="line"><a name="l01167"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#adb109ae9f12615efadf9277cb5e9c4ee"> 1167</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">MemberIterator</a> <a class="code" href="classrapidjson_1_1_generic_value.html#adb109ae9f12615efadf9277cb5e9c4ee">MemberEnd</a>() { <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsObject()); <span class="keywordflow">return</span> <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">MemberIterator</a>(GetMembersPointer() + data_.o.size); }</div><div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>&#160;<span class="comment"> //! Request the object to have enough capacity to store members.</span></div><div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>&#160;<span class="comment"></span><span class="comment"> /*! \param newCapacity The capacity that the object at least need to have.</span></div><div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>&#160;<span class="comment"> \param allocator Allocator for reallocating memory. It must be the same one as used before. Commonly use GenericDocument::GetAllocator().</span></div><div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>&#160;<span class="comment"> \return The value itself for fluent API.</span></div><div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>&#160;<span class="comment"> \note Linear time complexity.</span></div><div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01175"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a9131d6e49ac5a6bf8000d851381e4a25"> 1175</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#a9131d6e49ac5a6bf8000d851381e4a25">MemberReserve</a>(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> newCapacity, Allocator &amp;allocator) {</div><div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsObject());</div><div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>&#160; <span class="keywordflow">if</span> (newCapacity &gt; data_.o.capacity) {</div><div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>&#160; SetMembersPointer(reinterpret_cast&lt;Member*&gt;(allocator.Realloc(GetMembersPointer(), data_.o.capacity * <span class="keyword">sizeof</span>(<a class="code" href="structrapidjson_1_1_generic_member.html">Member</a>), newCapacity * <span class="keyword">sizeof</span>(<a class="code" href="structrapidjson_1_1_generic_member.html">Member</a>))));</div><div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>&#160; data_.o.capacity = newCapacity;</div><div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>&#160; }</div><div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>&#160; }</div><div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>&#160;<span class="comment"> //! Check whether a member exists in the object.</span></div><div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>&#160;<span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>&#160;<span class="comment"> \param name Member name to be searched.</span></div><div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>&#160;<span class="comment"> \pre IsObject() == true</span></div><div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>&#160;<span class="comment"> \return Whether a member with that name exists.</span></div><div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>&#160;<span class="comment"> \note It is better to use FindMember() directly if you need the obtain the value as well.</span></div><div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>&#160;<span class="comment"> \note Linear time complexity.</span></div><div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01192"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#aa78e2eb30c6b918826eccf03f04f166b"> 1192</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_generic_value.html#aa78e2eb30c6b918826eccf03f04f166b">HasMember</a>(<span class="keyword">const</span> Ch* name)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> FindMember(name) != MemberEnd(); }</div><div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>&#160;</div><div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>&#160;<span class="comment"> //! Check whether a member exists in the object with string object.</span></div><div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>&#160;<span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>&#160;<span class="comment"> \param name Member name to be searched.</span></div><div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>&#160;<span class="comment"> \pre IsObject() == true</span></div><div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>&#160;<span class="comment"> \return Whether a member with that name exists.</span></div><div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>&#160;<span class="comment"> \note It is better to use FindMember() directly if you need the obtain the value as well.</span></div><div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>&#160;<span class="comment"> \note Linear time complexity.</span></div><div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01203"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a9b3b30acbe60d7a5b105afa05c1ddfb0"> 1203</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_generic_value.html#a9b3b30acbe60d7a5b105afa05c1ddfb0">HasMember</a>(<span class="keyword">const</span> std::basic_string&lt;Ch&gt;&amp; name)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> FindMember(name) != MemberEnd(); }</div><div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>&#160;<span class="comment"> //! Check whether a member exists in the object with GenericValue name.</span></div><div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>&#160;<span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>&#160;<span class="comment"> This version is faster because it does not need a StrLen(). It can also handle string with null character.</span></div><div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>&#160;<span class="comment"> \param name Member name to be searched.</span></div><div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>&#160;<span class="comment"> \pre IsObject() == true</span></div><div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>&#160;<span class="comment"> \return Whether a member with that name exists.</span></div><div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>&#160;<span class="comment"> \note It is better to use FindMember() directly if you need the obtain the value as well.</span></div><div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>&#160;<span class="comment"> \note Linear time complexity.</span></div><div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> SourceAllocator&gt;</div><div class="line"><a name="l01216"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a794129b8adffb97d123306a0c0ccaf71"> 1216</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_generic_value.html#a794129b8adffb97d123306a0c0ccaf71">HasMember</a>(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue&lt;Encoding, SourceAllocator&gt;</a>&amp; name)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> FindMember(name) != MemberEnd(); }</div><div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>&#160;<span class="comment"> //! Find member by name.</span></div><div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>&#160;<span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>&#160;<span class="comment"> \param name Member name to be searched.</span></div><div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>&#160;<span class="comment"> \pre IsObject() == true</span></div><div class="line"><a name="l01222"></a><span class="lineno"> 1222</span>&#160;<span class="comment"> \return Iterator to member, if it exists.</span></div><div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>&#160;<span class="comment"> Otherwise returns \ref MemberEnd().</span></div><div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>&#160;<span class="comment"> \note Earlier versions of Rapidjson returned a \c NULL pointer, in case</span></div><div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>&#160;<span class="comment"> the requested member doesn&#39;t exist. For consistency with e.g.</span></div><div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>&#160;<span class="comment"> \c std::map, this has been changed to MemberEnd() now.</span></div><div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>&#160;<span class="comment"> \note Linear time complexity.</span></div><div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01230"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#ad22fdeac87ec6c370dd43075d3586811"> 1230</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">MemberIterator</a> <a class="code" href="classrapidjson_1_1_generic_value.html#ad22fdeac87ec6c370dd43075d3586811">FindMember</a>(<span class="keyword">const</span> Ch* name) {</div><div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a> n(<a class="code" href="namespacerapidjson.html#af94951529a5d51e8c4e6e770bb707c1f">StringRef</a>(name));</div><div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>&#160; <span class="keywordflow">return</span> FindMember(n);</div><div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>&#160; }</div><div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>&#160;</div><div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>&#160; <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">ConstMemberIterator</a> FindMember(<span class="keyword">const</span> Ch* name)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">const_cast&lt;</span><a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp;<span class="keyword">&gt;</span>(*this).<a class="code" href="classrapidjson_1_1_generic_value.html#ad22fdeac87ec6c370dd43075d3586811">FindMember</a>(name); }</div><div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>&#160;<span class="comment"> //! Find member by name.</span></div><div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>&#160;<span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>&#160;<span class="comment"> This version is faster because it does not need a StrLen(). It can also handle string with null character.</span></div><div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>&#160;<span class="comment"> \param name Member name to be searched.</span></div><div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>&#160;<span class="comment"> \pre IsObject() == true</span></div><div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>&#160;<span class="comment"> \return Iterator to member, if it exists.</span></div><div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>&#160;<span class="comment"> Otherwise returns \ref MemberEnd().</span></div><div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>&#160;<span class="comment"> \note Earlier versions of Rapidjson returned a \c NULL pointer, in case</span></div><div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>&#160;<span class="comment"> the requested member doesn&#39;t exist. For consistency with e.g.</span></div><div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>&#160;<span class="comment"> \c std::map, this has been changed to MemberEnd() now.</span></div><div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>&#160;<span class="comment"> \note Linear time complexity.</span></div><div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> SourceAllocator&gt;</div><div class="line"><a name="l01251"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a8d75bf0c6c0fa4f8d340a4236e98539b"> 1251</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">MemberIterator</a> <a class="code" href="classrapidjson_1_1_generic_value.html#a8d75bf0c6c0fa4f8d340a4236e98539b">FindMember</a>(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue&lt;Encoding, SourceAllocator&gt;</a>&amp; name) {</div><div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsObject());</div><div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(name.IsString());</div><div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>&#160; <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">MemberIterator</a> member = MemberBegin();</div><div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>&#160; <span class="keywordflow">for</span> ( ; member != MemberEnd(); ++member)</div><div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>&#160; <span class="keywordflow">if</span> (name.StringEqual(member-&gt;name))</div><div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>&#160; <span class="keywordflow">return</span> member;</div><div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>&#160; }</div><div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> SourceAllocator&gt; <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">ConstMemberIterator</a> FindMember(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue&lt;Encoding, SourceAllocator&gt;</a>&amp; name)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">const_cast&lt;</span><a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp;<span class="keyword">&gt;</span>(*this).<a class="code" href="classrapidjson_1_1_generic_value.html#ad22fdeac87ec6c370dd43075d3586811">FindMember</a>(name); }</div><div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>&#160;</div><div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>&#160;<span class="comment"> //! Find member by string object name.</span></div><div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>&#160;<span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>&#160;<span class="comment"> \param name Member name to be searched.</span></div><div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>&#160;<span class="comment"> \pre IsObject() == true</span></div><div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>&#160;<span class="comment"> \return Iterator to member, if it exists.</span></div><div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>&#160;<span class="comment"> Otherwise returns \ref MemberEnd().</span></div><div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01270"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a278b420ea75b0ec18d88d4c9e9199d62"> 1270</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">MemberIterator</a> <a class="code" href="classrapidjson_1_1_generic_value.html#a278b420ea75b0ec18d88d4c9e9199d62">FindMember</a>(<span class="keyword">const</span> std::basic_string&lt;Ch&gt;&amp; name) { <span class="keywordflow">return</span> <a class="code" href="classrapidjson_1_1_generic_value.html#a278b420ea75b0ec18d88d4c9e9199d62">FindMember</a>(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(<a class="code" href="namespacerapidjson.html#af94951529a5d51e8c4e6e770bb707c1f">StringRef</a>(name))); }</div><div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>&#160; <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">ConstMemberIterator</a> FindMember(<span class="keyword">const</span> std::basic_string&lt;Ch&gt;&amp; name)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> FindMember(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(<a class="code" href="namespacerapidjson.html#af94951529a5d51e8c4e6e770bb707c1f">StringRef</a>(name))); }</div><div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>&#160;<span class="comment"> //! Add a member (name-value pair) to the object.</span></div><div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>&#160;<span class="comment"></span><span class="comment"> /*! \param name A string value as name of member.</span></div><div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>&#160;<span class="comment"> \param value Value of any type.</span></div><div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>&#160;<span class="comment"> \param allocator Allocator for reallocating memory. It must be the same one as used before. Commonly use GenericDocument::GetAllocator().</span></div><div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>&#160;<span class="comment"> \return The value itself for fluent API.</span></div><div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>&#160;<span class="comment"> \note The ownership of \c name and \c value will be transferred to this object on success.</span></div><div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>&#160;<span class="comment"> \pre IsObject() &amp;&amp; name.IsString()</span></div><div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>&#160;<span class="comment"> \post name.IsNull() &amp;&amp; value.IsNull()</span></div><div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>&#160;<span class="comment"> \note Amortized Constant time complexity.</span></div><div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01284"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#ab018d734d189532b27943bc45776ba68"> 1284</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#ab018d734d189532b27943bc45776ba68">AddMember</a>(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; name, <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; value, Allocator&amp; allocator) {</div><div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsObject());</div><div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(name.IsString());</div><div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>&#160;</div><div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>&#160; ObjectData&amp; o = data_.o;</div><div class="line"><a name="l01289"></a><span class="lineno"> 1289</span>&#160; <span class="keywordflow">if</span> (o.size &gt;= o.capacity)</div><div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>&#160; MemberReserve(o.capacity == 0 ? kDefaultObjectCapacity : (o.capacity + (o.capacity + 1) / 2), allocator);</div><div class="line"><a name="l01291"></a><span class="lineno"> 1291</span>&#160; <a class="code" href="structrapidjson_1_1_generic_member.html">Member</a>* members = GetMembersPointer();</div><div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>&#160; members[o.size].<a class="code" href="structrapidjson_1_1_generic_member.html#ae820eaa74b415a9073f3f3855f6c6607">name</a>.RawAssign(name);</div><div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>&#160; members[o.size].<a class="code" href="structrapidjson_1_1_generic_member.html#a8ffff2076e62d988a070a136da6ffca6">value</a>.RawAssign(value);</div><div class="line"><a name="l01294"></a><span class="lineno"> 1294</span>&#160; o.size++;</div><div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>&#160; }</div><div class="line"><a name="l01297"></a><span class="lineno"> 1297</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01298"></a><span class="lineno"> 1298</span>&#160;<span class="comment"> //! Add a constant string value as member (name-value pair) to the object.</span></div><div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>&#160;<span class="comment"></span><span class="comment"> /*! \param name A string value as name of member.</span></div><div class="line"><a name="l01300"></a><span class="lineno"> 1300</span>&#160;<span class="comment"> \param value constant string reference as value of member.</span></div><div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>&#160;<span class="comment"> \param allocator Allocator for reallocating memory. It must be the same one as used before. Commonly use GenericDocument::GetAllocator().</span></div><div class="line"><a name="l01302"></a><span class="lineno"> 1302</span>&#160;<span class="comment"> \return The value itself for fluent API.</span></div><div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>&#160;<span class="comment"> \pre IsObject()</span></div><div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>&#160;<span class="comment"> \note This overload is needed to avoid clashes with the generic primitive type AddMember(GenericValue&amp;,T,Allocator&amp;) overload below.</span></div><div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>&#160;<span class="comment"> \note Amortized Constant time complexity.</span></div><div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01307"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#ad290f179591025e871bedbbac89ac276"> 1307</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#ad290f179591025e871bedbbac89ac276">AddMember</a>(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; name, <a class="code" href="structrapidjson_1_1_generic_string_ref.html">StringRefType</a> value, Allocator&amp; allocator) {</div><div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a> v(value);</div><div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>&#160; <span class="keywordflow">return</span> AddMember(name, v, allocator);</div><div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>&#160; }</div><div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>&#160;</div><div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l01313"></a><span class="lineno"> 1313</span>&#160;<span class="comment"> //! Add a string object as member (name-value pair) to the object.</span></div><div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>&#160;<span class="comment"></span><span class="comment"> /*! \param name A string value as name of member.</span></div><div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>&#160;<span class="comment"> \param value constant string reference as value of member.</span></div><div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>&#160;<span class="comment"> \param allocator Allocator for reallocating memory. It must be the same one as used before. Commonly use GenericDocument::GetAllocator().</span></div><div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>&#160;<span class="comment"> \return The value itself for fluent API.</span></div><div class="line"><a name="l01318"></a><span class="lineno"> 1318</span>&#160;<span class="comment"> \pre IsObject()</span></div><div class="line"><a name="l01319"></a><span class="lineno"> 1319</span>&#160;<span class="comment"> \note This overload is needed to avoid clashes with the generic primitive type AddMember(GenericValue&amp;,T,Allocator&amp;) overload below.</span></div><div class="line"><a name="l01320"></a><span class="lineno"> 1320</span>&#160;<span class="comment"> \note Amortized Constant time complexity.</span></div><div class="line"><a name="l01321"></a><span class="lineno"> 1321</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01322"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a578e35f3350717db2aae534969b2346a"> 1322</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#a578e35f3350717db2aae534969b2346a">AddMember</a>(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; name, std::basic_string&lt;Ch&gt;&amp; value, Allocator&amp; allocator) {</div><div class="line"><a name="l01323"></a><span class="lineno"> 1323</span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a> v(value, allocator);</div><div class="line"><a name="l01324"></a><span class="lineno"> 1324</span>&#160; <span class="keywordflow">return</span> AddMember(name, v, allocator);</div><div class="line"><a name="l01325"></a><span class="lineno"> 1325</span>&#160; }</div><div class="line"><a name="l01326"></a><span class="lineno"> 1326</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01327"></a><span class="lineno"> 1327</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01328"></a><span class="lineno"> 1328</span>&#160;<span class="comment"> //! Add any primitive value as member (name-value pair) to the object.</span></div><div class="line"><a name="l01329"></a><span class="lineno"> 1329</span>&#160;<span class="comment"></span><span class="comment"> /*! \tparam T Either \ref Type, \c int, \c unsigned, \c int64_t, \c uint64_t</span></div><div class="line"><a name="l01330"></a><span class="lineno"> 1330</span>&#160;<span class="comment"> \param name A string value as name of member.</span></div><div class="line"><a name="l01331"></a><span class="lineno"> 1331</span>&#160;<span class="comment"> \param value Value of primitive type \c T as value of member</span></div><div class="line"><a name="l01332"></a><span class="lineno"> 1332</span>&#160;<span class="comment"> \param allocator Allocator for reallocating memory. Commonly use GenericDocument::GetAllocator().</span></div><div class="line"><a name="l01333"></a><span class="lineno"> 1333</span>&#160;<span class="comment"> \return The value itself for fluent API.</span></div><div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>&#160;<span class="comment"> \pre IsObject()</span></div><div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>&#160;<span class="comment"> \note The source type \c T explicitly disallows all pointer types,</span></div><div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>&#160;<span class="comment"> especially (\c const) \ref Ch*. This helps avoiding implicitly</span></div><div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>&#160;<span class="comment"> referencing character strings with insufficient lifetime, use</span></div><div class="line"><a name="l01339"></a><span class="lineno"> 1339</span>&#160;<span class="comment"> \ref AddMember(StringRefType, GenericValue&amp;, Allocator&amp;) or \ref</span></div><div class="line"><a name="l01340"></a><span class="lineno"> 1340</span>&#160;<span class="comment"> AddMember(StringRefType, StringRefType, Allocator&amp;).</span></div><div class="line"><a name="l01341"></a><span class="lineno"> 1341</span>&#160;<span class="comment"> All other pointer types would implicitly convert to \c bool,</span></div><div class="line"><a name="l01342"></a><span class="lineno"> 1342</span>&#160;<span class="comment"> use an explicit cast instead, if needed.</span></div><div class="line"><a name="l01343"></a><span class="lineno"> 1343</span>&#160;<span class="comment"> \note Amortized Constant time complexity.</span></div><div class="line"><a name="l01344"></a><span class="lineno"> 1344</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01345"></a><span class="lineno"> 1345</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l01346"></a><span class="lineno"> 1346</span>&#160; RAPIDJSON_DISABLEIF_RETURN((internal::OrExpr&lt;internal::IsPointer&lt;T&gt;, internal::IsGenericValue&lt;T&gt; &gt;), (<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp;))</div><div class="line"><a name="l01347"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#ab705cb56bfb380005704cda2d0edf168"> 1347</a></span>&#160; AddMember(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; name, T value, Allocator&amp; allocator) {</div><div class="line"><a name="l01348"></a><span class="lineno"> 1348</span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a> v(value);</div><div class="line"><a name="l01349"></a><span class="lineno"> 1349</span>&#160; <span class="keywordflow">return</span> AddMember(name, v, allocator);</div><div class="line"><a name="l01350"></a><span class="lineno"> 1350</span>&#160; }</div><div class="line"><a name="l01351"></a><span class="lineno"> 1351</span>&#160;</div><div class="line"><a name="l01352"></a><span class="lineno"> 1352</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l01353"></a><span class="lineno"> 1353</span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; AddMember(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp;&amp; name, <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp;&amp; value, Allocator&amp; allocator) {</div><div class="line"><a name="l01354"></a><span class="lineno"> 1354</span>&#160; <span class="keywordflow">return</span> AddMember(name, value, allocator);</div><div class="line"><a name="l01355"></a><span class="lineno"> 1355</span>&#160; }</div><div class="line"><a name="l01356"></a><span class="lineno"> 1356</span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; AddMember(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp;&amp; name, <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; value, Allocator&amp; allocator) {</div><div class="line"><a name="l01357"></a><span class="lineno"> 1357</span>&#160; <span class="keywordflow">return</span> AddMember(name, value, allocator);</div><div class="line"><a name="l01358"></a><span class="lineno"> 1358</span>&#160; }</div><div class="line"><a name="l01359"></a><span class="lineno"> 1359</span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; AddMember(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; name, <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp;&amp; value, Allocator&amp; allocator) {</div><div class="line"><a name="l01360"></a><span class="lineno"> 1360</span>&#160; <span class="keywordflow">return</span> AddMember(name, value, allocator);</div><div class="line"><a name="l01361"></a><span class="lineno"> 1361</span>&#160; }</div><div class="line"><a name="l01362"></a><span class="lineno"> 1362</span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; AddMember(<a class="code" href="structrapidjson_1_1_generic_string_ref.html">StringRefType</a> name, <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp;&amp; value, Allocator&amp; allocator) {</div><div class="line"><a name="l01363"></a><span class="lineno"> 1363</span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a> n(name);</div><div class="line"><a name="l01364"></a><span class="lineno"> 1364</span>&#160; <span class="keywordflow">return</span> AddMember(n, value, allocator);</div><div class="line"><a name="l01365"></a><span class="lineno"> 1365</span>&#160; }</div><div class="line"><a name="l01366"></a><span class="lineno"> 1366</span>&#160;<span class="preprocessor">#endif // RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l01367"></a><span class="lineno"> 1367</span>&#160;</div><div class="line"><a name="l01368"></a><span class="lineno"> 1368</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01369"></a><span class="lineno"> 1369</span>&#160;<span class="comment"> //! Add a member (name-value pair) to the object.</span></div><div class="line"><a name="l01370"></a><span class="lineno"> 1370</span>&#160;<span class="comment"></span><span class="comment"> /*! \param name A constant string reference as name of member.</span></div><div class="line"><a name="l01371"></a><span class="lineno"> 1371</span>&#160;<span class="comment"> \param value Value of any type.</span></div><div class="line"><a name="l01372"></a><span class="lineno"> 1372</span>&#160;<span class="comment"> \param allocator Allocator for reallocating memory. It must be the same one as used before. Commonly use GenericDocument::GetAllocator().</span></div><div class="line"><a name="l01373"></a><span class="lineno"> 1373</span>&#160;<span class="comment"> \return The value itself for fluent API.</span></div><div class="line"><a name="l01374"></a><span class="lineno"> 1374</span>&#160;<span class="comment"> \note The ownership of \c value will be transferred to this object on success.</span></div><div class="line"><a name="l01375"></a><span class="lineno"> 1375</span>&#160;<span class="comment"> \pre IsObject()</span></div><div class="line"><a name="l01376"></a><span class="lineno"> 1376</span>&#160;<span class="comment"> \post value.IsNull()</span></div><div class="line"><a name="l01377"></a><span class="lineno"> 1377</span>&#160;<span class="comment"> \note Amortized Constant time complexity.</span></div><div class="line"><a name="l01378"></a><span class="lineno"> 1378</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01379"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a85dc131bdad8077ce970d580d333d15a"> 1379</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#a85dc131bdad8077ce970d580d333d15a">AddMember</a>(<a class="code" href="structrapidjson_1_1_generic_string_ref.html">StringRefType</a> name, <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; value, Allocator&amp; allocator) {</div><div class="line"><a name="l01380"></a><span class="lineno"> 1380</span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a> n(name);</div><div class="line"><a name="l01381"></a><span class="lineno"> 1381</span>&#160; <span class="keywordflow">return</span> AddMember(n, value, allocator);</div><div class="line"><a name="l01382"></a><span class="lineno"> 1382</span>&#160; }</div><div class="line"><a name="l01383"></a><span class="lineno"> 1383</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01384"></a><span class="lineno"> 1384</span>&#160;<span class="comment"> //! Add a constant string value as member (name-value pair) to the object.</span></div><div class="line"><a name="l01385"></a><span class="lineno"> 1385</span>&#160;<span class="comment"></span><span class="comment"> /*! \param name A constant string reference as name of member.</span></div><div class="line"><a name="l01386"></a><span class="lineno"> 1386</span>&#160;<span class="comment"> \param value constant string reference as value of member.</span></div><div class="line"><a name="l01387"></a><span class="lineno"> 1387</span>&#160;<span class="comment"> \param allocator Allocator for reallocating memory. It must be the same one as used before. Commonly use GenericDocument::GetAllocator().</span></div><div class="line"><a name="l01388"></a><span class="lineno"> 1388</span>&#160;<span class="comment"> \return The value itself for fluent API.</span></div><div class="line"><a name="l01389"></a><span class="lineno"> 1389</span>&#160;<span class="comment"> \pre IsObject()</span></div><div class="line"><a name="l01390"></a><span class="lineno"> 1390</span>&#160;<span class="comment"> \note This overload is needed to avoid clashes with the generic primitive type AddMember(StringRefType,T,Allocator&amp;) overload below.</span></div><div class="line"><a name="l01391"></a><span class="lineno"> 1391</span>&#160;<span class="comment"> \note Amortized Constant time complexity.</span></div><div class="line"><a name="l01392"></a><span class="lineno"> 1392</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01393"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a2ccb4736d0f2ec07f06f630d8fe54f8d"> 1393</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#a2ccb4736d0f2ec07f06f630d8fe54f8d">AddMember</a>(<a class="code" href="structrapidjson_1_1_generic_string_ref.html">StringRefType</a> name, <a class="code" href="structrapidjson_1_1_generic_string_ref.html">StringRefType</a> value, Allocator&amp; allocator) {</div><div class="line"><a name="l01394"></a><span class="lineno"> 1394</span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a> v(value);</div><div class="line"><a name="l01395"></a><span class="lineno"> 1395</span>&#160; <span class="keywordflow">return</span> AddMember(name, v, allocator);</div><div class="line"><a name="l01396"></a><span class="lineno"> 1396</span>&#160; }</div><div class="line"><a name="l01397"></a><span class="lineno"> 1397</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01398"></a><span class="lineno"> 1398</span>&#160;<span class="comment"> //! Add any primitive value as member (name-value pair) to the object.</span></div><div class="line"><a name="l01399"></a><span class="lineno"> 1399</span>&#160;<span class="comment"></span><span class="comment"> /*! \tparam T Either \ref Type, \c int, \c unsigned, \c int64_t, \c uint64_t</span></div><div class="line"><a name="l01400"></a><span class="lineno"> 1400</span>&#160;<span class="comment"> \param name A constant string reference as name of member.</span></div><div class="line"><a name="l01401"></a><span class="lineno"> 1401</span>&#160;<span class="comment"> \param value Value of primitive type \c T as value of member</span></div><div class="line"><a name="l01402"></a><span class="lineno"> 1402</span>&#160;<span class="comment"> \param allocator Allocator for reallocating memory. Commonly use GenericDocument::GetAllocator().</span></div><div class="line"><a name="l01403"></a><span class="lineno"> 1403</span>&#160;<span class="comment"> \return The value itself for fluent API.</span></div><div class="line"><a name="l01404"></a><span class="lineno"> 1404</span>&#160;<span class="comment"> \pre IsObject()</span></div><div class="line"><a name="l01405"></a><span class="lineno"> 1405</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01406"></a><span class="lineno"> 1406</span>&#160;<span class="comment"> \note The source type \c T explicitly disallows all pointer types,</span></div><div class="line"><a name="l01407"></a><span class="lineno"> 1407</span>&#160;<span class="comment"> especially (\c const) \ref Ch*. This helps avoiding implicitly</span></div><div class="line"><a name="l01408"></a><span class="lineno"> 1408</span>&#160;<span class="comment"> referencing character strings with insufficient lifetime, use</span></div><div class="line"><a name="l01409"></a><span class="lineno"> 1409</span>&#160;<span class="comment"> \ref AddMember(StringRefType, GenericValue&amp;, Allocator&amp;) or \ref</span></div><div class="line"><a name="l01410"></a><span class="lineno"> 1410</span>&#160;<span class="comment"> AddMember(StringRefType, StringRefType, Allocator&amp;).</span></div><div class="line"><a name="l01411"></a><span class="lineno"> 1411</span>&#160;<span class="comment"> All other pointer types would implicitly convert to \c bool,</span></div><div class="line"><a name="l01412"></a><span class="lineno"> 1412</span>&#160;<span class="comment"> use an explicit cast instead, if needed.</span></div><div class="line"><a name="l01413"></a><span class="lineno"> 1413</span>&#160;<span class="comment"> \note Amortized Constant time complexity.</span></div><div class="line"><a name="l01414"></a><span class="lineno"> 1414</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01415"></a><span class="lineno"> 1415</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l01416"></a><span class="lineno"> 1416</span>&#160; RAPIDJSON_DISABLEIF_RETURN((internal::OrExpr&lt;internal::IsPointer&lt;T&gt;, internal::IsGenericValue&lt;T&gt; &gt;), (<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp;))</div><div class="line"><a name="l01417"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#aa70ada250f3a0c5aeee0ce138d136b06"> 1417</a></span>&#160; AddMember(<a class="code" href="structrapidjson_1_1_generic_string_ref.html">StringRefType</a> name, T value, Allocator&amp; allocator) {</div><div class="line"><a name="l01418"></a><span class="lineno"> 1418</span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a> n(name);</div><div class="line"><a name="l01419"></a><span class="lineno"> 1419</span>&#160; <span class="keywordflow">return</span> AddMember(n, value, allocator);</div><div class="line"><a name="l01420"></a><span class="lineno"> 1420</span>&#160; }</div><div class="line"><a name="l01421"></a><span class="lineno"> 1421</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01422"></a><span class="lineno"> 1422</span>&#160;<span class="comment"> //! Remove all members in the object.</span></div><div class="line"><a name="l01423"></a><span class="lineno"> 1423</span>&#160;<span class="comment"></span><span class="comment"> /*! This function do not deallocate memory in the object, i.e. the capacity is unchanged.</span></div><div class="line"><a name="l01424"></a><span class="lineno"> 1424</span>&#160;<span class="comment"> \note Linear time complexity.</span></div><div class="line"><a name="l01425"></a><span class="lineno"> 1425</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01426"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a68d8d197ae1fb83d4dc202f9812af4cc"> 1426</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classrapidjson_1_1_generic_value.html#a68d8d197ae1fb83d4dc202f9812af4cc">RemoveAllMembers</a>() {</div><div class="line"><a name="l01427"></a><span class="lineno"> 1427</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsObject()); </div><div class="line"><a name="l01428"></a><span class="lineno"> 1428</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classrapidjson_1_1_generic_member_iterator.html">MemberIterator</a> m = MemberBegin(); m != MemberEnd(); ++m)</div><div class="line"><a name="l01429"></a><span class="lineno"> 1429</span>&#160; m-&gt;~Member();</div><div class="line"><a name="l01430"></a><span class="lineno"> 1430</span>&#160; data_.o.size = 0;</div><div class="line"><a name="l01431"></a><span class="lineno"> 1431</span>&#160; }</div><div class="line"><a name="l01432"></a><span class="lineno"> 1432</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01433"></a><span class="lineno"> 1433</span>&#160;<span class="comment"> //! Remove a member in object by its name.</span></div><div class="line"><a name="l01434"></a><span class="lineno"> 1434</span>&#160;<span class="comment"></span><span class="comment"> /*! \param name Name of member to be removed.</span></div><div class="line"><a name="l01435"></a><span class="lineno"> 1435</span>&#160;<span class="comment"> \return Whether the member existed.</span></div><div class="line"><a name="l01436"></a><span class="lineno"> 1436</span>&#160;<span class="comment"> \note This function may reorder the object members. Use \ref</span></div><div class="line"><a name="l01437"></a><span class="lineno"> 1437</span>&#160;<span class="comment"> EraseMember(ConstMemberIterator) if you need to preserve the</span></div><div class="line"><a name="l01438"></a><span class="lineno"> 1438</span>&#160;<span class="comment"> relative order of the remaining members.</span></div><div class="line"><a name="l01439"></a><span class="lineno"> 1439</span>&#160;<span class="comment"> \note Linear time complexity.</span></div><div class="line"><a name="l01440"></a><span class="lineno"> 1440</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01441"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#aa60074f72a6d1651828a104b0c6387b1"> 1441</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_generic_value.html#aa60074f72a6d1651828a104b0c6387b1">RemoveMember</a>(<span class="keyword">const</span> Ch* name) {</div><div class="line"><a name="l01442"></a><span class="lineno"> 1442</span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a> n(<a class="code" href="namespacerapidjson.html#af94951529a5d51e8c4e6e770bb707c1f">StringRef</a>(name));</div><div class="line"><a name="l01443"></a><span class="lineno"> 1443</span>&#160; <span class="keywordflow">return</span> RemoveMember(n);</div><div class="line"><a name="l01444"></a><span class="lineno"> 1444</span>&#160; }</div><div class="line"><a name="l01445"></a><span class="lineno"> 1445</span>&#160;</div><div class="line"><a name="l01446"></a><span class="lineno"> 1446</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l01447"></a><span class="lineno"> 1447</span>&#160; <span class="keywordtype">bool</span> RemoveMember(<span class="keyword">const</span> std::basic_string&lt;Ch&gt;&amp; name) { <span class="keywordflow">return</span> RemoveMember(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(<a class="code" href="namespacerapidjson.html#af94951529a5d51e8c4e6e770bb707c1f">StringRef</a>(name))); }</div><div class="line"><a name="l01448"></a><span class="lineno"> 1448</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01449"></a><span class="lineno"> 1449</span>&#160;</div><div class="line"><a name="l01450"></a><span class="lineno"> 1450</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> SourceAllocator&gt;</div><div class="line"><a name="l01451"></a><span class="lineno"> 1451</span>&#160; <span class="keywordtype">bool</span> RemoveMember(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue&lt;Encoding, SourceAllocator&gt;</a>&amp; name) {</div><div class="line"><a name="l01452"></a><span class="lineno"> 1452</span>&#160; <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">MemberIterator</a> m = FindMember(name);</div><div class="line"><a name="l01453"></a><span class="lineno"> 1453</span>&#160; <span class="keywordflow">if</span> (m != MemberEnd()) {</div><div class="line"><a name="l01454"></a><span class="lineno"> 1454</span>&#160; RemoveMember(m);</div><div class="line"><a name="l01455"></a><span class="lineno"> 1455</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l01456"></a><span class="lineno"> 1456</span>&#160; }</div><div class="line"><a name="l01457"></a><span class="lineno"> 1457</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01458"></a><span class="lineno"> 1458</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01459"></a><span class="lineno"> 1459</span>&#160; }</div><div class="line"><a name="l01460"></a><span class="lineno"> 1460</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01461"></a><span class="lineno"> 1461</span>&#160;<span class="comment"> //! Remove a member in object by iterator.</span></div><div class="line"><a name="l01462"></a><span class="lineno"> 1462</span>&#160;<span class="comment"></span><span class="comment"> /*! \param m member iterator (obtained by FindMember() or MemberBegin()).</span></div><div class="line"><a name="l01463"></a><span class="lineno"> 1463</span>&#160;<span class="comment"> \return the new iterator after removal.</span></div><div class="line"><a name="l01464"></a><span class="lineno"> 1464</span>&#160;<span class="comment"> \note This function may reorder the object members. Use \ref</span></div><div class="line"><a name="l01465"></a><span class="lineno"> 1465</span>&#160;<span class="comment"> EraseMember(ConstMemberIterator) if you need to preserve the</span></div><div class="line"><a name="l01466"></a><span class="lineno"> 1466</span>&#160;<span class="comment"> relative order of the remaining members.</span></div><div class="line"><a name="l01467"></a><span class="lineno"> 1467</span>&#160;<span class="comment"> \note Constant time complexity.</span></div><div class="line"><a name="l01468"></a><span class="lineno"> 1468</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01469"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#af91573ce61d798f0bc5dc88b00742697"> 1469</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">MemberIterator</a> <a class="code" href="classrapidjson_1_1_generic_value.html#af91573ce61d798f0bc5dc88b00742697">RemoveMember</a>(<a class="code" href="classrapidjson_1_1_generic_member_iterator.html">MemberIterator</a> m) {</div><div class="line"><a name="l01470"></a><span class="lineno"> 1470</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsObject());</div><div class="line"><a name="l01471"></a><span class="lineno"> 1471</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(data_.o.size &gt; 0);</div><div class="line"><a name="l01472"></a><span class="lineno"> 1472</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(GetMembersPointer() != 0);</div><div class="line"><a name="l01473"></a><span class="lineno"> 1473</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(m &gt;= MemberBegin() &amp;&amp; m &lt; MemberEnd());</div><div class="line"><a name="l01474"></a><span class="lineno"> 1474</span>&#160;</div><div class="line"><a name="l01475"></a><span class="lineno"> 1475</span>&#160; <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">MemberIterator</a> last(GetMembersPointer() + (data_.o.size - 1));</div><div class="line"><a name="l01476"></a><span class="lineno"> 1476</span>&#160; <span class="keywordflow">if</span> (data_.o.size &gt; 1 &amp;&amp; m != last)</div><div class="line"><a name="l01477"></a><span class="lineno"> 1477</span>&#160; *m = *last; <span class="comment">// Move the last one to this place</span></div><div class="line"><a name="l01478"></a><span class="lineno"> 1478</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01479"></a><span class="lineno"> 1479</span>&#160; m-&gt;~Member(); <span class="comment">// Only one left, just destroy</span></div><div class="line"><a name="l01480"></a><span class="lineno"> 1480</span>&#160; --data_.o.size;</div><div class="line"><a name="l01481"></a><span class="lineno"> 1481</span>&#160; <span class="keywordflow">return</span> m;</div><div class="line"><a name="l01482"></a><span class="lineno"> 1482</span>&#160; }</div><div class="line"><a name="l01483"></a><span class="lineno"> 1483</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01484"></a><span class="lineno"> 1484</span>&#160;<span class="comment"> //! Remove a member from an object by iterator.</span></div><div class="line"><a name="l01485"></a><span class="lineno"> 1485</span>&#160;<span class="comment"></span><span class="comment"> /*! \param pos iterator to the member to remove</span></div><div class="line"><a name="l01486"></a><span class="lineno"> 1486</span>&#160;<span class="comment"> \pre IsObject() == true &amp;&amp; \ref MemberBegin() &lt;= \c pos &lt; \ref MemberEnd()</span></div><div class="line"><a name="l01487"></a><span class="lineno"> 1487</span>&#160;<span class="comment"> \return Iterator following the removed element.</span></div><div class="line"><a name="l01488"></a><span class="lineno"> 1488</span>&#160;<span class="comment"> If the iterator \c pos refers to the last element, the \ref MemberEnd() iterator is returned.</span></div><div class="line"><a name="l01489"></a><span class="lineno"> 1489</span>&#160;<span class="comment"> \note This function preserves the relative order of the remaining object</span></div><div class="line"><a name="l01490"></a><span class="lineno"> 1490</span>&#160;<span class="comment"> members. If you do not need this, use the more efficient \ref RemoveMember(MemberIterator).</span></div><div class="line"><a name="l01491"></a><span class="lineno"> 1491</span>&#160;<span class="comment"> \note Linear time complexity.</span></div><div class="line"><a name="l01492"></a><span class="lineno"> 1492</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01493"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a163e60b101e5ae534597c050a6eba511"> 1493</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">MemberIterator</a> <a class="code" href="classrapidjson_1_1_generic_value.html#a163e60b101e5ae534597c050a6eba511">EraseMember</a>(<a class="code" href="classrapidjson_1_1_generic_member_iterator.html">ConstMemberIterator</a> pos) {</div><div class="line"><a name="l01494"></a><span class="lineno"> 1494</span>&#160; <span class="keywordflow">return</span> EraseMember(pos, pos +1);</div><div class="line"><a name="l01495"></a><span class="lineno"> 1495</span>&#160; }</div><div class="line"><a name="l01496"></a><span class="lineno"> 1496</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01497"></a><span class="lineno"> 1497</span>&#160;<span class="comment"> //! Remove members in the range [first, last) from an object.</span></div><div class="line"><a name="l01498"></a><span class="lineno"> 1498</span>&#160;<span class="comment"></span><span class="comment"> /*! \param first iterator to the first member to remove</span></div><div class="line"><a name="l01499"></a><span class="lineno"> 1499</span>&#160;<span class="comment"> \param last iterator following the last member to remove</span></div><div class="line"><a name="l01500"></a><span class="lineno"> 1500</span>&#160;<span class="comment"> \pre IsObject() == true &amp;&amp; \ref MemberBegin() &lt;= \c first &lt;= \c last &lt;= \ref MemberEnd()</span></div><div class="line"><a name="l01501"></a><span class="lineno"> 1501</span>&#160;<span class="comment"> \return Iterator following the last removed element.</span></div><div class="line"><a name="l01502"></a><span class="lineno"> 1502</span>&#160;<span class="comment"> \note This function preserves the relative order of the remaining object</span></div><div class="line"><a name="l01503"></a><span class="lineno"> 1503</span>&#160;<span class="comment"> members.</span></div><div class="line"><a name="l01504"></a><span class="lineno"> 1504</span>&#160;<span class="comment"> \note Linear time complexity.</span></div><div class="line"><a name="l01505"></a><span class="lineno"> 1505</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01506"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a121e40b5944be337189eb63b98b7e6ce"> 1506</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">MemberIterator</a> <a class="code" href="classrapidjson_1_1_generic_value.html#a121e40b5944be337189eb63b98b7e6ce">EraseMember</a>(<a class="code" href="classrapidjson_1_1_generic_member_iterator.html">ConstMemberIterator</a> first, <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">ConstMemberIterator</a> last) {</div><div class="line"><a name="l01507"></a><span class="lineno"> 1507</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsObject());</div><div class="line"><a name="l01508"></a><span class="lineno"> 1508</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(data_.o.size &gt; 0);</div><div class="line"><a name="l01509"></a><span class="lineno"> 1509</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(GetMembersPointer() != 0);</div><div class="line"><a name="l01510"></a><span class="lineno"> 1510</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(first &gt;= MemberBegin());</div><div class="line"><a name="l01511"></a><span class="lineno"> 1511</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(first &lt;= last);</div><div class="line"><a name="l01512"></a><span class="lineno"> 1512</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(last &lt;= MemberEnd());</div><div class="line"><a name="l01513"></a><span class="lineno"> 1513</span>&#160;</div><div class="line"><a name="l01514"></a><span class="lineno"> 1514</span>&#160; <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">MemberIterator</a> pos = MemberBegin() + (first - MemberBegin());</div><div class="line"><a name="l01515"></a><span class="lineno"> 1515</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classrapidjson_1_1_generic_member_iterator.html">MemberIterator</a> itr = pos; itr != last; ++itr)</div><div class="line"><a name="l01516"></a><span class="lineno"> 1516</span>&#160; itr-&gt;~Member();</div><div class="line"><a name="l01517"></a><span class="lineno"> 1517</span>&#160; std::memmove(static_cast&lt;void*&gt;(&amp;*pos), &amp;*last, static_cast&lt;size_t&gt;(MemberEnd() - last) * <span class="keyword">sizeof</span>(<a class="code" href="structrapidjson_1_1_generic_member.html">Member</a>));</div><div class="line"><a name="l01518"></a><span class="lineno"> 1518</span>&#160; data_.o.size -= <span class="keyword">static_cast&lt;</span><a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a><span class="keyword">&gt;</span>(last - first);</div><div class="line"><a name="l01519"></a><span class="lineno"> 1519</span>&#160; <span class="keywordflow">return</span> pos;</div><div class="line"><a name="l01520"></a><span class="lineno"> 1520</span>&#160; }</div><div class="line"><a name="l01521"></a><span class="lineno"> 1521</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01522"></a><span class="lineno"> 1522</span>&#160;<span class="comment"> //! Erase a member in object by its name.</span></div><div class="line"><a name="l01523"></a><span class="lineno"> 1523</span>&#160;<span class="comment"></span><span class="comment"> /*! \param name Name of member to be removed.</span></div><div class="line"><a name="l01524"></a><span class="lineno"> 1524</span>&#160;<span class="comment"> \return Whether the member existed.</span></div><div class="line"><a name="l01525"></a><span class="lineno"> 1525</span>&#160;<span class="comment"> \note Linear time complexity.</span></div><div class="line"><a name="l01526"></a><span class="lineno"> 1526</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01527"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#ac51a3b3046aaa12aa1d88ac876a28cec"> 1527</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_generic_value.html#ac51a3b3046aaa12aa1d88ac876a28cec">EraseMember</a>(<span class="keyword">const</span> Ch* name) {</div><div class="line"><a name="l01528"></a><span class="lineno"> 1528</span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a> n(<a class="code" href="namespacerapidjson.html#af94951529a5d51e8c4e6e770bb707c1f">StringRef</a>(name));</div><div class="line"><a name="l01529"></a><span class="lineno"> 1529</span>&#160; <span class="keywordflow">return</span> EraseMember(n);</div><div class="line"><a name="l01530"></a><span class="lineno"> 1530</span>&#160; }</div><div class="line"><a name="l01531"></a><span class="lineno"> 1531</span>&#160;</div><div class="line"><a name="l01532"></a><span class="lineno"> 1532</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l01533"></a><span class="lineno"> 1533</span>&#160; <span class="keywordtype">bool</span> EraseMember(<span class="keyword">const</span> std::basic_string&lt;Ch&gt;&amp; name) { <span class="keywordflow">return</span> EraseMember(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(<a class="code" href="namespacerapidjson.html#af94951529a5d51e8c4e6e770bb707c1f">StringRef</a>(name))); }</div><div class="line"><a name="l01534"></a><span class="lineno"> 1534</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01535"></a><span class="lineno"> 1535</span>&#160;</div><div class="line"><a name="l01536"></a><span class="lineno"> 1536</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> SourceAllocator&gt;</div><div class="line"><a name="l01537"></a><span class="lineno"> 1537</span>&#160; <span class="keywordtype">bool</span> EraseMember(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue&lt;Encoding, SourceAllocator&gt;</a>&amp; name) {</div><div class="line"><a name="l01538"></a><span class="lineno"> 1538</span>&#160; <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">MemberIterator</a> m = FindMember(name);</div><div class="line"><a name="l01539"></a><span class="lineno"> 1539</span>&#160; <span class="keywordflow">if</span> (m != MemberEnd()) {</div><div class="line"><a name="l01540"></a><span class="lineno"> 1540</span>&#160; EraseMember(m);</div><div class="line"><a name="l01541"></a><span class="lineno"> 1541</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l01542"></a><span class="lineno"> 1542</span>&#160; }</div><div class="line"><a name="l01543"></a><span class="lineno"> 1543</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01544"></a><span class="lineno"> 1544</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01545"></a><span class="lineno"> 1545</span>&#160; }</div><div class="line"><a name="l01546"></a><span class="lineno"> 1546</span>&#160;</div><div class="line"><a name="l01547"></a><span class="lineno"> 1547</span>&#160; <a class="code" href="classrapidjson_1_1_generic_object.html">Object</a> GetObject() { <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsObject()); <span class="keywordflow">return</span> <a class="code" href="classrapidjson_1_1_generic_object.html">Object</a>(*<span class="keyword">this</span>); }</div><div class="line"><a name="l01548"></a><span class="lineno"> 1548</span>&#160; <a class="code" href="classrapidjson_1_1_generic_object.html">ConstObject</a> GetObject()<span class="keyword"> const </span>{ <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsObject()); <span class="keywordflow">return</span> <a class="code" href="classrapidjson_1_1_generic_object.html">ConstObject</a>(*<span class="keyword">this</span>); }</div><div class="line"><a name="l01549"></a><span class="lineno"> 1549</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01550"></a><span class="lineno"> 1550</span>&#160;<span class="comment"> //@}</span></div><div class="line"><a name="l01551"></a><span class="lineno"> 1551</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l01552"></a><span class="lineno"> 1552</span>&#160;<span class="comment"> //!@name Array</span></div><div class="line"><a name="l01553"></a><span class="lineno"> 1553</span>&#160;<span class="comment"></span><span class="comment"> //@{</span></div><div class="line"><a name="l01554"></a><span class="lineno"> 1554</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l01555"></a><span class="lineno"> 1555</span>&#160;<span class="comment"> //! Set this value as an empty array.</span></div><div class="line"><a name="l01556"></a><span class="lineno"> 1556</span>&#160;<span class="comment"></span><span class="comment"> /*! \post IsArray == true */</span></div><div class="line"><a name="l01557"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a25069c76d045b058e54835d8c467c789"> 1557</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#a25069c76d045b058e54835d8c467c789">SetArray</a>() { this-&gt;~<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(); <span class="keyword">new</span> (<span class="keyword">this</span>) <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a058c622e1e7d59419ae58b895cbce468">kArrayType</a>); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l01558"></a><span class="lineno"> 1558</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01559"></a><span class="lineno"> 1559</span>&#160;<span class="comment"> //! Get the number of elements in array.</span></div><div class="line"><a name="l01560"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a799a8a2503989f486f3fc7a660266555"> 1560</a></span>&#160;<span class="comment"></span> <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> <a class="code" href="classrapidjson_1_1_generic_value.html#a799a8a2503989f486f3fc7a660266555">Size</a>()<span class="keyword"> const </span>{ <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsArray()); <span class="keywordflow">return</span> data_.a.size; }</div><div class="line"><a name="l01561"></a><span class="lineno"> 1561</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01562"></a><span class="lineno"> 1562</span>&#160;<span class="comment"> //! Get the capacity of array.</span></div><div class="line"><a name="l01563"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a812e5c07f74a90566e7636330740eb6a"> 1563</a></span>&#160;<span class="comment"></span> <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> <a class="code" href="classrapidjson_1_1_generic_value.html#a812e5c07f74a90566e7636330740eb6a">Capacity</a>()<span class="keyword"> const </span>{ <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsArray()); <span class="keywordflow">return</span> data_.a.capacity; }</div><div class="line"><a name="l01564"></a><span class="lineno"> 1564</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01565"></a><span class="lineno"> 1565</span>&#160;<span class="comment"> //! Check whether the array is empty.</span></div><div class="line"><a name="l01566"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#ad08a62c65a793ab1d0abe7eac03776fd"> 1566</a></span>&#160;<span class="comment"></span> <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_generic_value.html#ad08a62c65a793ab1d0abe7eac03776fd">Empty</a>()<span class="keyword"> const </span>{ <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsArray()); <span class="keywordflow">return</span> data_.a.size == 0; }</div><div class="line"><a name="l01567"></a><span class="lineno"> 1567</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01568"></a><span class="lineno"> 1568</span>&#160;<span class="comment"> //! Remove all elements in the array.</span></div><div class="line"><a name="l01569"></a><span class="lineno"> 1569</span>&#160;<span class="comment"></span><span class="comment"> /*! This function do not deallocate memory in the array, i.e. the capacity is unchanged.</span></div><div class="line"><a name="l01570"></a><span class="lineno"> 1570</span>&#160;<span class="comment"> \note Linear time complexity.</span></div><div class="line"><a name="l01571"></a><span class="lineno"> 1571</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01572"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#aa56b69bac5423622eff6998ce4802106"> 1572</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classrapidjson_1_1_generic_value.html#aa56b69bac5423622eff6998ce4802106">Clear</a>() {</div><div class="line"><a name="l01573"></a><span class="lineno"> 1573</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsArray()); </div><div class="line"><a name="l01574"></a><span class="lineno"> 1574</span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>* e = GetElementsPointer();</div><div class="line"><a name="l01575"></a><span class="lineno"> 1575</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>* v = e; v != e + data_.a.size; ++v)</div><div class="line"><a name="l01576"></a><span class="lineno"> 1576</span>&#160; v-&gt;~GenericValue();</div><div class="line"><a name="l01577"></a><span class="lineno"> 1577</span>&#160; data_.a.size = 0;</div><div class="line"><a name="l01578"></a><span class="lineno"> 1578</span>&#160; }</div><div class="line"><a name="l01579"></a><span class="lineno"> 1579</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01580"></a><span class="lineno"> 1580</span>&#160;<span class="comment"> //! Get an element from array by index.</span></div><div class="line"><a name="l01581"></a><span class="lineno"> 1581</span>&#160;<span class="comment"></span><span class="comment"> /*! \pre IsArray() == true</span></div><div class="line"><a name="l01582"></a><span class="lineno"> 1582</span>&#160;<span class="comment"> \param index Zero-based index of element.</span></div><div class="line"><a name="l01583"></a><span class="lineno"> 1583</span>&#160;<span class="comment"> \see operator[](T*)</span></div><div class="line"><a name="l01584"></a><span class="lineno"> 1584</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01585"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#adc312de070d03a63e6c692c9c61db156"> 1585</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#adc312de070d03a63e6c692c9c61db156">operator[]</a>(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> index) {</div><div class="line"><a name="l01586"></a><span class="lineno"> 1586</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsArray());</div><div class="line"><a name="l01587"></a><span class="lineno"> 1587</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(index &lt; data_.a.size);</div><div class="line"><a name="l01588"></a><span class="lineno"> 1588</span>&#160; <span class="keywordflow">return</span> GetElementsPointer()[index];</div><div class="line"><a name="l01589"></a><span class="lineno"> 1589</span>&#160; }</div><div class="line"><a name="l01590"></a><span class="lineno"> 1590</span>&#160; <span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; operator[](<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> index)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">const_cast&lt;</span><a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp;<span class="keyword">&gt;</span>(*this)[index]; }</div><div class="line"><a name="l01591"></a><span class="lineno"> 1591</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01592"></a><span class="lineno"> 1592</span>&#160;<span class="comment"> //! Element iterator</span></div><div class="line"><a name="l01593"></a><span class="lineno"> 1593</span>&#160;<span class="comment"></span><span class="comment"> /*! \pre IsArray() == true */</span></div><div class="line"><a name="l01594"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a8d1040c479d89edb261db86400ebe603"> 1594</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">ValueIterator</a> <a class="code" href="classrapidjson_1_1_generic_value.html#a8d1040c479d89edb261db86400ebe603">Begin</a>() { <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsArray()); <span class="keywordflow">return</span> GetElementsPointer(); }<span class="comment"></span></div><div class="line"><a name="l01595"></a><span class="lineno"> 1595</span>&#160;<span class="comment"> //! \em Past-the-end element iterator</span></div><div class="line"><a name="l01596"></a><span class="lineno"> 1596</span>&#160;<span class="comment"></span><span class="comment"> /*! \pre IsArray() == true */</span></div><div class="line"><a name="l01597"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#aaf58b9337ccc0cdf16aa9634c4645109"> 1597</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">ValueIterator</a> <a class="code" href="classrapidjson_1_1_generic_value.html#aaf58b9337ccc0cdf16aa9634c4645109">End</a>() { <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsArray()); <span class="keywordflow">return</span> GetElementsPointer() + data_.a.size; }<span class="comment"></span></div><div class="line"><a name="l01598"></a><span class="lineno"> 1598</span>&#160;<span class="comment"> //! Constant element iterator</span></div><div class="line"><a name="l01599"></a><span class="lineno"> 1599</span>&#160;<span class="comment"></span><span class="comment"> /*! \pre IsArray() == true */</span></div><div class="line"><a name="l01600"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a07d947971c59c9ce884b3c5205c9238f"> 1600</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">ConstValueIterator</a> <a class="code" href="classrapidjson_1_1_generic_value.html#a07d947971c59c9ce884b3c5205c9238f">Begin</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">const_cast&lt;</span><a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp;<span class="keyword">&gt;</span>(*this).<a class="code" href="classrapidjson_1_1_generic_value.html#a8d1040c479d89edb261db86400ebe603">Begin</a>(); }<span class="comment"></span></div><div class="line"><a name="l01601"></a><span class="lineno"> 1601</span>&#160;<span class="comment"> //! Constant \em past-the-end element iterator</span></div><div class="line"><a name="l01602"></a><span class="lineno"> 1602</span>&#160;<span class="comment"></span><span class="comment"> /*! \pre IsArray() == true */</span></div><div class="line"><a name="l01603"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#abdd6a3b703a03aada4c186a2365698e7"> 1603</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">ConstValueIterator</a> <a class="code" href="classrapidjson_1_1_generic_value.html#abdd6a3b703a03aada4c186a2365698e7">End</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">const_cast&lt;</span><a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp;<span class="keyword">&gt;</span>(*this).<a class="code" href="classrapidjson_1_1_generic_value.html#aaf58b9337ccc0cdf16aa9634c4645109">End</a>(); }</div><div class="line"><a name="l01604"></a><span class="lineno"> 1604</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01605"></a><span class="lineno"> 1605</span>&#160;<span class="comment"> //! Request the array to have enough capacity to store elements.</span></div><div class="line"><a name="l01606"></a><span class="lineno"> 1606</span>&#160;<span class="comment"></span><span class="comment"> /*! \param newCapacity The capacity that the array at least need to have.</span></div><div class="line"><a name="l01607"></a><span class="lineno"> 1607</span>&#160;<span class="comment"> \param allocator Allocator for reallocating memory. It must be the same one as used before. Commonly use GenericDocument::GetAllocator().</span></div><div class="line"><a name="l01608"></a><span class="lineno"> 1608</span>&#160;<span class="comment"> \return The value itself for fluent API.</span></div><div class="line"><a name="l01609"></a><span class="lineno"> 1609</span>&#160;<span class="comment"> \note Linear time complexity.</span></div><div class="line"><a name="l01610"></a><span class="lineno"> 1610</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01611"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a17971ba2bcd4eb1716098fdfe9182386"> 1611</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#a17971ba2bcd4eb1716098fdfe9182386">Reserve</a>(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> newCapacity, Allocator &amp;allocator) {</div><div class="line"><a name="l01612"></a><span class="lineno"> 1612</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsArray());</div><div class="line"><a name="l01613"></a><span class="lineno"> 1613</span>&#160; <span class="keywordflow">if</span> (newCapacity &gt; data_.a.capacity) {</div><div class="line"><a name="l01614"></a><span class="lineno"> 1614</span>&#160; SetElementsPointer(reinterpret_cast&lt;GenericValue*&gt;(allocator.Realloc(GetElementsPointer(), data_.a.capacity * <span class="keyword">sizeof</span>(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>), newCapacity * <span class="keyword">sizeof</span>(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>))));</div><div class="line"><a name="l01615"></a><span class="lineno"> 1615</span>&#160; data_.a.capacity = newCapacity;</div><div class="line"><a name="l01616"></a><span class="lineno"> 1616</span>&#160; }</div><div class="line"><a name="l01617"></a><span class="lineno"> 1617</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l01618"></a><span class="lineno"> 1618</span>&#160; }</div><div class="line"><a name="l01619"></a><span class="lineno"> 1619</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01620"></a><span class="lineno"> 1620</span>&#160;<span class="comment"> //! Append a GenericValue at the end of the array.</span></div><div class="line"><a name="l01621"></a><span class="lineno"> 1621</span>&#160;<span class="comment"></span><span class="comment"> /*! \param value Value to be appended.</span></div><div class="line"><a name="l01622"></a><span class="lineno"> 1622</span>&#160;<span class="comment"> \param allocator Allocator for reallocating memory. It must be the same one as used before. Commonly use GenericDocument::GetAllocator().</span></div><div class="line"><a name="l01623"></a><span class="lineno"> 1623</span>&#160;<span class="comment"> \pre IsArray() == true</span></div><div class="line"><a name="l01624"></a><span class="lineno"> 1624</span>&#160;<span class="comment"> \post value.IsNull() == true</span></div><div class="line"><a name="l01625"></a><span class="lineno"> 1625</span>&#160;<span class="comment"> \return The value itself for fluent API.</span></div><div class="line"><a name="l01626"></a><span class="lineno"> 1626</span>&#160;<span class="comment"> \note The ownership of \c value will be transferred to this array on success.</span></div><div class="line"><a name="l01627"></a><span class="lineno"> 1627</span>&#160;<span class="comment"> \note If the number of elements to be appended is known, calls Reserve() once first may be more efficient.</span></div><div class="line"><a name="l01628"></a><span class="lineno"> 1628</span>&#160;<span class="comment"> \note Amortized constant time complexity.</span></div><div class="line"><a name="l01629"></a><span class="lineno"> 1629</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01630"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a0ec9f34bef5890241d4bc882b73b1db4"> 1630</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#a0ec9f34bef5890241d4bc882b73b1db4">PushBack</a>(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; value, Allocator&amp; allocator) {</div><div class="line"><a name="l01631"></a><span class="lineno"> 1631</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsArray());</div><div class="line"><a name="l01632"></a><span class="lineno"> 1632</span>&#160; <span class="keywordflow">if</span> (data_.a.size &gt;= data_.a.capacity)</div><div class="line"><a name="l01633"></a><span class="lineno"> 1633</span>&#160; Reserve(data_.a.capacity == 0 ? kDefaultArrayCapacity : (data_.a.capacity + (data_.a.capacity + 1) / 2), allocator);</div><div class="line"><a name="l01634"></a><span class="lineno"> 1634</span>&#160; GetElementsPointer()[data_.a.size++].RawAssign(value);</div><div class="line"><a name="l01635"></a><span class="lineno"> 1635</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l01636"></a><span class="lineno"> 1636</span>&#160; }</div><div class="line"><a name="l01637"></a><span class="lineno"> 1637</span>&#160;</div><div class="line"><a name="l01638"></a><span class="lineno"> 1638</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l01639"></a><span class="lineno"> 1639</span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; PushBack(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp;&amp; value, Allocator&amp; allocator) {</div><div class="line"><a name="l01640"></a><span class="lineno"> 1640</span>&#160; <span class="keywordflow">return</span> PushBack(value, allocator);</div><div class="line"><a name="l01641"></a><span class="lineno"> 1641</span>&#160; }</div><div class="line"><a name="l01642"></a><span class="lineno"> 1642</span>&#160;<span class="preprocessor">#endif // RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l01643"></a><span class="lineno"> 1643</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01644"></a><span class="lineno"> 1644</span>&#160;<span class="comment"> //! Append a constant string reference at the end of the array.</span></div><div class="line"><a name="l01645"></a><span class="lineno"> 1645</span>&#160;<span class="comment"></span><span class="comment"> /*! \param value Constant string reference to be appended.</span></div><div class="line"><a name="l01646"></a><span class="lineno"> 1646</span>&#160;<span class="comment"> \param allocator Allocator for reallocating memory. It must be the same one used previously. Commonly use GenericDocument::GetAllocator().</span></div><div class="line"><a name="l01647"></a><span class="lineno"> 1647</span>&#160;<span class="comment"> \pre IsArray() == true</span></div><div class="line"><a name="l01648"></a><span class="lineno"> 1648</span>&#160;<span class="comment"> \return The value itself for fluent API.</span></div><div class="line"><a name="l01649"></a><span class="lineno"> 1649</span>&#160;<span class="comment"> \note If the number of elements to be appended is known, calls Reserve() once first may be more efficient.</span></div><div class="line"><a name="l01650"></a><span class="lineno"> 1650</span>&#160;<span class="comment"> \note Amortized constant time complexity.</span></div><div class="line"><a name="l01651"></a><span class="lineno"> 1651</span>&#160;<span class="comment"> \see GenericStringRef</span></div><div class="line"><a name="l01652"></a><span class="lineno"> 1652</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01653"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a41946915cb219a684f6ffc9341efee22"> 1653</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#a41946915cb219a684f6ffc9341efee22">PushBack</a>(<a class="code" href="structrapidjson_1_1_generic_string_ref.html">StringRefType</a> value, Allocator&amp; allocator) {</div><div class="line"><a name="l01654"></a><span class="lineno"> 1654</span>&#160; <span class="keywordflow">return</span> (*this).template PushBack&lt;StringRefType&gt;(value, allocator);</div><div class="line"><a name="l01655"></a><span class="lineno"> 1655</span>&#160; }</div><div class="line"><a name="l01656"></a><span class="lineno"> 1656</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01657"></a><span class="lineno"> 1657</span>&#160;<span class="comment"> //! Append a primitive value at the end of the array.</span></div><div class="line"><a name="l01658"></a><span class="lineno"> 1658</span>&#160;<span class="comment"></span><span class="comment"> /*! \tparam T Either \ref Type, \c int, \c unsigned, \c int64_t, \c uint64_t</span></div><div class="line"><a name="l01659"></a><span class="lineno"> 1659</span>&#160;<span class="comment"> \param value Value of primitive type T to be appended.</span></div><div class="line"><a name="l01660"></a><span class="lineno"> 1660</span>&#160;<span class="comment"> \param allocator Allocator for reallocating memory. It must be the same one as used before. Commonly use GenericDocument::GetAllocator().</span></div><div class="line"><a name="l01661"></a><span class="lineno"> 1661</span>&#160;<span class="comment"> \pre IsArray() == true</span></div><div class="line"><a name="l01662"></a><span class="lineno"> 1662</span>&#160;<span class="comment"> \return The value itself for fluent API.</span></div><div class="line"><a name="l01663"></a><span class="lineno"> 1663</span>&#160;<span class="comment"> \note If the number of elements to be appended is known, calls Reserve() once first may be more efficient.</span></div><div class="line"><a name="l01664"></a><span class="lineno"> 1664</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01665"></a><span class="lineno"> 1665</span>&#160;<span class="comment"> \note The source type \c T explicitly disallows all pointer types,</span></div><div class="line"><a name="l01666"></a><span class="lineno"> 1666</span>&#160;<span class="comment"> especially (\c const) \ref Ch*. This helps avoiding implicitly</span></div><div class="line"><a name="l01667"></a><span class="lineno"> 1667</span>&#160;<span class="comment"> referencing character strings with insufficient lifetime, use</span></div><div class="line"><a name="l01668"></a><span class="lineno"> 1668</span>&#160;<span class="comment"> \ref PushBack(GenericValue&amp;, Allocator&amp;) or \ref</span></div><div class="line"><a name="l01669"></a><span class="lineno"> 1669</span>&#160;<span class="comment"> PushBack(StringRefType, Allocator&amp;).</span></div><div class="line"><a name="l01670"></a><span class="lineno"> 1670</span>&#160;<span class="comment"> All other pointer types would implicitly convert to \c bool,</span></div><div class="line"><a name="l01671"></a><span class="lineno"> 1671</span>&#160;<span class="comment"> use an explicit cast instead, if needed.</span></div><div class="line"><a name="l01672"></a><span class="lineno"> 1672</span>&#160;<span class="comment"> \note Amortized constant time complexity.</span></div><div class="line"><a name="l01673"></a><span class="lineno"> 1673</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01674"></a><span class="lineno"> 1674</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l01675"></a><span class="lineno"> 1675</span>&#160; RAPIDJSON_DISABLEIF_RETURN((internal::OrExpr&lt;internal::IsPointer&lt;T&gt;, internal::IsGenericValue&lt;T&gt; &gt;), (<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp;))</div><div class="line"><a name="l01676"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#aa59273e0adfe2a9d0e6ac29d2537d9ed"> 1676</a></span>&#160; PushBack(T value, Allocator&amp; allocator) {</div><div class="line"><a name="l01677"></a><span class="lineno"> 1677</span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a> v(value);</div><div class="line"><a name="l01678"></a><span class="lineno"> 1678</span>&#160; <span class="keywordflow">return</span> PushBack(v, allocator);</div><div class="line"><a name="l01679"></a><span class="lineno"> 1679</span>&#160; }</div><div class="line"><a name="l01680"></a><span class="lineno"> 1680</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01681"></a><span class="lineno"> 1681</span>&#160;<span class="comment"> //! Remove the last element in the array.</span></div><div class="line"><a name="l01682"></a><span class="lineno"> 1682</span>&#160;<span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l01683"></a><span class="lineno"> 1683</span>&#160;<span class="comment"> \note Constant time complexity.</span></div><div class="line"><a name="l01684"></a><span class="lineno"> 1684</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01685"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#ae475f31fb851138ced40e2ff6cb43ca6"> 1685</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#ae475f31fb851138ced40e2ff6cb43ca6">PopBack</a>() {</div><div class="line"><a name="l01686"></a><span class="lineno"> 1686</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsArray());</div><div class="line"><a name="l01687"></a><span class="lineno"> 1687</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(!Empty());</div><div class="line"><a name="l01688"></a><span class="lineno"> 1688</span>&#160; GetElementsPointer()[--data_.a.size].~GenericValue();</div><div class="line"><a name="l01689"></a><span class="lineno"> 1689</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l01690"></a><span class="lineno"> 1690</span>&#160; }</div><div class="line"><a name="l01691"></a><span class="lineno"> 1691</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01692"></a><span class="lineno"> 1692</span>&#160;<span class="comment"> //! Remove an element of array by iterator.</span></div><div class="line"><a name="l01693"></a><span class="lineno"> 1693</span>&#160;<span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l01694"></a><span class="lineno"> 1694</span>&#160;<span class="comment"> \param pos iterator to the element to remove</span></div><div class="line"><a name="l01695"></a><span class="lineno"> 1695</span>&#160;<span class="comment"> \pre IsArray() == true &amp;&amp; \ref Begin() &lt;= \c pos &lt; \ref End()</span></div><div class="line"><a name="l01696"></a><span class="lineno"> 1696</span>&#160;<span class="comment"> \return Iterator following the removed element. If the iterator pos refers to the last element, the End() iterator is returned.</span></div><div class="line"><a name="l01697"></a><span class="lineno"> 1697</span>&#160;<span class="comment"> \note Linear time complexity.</span></div><div class="line"><a name="l01698"></a><span class="lineno"> 1698</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01699"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a68ba73eeda7b9429ca05267065d3cc99"> 1699</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">ValueIterator</a> <a class="code" href="classrapidjson_1_1_generic_value.html#a68ba73eeda7b9429ca05267065d3cc99">Erase</a>(<a class="code" href="classrapidjson_1_1_generic_value.html">ConstValueIterator</a> pos) {</div><div class="line"><a name="l01700"></a><span class="lineno"> 1700</span>&#160; <span class="keywordflow">return</span> Erase(pos, pos + 1);</div><div class="line"><a name="l01701"></a><span class="lineno"> 1701</span>&#160; }</div><div class="line"><a name="l01702"></a><span class="lineno"> 1702</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01703"></a><span class="lineno"> 1703</span>&#160;<span class="comment"> //! Remove elements in the range [first, last) of the array.</span></div><div class="line"><a name="l01704"></a><span class="lineno"> 1704</span>&#160;<span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l01705"></a><span class="lineno"> 1705</span>&#160;<span class="comment"> \param first iterator to the first element to remove</span></div><div class="line"><a name="l01706"></a><span class="lineno"> 1706</span>&#160;<span class="comment"> \param last iterator following the last element to remove</span></div><div class="line"><a name="l01707"></a><span class="lineno"> 1707</span>&#160;<span class="comment"> \pre IsArray() == true &amp;&amp; \ref Begin() &lt;= \c first &lt;= \c last &lt;= \ref End()</span></div><div class="line"><a name="l01708"></a><span class="lineno"> 1708</span>&#160;<span class="comment"> \return Iterator following the last removed element.</span></div><div class="line"><a name="l01709"></a><span class="lineno"> 1709</span>&#160;<span class="comment"> \note Linear time complexity.</span></div><div class="line"><a name="l01710"></a><span class="lineno"> 1710</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01711"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a916f443e02f9379d8fbde49a4d440f61"> 1711</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">ValueIterator</a> <a class="code" href="classrapidjson_1_1_generic_value.html#a916f443e02f9379d8fbde49a4d440f61">Erase</a>(<a class="code" href="classrapidjson_1_1_generic_value.html">ConstValueIterator</a> first, <a class="code" href="classrapidjson_1_1_generic_value.html">ConstValueIterator</a> last) {</div><div class="line"><a name="l01712"></a><span class="lineno"> 1712</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsArray());</div><div class="line"><a name="l01713"></a><span class="lineno"> 1713</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(data_.a.size &gt; 0);</div><div class="line"><a name="l01714"></a><span class="lineno"> 1714</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(GetElementsPointer() != 0);</div><div class="line"><a name="l01715"></a><span class="lineno"> 1715</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(first &gt;= Begin());</div><div class="line"><a name="l01716"></a><span class="lineno"> 1716</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(first &lt;= last);</div><div class="line"><a name="l01717"></a><span class="lineno"> 1717</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(last &lt;= End());</div><div class="line"><a name="l01718"></a><span class="lineno"> 1718</span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">ValueIterator</a> pos = Begin() + (first - Begin());</div><div class="line"><a name="l01719"></a><span class="lineno"> 1719</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classrapidjson_1_1_generic_value.html">ValueIterator</a> itr = pos; itr != last; ++itr)</div><div class="line"><a name="l01720"></a><span class="lineno"> 1720</span>&#160; itr-&gt;<a class="code" href="classrapidjson_1_1_generic_value.html#a433a64b466c80cadf7d1acaa6f065437">~GenericValue</a>();</div><div class="line"><a name="l01721"></a><span class="lineno"> 1721</span>&#160; std::memmove(static_cast&lt;void*&gt;(pos), last, static_cast&lt;size_t&gt;(End() - last) * <span class="keyword">sizeof</span>(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>));</div><div class="line"><a name="l01722"></a><span class="lineno"> 1722</span>&#160; data_.a.size -= <span class="keyword">static_cast&lt;</span><a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a><span class="keyword">&gt;</span>(last - first);</div><div class="line"><a name="l01723"></a><span class="lineno"> 1723</span>&#160; <span class="keywordflow">return</span> pos;</div><div class="line"><a name="l01724"></a><span class="lineno"> 1724</span>&#160; }</div><div class="line"><a name="l01725"></a><span class="lineno"> 1725</span>&#160;</div><div class="line"><a name="l01726"></a><span class="lineno"> 1726</span>&#160; <a class="code" href="classrapidjson_1_1_generic_array.html">Array</a> GetArray() { <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsArray()); <span class="keywordflow">return</span> <a class="code" href="classrapidjson_1_1_generic_array.html">Array</a>(*<span class="keyword">this</span>); }</div><div class="line"><a name="l01727"></a><span class="lineno"> 1727</span>&#160; <a class="code" href="classrapidjson_1_1_generic_array.html">ConstArray</a> GetArray()<span class="keyword"> const </span>{ <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsArray()); <span class="keywordflow">return</span> <a class="code" href="classrapidjson_1_1_generic_array.html">ConstArray</a>(*<span class="keyword">this</span>); }</div><div class="line"><a name="l01728"></a><span class="lineno"> 1728</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01729"></a><span class="lineno"> 1729</span>&#160;<span class="comment"> //@}</span></div><div class="line"><a name="l01730"></a><span class="lineno"> 1730</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l01731"></a><span class="lineno"> 1731</span>&#160;<span class="comment"> //!@name Number</span></div><div class="line"><a name="l01732"></a><span class="lineno"> 1732</span>&#160;<span class="comment"></span><span class="comment"> //@{</span></div><div class="line"><a name="l01733"></a><span class="lineno"> 1733</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01734"></a><span class="lineno"> 1734</span>&#160; <span class="keywordtype">int</span> GetInt()<span class="keyword"> const </span>{ <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(data_.f.flags &amp; kIntFlag); <span class="keywordflow">return</span> data_.n.i.i; }</div><div class="line"><a name="l01735"></a><span class="lineno"> 1735</span>&#160; <span class="keywordtype">unsigned</span> GetUint()<span class="keyword"> const </span>{ <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(data_.f.flags &amp; kUintFlag); <span class="keywordflow">return</span> data_.n.u.u; }</div><div class="line"><a name="l01736"></a><span class="lineno"> 1736</span>&#160; int64_t GetInt64()<span class="keyword"> const </span>{ <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(data_.f.flags &amp; kInt64Flag); <span class="keywordflow">return</span> data_.n.i64; }</div><div class="line"><a name="l01737"></a><span class="lineno"> 1737</span>&#160; uint64_t GetUint64()<span class="keyword"> const </span>{ <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(data_.f.flags &amp; kUint64Flag); <span class="keywordflow">return</span> data_.n.u64; }</div><div class="line"><a name="l01738"></a><span class="lineno"> 1738</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01739"></a><span class="lineno"> 1739</span>&#160;<span class="comment"> //! Get the value as double type.</span></div><div class="line"><a name="l01740"></a><span class="lineno"> 1740</span>&#160;<span class="comment"></span><span class="comment"> /*! \note If the value is 64-bit integer type, it may lose precision. Use \c IsLosslessDouble() to check whether the converison is lossless.</span></div><div class="line"><a name="l01741"></a><span class="lineno"> 1741</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01742"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#aa27d086d265f0ce447b15b15f0a2ed6e"> 1742</a></span>&#160; <span class="keywordtype">double</span> <a class="code" href="classrapidjson_1_1_generic_value.html#aa27d086d265f0ce447b15b15f0a2ed6e">GetDouble</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l01743"></a><span class="lineno"> 1743</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsNumber());</div><div class="line"><a name="l01744"></a><span class="lineno"> 1744</span>&#160; <span class="keywordflow">if</span> ((data_.f.flags &amp; kDoubleFlag) != 0) <span class="keywordflow">return</span> data_.n.d; <span class="comment">// exact type, no conversion.</span></div><div class="line"><a name="l01745"></a><span class="lineno"> 1745</span>&#160; <span class="keywordflow">if</span> ((data_.f.flags &amp; kIntFlag) != 0) <span class="keywordflow">return</span> data_.n.i.i; <span class="comment">// int -&gt; double</span></div><div class="line"><a name="l01746"></a><span class="lineno"> 1746</span>&#160; <span class="keywordflow">if</span> ((data_.f.flags &amp; kUintFlag) != 0) <span class="keywordflow">return</span> data_.n.u.u; <span class="comment">// unsigned -&gt; double</span></div><div class="line"><a name="l01747"></a><span class="lineno"> 1747</span>&#160; <span class="keywordflow">if</span> ((data_.f.flags &amp; kInt64Flag) != 0) <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span><span class="keywordtype">double</span><span class="keyword">&gt;</span>(data_.n.i64); <span class="comment">// int64_t -&gt; double (may lose precision)</span></div><div class="line"><a name="l01748"></a><span class="lineno"> 1748</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>((data_.f.flags &amp; kUint64Flag) != 0); <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span><span class="keywordtype">double</span><span class="keyword">&gt;</span>(data_.n.u64); <span class="comment">// uint64_t -&gt; double (may lose precision)</span></div><div class="line"><a name="l01749"></a><span class="lineno"> 1749</span>&#160; }</div><div class="line"><a name="l01750"></a><span class="lineno"> 1750</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01751"></a><span class="lineno"> 1751</span>&#160;<span class="comment"> //! Get the value as float type.</span></div><div class="line"><a name="l01752"></a><span class="lineno"> 1752</span>&#160;<span class="comment"></span><span class="comment"> /*! \note If the value is 64-bit integer type, it may lose precision. Use \c IsLosslessFloat() to check whether the converison is lossless.</span></div><div class="line"><a name="l01753"></a><span class="lineno"> 1753</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01754"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a573712808dd5d8814c103cf55fd761b4"> 1754</a></span>&#160; <span class="keywordtype">float</span> <a class="code" href="classrapidjson_1_1_generic_value.html#a573712808dd5d8814c103cf55fd761b4">GetFloat</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l01755"></a><span class="lineno"> 1755</span>&#160; <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span>(GetDouble());</div><div class="line"><a name="l01756"></a><span class="lineno"> 1756</span>&#160; }</div><div class="line"><a name="l01757"></a><span class="lineno"> 1757</span>&#160;</div><div class="line"><a name="l01758"></a><span class="lineno"> 1758</span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; SetInt(<span class="keywordtype">int</span> i) { this-&gt;~<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(); <span class="keyword">new</span> (<span class="keyword">this</span>) <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(i); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l01759"></a><span class="lineno"> 1759</span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; SetUint(<span class="keywordtype">unsigned</span> u) { this-&gt;~<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(); <span class="keyword">new</span> (<span class="keyword">this</span>) <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(u); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l01760"></a><span class="lineno"> 1760</span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; SetInt64(int64_t i64) { this-&gt;~<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(); <span class="keyword">new</span> (<span class="keyword">this</span>) <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(i64); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l01761"></a><span class="lineno"> 1761</span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; SetUint64(uint64_t u64) { this-&gt;~<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(); <span class="keyword">new</span> (<span class="keyword">this</span>) <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(u64); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l01762"></a><span class="lineno"> 1762</span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; SetDouble(<span class="keywordtype">double</span> d) { this-&gt;~<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(); <span class="keyword">new</span> (<span class="keyword">this</span>) <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(d); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l01763"></a><span class="lineno"> 1763</span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; SetFloat(<span class="keywordtype">float</span> f) { this-&gt;~<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(); <span class="keyword">new</span> (<span class="keyword">this</span>) <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(static_cast&lt;double&gt;(f)); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l01764"></a><span class="lineno"> 1764</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01765"></a><span class="lineno"> 1765</span>&#160;<span class="comment"> //@}</span></div><div class="line"><a name="l01766"></a><span class="lineno"> 1766</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l01767"></a><span class="lineno"> 1767</span>&#160;<span class="comment"> //!@name String</span></div><div class="line"><a name="l01768"></a><span class="lineno"> 1768</span>&#160;<span class="comment"></span><span class="comment"> //@{</span></div><div class="line"><a name="l01769"></a><span class="lineno"> 1769</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01770"></a><span class="lineno"> 1770</span>&#160; <span class="keyword">const</span> Ch* GetString()<span class="keyword"> const </span>{ <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsString()); <span class="keywordflow">return</span> (data_.f.flags &amp; kInlineStrFlag) ? data_.ss.str : GetStringPointer(); }</div><div class="line"><a name="l01771"></a><span class="lineno"> 1771</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01772"></a><span class="lineno"> 1772</span>&#160;<span class="comment"> //! Get the length of string.</span></div><div class="line"><a name="l01773"></a><span class="lineno"> 1773</span>&#160;<span class="comment"></span><span class="comment"> /*! Since rapidjson permits &quot;\\u0000&quot; in the json string, strlen(v.GetString()) may not equal to v.GetStringLength().</span></div><div class="line"><a name="l01774"></a><span class="lineno"> 1774</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01775"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a18599e0d1a7e70a11b35f5e219390fea"> 1775</a></span>&#160; <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> <a class="code" href="classrapidjson_1_1_generic_value.html#a18599e0d1a7e70a11b35f5e219390fea">GetStringLength</a>()<span class="keyword"> const </span>{ <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsString()); <span class="keywordflow">return</span> ((data_.f.flags &amp; kInlineStrFlag) ? (data_.ss.GetLength()) : data_.s.length); }</div><div class="line"><a name="l01776"></a><span class="lineno"> 1776</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01777"></a><span class="lineno"> 1777</span>&#160;<span class="comment"> //! Set this value as a string without copying source string.</span></div><div class="line"><a name="l01778"></a><span class="lineno"> 1778</span>&#160;<span class="comment"></span><span class="comment"> /*! This version has better performance with supplied length, and also support string containing null character.</span></div><div class="line"><a name="l01779"></a><span class="lineno"> 1779</span>&#160;<span class="comment"> \param s source string pointer. </span></div><div class="line"><a name="l01780"></a><span class="lineno"> 1780</span>&#160;<span class="comment"> \param length The length of source string, excluding the trailing null terminator.</span></div><div class="line"><a name="l01781"></a><span class="lineno"> 1781</span>&#160;<span class="comment"> \return The value itself for fluent API.</span></div><div class="line"><a name="l01782"></a><span class="lineno"> 1782</span>&#160;<span class="comment"> \post IsString() == true &amp;&amp; GetString() == s &amp;&amp; GetStringLength() == length</span></div><div class="line"><a name="l01783"></a><span class="lineno"> 1783</span>&#160;<span class="comment"> \see SetString(StringRefType)</span></div><div class="line"><a name="l01784"></a><span class="lineno"> 1784</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01785"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#afb91480cc6242ca96ffc603e649c319f"> 1785</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#afb91480cc6242ca96ffc603e649c319f">SetString</a>(<span class="keyword">const</span> Ch* s, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> length) { <span class="keywordflow">return</span> <a class="code" href="classrapidjson_1_1_generic_value.html#afb91480cc6242ca96ffc603e649c319f">SetString</a>(<a class="code" href="namespacerapidjson.html#af94951529a5d51e8c4e6e770bb707c1f">StringRef</a>(s, length)); }</div><div class="line"><a name="l01786"></a><span class="lineno"> 1786</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01787"></a><span class="lineno"> 1787</span>&#160;<span class="comment"> //! Set this value as a string without copying source string.</span></div><div class="line"><a name="l01788"></a><span class="lineno"> 1788</span>&#160;<span class="comment"></span><span class="comment"> /*! \param s source string reference</span></div><div class="line"><a name="l01789"></a><span class="lineno"> 1789</span>&#160;<span class="comment"> \return The value itself for fluent API.</span></div><div class="line"><a name="l01790"></a><span class="lineno"> 1790</span>&#160;<span class="comment"> \post IsString() == true &amp;&amp; GetString() == s &amp;&amp; GetStringLength() == s.length</span></div><div class="line"><a name="l01791"></a><span class="lineno"> 1791</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01792"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#aabb538578a3c1e60c86cda32d062bc1c"> 1792</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#aabb538578a3c1e60c86cda32d062bc1c">SetString</a>(<a class="code" href="structrapidjson_1_1_generic_string_ref.html">StringRefType</a> s) { this-&gt;~<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(); SetStringRaw(s); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l01793"></a><span class="lineno"> 1793</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01794"></a><span class="lineno"> 1794</span>&#160;<span class="comment"> //! Set this value as a string by copying from source string.</span></div><div class="line"><a name="l01795"></a><span class="lineno"> 1795</span>&#160;<span class="comment"></span><span class="comment"> /*! This version has better performance with supplied length, and also support string containing null character.</span></div><div class="line"><a name="l01796"></a><span class="lineno"> 1796</span>&#160;<span class="comment"> \param s source string. </span></div><div class="line"><a name="l01797"></a><span class="lineno"> 1797</span>&#160;<span class="comment"> \param length The length of source string, excluding the trailing null terminator.</span></div><div class="line"><a name="l01798"></a><span class="lineno"> 1798</span>&#160;<span class="comment"> \param allocator Allocator for allocating copied buffer. Commonly use GenericDocument::GetAllocator().</span></div><div class="line"><a name="l01799"></a><span class="lineno"> 1799</span>&#160;<span class="comment"> \return The value itself for fluent API.</span></div><div class="line"><a name="l01800"></a><span class="lineno"> 1800</span>&#160;<span class="comment"> \post IsString() == true &amp;&amp; GetString() != s &amp;&amp; strcmp(GetString(),s) == 0 &amp;&amp; GetStringLength() == length</span></div><div class="line"><a name="l01801"></a><span class="lineno"> 1801</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01802"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#ae6351043ec30d8a151b0a072cfbc46d5"> 1802</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#ae6351043ec30d8a151b0a072cfbc46d5">SetString</a>(<span class="keyword">const</span> Ch* s, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> length, Allocator&amp; allocator) { <span class="keywordflow">return</span> <a class="code" href="classrapidjson_1_1_generic_value.html#ae6351043ec30d8a151b0a072cfbc46d5">SetString</a>(<a class="code" href="namespacerapidjson.html#af94951529a5d51e8c4e6e770bb707c1f">StringRef</a>(s, length), allocator); }</div><div class="line"><a name="l01803"></a><span class="lineno"> 1803</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01804"></a><span class="lineno"> 1804</span>&#160;<span class="comment"> //! Set this value as a string by copying from source string.</span></div><div class="line"><a name="l01805"></a><span class="lineno"> 1805</span>&#160;<span class="comment"></span><span class="comment"> /*! \param s source string. </span></div><div class="line"><a name="l01806"></a><span class="lineno"> 1806</span>&#160;<span class="comment"> \param allocator Allocator for allocating copied buffer. Commonly use GenericDocument::GetAllocator().</span></div><div class="line"><a name="l01807"></a><span class="lineno"> 1807</span>&#160;<span class="comment"> \return The value itself for fluent API.</span></div><div class="line"><a name="l01808"></a><span class="lineno"> 1808</span>&#160;<span class="comment"> \post IsString() == true &amp;&amp; GetString() != s &amp;&amp; strcmp(GetString(),s) == 0 &amp;&amp; GetStringLength() == length</span></div><div class="line"><a name="l01809"></a><span class="lineno"> 1809</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01810"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#ab4babf200cac2dacb412a3ea279ddf5b"> 1810</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#ab4babf200cac2dacb412a3ea279ddf5b">SetString</a>(<span class="keyword">const</span> Ch* s, Allocator&amp; allocator) { <span class="keywordflow">return</span> <a class="code" href="classrapidjson_1_1_generic_value.html#ab4babf200cac2dacb412a3ea279ddf5b">SetString</a>(<a class="code" href="namespacerapidjson.html#af94951529a5d51e8c4e6e770bb707c1f">StringRef</a>(s), allocator); }</div><div class="line"><a name="l01811"></a><span class="lineno"> 1811</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01812"></a><span class="lineno"> 1812</span>&#160;<span class="comment"> //! Set this value as a string by copying from source string.</span></div><div class="line"><a name="l01813"></a><span class="lineno"> 1813</span>&#160;<span class="comment"></span><span class="comment"> /*! \param s source string reference</span></div><div class="line"><a name="l01814"></a><span class="lineno"> 1814</span>&#160;<span class="comment"> \param allocator Allocator for allocating copied buffer. Commonly use GenericDocument::GetAllocator().</span></div><div class="line"><a name="l01815"></a><span class="lineno"> 1815</span>&#160;<span class="comment"> \return The value itself for fluent API.</span></div><div class="line"><a name="l01816"></a><span class="lineno"> 1816</span>&#160;<span class="comment"> \post IsString() == true &amp;&amp; GetString() != s.s &amp;&amp; strcmp(GetString(),s) == 0 &amp;&amp; GetStringLength() == length</span></div><div class="line"><a name="l01817"></a><span class="lineno"> 1817</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01818"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a9ba3d9d8a106d5b7e92fb49db897c21b"> 1818</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#a9ba3d9d8a106d5b7e92fb49db897c21b">SetString</a>(<a class="code" href="structrapidjson_1_1_generic_string_ref.html">StringRefType</a> s, Allocator&amp; allocator) { this-&gt;~<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(); SetStringRaw(s, allocator); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l01819"></a><span class="lineno"> 1819</span>&#160;</div><div class="line"><a name="l01820"></a><span class="lineno"> 1820</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l01821"></a><span class="lineno"> 1821</span>&#160;<span class="comment"> //! Set this value as a string by copying from source string.</span></div><div class="line"><a name="l01822"></a><span class="lineno"> 1822</span>&#160;<span class="comment"></span><span class="comment"> /*! \param s source string.</span></div><div class="line"><a name="l01823"></a><span class="lineno"> 1823</span>&#160;<span class="comment"> \param allocator Allocator for allocating copied buffer. Commonly use GenericDocument::GetAllocator().</span></div><div class="line"><a name="l01824"></a><span class="lineno"> 1824</span>&#160;<span class="comment"> \return The value itself for fluent API.</span></div><div class="line"><a name="l01825"></a><span class="lineno"> 1825</span>&#160;<span class="comment"> \post IsString() == true &amp;&amp; GetString() != s.data() &amp;&amp; strcmp(GetString(),s.data() == 0 &amp;&amp; GetStringLength() == s.size()</span></div><div class="line"><a name="l01826"></a><span class="lineno"> 1826</span>&#160;<span class="comment"> \note Requires the definition of the preprocessor symbol \ref RAPIDJSON_HAS_STDSTRING.</span></div><div class="line"><a name="l01827"></a><span class="lineno"> 1827</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01828"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a3e930bffb40a78e570e3deef461f0532"> 1828</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#a3e930bffb40a78e570e3deef461f0532">SetString</a>(<span class="keyword">const</span> std::basic_string&lt;Ch&gt;&amp; s, Allocator&amp; allocator) { <span class="keywordflow">return</span> <a class="code" href="classrapidjson_1_1_generic_value.html#a3e930bffb40a78e570e3deef461f0532">SetString</a>(<a class="code" href="namespacerapidjson.html#af94951529a5d51e8c4e6e770bb707c1f">StringRef</a>(s), allocator); }</div><div class="line"><a name="l01829"></a><span class="lineno"> 1829</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01830"></a><span class="lineno"> 1830</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01831"></a><span class="lineno"> 1831</span>&#160;<span class="comment"> //@}</span></div><div class="line"><a name="l01832"></a><span class="lineno"> 1832</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l01833"></a><span class="lineno"> 1833</span>&#160;<span class="comment"> //!@name Array</span></div><div class="line"><a name="l01834"></a><span class="lineno"> 1834</span>&#160;<span class="comment"></span><span class="comment"> //@{</span></div><div class="line"><a name="l01835"></a><span class="lineno"> 1835</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l01836"></a><span class="lineno"> 1836</span>&#160;<span class="comment"> //! Templated version for checking whether this value is type T.</span></div><div class="line"><a name="l01837"></a><span class="lineno"> 1837</span>&#160;<span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l01838"></a><span class="lineno"> 1838</span>&#160;<span class="comment"> \tparam T Either \c bool, \c int, \c unsigned, \c int64_t, \c uint64_t, \c double, \c float, \c const \c char*, \c std::basic_string&lt;Ch&gt;</span></div><div class="line"><a name="l01839"></a><span class="lineno"> 1839</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01840"></a><span class="lineno"> 1840</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l01841"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#acc6b1791cca8daef18521918136264b7"> 1841</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_generic_value.html#acc6b1791cca8daef18521918136264b7">Is</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> internal::TypeHelper&lt;ValueType, T&gt;::Is(*<span class="keyword">this</span>); }</div><div class="line"><a name="l01842"></a><span class="lineno"> 1842</span>&#160;</div><div class="line"><a name="l01843"></a><span class="lineno"> 1843</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l01844"></a><span class="lineno"> 1844</span>&#160; T Get()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> internal::TypeHelper&lt;ValueType, T&gt;::Get(*<span class="keyword">this</span>); }</div><div class="line"><a name="l01845"></a><span class="lineno"> 1845</span>&#160;</div><div class="line"><a name="l01846"></a><span class="lineno"> 1846</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l01847"></a><span class="lineno"> 1847</span>&#160; T Get() { <span class="keywordflow">return</span> internal::TypeHelper&lt;ValueType, T&gt;::Get(*<span class="keyword">this</span>); }</div><div class="line"><a name="l01848"></a><span class="lineno"> 1848</span>&#160;</div><div class="line"><a name="l01849"></a><span class="lineno"> 1849</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l01850"></a><span class="lineno"> 1850</span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">ValueType</a>&amp; Set(<span class="keyword">const</span> T&amp; data) { <span class="keywordflow">return</span> internal::TypeHelper&lt;ValueType, T&gt;::Set(*<span class="keyword">this</span>, data); }</div><div class="line"><a name="l01851"></a><span class="lineno"> 1851</span>&#160;</div><div class="line"><a name="l01852"></a><span class="lineno"> 1852</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l01853"></a><span class="lineno"> 1853</span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">ValueType</a>&amp; Set(<span class="keyword">const</span> T&amp; data, <a class="code" href="classrapidjson_1_1_allocator.html">AllocatorType</a>&amp; allocator) { <span class="keywordflow">return</span> internal::TypeHelper&lt;ValueType, T&gt;::Set(*<span class="keyword">this</span>, data, allocator); }</div><div class="line"><a name="l01854"></a><span class="lineno"> 1854</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01855"></a><span class="lineno"> 1855</span>&#160;<span class="comment"> //@}</span></div><div class="line"><a name="l01856"></a><span class="lineno"> 1856</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l01857"></a><span class="lineno"> 1857</span>&#160;<span class="comment"> //! Generate events of this value to a Handler.</span></div><div class="line"><a name="l01858"></a><span class="lineno"> 1858</span>&#160;<span class="comment"></span><span class="comment"> /*! This function adopts the GoF visitor pattern.</span></div><div class="line"><a name="l01859"></a><span class="lineno"> 1859</span>&#160;<span class="comment"> Typical usage is to output this JSON value as JSON text via Writer, which is a Handler.</span></div><div class="line"><a name="l01860"></a><span class="lineno"> 1860</span>&#160;<span class="comment"> It can also be used to deep clone this value via GenericDocument, which is also a Handler.</span></div><div class="line"><a name="l01861"></a><span class="lineno"> 1861</span>&#160;<span class="comment"> \tparam Handler type of handler.</span></div><div class="line"><a name="l01862"></a><span class="lineno"> 1862</span>&#160;<span class="comment"> \param handler An object implementing concept Handler.</span></div><div class="line"><a name="l01863"></a><span class="lineno"> 1863</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01864"></a><span class="lineno"> 1864</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> Handler&gt;</div><div class="line"><a name="l01865"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#ad3ebfa73796f4db4836ec47c2261700c"> 1865</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_generic_value.html#ad3ebfa73796f4db4836ec47c2261700c">Accept</a>(<a class="code" href="classrapidjson_1_1_handler.html">Handler</a>&amp; handler)<span class="keyword"> const </span>{</div><div class="line"><a name="l01866"></a><span class="lineno"> 1866</span>&#160; <span class="keywordflow">switch</span>(GetType()) {</div><div class="line"><a name="l01867"></a><span class="lineno"> 1867</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a952871e4326b527154fc8aac1ac1f6ff">kNullType</a>: <span class="keywordflow">return</span> handler.Null();</div><div class="line"><a name="l01868"></a><span class="lineno"> 1868</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a9f2e7047832dce1029551b5de0f05607">kFalseType</a>: <span class="keywordflow">return</span> handler.Bool(<span class="keyword">false</span>);</div><div class="line"><a name="l01869"></a><span class="lineno"> 1869</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a80d9f25b083abce45edbfdd3ba006c8e">kTrueType</a>: <span class="keywordflow">return</span> handler.Bool(<span class="keyword">true</span>);</div><div class="line"><a name="l01870"></a><span class="lineno"> 1870</span>&#160;</div><div class="line"><a name="l01871"></a><span class="lineno"> 1871</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4acf030b422a32c3647c7c5973bd4dd0a9">kObjectType</a>:</div><div class="line"><a name="l01872"></a><span class="lineno"> 1872</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(!handler.StartObject()))</div><div class="line"><a name="l01873"></a><span class="lineno"> 1873</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01874"></a><span class="lineno"> 1874</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classrapidjson_1_1_generic_member_iterator.html">ConstMemberIterator</a> m = MemberBegin(); m != MemberEnd(); ++m) {</div><div class="line"><a name="l01875"></a><span class="lineno"> 1875</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(m-&gt;name.IsString()); <span class="comment">// User may change the type of name by MemberIterator.</span></div><div class="line"><a name="l01876"></a><span class="lineno"> 1876</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(!handler.Key(m-&gt;name.GetString(), m-&gt;name.GetStringLength(), (m-&gt;name.data_.f.flags &amp; kCopyFlag) != 0)))</div><div class="line"><a name="l01877"></a><span class="lineno"> 1877</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01878"></a><span class="lineno"> 1878</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(!m-&gt;value.Accept(handler)))</div><div class="line"><a name="l01879"></a><span class="lineno"> 1879</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01880"></a><span class="lineno"> 1880</span>&#160; }</div><div class="line"><a name="l01881"></a><span class="lineno"> 1881</span>&#160; <span class="keywordflow">return</span> handler.EndObject(data_.o.size);</div><div class="line"><a name="l01882"></a><span class="lineno"> 1882</span>&#160;</div><div class="line"><a name="l01883"></a><span class="lineno"> 1883</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a058c622e1e7d59419ae58b895cbce468">kArrayType</a>:</div><div class="line"><a name="l01884"></a><span class="lineno"> 1884</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(!handler.StartArray()))</div><div class="line"><a name="l01885"></a><span class="lineno"> 1885</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01886"></a><span class="lineno"> 1886</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>* v = Begin(); v != End(); ++v)</div><div class="line"><a name="l01887"></a><span class="lineno"> 1887</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(!v-&gt;Accept(handler)))</div><div class="line"><a name="l01888"></a><span class="lineno"> 1888</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01889"></a><span class="lineno"> 1889</span>&#160; <span class="keywordflow">return</span> handler.EndArray(data_.a.size);</div><div class="line"><a name="l01890"></a><span class="lineno"> 1890</span>&#160; </div><div class="line"><a name="l01891"></a><span class="lineno"> 1891</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4ad6379da3dc04b83a591992bfb9fabba7">kStringType</a>:</div><div class="line"><a name="l01892"></a><span class="lineno"> 1892</span>&#160; <span class="keywordflow">return</span> handler.String(GetString(), GetStringLength(), (data_.f.flags &amp; kCopyFlag) != 0);</div><div class="line"><a name="l01893"></a><span class="lineno"> 1893</span>&#160; </div><div class="line"><a name="l01894"></a><span class="lineno"> 1894</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l01895"></a><span class="lineno"> 1895</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(GetType() == <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a">kNumberType</a>);</div><div class="line"><a name="l01896"></a><span class="lineno"> 1896</span>&#160; <span class="keywordflow">if</span> (IsDouble()) <span class="keywordflow">return</span> handler.Double(data_.n.d);</div><div class="line"><a name="l01897"></a><span class="lineno"> 1897</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (IsInt()) <span class="keywordflow">return</span> handler.Int(data_.n.i.i);</div><div class="line"><a name="l01898"></a><span class="lineno"> 1898</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (IsUint()) <span class="keywordflow">return</span> handler.Uint(data_.n.u.u);</div><div class="line"><a name="l01899"></a><span class="lineno"> 1899</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (IsInt64()) <span class="keywordflow">return</span> handler.Int64(data_.n.i64);</div><div class="line"><a name="l01900"></a><span class="lineno"> 1900</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">return</span> handler.Uint64(data_.n.u64);</div><div class="line"><a name="l01901"></a><span class="lineno"> 1901</span>&#160; }</div><div class="line"><a name="l01902"></a><span class="lineno"> 1902</span>&#160; }</div><div class="line"><a name="l01903"></a><span class="lineno"> 1903</span>&#160;</div><div class="line"><a name="l01904"></a><span class="lineno"> 1904</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l01905"></a><span class="lineno"> 1905</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span>, <span class="keyword">typename</span>&gt; <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>;</div><div class="line"><a name="l01906"></a><span class="lineno"> 1906</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span>, <span class="keyword">typename</span>, <span class="keyword">typename</span>&gt; <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>;</div><div class="line"><a name="l01907"></a><span class="lineno"> 1907</span>&#160;</div><div class="line"><a name="l01908"></a><span class="lineno"> 1908</span>&#160; <span class="keyword">enum</span> {</div><div class="line"><a name="l01909"></a><span class="lineno"> 1909</span>&#160; kBoolFlag = 0x0008,</div><div class="line"><a name="l01910"></a><span class="lineno"> 1910</span>&#160; kNumberFlag = 0x0010,</div><div class="line"><a name="l01911"></a><span class="lineno"> 1911</span>&#160; kIntFlag = 0x0020,</div><div class="line"><a name="l01912"></a><span class="lineno"> 1912</span>&#160; kUintFlag = 0x0040,</div><div class="line"><a name="l01913"></a><span class="lineno"> 1913</span>&#160; kInt64Flag = 0x0080,</div><div class="line"><a name="l01914"></a><span class="lineno"> 1914</span>&#160; kUint64Flag = 0x0100,</div><div class="line"><a name="l01915"></a><span class="lineno"> 1915</span>&#160; kDoubleFlag = 0x0200,</div><div class="line"><a name="l01916"></a><span class="lineno"> 1916</span>&#160; kStringFlag = 0x0400,</div><div class="line"><a name="l01917"></a><span class="lineno"> 1917</span>&#160; kCopyFlag = 0x0800,</div><div class="line"><a name="l01918"></a><span class="lineno"> 1918</span>&#160; kInlineStrFlag = 0x1000,</div><div class="line"><a name="l01919"></a><span class="lineno"> 1919</span>&#160;</div><div class="line"><a name="l01920"></a><span class="lineno"> 1920</span>&#160; <span class="comment">// Initial flags of different types.</span></div><div class="line"><a name="l01921"></a><span class="lineno"> 1921</span>&#160; kNullFlag = <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a952871e4326b527154fc8aac1ac1f6ff">kNullType</a>,</div><div class="line"><a name="l01922"></a><span class="lineno"> 1922</span>&#160; kTrueFlag = <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a80d9f25b083abce45edbfdd3ba006c8e">kTrueType</a> | kBoolFlag,</div><div class="line"><a name="l01923"></a><span class="lineno"> 1923</span>&#160; kFalseFlag = <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a9f2e7047832dce1029551b5de0f05607">kFalseType</a> | kBoolFlag,</div><div class="line"><a name="l01924"></a><span class="lineno"> 1924</span>&#160; kNumberIntFlag = <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a">kNumberType</a> | kNumberFlag | kIntFlag | kInt64Flag,</div><div class="line"><a name="l01925"></a><span class="lineno"> 1925</span>&#160; kNumberUintFlag = <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a">kNumberType</a> | kNumberFlag | kUintFlag | kUint64Flag | kInt64Flag,</div><div class="line"><a name="l01926"></a><span class="lineno"> 1926</span>&#160; kNumberInt64Flag = <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a">kNumberType</a> | kNumberFlag | kInt64Flag,</div><div class="line"><a name="l01927"></a><span class="lineno"> 1927</span>&#160; kNumberUint64Flag = <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a">kNumberType</a> | kNumberFlag | kUint64Flag,</div><div class="line"><a name="l01928"></a><span class="lineno"> 1928</span>&#160; kNumberDoubleFlag = <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a">kNumberType</a> | kNumberFlag | kDoubleFlag,</div><div class="line"><a name="l01929"></a><span class="lineno"> 1929</span>&#160; kNumberAnyFlag = <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a">kNumberType</a> | kNumberFlag | kIntFlag | kInt64Flag | kUintFlag | kUint64Flag | kDoubleFlag,</div><div class="line"><a name="l01930"></a><span class="lineno"> 1930</span>&#160; kConstStringFlag = <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4ad6379da3dc04b83a591992bfb9fabba7">kStringType</a> | kStringFlag,</div><div class="line"><a name="l01931"></a><span class="lineno"> 1931</span>&#160; kCopyStringFlag = <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4ad6379da3dc04b83a591992bfb9fabba7">kStringType</a> | kStringFlag | kCopyFlag,</div><div class="line"><a name="l01932"></a><span class="lineno"> 1932</span>&#160; kShortStringFlag = <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4ad6379da3dc04b83a591992bfb9fabba7">kStringType</a> | kStringFlag | kCopyFlag | kInlineStrFlag,</div><div class="line"><a name="l01933"></a><span class="lineno"> 1933</span>&#160; kObjectFlag = <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4acf030b422a32c3647c7c5973bd4dd0a9">kObjectType</a>,</div><div class="line"><a name="l01934"></a><span class="lineno"> 1934</span>&#160; kArrayFlag = <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a058c622e1e7d59419ae58b895cbce468">kArrayType</a>,</div><div class="line"><a name="l01935"></a><span class="lineno"> 1935</span>&#160;</div><div class="line"><a name="l01936"></a><span class="lineno"> 1936</span>&#160; kTypeMask = 0x07</div><div class="line"><a name="l01937"></a><span class="lineno"> 1937</span>&#160; };</div><div class="line"><a name="l01938"></a><span class="lineno"> 1938</span>&#160;</div><div class="line"><a name="l01939"></a><span class="lineno"> 1939</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> kDefaultArrayCapacity = 16;</div><div class="line"><a name="l01940"></a><span class="lineno"> 1940</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> kDefaultObjectCapacity = 16;</div><div class="line"><a name="l01941"></a><span class="lineno"> 1941</span>&#160;</div><div class="line"><a name="l01942"></a><span class="lineno"> 1942</span>&#160; <span class="keyword">struct </span>Flag {</div><div class="line"><a name="l01943"></a><span class="lineno"> 1943</span>&#160;<span class="preprocessor">#if RAPIDJSON_48BITPOINTER_OPTIMIZATION</span></div><div class="line"><a name="l01944"></a><span class="lineno"> 1944</span>&#160; <span class="keywordtype">char</span> payload[<span class="keyword">sizeof</span>(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a>) * 2 + 6]; <span class="comment">// 2 x SizeType + lower 48-bit pointer</span></div><div class="line"><a name="l01945"></a><span class="lineno"> 1945</span>&#160;<span class="preprocessor">#elif RAPIDJSON_64BIT</span></div><div class="line"><a name="l01946"></a><span class="lineno"> 1946</span>&#160; <span class="keywordtype">char</span> payload[<span class="keyword">sizeof</span>(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a>) * 2 + <span class="keyword">sizeof</span>(<span class="keywordtype">void</span>*) + 6]; <span class="comment">// 6 padding bytes</span></div><div class="line"><a name="l01947"></a><span class="lineno"> 1947</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l01948"></a><span class="lineno"> 1948</span>&#160; <span class="keywordtype">char</span> payload[<span class="keyword">sizeof</span>(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a>) * 2 + <span class="keyword">sizeof</span>(<span class="keywordtype">void</span>*) + 2]; <span class="comment">// 2 padding bytes</span></div><div class="line"><a name="l01949"></a><span class="lineno"> 1949</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01950"></a><span class="lineno"> 1950</span>&#160; uint16_t flags;</div><div class="line"><a name="l01951"></a><span class="lineno"> 1951</span>&#160; };</div><div class="line"><a name="l01952"></a><span class="lineno"> 1952</span>&#160;</div><div class="line"><a name="l01953"></a><span class="lineno"> 1953</span>&#160; <span class="keyword">struct </span>String {</div><div class="line"><a name="l01954"></a><span class="lineno"> 1954</span>&#160; <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> length;</div><div class="line"><a name="l01955"></a><span class="lineno"> 1955</span>&#160; <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> hashcode; <span class="comment">//!&lt; reserved</span></div><div class="line"><a name="l01956"></a><span class="lineno"> 1956</span>&#160;<span class="comment"></span> <span class="keyword">const</span> Ch* str;</div><div class="line"><a name="l01957"></a><span class="lineno"> 1957</span>&#160; }; <span class="comment">// 12 bytes in 32-bit mode, 16 bytes in 64-bit mode</span></div><div class="line"><a name="l01958"></a><span class="lineno"> 1958</span>&#160;</div><div class="line"><a name="l01959"></a><span class="lineno"> 1959</span>&#160; <span class="comment">// implementation detail: ShortString can represent zero-terminated strings up to MaxSize chars</span></div><div class="line"><a name="l01960"></a><span class="lineno"> 1960</span>&#160; <span class="comment">// (excluding the terminating zero) and store a value to determine the length of the contained</span></div><div class="line"><a name="l01961"></a><span class="lineno"> 1961</span>&#160; <span class="comment">// string in the last character str[LenPos] by storing &quot;MaxSize - length&quot; there. If the string</span></div><div class="line"><a name="l01962"></a><span class="lineno"> 1962</span>&#160; <span class="comment">// to store has the maximal length of MaxSize then str[LenPos] will be 0 and therefore act as</span></div><div class="line"><a name="l01963"></a><span class="lineno"> 1963</span>&#160; <span class="comment">// the string terminator as well. For getting the string length back from that value just use</span></div><div class="line"><a name="l01964"></a><span class="lineno"> 1964</span>&#160; <span class="comment">// &quot;MaxSize - str[LenPos]&quot;.</span></div><div class="line"><a name="l01965"></a><span class="lineno"> 1965</span>&#160; <span class="comment">// This allows to store 13-chars strings in 32-bit mode, 21-chars strings in 64-bit mode,</span></div><div class="line"><a name="l01966"></a><span class="lineno"> 1966</span>&#160; <span class="comment">// 13-chars strings for RAPIDJSON_48BITPOINTER_OPTIMIZATION=1 inline (for `UTF8`-encoded strings).</span></div><div class="line"><a name="l01967"></a><span class="lineno"> 1967</span>&#160; <span class="keyword">struct </span>ShortString {</div><div class="line"><a name="l01968"></a><span class="lineno"> 1968</span>&#160; <span class="keyword">enum</span> { MaxChars = <span class="keyword">sizeof</span>(<span class="keyword">static_cast&lt;</span>Flag*<span class="keyword">&gt;</span>(0)-&gt;payload) / <span class="keyword">sizeof</span>(Ch), MaxSize = MaxChars - 1, LenPos = MaxSize };</div><div class="line"><a name="l01969"></a><span class="lineno"> 1969</span>&#160; Ch str[MaxChars];</div><div class="line"><a name="l01970"></a><span class="lineno"> 1970</span>&#160;</div><div class="line"><a name="l01971"></a><span class="lineno"> 1971</span>&#160; <span class="keyword">inline</span> <span class="keyword">static</span> <span class="keywordtype">bool</span> Usable(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> len) { <span class="keywordflow">return</span> (MaxSize &gt;= len); }</div><div class="line"><a name="l01972"></a><span class="lineno"> 1972</span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> SetLength(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> len) { str[LenPos] = <span class="keyword">static_cast&lt;</span>Ch<span class="keyword">&gt;</span>(MaxSize - len); }</div><div class="line"><a name="l01973"></a><span class="lineno"> 1973</span>&#160; <span class="keyword">inline</span> <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> GetLength()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span><a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a><span class="keyword">&gt;</span>(MaxSize - str[LenPos]); }</div><div class="line"><a name="l01974"></a><span class="lineno"> 1974</span>&#160; }; <span class="comment">// at most as many bytes as &quot;String&quot; above =&gt; 12 bytes in 32-bit mode, 16 bytes in 64-bit mode</span></div><div class="line"><a name="l01975"></a><span class="lineno"> 1975</span>&#160;</div><div class="line"><a name="l01976"></a><span class="lineno"> 1976</span>&#160; <span class="comment">// By using proper binary layout, retrieval of different integer types do not need conversions.</span></div><div class="line"><a name="l01977"></a><span class="lineno"> 1977</span>&#160; <span class="keyword">union </span>Number {</div><div class="line"><a name="l01978"></a><span class="lineno"> 1978</span>&#160;<span class="preprocessor">#if RAPIDJSON_ENDIAN == RAPIDJSON_LITTLEENDIAN</span></div><div class="line"><a name="l01979"></a><span class="lineno"> 1979</span>&#160; <span class="keyword">struct </span>I {</div><div class="line"><a name="l01980"></a><span class="lineno"> 1980</span>&#160; <span class="keywordtype">int</span> i;</div><div class="line"><a name="l01981"></a><span class="lineno"> 1981</span>&#160; <span class="keywordtype">char</span> padding[4];</div><div class="line"><a name="l01982"></a><span class="lineno"> 1982</span>&#160; }i;</div><div class="line"><a name="l01983"></a><span class="lineno"> 1983</span>&#160; <span class="keyword">struct </span>U {</div><div class="line"><a name="l01984"></a><span class="lineno"> 1984</span>&#160; <span class="keywordtype">unsigned</span> u;</div><div class="line"><a name="l01985"></a><span class="lineno"> 1985</span>&#160; <span class="keywordtype">char</span> padding2[4];</div><div class="line"><a name="l01986"></a><span class="lineno"> 1986</span>&#160; }u;</div><div class="line"><a name="l01987"></a><span class="lineno"> 1987</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l01988"></a><span class="lineno"><a class="line" href="structrapidjson_1_1_generic_value_1_1_number_1_1_i.html"> 1988</a></span>&#160; <span class="keyword">struct </span><a class="code" href="structrapidjson_1_1_generic_value_1_1_number_1_1_i.html">I</a> {</div><div class="line"><a name="l01989"></a><span class="lineno"> 1989</span>&#160; <span class="keywordtype">char</span> padding[4];</div><div class="line"><a name="l01990"></a><span class="lineno"> 1990</span>&#160; <span class="keywordtype">int</span> i;</div><div class="line"><a name="l01991"></a><span class="lineno"> 1991</span>&#160; }i;</div><div class="line"><a name="l01992"></a><span class="lineno"><a class="line" href="structrapidjson_1_1_generic_value_1_1_number_1_1_u.html"> 1992</a></span>&#160; <span class="keyword">struct </span><a class="code" href="structrapidjson_1_1_generic_value_1_1_number_1_1_u.html">U</a> {</div><div class="line"><a name="l01993"></a><span class="lineno"> 1993</span>&#160; <span class="keywordtype">char</span> padding2[4];</div><div class="line"><a name="l01994"></a><span class="lineno"> 1994</span>&#160; <span class="keywordtype">unsigned</span> u;</div><div class="line"><a name="l01995"></a><span class="lineno"> 1995</span>&#160; }u;</div><div class="line"><a name="l01996"></a><span class="lineno"> 1996</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01997"></a><span class="lineno"> 1997</span>&#160; int64_t i64;</div><div class="line"><a name="l01998"></a><span class="lineno"> 1998</span>&#160; uint64_t u64;</div><div class="line"><a name="l01999"></a><span class="lineno"> 1999</span>&#160; <span class="keywordtype">double</span> d;</div><div class="line"><a name="l02000"></a><span class="lineno"> 2000</span>&#160; }; <span class="comment">// 8 bytes</span></div><div class="line"><a name="l02001"></a><span class="lineno"> 2001</span>&#160;</div><div class="line"><a name="l02002"></a><span class="lineno"> 2002</span>&#160; <span class="keyword">struct </span>ObjectData {</div><div class="line"><a name="l02003"></a><span class="lineno"> 2003</span>&#160; <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> size;</div><div class="line"><a name="l02004"></a><span class="lineno"> 2004</span>&#160; <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> capacity;</div><div class="line"><a name="l02005"></a><span class="lineno"> 2005</span>&#160; <a class="code" href="structrapidjson_1_1_generic_member.html">Member</a>* members;</div><div class="line"><a name="l02006"></a><span class="lineno"> 2006</span>&#160; }; <span class="comment">// 12 bytes in 32-bit mode, 16 bytes in 64-bit mode</span></div><div class="line"><a name="l02007"></a><span class="lineno"> 2007</span>&#160;</div><div class="line"><a name="l02008"></a><span class="lineno"> 2008</span>&#160; <span class="keyword">struct </span>ArrayData {</div><div class="line"><a name="l02009"></a><span class="lineno"> 2009</span>&#160; <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> size;</div><div class="line"><a name="l02010"></a><span class="lineno"> 2010</span>&#160; <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> capacity;</div><div class="line"><a name="l02011"></a><span class="lineno"> 2011</span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>* elements;</div><div class="line"><a name="l02012"></a><span class="lineno"> 2012</span>&#160; }; <span class="comment">// 12 bytes in 32-bit mode, 16 bytes in 64-bit mode</span></div><div class="line"><a name="l02013"></a><span class="lineno"> 2013</span>&#160;</div><div class="line"><a name="l02014"></a><span class="lineno"> 2014</span>&#160; <span class="keyword">union </span>Data {</div><div class="line"><a name="l02015"></a><span class="lineno"> 2015</span>&#160; String s;</div><div class="line"><a name="l02016"></a><span class="lineno"> 2016</span>&#160; ShortString ss;</div><div class="line"><a name="l02017"></a><span class="lineno"> 2017</span>&#160; Number n;</div><div class="line"><a name="l02018"></a><span class="lineno"> 2018</span>&#160; ObjectData o;</div><div class="line"><a name="l02019"></a><span class="lineno"> 2019</span>&#160; ArrayData a;</div><div class="line"><a name="l02020"></a><span class="lineno"> 2020</span>&#160; Flag f;</div><div class="line"><a name="l02021"></a><span class="lineno"> 2021</span>&#160; }; <span class="comment">// 16 bytes in 32-bit mode, 24 bytes in 64-bit mode, 16 bytes in 64-bit with RAPIDJSON_48BITPOINTER_OPTIMIZATION</span></div><div class="line"><a name="l02022"></a><span class="lineno"> 2022</span>&#160;</div><div class="line"><a name="l02023"></a><span class="lineno"> 2023</span>&#160; RAPIDJSON_FORCEINLINE <span class="keyword">const</span> Ch* GetStringPointer()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> RAPIDJSON_GETPOINTER(Ch, data_.s.str); }</div><div class="line"><a name="l02024"></a><span class="lineno"> 2024</span>&#160; RAPIDJSON_FORCEINLINE <span class="keyword">const</span> Ch* SetStringPointer(<span class="keyword">const</span> Ch* str) { <span class="keywordflow">return</span> RAPIDJSON_SETPOINTER(Ch, data_.s.str, str); }</div><div class="line"><a name="l02025"></a><span class="lineno"> 2025</span>&#160; RAPIDJSON_FORCEINLINE <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>* GetElementsPointer()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> RAPIDJSON_GETPOINTER(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>, data_.a.elements); }</div><div class="line"><a name="l02026"></a><span class="lineno"> 2026</span>&#160; RAPIDJSON_FORCEINLINE <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>* SetElementsPointer(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>* elements) { <span class="keywordflow">return</span> RAPIDJSON_SETPOINTER(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>, data_.a.elements, elements); }</div><div class="line"><a name="l02027"></a><span class="lineno"> 2027</span>&#160; RAPIDJSON_FORCEINLINE <a class="code" href="structrapidjson_1_1_generic_member.html">Member</a>* GetMembersPointer()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> RAPIDJSON_GETPOINTER(<a class="code" href="structrapidjson_1_1_generic_member.html">Member</a>, data_.o.members); }</div><div class="line"><a name="l02028"></a><span class="lineno"> 2028</span>&#160; RAPIDJSON_FORCEINLINE <a class="code" href="structrapidjson_1_1_generic_member.html">Member</a>* SetMembersPointer(<a class="code" href="structrapidjson_1_1_generic_member.html">Member</a>* members) { <span class="keywordflow">return</span> RAPIDJSON_SETPOINTER(<a class="code" href="structrapidjson_1_1_generic_member.html">Member</a>, data_.o.members, members); }</div><div class="line"><a name="l02029"></a><span class="lineno"> 2029</span>&#160;</div><div class="line"><a name="l02030"></a><span class="lineno"> 2030</span>&#160; <span class="comment">// Initialize this value as array with initial data, without calling destructor.</span></div><div class="line"><a name="l02031"></a><span class="lineno"> 2031</span>&#160; <span class="keywordtype">void</span> SetArrayRaw(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>* values, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> count, Allocator&amp; allocator) {</div><div class="line"><a name="l02032"></a><span class="lineno"> 2032</span>&#160; data_.f.flags = kArrayFlag;</div><div class="line"><a name="l02033"></a><span class="lineno"> 2033</span>&#160; <span class="keywordflow">if</span> (count) {</div><div class="line"><a name="l02034"></a><span class="lineno"> 2034</span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>* e = <span class="keyword">static_cast&lt;</span><a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>*<span class="keyword">&gt;</span>(allocator.Malloc(count * <span class="keyword">sizeof</span>(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>)));</div><div class="line"><a name="l02035"></a><span class="lineno"> 2035</span>&#160; SetElementsPointer(e);</div><div class="line"><a name="l02036"></a><span class="lineno"> 2036</span>&#160; std::memcpy(static_cast&lt;void*&gt;(e), values, count * <span class="keyword">sizeof</span>(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>));</div><div class="line"><a name="l02037"></a><span class="lineno"> 2037</span>&#160; }</div><div class="line"><a name="l02038"></a><span class="lineno"> 2038</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l02039"></a><span class="lineno"> 2039</span>&#160; SetElementsPointer(0);</div><div class="line"><a name="l02040"></a><span class="lineno"> 2040</span>&#160; data_.a.size = data_.a.capacity = count;</div><div class="line"><a name="l02041"></a><span class="lineno"> 2041</span>&#160; }</div><div class="line"><a name="l02042"></a><span class="lineno"> 2042</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02043"></a><span class="lineno"> 2043</span>&#160;<span class="comment"> //! Initialize this value as object with initial data, without calling destructor.</span></div><div class="line"><a name="l02044"></a><span class="lineno"> 2044</span>&#160;<span class="comment"></span> <span class="keywordtype">void</span> SetObjectRaw(<a class="code" href="structrapidjson_1_1_generic_member.html">Member</a>* members, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> count, Allocator&amp; allocator) {</div><div class="line"><a name="l02045"></a><span class="lineno"> 2045</span>&#160; data_.f.flags = kObjectFlag;</div><div class="line"><a name="l02046"></a><span class="lineno"> 2046</span>&#160; <span class="keywordflow">if</span> (count) {</div><div class="line"><a name="l02047"></a><span class="lineno"> 2047</span>&#160; <a class="code" href="structrapidjson_1_1_generic_member.html">Member</a>* m = <span class="keyword">static_cast&lt;</span><a class="code" href="structrapidjson_1_1_generic_member.html">Member</a>*<span class="keyword">&gt;</span>(allocator.Malloc(count * <span class="keyword">sizeof</span>(<a class="code" href="structrapidjson_1_1_generic_member.html">Member</a>)));</div><div class="line"><a name="l02048"></a><span class="lineno"> 2048</span>&#160; SetMembersPointer(m);</div><div class="line"><a name="l02049"></a><span class="lineno"> 2049</span>&#160; std::memcpy(static_cast&lt;void*&gt;(m), members, count * <span class="keyword">sizeof</span>(<a class="code" href="structrapidjson_1_1_generic_member.html">Member</a>));</div><div class="line"><a name="l02050"></a><span class="lineno"> 2050</span>&#160; }</div><div class="line"><a name="l02051"></a><span class="lineno"> 2051</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l02052"></a><span class="lineno"> 2052</span>&#160; SetMembersPointer(0);</div><div class="line"><a name="l02053"></a><span class="lineno"> 2053</span>&#160; data_.o.size = data_.o.capacity = count;</div><div class="line"><a name="l02054"></a><span class="lineno"> 2054</span>&#160; }</div><div class="line"><a name="l02055"></a><span class="lineno"> 2055</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02056"></a><span class="lineno"> 2056</span>&#160;<span class="comment"> //! Initialize this value as constant string, without calling destructor.</span></div><div class="line"><a name="l02057"></a><span class="lineno"> 2057</span>&#160;<span class="comment"></span> <span class="keywordtype">void</span> SetStringRaw(<a class="code" href="structrapidjson_1_1_generic_string_ref.html">StringRefType</a> s) RAPIDJSON_NOEXCEPT {</div><div class="line"><a name="l02058"></a><span class="lineno"> 2058</span>&#160; data_.f.flags = kConstStringFlag;</div><div class="line"><a name="l02059"></a><span class="lineno"> 2059</span>&#160; SetStringPointer(s);</div><div class="line"><a name="l02060"></a><span class="lineno"> 2060</span>&#160; data_.s.length = s.<a class="code" href="structrapidjson_1_1_generic_string_ref.html#ae223535ec20edf0c1db44a40b7735111">length</a>;</div><div class="line"><a name="l02061"></a><span class="lineno"> 2061</span>&#160; }</div><div class="line"><a name="l02062"></a><span class="lineno"> 2062</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02063"></a><span class="lineno"> 2063</span>&#160;<span class="comment"> //! Initialize this value as copy string with initial data, without calling destructor.</span></div><div class="line"><a name="l02064"></a><span class="lineno"> 2064</span>&#160;<span class="comment"></span> <span class="keywordtype">void</span> SetStringRaw(<a class="code" href="structrapidjson_1_1_generic_string_ref.html">StringRefType</a> s, Allocator&amp; allocator) {</div><div class="line"><a name="l02065"></a><span class="lineno"> 2065</span>&#160; Ch* str = 0;</div><div class="line"><a name="l02066"></a><span class="lineno"> 2066</span>&#160; <span class="keywordflow">if</span> (ShortString::Usable(s.<a class="code" href="structrapidjson_1_1_generic_string_ref.html#ae223535ec20edf0c1db44a40b7735111">length</a>)) {</div><div class="line"><a name="l02067"></a><span class="lineno"> 2067</span>&#160; data_.f.flags = kShortStringFlag;</div><div class="line"><a name="l02068"></a><span class="lineno"> 2068</span>&#160; data_.ss.SetLength(s.<a class="code" href="structrapidjson_1_1_generic_string_ref.html#ae223535ec20edf0c1db44a40b7735111">length</a>);</div><div class="line"><a name="l02069"></a><span class="lineno"> 2069</span>&#160; str = data_.ss.str;</div><div class="line"><a name="l02070"></a><span class="lineno"> 2070</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l02071"></a><span class="lineno"> 2071</span>&#160; data_.f.flags = kCopyStringFlag;</div><div class="line"><a name="l02072"></a><span class="lineno"> 2072</span>&#160; data_.s.length = s.<a class="code" href="structrapidjson_1_1_generic_string_ref.html#ae223535ec20edf0c1db44a40b7735111">length</a>;</div><div class="line"><a name="l02073"></a><span class="lineno"> 2073</span>&#160; str = <span class="keyword">static_cast&lt;</span>Ch *<span class="keyword">&gt;</span>(allocator.Malloc((s.<a class="code" href="structrapidjson_1_1_generic_string_ref.html#ae223535ec20edf0c1db44a40b7735111">length</a> + 1) * <span class="keyword">sizeof</span>(Ch)));</div><div class="line"><a name="l02074"></a><span class="lineno"> 2074</span>&#160; SetStringPointer(str);</div><div class="line"><a name="l02075"></a><span class="lineno"> 2075</span>&#160; }</div><div class="line"><a name="l02076"></a><span class="lineno"> 2076</span>&#160; std::memcpy(str, s, s.<a class="code" href="structrapidjson_1_1_generic_string_ref.html#ae223535ec20edf0c1db44a40b7735111">length</a> * <span class="keyword">sizeof</span>(Ch));</div><div class="line"><a name="l02077"></a><span class="lineno"> 2077</span>&#160; str[s.<a class="code" href="structrapidjson_1_1_generic_string_ref.html#ae223535ec20edf0c1db44a40b7735111">length</a>] = <span class="charliteral">&#39;\0&#39;</span>;</div><div class="line"><a name="l02078"></a><span class="lineno"> 2078</span>&#160; }</div><div class="line"><a name="l02079"></a><span class="lineno"> 2079</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02080"></a><span class="lineno"> 2080</span>&#160;<span class="comment"> //! Assignment without calling destructor</span></div><div class="line"><a name="l02081"></a><span class="lineno"> 2081</span>&#160;<span class="comment"></span> <span class="keywordtype">void</span> RawAssign(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; rhs) RAPIDJSON_NOEXCEPT {</div><div class="line"><a name="l02082"></a><span class="lineno"> 2082</span>&#160; data_ = rhs.data_;</div><div class="line"><a name="l02083"></a><span class="lineno"> 2083</span>&#160; <span class="comment">// data_.f.flags = rhs.data_.f.flags;</span></div><div class="line"><a name="l02084"></a><span class="lineno"> 2084</span>&#160; rhs.data_.f.flags = kNullFlag;</div><div class="line"><a name="l02085"></a><span class="lineno"> 2085</span>&#160; }</div><div class="line"><a name="l02086"></a><span class="lineno"> 2086</span>&#160;</div><div class="line"><a name="l02087"></a><span class="lineno"> 2087</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> SourceAllocator&gt;</div><div class="line"><a name="l02088"></a><span class="lineno"> 2088</span>&#160; <span class="keywordtype">bool</span> StringEqual(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue&lt;Encoding, SourceAllocator&gt;</a>&amp; rhs)<span class="keyword"> const </span>{</div><div class="line"><a name="l02089"></a><span class="lineno"> 2089</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsString());</div><div class="line"><a name="l02090"></a><span class="lineno"> 2090</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(rhs.IsString());</div><div class="line"><a name="l02091"></a><span class="lineno"> 2091</span>&#160;</div><div class="line"><a name="l02092"></a><span class="lineno"> 2092</span>&#160; <span class="keyword">const</span> <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> len1 = GetStringLength();</div><div class="line"><a name="l02093"></a><span class="lineno"> 2093</span>&#160; <span class="keyword">const</span> <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> len2 = rhs.<a class="code" href="classrapidjson_1_1_generic_value.html#a18599e0d1a7e70a11b35f5e219390fea">GetStringLength</a>();</div><div class="line"><a name="l02094"></a><span class="lineno"> 2094</span>&#160; <span class="keywordflow">if</span>(len1 != len2) { <span class="keywordflow">return</span> <span class="keyword">false</span>; }</div><div class="line"><a name="l02095"></a><span class="lineno"> 2095</span>&#160;</div><div class="line"><a name="l02096"></a><span class="lineno"> 2096</span>&#160; <span class="keyword">const</span> Ch* <span class="keyword">const</span> str1 = GetString();</div><div class="line"><a name="l02097"></a><span class="lineno"> 2097</span>&#160; <span class="keyword">const</span> Ch* <span class="keyword">const</span> str2 = rhs.GetString();</div><div class="line"><a name="l02098"></a><span class="lineno"> 2098</span>&#160; <span class="keywordflow">if</span>(str1 == str2) { <span class="keywordflow">return</span> <span class="keyword">true</span>; } <span class="comment">// fast path for constant string</span></div><div class="line"><a name="l02099"></a><span class="lineno"> 2099</span>&#160;</div><div class="line"><a name="l02100"></a><span class="lineno"> 2100</span>&#160; <span class="keywordflow">return</span> (std::memcmp(str1, str2, <span class="keyword">sizeof</span>(Ch) * len1) == 0);</div><div class="line"><a name="l02101"></a><span class="lineno"> 2101</span>&#160; }</div><div class="line"><a name="l02102"></a><span class="lineno"> 2102</span>&#160;</div><div class="line"><a name="l02103"></a><span class="lineno"> 2103</span>&#160; Data data_;</div><div class="line"><a name="l02104"></a><span class="lineno"> 2104</span>&#160;};</div><div class="line"><a name="l02105"></a><span class="lineno"> 2105</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02106"></a><span class="lineno"> 2106</span>&#160;<span class="comment">//! GenericValue with UTF8 encoding</span></div><div class="line"><a name="l02107"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#aa65fc9fb381b2cbc54f98673eadd6505"> 2107</a></span>&#160;<span class="comment"></span><span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue&lt;UTF8&lt;&gt;</a> &gt; <a class="code" href="namespacerapidjson.html#aa65fc9fb381b2cbc54f98673eadd6505">Value</a>;</div><div class="line"><a name="l02108"></a><span class="lineno"> 2108</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02109"></a><span class="lineno"> 2109</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l02110"></a><span class="lineno"> 2110</span>&#160;<span class="comment"></span><span class="comment">// GenericDocument </span></div><div class="line"><a name="l02111"></a><span class="lineno"> 2111</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02112"></a><span class="lineno"> 2112</span>&#160;<span class="comment">//! A document for parsing JSON text as DOM.</span></div><div class="line"><a name="l02113"></a><span class="lineno"> 2113</span>&#160;<span class="comment"></span><span class="comment">/*!</span></div><div class="line"><a name="l02114"></a><span class="lineno"> 2114</span>&#160;<span class="comment"> \note implements Handler concept</span></div><div class="line"><a name="l02115"></a><span class="lineno"> 2115</span>&#160;<span class="comment"> \tparam Encoding Encoding for both parsing and string storage.</span></div><div class="line"><a name="l02116"></a><span class="lineno"> 2116</span>&#160;<span class="comment"> \tparam Allocator Allocator for allocating memory for the DOM</span></div><div class="line"><a name="l02117"></a><span class="lineno"> 2117</span>&#160;<span class="comment"> \tparam StackAllocator Allocator for allocating memory for stack during parsing.</span></div><div class="line"><a name="l02118"></a><span class="lineno"> 2118</span>&#160;<span class="comment"> \warning Although GenericDocument inherits from GenericValue, the API does \b not provide any virtual functions, especially no virtual destructor. To avoid memory leaks, do not \c delete a GenericDocument object via a pointer to a GenericValue.</span></div><div class="line"><a name="l02119"></a><span class="lineno"> 2119</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l02120"></a><span class="lineno"> 2120</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> Encoding, <span class="keyword">typename</span> Allocator = MemoryPoolAllocator&lt;&gt;, <span class="keyword">typename</span> StackAllocator = CrtAllocator&gt;</div><div class="line"><a name="l02121"></a><span class="lineno"> 2121</span>&#160;<span class="keyword">class </span><a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a> : <span class="keyword">public</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&lt;Encoding, Allocator&gt; {</div><div class="line"><a name="l02122"></a><span class="lineno"> 2122</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l02123"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_document.html#a8367a827588dd91d02e21ef945bec9f5"> 2123</a></span>&#160; <span class="keyword">typedef</span> <span class="keyword">typename</span> Encoding::Ch <a class="code" href="classrapidjson_1_1_generic_document.html#a8367a827588dd91d02e21ef945bec9f5">Ch</a>; <span class="comment">//!&lt; Character type derived from Encoding.</span></div><div class="line"><a name="l02124"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_document.html#a41bbec044c421e870a9d355075d741bc"> 2124</a></span>&#160;<span class="comment"></span> <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue&lt;Encoding, Allocator&gt;</a> <a class="code" href="classrapidjson_1_1_generic_document.html#a41bbec044c421e870a9d355075d741bc">ValueType</a>; <span class="comment">//!&lt; Value type of the document.</span></div><div class="line"><a name="l02125"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_document.html#a4c85243a28c9dcf2d1357da00fcaa773"> 2125</a></span>&#160;<span class="comment"></span> <span class="keyword">typedef</span> Allocator <a class="code" href="classrapidjson_1_1_generic_document.html#a4c85243a28c9dcf2d1357da00fcaa773">AllocatorType</a>; <span class="comment">//!&lt; Allocator type from template parameter.</span></div><div class="line"><a name="l02126"></a><span class="lineno"> 2126</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l02127"></a><span class="lineno"> 2127</span>&#160;<span class="comment"> //! Constructor</span></div><div class="line"><a name="l02128"></a><span class="lineno"> 2128</span>&#160;<span class="comment"></span><span class="comment"> /*! Creates an empty document of specified type.</span></div><div class="line"><a name="l02129"></a><span class="lineno"> 2129</span>&#160;<span class="comment"> \param type Mandatory type of object to create.</span></div><div class="line"><a name="l02130"></a><span class="lineno"> 2130</span>&#160;<span class="comment"> \param allocator Optional allocator for allocating memory.</span></div><div class="line"><a name="l02131"></a><span class="lineno"> 2131</span>&#160;<span class="comment"> \param stackCapacity Optional initial capacity of stack in bytes.</span></div><div class="line"><a name="l02132"></a><span class="lineno"> 2132</span>&#160;<span class="comment"> \param stackAllocator Optional allocator for allocating memory for stack.</span></div><div class="line"><a name="l02133"></a><span class="lineno"> 2133</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l02134"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_document.html#aa52c3016961f25ecd989d82839bce4e5"> 2134</a></span>&#160; <span class="keyword">explicit</span> <a class="code" href="classrapidjson_1_1_generic_document.html#aa52c3016961f25ecd989d82839bce4e5">GenericDocument</a>(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">Type</a> type, Allocator* allocator = 0, <span class="keywordtype">size_t</span> stackCapacity = kDefaultStackCapacity, StackAllocator* stackAllocator = 0) :</div><div class="line"><a name="l02135"></a><span class="lineno"> 2135</span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&lt;Encoding, Allocator&gt;(type), allocator_(allocator), ownAllocator_(0), stack_(stackAllocator, stackCapacity), parseResult_()</div><div class="line"><a name="l02136"></a><span class="lineno"> 2136</span>&#160; {</div><div class="line"><a name="l02137"></a><span class="lineno"> 2137</span>&#160; <span class="keywordflow">if</span> (!allocator_)</div><div class="line"><a name="l02138"></a><span class="lineno"> 2138</span>&#160; ownAllocator_ = allocator_ = <a class="code" href="rapidjson_8h.html#abdc7cd7902748ffe6626d71c59a73c3b">RAPIDJSON_NEW</a>(Allocator)();</div><div class="line"><a name="l02139"></a><span class="lineno"> 2139</span>&#160; }</div><div class="line"><a name="l02140"></a><span class="lineno"> 2140</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02141"></a><span class="lineno"> 2141</span>&#160;<span class="comment"> //! Constructor</span></div><div class="line"><a name="l02142"></a><span class="lineno"> 2142</span>&#160;<span class="comment"></span><span class="comment"> /*! Creates an empty document which type is Null. </span></div><div class="line"><a name="l02143"></a><span class="lineno"> 2143</span>&#160;<span class="comment"> \param allocator Optional allocator for allocating memory.</span></div><div class="line"><a name="l02144"></a><span class="lineno"> 2144</span>&#160;<span class="comment"> \param stackCapacity Optional initial capacity of stack in bytes.</span></div><div class="line"><a name="l02145"></a><span class="lineno"> 2145</span>&#160;<span class="comment"> \param stackAllocator Optional allocator for allocating memory for stack.</span></div><div class="line"><a name="l02146"></a><span class="lineno"> 2146</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l02147"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_document.html#a82b27e7b228eb46a23f99720063ab4fb"> 2147</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_document.html#a82b27e7b228eb46a23f99720063ab4fb">GenericDocument</a>(Allocator* allocator = 0, <span class="keywordtype">size_t</span> stackCapacity = kDefaultStackCapacity, StackAllocator* stackAllocator = 0) : </div><div class="line"><a name="l02148"></a><span class="lineno"> 2148</span>&#160; allocator_(allocator), ownAllocator_(0), stack_(stackAllocator, stackCapacity), parseResult_()</div><div class="line"><a name="l02149"></a><span class="lineno"> 2149</span>&#160; {</div><div class="line"><a name="l02150"></a><span class="lineno"> 2150</span>&#160; <span class="keywordflow">if</span> (!allocator_)</div><div class="line"><a name="l02151"></a><span class="lineno"> 2151</span>&#160; ownAllocator_ = allocator_ = <a class="code" href="rapidjson_8h.html#abdc7cd7902748ffe6626d71c59a73c3b">RAPIDJSON_NEW</a>(Allocator)();</div><div class="line"><a name="l02152"></a><span class="lineno"> 2152</span>&#160; }</div><div class="line"><a name="l02153"></a><span class="lineno"> 2153</span>&#160;</div><div class="line"><a name="l02154"></a><span class="lineno"> 2154</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l02155"></a><span class="lineno"> 2155</span>&#160;<span class="comment"> //! Move constructor in C++11</span></div><div class="line"><a name="l02156"></a><span class="lineno"> 2156</span>&#160;<span class="comment"></span> <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>(<a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>&amp;&amp; rhs) RAPIDJSON_NOEXCEPT</div><div class="line"><a name="l02157"></a><span class="lineno"> 2157</span>&#160; : ValueType(std::forward&lt;ValueType&gt;(rhs)), <span class="comment">// explicit cast to avoid prohibited move from Document</span></div><div class="line"><a name="l02158"></a><span class="lineno"> 2158</span>&#160; allocator_(rhs.allocator_),</div><div class="line"><a name="l02159"></a><span class="lineno"> 2159</span>&#160; ownAllocator_(rhs.ownAllocator_),</div><div class="line"><a name="l02160"></a><span class="lineno"> 2160</span>&#160; stack_(std::move(rhs.stack_)),</div><div class="line"><a name="l02161"></a><span class="lineno"> 2161</span>&#160; parseResult_(rhs.parseResult_)</div><div class="line"><a name="l02162"></a><span class="lineno"> 2162</span>&#160; {</div><div class="line"><a name="l02163"></a><span class="lineno"> 2163</span>&#160; rhs.allocator_ = 0;</div><div class="line"><a name="l02164"></a><span class="lineno"> 2164</span>&#160; rhs.ownAllocator_ = 0;</div><div class="line"><a name="l02165"></a><span class="lineno"> 2165</span>&#160; rhs.parseResult_ = <a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#structrapidjson_1_1_parse_result">ParseResult</a>();</div><div class="line"><a name="l02166"></a><span class="lineno"> 2166</span>&#160; }</div><div class="line"><a name="l02167"></a><span class="lineno"> 2167</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02168"></a><span class="lineno"> 2168</span>&#160;</div><div class="line"><a name="l02169"></a><span class="lineno"> 2169</span>&#160; ~<a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>() {</div><div class="line"><a name="l02170"></a><span class="lineno"> 2170</span>&#160; Destroy();</div><div class="line"><a name="l02171"></a><span class="lineno"> 2171</span>&#160; }</div><div class="line"><a name="l02172"></a><span class="lineno"> 2172</span>&#160;</div><div class="line"><a name="l02173"></a><span class="lineno"> 2173</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l02174"></a><span class="lineno"> 2174</span>&#160;<span class="comment"> //! Move assignment in C++11</span></div><div class="line"><a name="l02175"></a><span class="lineno"> 2175</span>&#160;<span class="comment"></span> <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>&amp; operator=(<a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>&amp;&amp; rhs) RAPIDJSON_NOEXCEPT</div><div class="line"><a name="l02176"></a><span class="lineno"> 2176</span>&#160; {</div><div class="line"><a name="l02177"></a><span class="lineno"> 2177</span>&#160; <span class="comment">// The cast to ValueType is necessary here, because otherwise it would</span></div><div class="line"><a name="l02178"></a><span class="lineno"> 2178</span>&#160; <span class="comment">// attempt to call GenericValue&#39;s templated assignment operator.</span></div><div class="line"><a name="l02179"></a><span class="lineno"> 2179</span>&#160; ValueType::operator=(std::forward&lt;ValueType&gt;(rhs));</div><div class="line"><a name="l02180"></a><span class="lineno"> 2180</span>&#160;</div><div class="line"><a name="l02181"></a><span class="lineno"> 2181</span>&#160; <span class="comment">// Calling the destructor here would prematurely call stack_&#39;s destructor</span></div><div class="line"><a name="l02182"></a><span class="lineno"> 2182</span>&#160; Destroy();</div><div class="line"><a name="l02183"></a><span class="lineno"> 2183</span>&#160;</div><div class="line"><a name="l02184"></a><span class="lineno"> 2184</span>&#160; allocator_ = rhs.allocator_;</div><div class="line"><a name="l02185"></a><span class="lineno"> 2185</span>&#160; ownAllocator_ = rhs.ownAllocator_;</div><div class="line"><a name="l02186"></a><span class="lineno"> 2186</span>&#160; stack_ = std::move(rhs.stack_);</div><div class="line"><a name="l02187"></a><span class="lineno"> 2187</span>&#160; parseResult_ = rhs.parseResult_;</div><div class="line"><a name="l02188"></a><span class="lineno"> 2188</span>&#160;</div><div class="line"><a name="l02189"></a><span class="lineno"> 2189</span>&#160; rhs.allocator_ = 0;</div><div class="line"><a name="l02190"></a><span class="lineno"> 2190</span>&#160; rhs.ownAllocator_ = 0;</div><div class="line"><a name="l02191"></a><span class="lineno"> 2191</span>&#160; rhs.parseResult_ = <a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#structrapidjson_1_1_parse_result">ParseResult</a>();</div><div class="line"><a name="l02192"></a><span class="lineno"> 2192</span>&#160;</div><div class="line"><a name="l02193"></a><span class="lineno"> 2193</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l02194"></a><span class="lineno"> 2194</span>&#160; }</div><div class="line"><a name="l02195"></a><span class="lineno"> 2195</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02196"></a><span class="lineno"> 2196</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02197"></a><span class="lineno"> 2197</span>&#160;<span class="comment"> //! Exchange the contents of this document with those of another.</span></div><div class="line"><a name="l02198"></a><span class="lineno"> 2198</span>&#160;<span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l02199"></a><span class="lineno"> 2199</span>&#160;<span class="comment"> \param rhs Another document.</span></div><div class="line"><a name="l02200"></a><span class="lineno"> 2200</span>&#160;<span class="comment"> \note Constant complexity.</span></div><div class="line"><a name="l02201"></a><span class="lineno"> 2201</span>&#160;<span class="comment"> \see GenericValue::Swap</span></div><div class="line"><a name="l02202"></a><span class="lineno"> 2202</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l02203"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_document.html#abf1cbab989b856f9d260787b2575750b"> 2203</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>&amp; <a class="code" href="classrapidjson_1_1_generic_document.html#abf1cbab989b856f9d260787b2575750b">Swap</a>(<a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>&amp; rhs) RAPIDJSON_NOEXCEPT {</div><div class="line"><a name="l02204"></a><span class="lineno"> 2204</span>&#160; ValueType::Swap(rhs);</div><div class="line"><a name="l02205"></a><span class="lineno"> 2205</span>&#160; stack_.Swap(rhs.stack_);</div><div class="line"><a name="l02206"></a><span class="lineno"> 2206</span>&#160; internal::Swap(allocator_, rhs.allocator_);</div><div class="line"><a name="l02207"></a><span class="lineno"> 2207</span>&#160; internal::Swap(ownAllocator_, rhs.ownAllocator_);</div><div class="line"><a name="l02208"></a><span class="lineno"> 2208</span>&#160; internal::Swap(parseResult_, rhs.parseResult_);</div><div class="line"><a name="l02209"></a><span class="lineno"> 2209</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l02210"></a><span class="lineno"> 2210</span>&#160; }</div><div class="line"><a name="l02211"></a><span class="lineno"> 2211</span>&#160;</div><div class="line"><a name="l02212"></a><span class="lineno"> 2212</span>&#160; <span class="comment">// Allow Swap with ValueType.</span></div><div class="line"><a name="l02213"></a><span class="lineno"> 2213</span>&#160; <span class="comment">// Refer to Effective C++ 3rd Edition/Item 33: Avoid hiding inherited names.</span></div><div class="line"><a name="l02214"></a><span class="lineno"> 2214</span>&#160; <span class="keyword">using</span> ValueType::Swap;</div><div class="line"><a name="l02215"></a><span class="lineno"> 2215</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02216"></a><span class="lineno"> 2216</span>&#160;<span class="comment"> //! free-standing swap function helper</span></div><div class="line"><a name="l02217"></a><span class="lineno"> 2217</span>&#160;<span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l02218"></a><span class="lineno"> 2218</span>&#160;<span class="comment"> Helper function to enable support for common swap implementation pattern based on \c std::swap:</span></div><div class="line"><a name="l02219"></a><span class="lineno"> 2219</span>&#160;<span class="comment"> \code</span></div><div class="line"><a name="l02220"></a><span class="lineno"> 2220</span>&#160;<span class="comment"> void swap(MyClass&amp; a, MyClass&amp; b) {</span></div><div class="line"><a name="l02221"></a><span class="lineno"> 2221</span>&#160;<span class="comment"> using std::swap;</span></div><div class="line"><a name="l02222"></a><span class="lineno"> 2222</span>&#160;<span class="comment"> swap(a.doc, b.doc);</span></div><div class="line"><a name="l02223"></a><span class="lineno"> 2223</span>&#160;<span class="comment"> // ...</span></div><div class="line"><a name="l02224"></a><span class="lineno"> 2224</span>&#160;<span class="comment"> }</span></div><div class="line"><a name="l02225"></a><span class="lineno"> 2225</span>&#160;<span class="comment"> \endcode</span></div><div class="line"><a name="l02226"></a><span class="lineno"> 2226</span>&#160;<span class="comment"> \see Swap()</span></div><div class="line"><a name="l02227"></a><span class="lineno"> 2227</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l02228"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_document.html#a0d63efcc43758ac3aed77e868233369d"> 2228</a></span>&#160; <span class="keyword">friend</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classrapidjson_1_1_generic_document.html#a0d63efcc43758ac3aed77e868233369d">swap</a>(<a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>&amp; a, <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>&amp; b) RAPIDJSON_NOEXCEPT { a.Swap(b); }</div><div class="line"><a name="l02229"></a><span class="lineno"> 2229</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02230"></a><span class="lineno"> 2230</span>&#160;<span class="comment"> //! Populate this document by a generator which produces SAX events.</span></div><div class="line"><a name="l02231"></a><span class="lineno"> 2231</span>&#160;<span class="comment"></span><span class="comment"> /*! \tparam Generator A functor with &lt;tt&gt;bool f(Handler)&lt;/tt&gt; prototype.</span></div><div class="line"><a name="l02232"></a><span class="lineno"> 2232</span>&#160;<span class="comment"> \param g Generator functor which sends SAX events to the parameter.</span></div><div class="line"><a name="l02233"></a><span class="lineno"> 2233</span>&#160;<span class="comment"> \return The document itself for fluent API.</span></div><div class="line"><a name="l02234"></a><span class="lineno"> 2234</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l02235"></a><span class="lineno"> 2235</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> Generator&gt;</div><div class="line"><a name="l02236"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_document.html#a63e18887979da500ece6f0bd10d29b64"> 2236</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>&amp; <a class="code" href="classrapidjson_1_1_generic_document.html#a63e18887979da500ece6f0bd10d29b64">Populate</a>(Generator&amp; g) {</div><div class="line"><a name="l02237"></a><span class="lineno"> 2237</span>&#160; ClearStackOnExit scope(*<span class="keyword">this</span>);</div><div class="line"><a name="l02238"></a><span class="lineno"> 2238</span>&#160; <span class="keywordflow">if</span> (g(*<span class="keyword">this</span>)) {</div><div class="line"><a name="l02239"></a><span class="lineno"> 2239</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(stack_.GetSize() == <span class="keyword">sizeof</span>(ValueType)); <span class="comment">// Got one and only one root object</span></div><div class="line"><a name="l02240"></a><span class="lineno"> 2240</span>&#160; ValueType::operator=(*stack_.template Pop&lt;ValueType&gt;(1));<span class="comment">// Move value from stack to document</span></div><div class="line"><a name="l02241"></a><span class="lineno"> 2241</span>&#160; }</div><div class="line"><a name="l02242"></a><span class="lineno"> 2242</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l02243"></a><span class="lineno"> 2243</span>&#160; }</div><div class="line"><a name="l02244"></a><span class="lineno"> 2244</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02245"></a><span class="lineno"> 2245</span>&#160;<span class="comment"> //!@name Parse from stream</span></div><div class="line"><a name="l02246"></a><span class="lineno"> 2246</span>&#160;<span class="comment"> //!@{</span></div><div class="line"><a name="l02247"></a><span class="lineno"> 2247</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l02248"></a><span class="lineno"> 2248</span>&#160;<span class="comment"> //! Parse JSON text from an input stream (with Encoding conversion)</span></div><div class="line"><a name="l02249"></a><span class="lineno"> 2249</span>&#160;<span class="comment"></span><span class="comment"> /*! \tparam parseFlags Combination of \ref ParseFlag.</span></div><div class="line"><a name="l02250"></a><span class="lineno"> 2250</span>&#160;<span class="comment"> \tparam SourceEncoding Encoding of input stream</span></div><div class="line"><a name="l02251"></a><span class="lineno"> 2251</span>&#160;<span class="comment"> \tparam InputStream Type of input stream, implementing Stream concept</span></div><div class="line"><a name="l02252"></a><span class="lineno"> 2252</span>&#160;<span class="comment"> \param is Input stream to be parsed.</span></div><div class="line"><a name="l02253"></a><span class="lineno"> 2253</span>&#160;<span class="comment"> \return The document itself for fluent API.</span></div><div class="line"><a name="l02254"></a><span class="lineno"> 2254</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l02255"></a><span class="lineno"> 2255</span>&#160; <span class="keyword">template</span> &lt;<span class="keywordtype">unsigned</span> parseFlags, <span class="keyword">typename</span> SourceEncoding, <span class="keyword">typename</span> InputStream&gt;</div><div class="line"><a name="l02256"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_document.html#a3ae97682cf04685c7db9d89ebc399b85"> 2256</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>&amp; <a class="code" href="classrapidjson_1_1_generic_document.html#a3ae97682cf04685c7db9d89ebc399b85">ParseStream</a>(InputStream&amp; is) {</div><div class="line"><a name="l02257"></a><span class="lineno"> 2257</span>&#160; <a class="code" href="classrapidjson_1_1_generic_reader.html">GenericReader&lt;SourceEncoding, Encoding, StackAllocator&gt;</a> reader(</div><div class="line"><a name="l02258"></a><span class="lineno"> 2258</span>&#160; stack_.HasAllocator() ? &amp;stack_.GetAllocator() : 0);</div><div class="line"><a name="l02259"></a><span class="lineno"> 2259</span>&#160; ClearStackOnExit scope(*<span class="keyword">this</span>);</div><div class="line"><a name="l02260"></a><span class="lineno"> 2260</span>&#160; parseResult_ = reader.template Parse&lt;parseFlags&gt;(is, *<span class="keyword">this</span>);</div><div class="line"><a name="l02261"></a><span class="lineno"> 2261</span>&#160; <span class="keywordflow">if</span> (parseResult_) {</div><div class="line"><a name="l02262"></a><span class="lineno"> 2262</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(stack_.GetSize() == <span class="keyword">sizeof</span>(ValueType)); <span class="comment">// Got one and only one root object</span></div><div class="line"><a name="l02263"></a><span class="lineno"> 2263</span>&#160; ValueType::operator=(*stack_.template Pop&lt;ValueType&gt;(1));<span class="comment">// Move value from stack to document</span></div><div class="line"><a name="l02264"></a><span class="lineno"> 2264</span>&#160; }</div><div class="line"><a name="l02265"></a><span class="lineno"> 2265</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l02266"></a><span class="lineno"> 2266</span>&#160; }</div><div class="line"><a name="l02267"></a><span class="lineno"> 2267</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02268"></a><span class="lineno"> 2268</span>&#160;<span class="comment"> //! Parse JSON text from an input stream</span></div><div class="line"><a name="l02269"></a><span class="lineno"> 2269</span>&#160;<span class="comment"></span><span class="comment"> /*! \tparam parseFlags Combination of \ref ParseFlag.</span></div><div class="line"><a name="l02270"></a><span class="lineno"> 2270</span>&#160;<span class="comment"> \tparam InputStream Type of input stream, implementing Stream concept</span></div><div class="line"><a name="l02271"></a><span class="lineno"> 2271</span>&#160;<span class="comment"> \param is Input stream to be parsed.</span></div><div class="line"><a name="l02272"></a><span class="lineno"> 2272</span>&#160;<span class="comment"> \return The document itself for fluent API.</span></div><div class="line"><a name="l02273"></a><span class="lineno"> 2273</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l02274"></a><span class="lineno"> 2274</span>&#160; <span class="keyword">template</span> &lt;<span class="keywordtype">unsigned</span> parseFlags, <span class="keyword">typename</span> InputStream&gt;</div><div class="line"><a name="l02275"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_document.html#ae4ee7d86b8c906c83dbe15e57eb6ac6a"> 2275</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>&amp; <a class="code" href="classrapidjson_1_1_generic_document.html#ae4ee7d86b8c906c83dbe15e57eb6ac6a">ParseStream</a>(InputStream&amp; is) {</div><div class="line"><a name="l02276"></a><span class="lineno"> 2276</span>&#160; <span class="keywordflow">return</span> ParseStream&lt;parseFlags, Encoding, InputStream&gt;(is);</div><div class="line"><a name="l02277"></a><span class="lineno"> 2277</span>&#160; }</div><div class="line"><a name="l02278"></a><span class="lineno"> 2278</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02279"></a><span class="lineno"> 2279</span>&#160;<span class="comment"> //! Parse JSON text from an input stream (with \ref kParseDefaultFlags)</span></div><div class="line"><a name="l02280"></a><span class="lineno"> 2280</span>&#160;<span class="comment"></span><span class="comment"> /*! \tparam InputStream Type of input stream, implementing Stream concept</span></div><div class="line"><a name="l02281"></a><span class="lineno"> 2281</span>&#160;<span class="comment"> \param is Input stream to be parsed.</span></div><div class="line"><a name="l02282"></a><span class="lineno"> 2282</span>&#160;<span class="comment"> \return The document itself for fluent API.</span></div><div class="line"><a name="l02283"></a><span class="lineno"> 2283</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l02284"></a><span class="lineno"> 2284</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> InputStream&gt;</div><div class="line"><a name="l02285"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_document.html#acf96a3c7fd61486d049c701b1fe5d414"> 2285</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>&amp; <a class="code" href="classrapidjson_1_1_generic_document.html#acf96a3c7fd61486d049c701b1fe5d414">ParseStream</a>(InputStream&amp; is) {</div><div class="line"><a name="l02286"></a><span class="lineno"> 2286</span>&#160; <span class="keywordflow">return</span> ParseStream&lt;kParseDefaultFlags, Encoding, InputStream&gt;(is);</div><div class="line"><a name="l02287"></a><span class="lineno"> 2287</span>&#160; }<span class="comment"></span></div><div class="line"><a name="l02288"></a><span class="lineno"> 2288</span>&#160;<span class="comment"> //!@}</span></div><div class="line"><a name="l02289"></a><span class="lineno"> 2289</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l02290"></a><span class="lineno"> 2290</span>&#160;<span class="comment"> //!@name Parse in-place from mutable string</span></div><div class="line"><a name="l02291"></a><span class="lineno"> 2291</span>&#160;<span class="comment"> //!@{</span></div><div class="line"><a name="l02292"></a><span class="lineno"> 2292</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l02293"></a><span class="lineno"> 2293</span>&#160;<span class="comment"> //! Parse JSON text from a mutable string</span></div><div class="line"><a name="l02294"></a><span class="lineno"> 2294</span>&#160;<span class="comment"></span><span class="comment"> /*! \tparam parseFlags Combination of \ref ParseFlag.</span></div><div class="line"><a name="l02295"></a><span class="lineno"> 2295</span>&#160;<span class="comment"> \param str Mutable zero-terminated string to be parsed.</span></div><div class="line"><a name="l02296"></a><span class="lineno"> 2296</span>&#160;<span class="comment"> \return The document itself for fluent API.</span></div><div class="line"><a name="l02297"></a><span class="lineno"> 2297</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l02298"></a><span class="lineno"> 2298</span>&#160; <span class="keyword">template</span> &lt;<span class="keywordtype">unsigned</span> parseFlags&gt;</div><div class="line"><a name="l02299"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_document.html#a7ba626bf84eb45a9bca0b7723bf47f3f"> 2299</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>&amp; <a class="code" href="classrapidjson_1_1_generic_document.html#a7ba626bf84eb45a9bca0b7723bf47f3f">ParseInsitu</a>(Ch* str) {</div><div class="line"><a name="l02300"></a><span class="lineno"> 2300</span>&#160; <a class="code" href="structrapidjson_1_1_generic_insitu_string_stream.html">GenericInsituStringStream&lt;Encoding&gt;</a> s(str);</div><div class="line"><a name="l02301"></a><span class="lineno"> 2301</span>&#160; <span class="keywordflow">return</span> ParseStream&lt;parseFlags | kParseInsituFlag&gt;(s);</div><div class="line"><a name="l02302"></a><span class="lineno"> 2302</span>&#160; }</div><div class="line"><a name="l02303"></a><span class="lineno"> 2303</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02304"></a><span class="lineno"> 2304</span>&#160;<span class="comment"> //! Parse JSON text from a mutable string (with \ref kParseDefaultFlags)</span></div><div class="line"><a name="l02305"></a><span class="lineno"> 2305</span>&#160;<span class="comment"></span><span class="comment"> /*! \param str Mutable zero-terminated string to be parsed.</span></div><div class="line"><a name="l02306"></a><span class="lineno"> 2306</span>&#160;<span class="comment"> \return The document itself for fluent API.</span></div><div class="line"><a name="l02307"></a><span class="lineno"> 2307</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l02308"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_document.html#af061c039a990c2970dc31e5626149367"> 2308</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>&amp; <a class="code" href="classrapidjson_1_1_generic_document.html#af061c039a990c2970dc31e5626149367">ParseInsitu</a>(Ch* str) {</div><div class="line"><a name="l02309"></a><span class="lineno"> 2309</span>&#160; <span class="keywordflow">return</span> ParseInsitu&lt;kParseDefaultFlags&gt;(str);</div><div class="line"><a name="l02310"></a><span class="lineno"> 2310</span>&#160; }<span class="comment"></span></div><div class="line"><a name="l02311"></a><span class="lineno"> 2311</span>&#160;<span class="comment"> //!@}</span></div><div class="line"><a name="l02312"></a><span class="lineno"> 2312</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l02313"></a><span class="lineno"> 2313</span>&#160;<span class="comment"> //!@name Parse from read-only string</span></div><div class="line"><a name="l02314"></a><span class="lineno"> 2314</span>&#160;<span class="comment"> //!@{</span></div><div class="line"><a name="l02315"></a><span class="lineno"> 2315</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l02316"></a><span class="lineno"> 2316</span>&#160;<span class="comment"> //! Parse JSON text from a read-only string (with Encoding conversion)</span></div><div class="line"><a name="l02317"></a><span class="lineno"> 2317</span>&#160;<span class="comment"></span><span class="comment"> /*! \tparam parseFlags Combination of \ref ParseFlag (must not contain \ref kParseInsituFlag).</span></div><div class="line"><a name="l02318"></a><span class="lineno"> 2318</span>&#160;<span class="comment"> \tparam SourceEncoding Transcoding from input Encoding</span></div><div class="line"><a name="l02319"></a><span class="lineno"> 2319</span>&#160;<span class="comment"> \param str Read-only zero-terminated string to be parsed.</span></div><div class="line"><a name="l02320"></a><span class="lineno"> 2320</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l02321"></a><span class="lineno"> 2321</span>&#160; <span class="keyword">template</span> &lt;<span class="keywordtype">unsigned</span> parseFlags, <span class="keyword">typename</span> SourceEncoding&gt;</div><div class="line"><a name="l02322"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_document.html#aea842b533a858c9a3861451ad9e8642c"> 2322</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>&amp; <a class="code" href="classrapidjson_1_1_generic_document.html#aea842b533a858c9a3861451ad9e8642c">Parse</a>(<span class="keyword">const</span> <span class="keyword">typename</span> SourceEncoding::Ch* str) {</div><div class="line"><a name="l02323"></a><span class="lineno"> 2323</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(!(parseFlags &amp; <a class="code" href="namespacerapidjson.html#a81379eb4e94a0386d71d15fda882ebc9a02748971d6ea0c5e22c69b8aa7f344ea">kParseInsituFlag</a>));</div><div class="line"><a name="l02324"></a><span class="lineno"> 2324</span>&#160; <a class="code" href="structrapidjson_1_1_generic_string_stream.html">GenericStringStream&lt;SourceEncoding&gt;</a> s(str);</div><div class="line"><a name="l02325"></a><span class="lineno"> 2325</span>&#160; <span class="keywordflow">return</span> ParseStream&lt;parseFlags, SourceEncoding&gt;(s);</div><div class="line"><a name="l02326"></a><span class="lineno"> 2326</span>&#160; }</div><div class="line"><a name="l02327"></a><span class="lineno"> 2327</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02328"></a><span class="lineno"> 2328</span>&#160;<span class="comment"> //! Parse JSON text from a read-only string</span></div><div class="line"><a name="l02329"></a><span class="lineno"> 2329</span>&#160;<span class="comment"></span><span class="comment"> /*! \tparam parseFlags Combination of \ref ParseFlag (must not contain \ref kParseInsituFlag).</span></div><div class="line"><a name="l02330"></a><span class="lineno"> 2330</span>&#160;<span class="comment"> \param str Read-only zero-terminated string to be parsed.</span></div><div class="line"><a name="l02331"></a><span class="lineno"> 2331</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l02332"></a><span class="lineno"> 2332</span>&#160; <span class="keyword">template</span> &lt;<span class="keywordtype">unsigned</span> parseFlags&gt;</div><div class="line"><a name="l02333"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_document.html#a42c35e2f64c288f14b74fec2792500c8"> 2333</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>&amp; <a class="code" href="classrapidjson_1_1_generic_document.html#a42c35e2f64c288f14b74fec2792500c8">Parse</a>(<span class="keyword">const</span> Ch* str) {</div><div class="line"><a name="l02334"></a><span class="lineno"> 2334</span>&#160; <span class="keywordflow">return</span> Parse&lt;parseFlags, Encoding&gt;(str);</div><div class="line"><a name="l02335"></a><span class="lineno"> 2335</span>&#160; }</div><div class="line"><a name="l02336"></a><span class="lineno"> 2336</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02337"></a><span class="lineno"> 2337</span>&#160;<span class="comment"> //! Parse JSON text from a read-only string (with \ref kParseDefaultFlags)</span></div><div class="line"><a name="l02338"></a><span class="lineno"> 2338</span>&#160;<span class="comment"></span><span class="comment"> /*! \param str Read-only zero-terminated string to be parsed.</span></div><div class="line"><a name="l02339"></a><span class="lineno"> 2339</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l02340"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_document.html#ab031375318d133f83a114314b75703de"> 2340</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>&amp; <a class="code" href="classrapidjson_1_1_generic_document.html#ab031375318d133f83a114314b75703de">Parse</a>(<span class="keyword">const</span> Ch* str) {</div><div class="line"><a name="l02341"></a><span class="lineno"> 2341</span>&#160; <span class="keywordflow">return</span> Parse&lt;kParseDefaultFlags&gt;(str);</div><div class="line"><a name="l02342"></a><span class="lineno"> 2342</span>&#160; }</div><div class="line"><a name="l02343"></a><span class="lineno"> 2343</span>&#160;</div><div class="line"><a name="l02344"></a><span class="lineno"> 2344</span>&#160; <span class="keyword">template</span> &lt;<span class="keywordtype">unsigned</span> parseFlags, <span class="keyword">typename</span> SourceEncoding&gt;</div><div class="line"><a name="l02345"></a><span class="lineno"> 2345</span>&#160; <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>&amp; Parse(<span class="keyword">const</span> <span class="keyword">typename</span> SourceEncoding::Ch* str, <span class="keywordtype">size_t</span> length) {</div><div class="line"><a name="l02346"></a><span class="lineno"> 2346</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(!(parseFlags &amp; <a class="code" href="namespacerapidjson.html#a81379eb4e94a0386d71d15fda882ebc9a02748971d6ea0c5e22c69b8aa7f344ea">kParseInsituFlag</a>));</div><div class="line"><a name="l02347"></a><span class="lineno"> 2347</span>&#160; <a class="code" href="structrapidjson_1_1_memory_stream.html">MemoryStream</a> ms(reinterpret_cast&lt;const char*&gt;(str), length * <span class="keyword">sizeof</span>(<span class="keyword">typename</span> SourceEncoding::Ch));</div><div class="line"><a name="l02348"></a><span class="lineno"> 2348</span>&#160; <a class="code" href="classrapidjson_1_1_encoded_input_stream.html">EncodedInputStream&lt;SourceEncoding, MemoryStream&gt;</a> is(ms);</div><div class="line"><a name="l02349"></a><span class="lineno"> 2349</span>&#160; ParseStream&lt;parseFlags, SourceEncoding&gt;(is);</div><div class="line"><a name="l02350"></a><span class="lineno"> 2350</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l02351"></a><span class="lineno"> 2351</span>&#160; }</div><div class="line"><a name="l02352"></a><span class="lineno"> 2352</span>&#160;</div><div class="line"><a name="l02353"></a><span class="lineno"> 2353</span>&#160; <span class="keyword">template</span> &lt;<span class="keywordtype">unsigned</span> parseFlags&gt;</div><div class="line"><a name="l02354"></a><span class="lineno"> 2354</span>&#160; <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>&amp; Parse(<span class="keyword">const</span> Ch* str, <span class="keywordtype">size_t</span> length) {</div><div class="line"><a name="l02355"></a><span class="lineno"> 2355</span>&#160; <span class="keywordflow">return</span> Parse&lt;parseFlags, Encoding&gt;(str, length);</div><div class="line"><a name="l02356"></a><span class="lineno"> 2356</span>&#160; }</div><div class="line"><a name="l02357"></a><span class="lineno"> 2357</span>&#160; </div><div class="line"><a name="l02358"></a><span class="lineno"> 2358</span>&#160; <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>&amp; Parse(<span class="keyword">const</span> Ch* str, <span class="keywordtype">size_t</span> length) {</div><div class="line"><a name="l02359"></a><span class="lineno"> 2359</span>&#160; <span class="keywordflow">return</span> Parse&lt;kParseDefaultFlags&gt;(str, length);</div><div class="line"><a name="l02360"></a><span class="lineno"> 2360</span>&#160; }</div><div class="line"><a name="l02361"></a><span class="lineno"> 2361</span>&#160;</div><div class="line"><a name="l02362"></a><span class="lineno"> 2362</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l02363"></a><span class="lineno"> 2363</span>&#160; <span class="keyword">template</span> &lt;<span class="keywordtype">unsigned</span> parseFlags, <span class="keyword">typename</span> SourceEncoding&gt;</div><div class="line"><a name="l02364"></a><span class="lineno"> 2364</span>&#160; <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>&amp; Parse(<span class="keyword">const</span> std::basic_string&lt;typename SourceEncoding::Ch&gt;&amp; str) {</div><div class="line"><a name="l02365"></a><span class="lineno"> 2365</span>&#160; <span class="comment">// c_str() is constant complexity according to standard. Should be faster than Parse(const char*, size_t)</span></div><div class="line"><a name="l02366"></a><span class="lineno"> 2366</span>&#160; <span class="keywordflow">return</span> Parse&lt;parseFlags, SourceEncoding&gt;(str.c_str());</div><div class="line"><a name="l02367"></a><span class="lineno"> 2367</span>&#160; }</div><div class="line"><a name="l02368"></a><span class="lineno"> 2368</span>&#160;</div><div class="line"><a name="l02369"></a><span class="lineno"> 2369</span>&#160; <span class="keyword">template</span> &lt;<span class="keywordtype">unsigned</span> parseFlags&gt;</div><div class="line"><a name="l02370"></a><span class="lineno"> 2370</span>&#160; <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>&amp; Parse(<span class="keyword">const</span> std::basic_string&lt;Ch&gt;&amp; str) {</div><div class="line"><a name="l02371"></a><span class="lineno"> 2371</span>&#160; <span class="keywordflow">return</span> Parse&lt;parseFlags, Encoding&gt;(str.c_str());</div><div class="line"><a name="l02372"></a><span class="lineno"> 2372</span>&#160; }</div><div class="line"><a name="l02373"></a><span class="lineno"> 2373</span>&#160;</div><div class="line"><a name="l02374"></a><span class="lineno"> 2374</span>&#160; <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>&amp; Parse(<span class="keyword">const</span> std::basic_string&lt;Ch&gt;&amp; str) {</div><div class="line"><a name="l02375"></a><span class="lineno"> 2375</span>&#160; <span class="keywordflow">return</span> Parse&lt;kParseDefaultFlags&gt;(str);</div><div class="line"><a name="l02376"></a><span class="lineno"> 2376</span>&#160; }</div><div class="line"><a name="l02377"></a><span class="lineno"> 2377</span>&#160;<span class="preprocessor">#endif // RAPIDJSON_HAS_STDSTRING </span></div><div class="line"><a name="l02378"></a><span class="lineno"> 2378</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02379"></a><span class="lineno"> 2379</span>&#160;<span class="comment"> //!@}</span></div><div class="line"><a name="l02380"></a><span class="lineno"> 2380</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l02381"></a><span class="lineno"> 2381</span>&#160;<span class="comment"> //!@name Handling parse errors</span></div><div class="line"><a name="l02382"></a><span class="lineno"> 2382</span>&#160;<span class="comment"> //!@{</span></div><div class="line"><a name="l02383"></a><span class="lineno"> 2383</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l02384"></a><span class="lineno"> 2384</span>&#160;<span class="comment"> //! Whether a parse error has occurred in the last parsing.</span></div><div class="line"><a name="l02385"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_document.html#a7607bb42b51547e44bfd4cab35d8f20e"> 2385</a></span>&#160;<span class="comment"></span> <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_generic_document.html#a7607bb42b51547e44bfd4cab35d8f20e">HasParseError</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> parseResult_.IsError(); }</div><div class="line"><a name="l02386"></a><span class="lineno"> 2386</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02387"></a><span class="lineno"> 2387</span>&#160;<span class="comment"> //! Get the \ref ParseErrorCode of last parsing.</span></div><div class="line"><a name="l02388"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_document.html#ab94c280c079a6837a24951cb4d8f337b"> 2388</a></span>&#160;<span class="comment"></span> <a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#ga7d3acf640886b1f2552dc8c4cd6dea60">ParseErrorCode</a> <a class="code" href="classrapidjson_1_1_generic_document.html#ab94c280c079a6837a24951cb4d8f337b">GetParseError</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> parseResult_.Code(); }</div><div class="line"><a name="l02389"></a><span class="lineno"> 2389</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02390"></a><span class="lineno"> 2390</span>&#160;<span class="comment"> //! Get the position of last parsing error in input, 0 otherwise.</span></div><div class="line"><a name="l02391"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_document.html#af532179ca5ad5434a5e8af63f5da4c5f"> 2391</a></span>&#160;<span class="comment"></span> <span class="keywordtype">size_t</span> <a class="code" href="classrapidjson_1_1_generic_document.html#af532179ca5ad5434a5e8af63f5da4c5f">GetErrorOffset</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> parseResult_.Offset(); }</div><div class="line"><a name="l02392"></a><span class="lineno"> 2392</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02393"></a><span class="lineno"> 2393</span>&#160;<span class="comment"> //! Implicit conversion to get the last parse result</span></div><div class="line"><a name="l02394"></a><span class="lineno"> 2394</span>&#160;<span class="comment"></span><span class="preprocessor">#ifndef __clang // -Wdocumentation</span></div><div class="line"><a name="l02395"></a><span class="lineno"> 2395</span>&#160;<span class="comment"> /*! \return \ref ParseResult of the last parse operation</span></div><div class="line"><a name="l02396"></a><span class="lineno"> 2396</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02397"></a><span class="lineno"> 2397</span>&#160;<span class="comment"> \code</span></div><div class="line"><a name="l02398"></a><span class="lineno"> 2398</span>&#160;<span class="comment"> Document doc;</span></div><div class="line"><a name="l02399"></a><span class="lineno"> 2399</span>&#160;<span class="comment"> ParseResult ok = doc.Parse(json);</span></div><div class="line"><a name="l02400"></a><span class="lineno"> 2400</span>&#160;<span class="comment"> if (!ok)</span></div><div class="line"><a name="l02401"></a><span class="lineno"> 2401</span>&#160;<span class="comment"> printf( &quot;JSON parse error: %s (%u)\n&quot;, GetParseError_En(ok.Code()), ok.Offset());</span></div><div class="line"><a name="l02402"></a><span class="lineno"> 2402</span>&#160;<span class="comment"> \endcode</span></div><div class="line"><a name="l02403"></a><span class="lineno"> 2403</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l02404"></a><span class="lineno"> 2404</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02405"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_document.html#a36d19989c9221b27036675455516a974"> 2405</a></span>&#160; <span class="keyword">operator</span> <a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#structrapidjson_1_1_parse_result">ParseResult</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> parseResult_; }<span class="comment"></span></div><div class="line"><a name="l02406"></a><span class="lineno"> 2406</span>&#160;<span class="comment"> //!@}</span></div><div class="line"><a name="l02407"></a><span class="lineno"> 2407</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l02408"></a><span class="lineno"> 2408</span>&#160;<span class="comment"> //! Get the allocator of this document.</span></div><div class="line"><a name="l02409"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_document.html#ad92c6cd025d411258d1f2ad890e2ee3f"> 2409</a></span>&#160;<span class="comment"></span> Allocator&amp; <a class="code" href="classrapidjson_1_1_generic_document.html#ad92c6cd025d411258d1f2ad890e2ee3f">GetAllocator</a>() {</div><div class="line"><a name="l02410"></a><span class="lineno"> 2410</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(allocator_);</div><div class="line"><a name="l02411"></a><span class="lineno"> 2411</span>&#160; <span class="keywordflow">return</span> *allocator_;</div><div class="line"><a name="l02412"></a><span class="lineno"> 2412</span>&#160; }</div><div class="line"><a name="l02413"></a><span class="lineno"> 2413</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02414"></a><span class="lineno"> 2414</span>&#160;<span class="comment"> //! Get the capacity of stack in bytes.</span></div><div class="line"><a name="l02415"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_document.html#a153e5a065ca9660673974f9df203be4b"> 2415</a></span>&#160;<span class="comment"></span> <span class="keywordtype">size_t</span> <a class="code" href="classrapidjson_1_1_generic_document.html#a153e5a065ca9660673974f9df203be4b">GetStackCapacity</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> stack_.GetCapacity(); }</div><div class="line"><a name="l02416"></a><span class="lineno"> 2416</span>&#160;</div><div class="line"><a name="l02417"></a><span class="lineno"> 2417</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l02418"></a><span class="lineno"> 2418</span>&#160; <span class="comment">// clear stack on any exit from ParseStream, e.g. due to exception</span></div><div class="line"><a name="l02419"></a><span class="lineno"> 2419</span>&#160; <span class="keyword">struct </span>ClearStackOnExit {</div><div class="line"><a name="l02420"></a><span class="lineno"> 2420</span>&#160; <span class="keyword">explicit</span> ClearStackOnExit(<a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>&amp; d) : d_(d) {}</div><div class="line"><a name="l02421"></a><span class="lineno"> 2421</span>&#160; ~ClearStackOnExit() { d_.ClearStack(); }</div><div class="line"><a name="l02422"></a><span class="lineno"> 2422</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l02423"></a><span class="lineno"> 2423</span>&#160; ClearStackOnExit(<span class="keyword">const</span> ClearStackOnExit&amp;);</div><div class="line"><a name="l02424"></a><span class="lineno"> 2424</span>&#160; ClearStackOnExit&amp; operator=(<span class="keyword">const</span> ClearStackOnExit&amp;);</div><div class="line"><a name="l02425"></a><span class="lineno"> 2425</span>&#160; <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>&amp; d_;</div><div class="line"><a name="l02426"></a><span class="lineno"> 2426</span>&#160; };</div><div class="line"><a name="l02427"></a><span class="lineno"> 2427</span>&#160;</div><div class="line"><a name="l02428"></a><span class="lineno"> 2428</span>&#160; <span class="comment">// callers of the following private Handler functions</span></div><div class="line"><a name="l02429"></a><span class="lineno"> 2429</span>&#160; <span class="comment">// template &lt;typename,typename,typename&gt; friend class GenericReader; // for parsing</span></div><div class="line"><a name="l02430"></a><span class="lineno"> 2430</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span>, <span class="keyword">typename</span>&gt; <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>; <span class="comment">// for deep copying</span></div><div class="line"><a name="l02431"></a><span class="lineno"> 2431</span>&#160;</div><div class="line"><a name="l02432"></a><span class="lineno"> 2432</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l02433"></a><span class="lineno"> 2433</span>&#160; <span class="comment">// Implementation of Handler</span></div><div class="line"><a name="l02434"></a><span class="lineno"> 2434</span>&#160; <span class="keywordtype">bool</span> Null() { <span class="keyword">new</span> (stack_.template Push&lt;ValueType&gt;()) ValueType(); <span class="keywordflow">return</span> <span class="keyword">true</span>; }</div><div class="line"><a name="l02435"></a><span class="lineno"> 2435</span>&#160; <span class="keywordtype">bool</span> Bool(<span class="keywordtype">bool</span> b) { <span class="keyword">new</span> (stack_.template Push&lt;ValueType&gt;()) ValueType(b); <span class="keywordflow">return</span> <span class="keyword">true</span>; }</div><div class="line"><a name="l02436"></a><span class="lineno"> 2436</span>&#160; <span class="keywordtype">bool</span> Int(<span class="keywordtype">int</span> i) { <span class="keyword">new</span> (stack_.template Push&lt;ValueType&gt;()) ValueType(i); <span class="keywordflow">return</span> <span class="keyword">true</span>; }</div><div class="line"><a name="l02437"></a><span class="lineno"> 2437</span>&#160; <span class="keywordtype">bool</span> Uint(<span class="keywordtype">unsigned</span> i) { <span class="keyword">new</span> (stack_.template Push&lt;ValueType&gt;()) ValueType(i); <span class="keywordflow">return</span> <span class="keyword">true</span>; }</div><div class="line"><a name="l02438"></a><span class="lineno"> 2438</span>&#160; <span class="keywordtype">bool</span> Int64(int64_t i) { <span class="keyword">new</span> (stack_.template Push&lt;ValueType&gt;()) ValueType(i); <span class="keywordflow">return</span> <span class="keyword">true</span>; }</div><div class="line"><a name="l02439"></a><span class="lineno"> 2439</span>&#160; <span class="keywordtype">bool</span> Uint64(uint64_t i) { <span class="keyword">new</span> (stack_.template Push&lt;ValueType&gt;()) ValueType(i); <span class="keywordflow">return</span> <span class="keyword">true</span>; }</div><div class="line"><a name="l02440"></a><span class="lineno"> 2440</span>&#160; <span class="keywordtype">bool</span> Double(<span class="keywordtype">double</span> d) { <span class="keyword">new</span> (stack_.template Push&lt;ValueType&gt;()) ValueType(d); <span class="keywordflow">return</span> <span class="keyword">true</span>; }</div><div class="line"><a name="l02441"></a><span class="lineno"> 2441</span>&#160;</div><div class="line"><a name="l02442"></a><span class="lineno"> 2442</span>&#160; <span class="keywordtype">bool</span> RawNumber(<span class="keyword">const</span> Ch* str, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> length, <span class="keywordtype">bool</span> copy) { </div><div class="line"><a name="l02443"></a><span class="lineno"> 2443</span>&#160; <span class="keywordflow">if</span> (copy) </div><div class="line"><a name="l02444"></a><span class="lineno"> 2444</span>&#160; <span class="keyword">new</span> (stack_.template Push&lt;ValueType&gt;()) ValueType(str, length, GetAllocator());</div><div class="line"><a name="l02445"></a><span class="lineno"> 2445</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l02446"></a><span class="lineno"> 2446</span>&#160; <span class="keyword">new</span> (stack_.template Push&lt;ValueType&gt;()) ValueType(str, length);</div><div class="line"><a name="l02447"></a><span class="lineno"> 2447</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l02448"></a><span class="lineno"> 2448</span>&#160; }</div><div class="line"><a name="l02449"></a><span class="lineno"> 2449</span>&#160;</div><div class="line"><a name="l02450"></a><span class="lineno"> 2450</span>&#160; <span class="keywordtype">bool</span> String(<span class="keyword">const</span> Ch* str, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> length, <span class="keywordtype">bool</span> copy) { </div><div class="line"><a name="l02451"></a><span class="lineno"> 2451</span>&#160; <span class="keywordflow">if</span> (copy) </div><div class="line"><a name="l02452"></a><span class="lineno"> 2452</span>&#160; <span class="keyword">new</span> (stack_.template Push&lt;ValueType&gt;()) ValueType(str, length, GetAllocator());</div><div class="line"><a name="l02453"></a><span class="lineno"> 2453</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l02454"></a><span class="lineno"> 2454</span>&#160; <span class="keyword">new</span> (stack_.template Push&lt;ValueType&gt;()) ValueType(str, length);</div><div class="line"><a name="l02455"></a><span class="lineno"> 2455</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l02456"></a><span class="lineno"> 2456</span>&#160; }</div><div class="line"><a name="l02457"></a><span class="lineno"> 2457</span>&#160;</div><div class="line"><a name="l02458"></a><span class="lineno"> 2458</span>&#160; <span class="keywordtype">bool</span> StartObject() { <span class="keyword">new</span> (stack_.template Push&lt;ValueType&gt;()) ValueType(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4acf030b422a32c3647c7c5973bd4dd0a9">kObjectType</a>); <span class="keywordflow">return</span> <span class="keyword">true</span>; }</div><div class="line"><a name="l02459"></a><span class="lineno"> 2459</span>&#160; </div><div class="line"><a name="l02460"></a><span class="lineno"> 2460</span>&#160; <span class="keywordtype">bool</span> Key(<span class="keyword">const</span> Ch* str, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> length, <span class="keywordtype">bool</span> copy) { <span class="keywordflow">return</span> String(str, length, copy); }</div><div class="line"><a name="l02461"></a><span class="lineno"> 2461</span>&#160;</div><div class="line"><a name="l02462"></a><span class="lineno"> 2462</span>&#160; <span class="keywordtype">bool</span> EndObject(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> memberCount) {</div><div class="line"><a name="l02463"></a><span class="lineno"> 2463</span>&#160; <span class="keyword">typename</span> <a class="code" href="structrapidjson_1_1_generic_member.html">ValueType::Member</a>* members = stack_.template Pop&lt;typename ValueType::Member&gt;(memberCount);</div><div class="line"><a name="l02464"></a><span class="lineno"> 2464</span>&#160; stack_.template Top&lt;ValueType&gt;()-&gt;SetObjectRaw(members, memberCount, GetAllocator());</div><div class="line"><a name="l02465"></a><span class="lineno"> 2465</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l02466"></a><span class="lineno"> 2466</span>&#160; }</div><div class="line"><a name="l02467"></a><span class="lineno"> 2467</span>&#160;</div><div class="line"><a name="l02468"></a><span class="lineno"> 2468</span>&#160; <span class="keywordtype">bool</span> StartArray() { <span class="keyword">new</span> (stack_.template Push&lt;ValueType&gt;()) ValueType(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a058c622e1e7d59419ae58b895cbce468">kArrayType</a>); <span class="keywordflow">return</span> <span class="keyword">true</span>; }</div><div class="line"><a name="l02469"></a><span class="lineno"> 2469</span>&#160; </div><div class="line"><a name="l02470"></a><span class="lineno"> 2470</span>&#160; <span class="keywordtype">bool</span> EndArray(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> elementCount) {</div><div class="line"><a name="l02471"></a><span class="lineno"> 2471</span>&#160; ValueType* elements = stack_.template Pop&lt;ValueType&gt;(elementCount);</div><div class="line"><a name="l02472"></a><span class="lineno"> 2472</span>&#160; stack_.template Top&lt;ValueType&gt;()-&gt;SetArrayRaw(elements, elementCount, GetAllocator());</div><div class="line"><a name="l02473"></a><span class="lineno"> 2473</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l02474"></a><span class="lineno"> 2474</span>&#160; }</div><div class="line"><a name="l02475"></a><span class="lineno"> 2475</span>&#160;</div><div class="line"><a name="l02476"></a><span class="lineno"> 2476</span>&#160;<span class="keyword">private</span>:<span class="comment"></span></div><div class="line"><a name="l02477"></a><span class="lineno"> 2477</span>&#160;<span class="comment"> //! Prohibit copying</span></div><div class="line"><a name="l02478"></a><span class="lineno"> 2478</span>&#160;<span class="comment"></span> <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>&amp;);<span class="comment"></span></div><div class="line"><a name="l02479"></a><span class="lineno"> 2479</span>&#160;<span class="comment"> //! Prohibit assignment</span></div><div class="line"><a name="l02480"></a><span class="lineno"> 2480</span>&#160;<span class="comment"></span> <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>&amp; operator=(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>&amp;);</div><div class="line"><a name="l02481"></a><span class="lineno"> 2481</span>&#160;</div><div class="line"><a name="l02482"></a><span class="lineno"> 2482</span>&#160; <span class="keywordtype">void</span> ClearStack() {</div><div class="line"><a name="l02483"></a><span class="lineno"> 2483</span>&#160; <span class="keywordflow">if</span> (Allocator::kNeedFree)</div><div class="line"><a name="l02484"></a><span class="lineno"> 2484</span>&#160; <span class="keywordflow">while</span> (stack_.GetSize() &gt; 0) <span class="comment">// Here assumes all elements in stack array are GenericValue (Member is actually 2 GenericValue objects)</span></div><div class="line"><a name="l02485"></a><span class="lineno"> 2485</span>&#160; (stack_.template Pop&lt;ValueType&gt;(1))-&gt;~ValueType();</div><div class="line"><a name="l02486"></a><span class="lineno"> 2486</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l02487"></a><span class="lineno"> 2487</span>&#160; stack_.Clear();</div><div class="line"><a name="l02488"></a><span class="lineno"> 2488</span>&#160; stack_.ShrinkToFit();</div><div class="line"><a name="l02489"></a><span class="lineno"> 2489</span>&#160; }</div><div class="line"><a name="l02490"></a><span class="lineno"> 2490</span>&#160;</div><div class="line"><a name="l02491"></a><span class="lineno"> 2491</span>&#160; <span class="keywordtype">void</span> Destroy() {</div><div class="line"><a name="l02492"></a><span class="lineno"> 2492</span>&#160; <a class="code" href="rapidjson_8h.html#a52c941c3fdd646527cdcd42aa846a28a">RAPIDJSON_DELETE</a>(ownAllocator_);</div><div class="line"><a name="l02493"></a><span class="lineno"> 2493</span>&#160; }</div><div class="line"><a name="l02494"></a><span class="lineno"> 2494</span>&#160;</div><div class="line"><a name="l02495"></a><span class="lineno"> 2495</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">size_t</span> kDefaultStackCapacity = 1024;</div><div class="line"><a name="l02496"></a><span class="lineno"> 2496</span>&#160; Allocator* allocator_;</div><div class="line"><a name="l02497"></a><span class="lineno"> 2497</span>&#160; Allocator* ownAllocator_;</div><div class="line"><a name="l02498"></a><span class="lineno"> 2498</span>&#160; internal::Stack&lt;StackAllocator&gt; stack_;</div><div class="line"><a name="l02499"></a><span class="lineno"> 2499</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#structrapidjson_1_1_parse_result">ParseResult</a> parseResult_;</div><div class="line"><a name="l02500"></a><span class="lineno"> 2500</span>&#160;};</div><div class="line"><a name="l02501"></a><span class="lineno"> 2501</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02502"></a><span class="lineno"> 2502</span>&#160;<span class="comment">//! GenericDocument with UTF8 encoding</span></div><div class="line"><a name="l02503"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#ace11b5b575baf1cccd5ba5f8586dcdc8"> 2503</a></span>&#160;<span class="comment"></span><span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument&lt;UTF8&lt;&gt;</a> &gt; <a class="code" href="namespacerapidjson.html#ace11b5b575baf1cccd5ba5f8586dcdc8">Document</a>;</div><div class="line"><a name="l02504"></a><span class="lineno"> 2504</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02505"></a><span class="lineno"> 2505</span>&#160;<span class="comment">//! Helper class for accessing Value of array type.</span></div><div class="line"><a name="l02506"></a><span class="lineno"> 2506</span>&#160;<span class="comment"></span><span class="comment">/*!</span></div><div class="line"><a name="l02507"></a><span class="lineno"> 2507</span>&#160;<span class="comment"> Instance of this helper class is obtained by \c GenericValue::GetArray().</span></div><div class="line"><a name="l02508"></a><span class="lineno"> 2508</span>&#160;<span class="comment"> In addition to all APIs for array type, it provides range-based for loop if \c RAPIDJSON_HAS_CXX11_RANGE_FOR=1.</span></div><div class="line"><a name="l02509"></a><span class="lineno"> 2509</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l02510"></a><span class="lineno"> 2510</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">bool</span> Const, <span class="keyword">typename</span> ValueT&gt;</div><div class="line"><a name="l02511"></a><span class="lineno"> 2511</span>&#160;<span class="keyword">class </span><a class="code" href="classrapidjson_1_1_generic_array.html">GenericArray</a> {</div><div class="line"><a name="l02512"></a><span class="lineno"> 2512</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l02513"></a><span class="lineno"> 2513</span>&#160; <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_array.html">GenericArray&lt;true, ValueT&gt;</a> ConstArray;</div><div class="line"><a name="l02514"></a><span class="lineno"> 2514</span>&#160; <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_array.html">GenericArray&lt;false, ValueT&gt;</a> Array;</div><div class="line"><a name="l02515"></a><span class="lineno"> 2515</span>&#160; <span class="keyword">typedef</span> ValueT PlainType;</div><div class="line"><a name="l02516"></a><span class="lineno"> 2516</span>&#160; <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">internal::MaybeAddConst&lt;Const,PlainType&gt;::Type</a> ValueType;</div><div class="line"><a name="l02517"></a><span class="lineno"> 2517</span>&#160; <span class="keyword">typedef</span> ValueType* ValueIterator; <span class="comment">// This may be const or non-const iterator</span></div><div class="line"><a name="l02518"></a><span class="lineno"> 2518</span>&#160; <span class="keyword">typedef</span> <span class="keyword">const</span> ValueT* ConstValueIterator;</div><div class="line"><a name="l02519"></a><span class="lineno"> 2519</span>&#160; <span class="keyword">typedef</span> <span class="keyword">typename</span> ValueType::AllocatorType AllocatorType;</div><div class="line"><a name="l02520"></a><span class="lineno"> 2520</span>&#160; <span class="keyword">typedef</span> <span class="keyword">typename</span> ValueType::StringRefType StringRefType;</div><div class="line"><a name="l02521"></a><span class="lineno"> 2521</span>&#160;</div><div class="line"><a name="l02522"></a><span class="lineno"> 2522</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span>, <span class="keyword">typename</span>&gt;</div><div class="line"><a name="l02523"></a><span class="lineno"> 2523</span>&#160; <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>;</div><div class="line"><a name="l02524"></a><span class="lineno"> 2524</span>&#160;</div><div class="line"><a name="l02525"></a><span class="lineno"> 2525</span>&#160; <a class="code" href="classrapidjson_1_1_generic_array.html">GenericArray</a>(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_array.html">GenericArray</a>&amp; rhs) : value_(rhs.value_) {}</div><div class="line"><a name="l02526"></a><span class="lineno"> 2526</span>&#160; <a class="code" href="classrapidjson_1_1_generic_array.html">GenericArray</a>&amp; operator=(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_array.html">GenericArray</a>&amp; rhs) { value_ = rhs.value_; <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l02527"></a><span class="lineno"> 2527</span>&#160; ~<a class="code" href="classrapidjson_1_1_generic_array.html">GenericArray</a>() {}</div><div class="line"><a name="l02528"></a><span class="lineno"> 2528</span>&#160;</div><div class="line"><a name="l02529"></a><span class="lineno"> 2529</span>&#160; <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> Size()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.Size(); }</div><div class="line"><a name="l02530"></a><span class="lineno"> 2530</span>&#160; <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> Capacity()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.Capacity(); }</div><div class="line"><a name="l02531"></a><span class="lineno"> 2531</span>&#160; <span class="keywordtype">bool</span> Empty()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.Empty(); }</div><div class="line"><a name="l02532"></a><span class="lineno"> 2532</span>&#160; <span class="keywordtype">void</span> Clear()<span class="keyword"> const </span>{ value_.Clear(); }</div><div class="line"><a name="l02533"></a><span class="lineno"> 2533</span>&#160; ValueType&amp; operator[](<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> index)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_[index]; }</div><div class="line"><a name="l02534"></a><span class="lineno"> 2534</span>&#160; ValueIterator Begin()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.Begin(); }</div><div class="line"><a name="l02535"></a><span class="lineno"> 2535</span>&#160; ValueIterator End()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.End(); }</div><div class="line"><a name="l02536"></a><span class="lineno"> 2536</span>&#160; <a class="code" href="classrapidjson_1_1_generic_array.html">GenericArray</a> Reserve(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> newCapacity, AllocatorType &amp;allocator)<span class="keyword"> const </span>{ value_.Reserve(newCapacity, allocator); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l02537"></a><span class="lineno"> 2537</span>&#160; <a class="code" href="classrapidjson_1_1_generic_array.html">GenericArray</a> PushBack(ValueType&amp; value, AllocatorType&amp; allocator)<span class="keyword"> const </span>{ value_.PushBack(value, allocator); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l02538"></a><span class="lineno"> 2538</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l02539"></a><span class="lineno"> 2539</span>&#160; <a class="code" href="classrapidjson_1_1_generic_array.html">GenericArray</a> PushBack(ValueType&amp;&amp; value, AllocatorType&amp; allocator)<span class="keyword"> const </span>{ value_.PushBack(value, allocator); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l02540"></a><span class="lineno"> 2540</span>&#160;<span class="preprocessor">#endif // RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l02541"></a><span class="lineno"> 2541</span>&#160; <a class="code" href="classrapidjson_1_1_generic_array.html">GenericArray</a> PushBack(StringRefType value, AllocatorType&amp; allocator)<span class="keyword"> const </span>{ value_.PushBack(value, allocator); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l02542"></a><span class="lineno"> 2542</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt; RAPIDJSON_DISABLEIF_RETURN((internal::OrExpr&lt;internal::IsPointer&lt;T&gt;, internal::IsGenericValue&lt;T&gt; &gt;), (<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_array.html">GenericArray</a>&amp;)) PushBack(T value, AllocatorType&amp; allocator)<span class="keyword"> const </span>{ value_.PushBack(value, allocator); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l02543"></a><span class="lineno"> 2543</span>&#160; <a class="code" href="classrapidjson_1_1_generic_array.html">GenericArray</a> PopBack()<span class="keyword"> const </span>{ value_.PopBack(); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l02544"></a><span class="lineno"> 2544</span>&#160; ValueIterator Erase(ConstValueIterator pos)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.Erase(pos); }</div><div class="line"><a name="l02545"></a><span class="lineno"> 2545</span>&#160; ValueIterator Erase(ConstValueIterator first, ConstValueIterator last)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.Erase(first, last); }</div><div class="line"><a name="l02546"></a><span class="lineno"> 2546</span>&#160;</div><div class="line"><a name="l02547"></a><span class="lineno"> 2547</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_CXX11_RANGE_FOR</span></div><div class="line"><a name="l02548"></a><span class="lineno"> 2548</span>&#160; ValueIterator begin()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.Begin(); }</div><div class="line"><a name="l02549"></a><span class="lineno"> 2549</span>&#160; ValueIterator end()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.End(); }</div><div class="line"><a name="l02550"></a><span class="lineno"> 2550</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02551"></a><span class="lineno"> 2551</span>&#160;</div><div class="line"><a name="l02552"></a><span class="lineno"> 2552</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l02553"></a><span class="lineno"> 2553</span>&#160; <a class="code" href="classrapidjson_1_1_generic_array.html">GenericArray</a>();</div><div class="line"><a name="l02554"></a><span class="lineno"> 2554</span>&#160; <a class="code" href="classrapidjson_1_1_generic_array.html">GenericArray</a>(ValueType&amp; value) : value_(value) {}</div><div class="line"><a name="l02555"></a><span class="lineno"> 2555</span>&#160; ValueType&amp; value_;</div><div class="line"><a name="l02556"></a><span class="lineno"> 2556</span>&#160;};</div><div class="line"><a name="l02557"></a><span class="lineno"> 2557</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02558"></a><span class="lineno"> 2558</span>&#160;<span class="comment">//! Helper class for accessing Value of object type.</span></div><div class="line"><a name="l02559"></a><span class="lineno"> 2559</span>&#160;<span class="comment"></span><span class="comment">/*!</span></div><div class="line"><a name="l02560"></a><span class="lineno"> 2560</span>&#160;<span class="comment"> Instance of this helper class is obtained by \c GenericValue::GetObject().</span></div><div class="line"><a name="l02561"></a><span class="lineno"> 2561</span>&#160;<span class="comment"> In addition to all APIs for array type, it provides range-based for loop if \c RAPIDJSON_HAS_CXX11_RANGE_FOR=1.</span></div><div class="line"><a name="l02562"></a><span class="lineno"> 2562</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l02563"></a><span class="lineno"> 2563</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">bool</span> Const, <span class="keyword">typename</span> ValueT&gt;</div><div class="line"><a name="l02564"></a><span class="lineno"> 2564</span>&#160;<span class="keyword">class </span><a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject</a> {</div><div class="line"><a name="l02565"></a><span class="lineno"> 2565</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l02566"></a><span class="lineno"> 2566</span>&#160; <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject&lt;true, ValueT&gt;</a> ConstObject;</div><div class="line"><a name="l02567"></a><span class="lineno"> 2567</span>&#160; <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject&lt;false, ValueT&gt;</a> Object;</div><div class="line"><a name="l02568"></a><span class="lineno"> 2568</span>&#160; <span class="keyword">typedef</span> ValueT PlainType;</div><div class="line"><a name="l02569"></a><span class="lineno"> 2569</span>&#160; <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">internal::MaybeAddConst&lt;Const,PlainType&gt;::Type</a> ValueType;</div><div class="line"><a name="l02570"></a><span class="lineno"> 2570</span>&#160; <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">GenericMemberIterator&lt;Const, typename ValueT::EncodingType, typename ValueT::AllocatorType&gt;</a> MemberIterator; <span class="comment">// This may be const or non-const iterator</span></div><div class="line"><a name="l02571"></a><span class="lineno"> 2571</span>&#160; <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">GenericMemberIterator&lt;true, typename ValueT::EncodingType, typename ValueT::AllocatorType&gt;</a> ConstMemberIterator;</div><div class="line"><a name="l02572"></a><span class="lineno"> 2572</span>&#160; <span class="keyword">typedef</span> <span class="keyword">typename</span> ValueType::AllocatorType AllocatorType;</div><div class="line"><a name="l02573"></a><span class="lineno"> 2573</span>&#160; <span class="keyword">typedef</span> <span class="keyword">typename</span> ValueType::StringRefType StringRefType;</div><div class="line"><a name="l02574"></a><span class="lineno"> 2574</span>&#160; <span class="keyword">typedef</span> <span class="keyword">typename</span> ValueType::EncodingType EncodingType;</div><div class="line"><a name="l02575"></a><span class="lineno"> 2575</span>&#160; <span class="keyword">typedef</span> <span class="keyword">typename</span> ValueType::Ch Ch;</div><div class="line"><a name="l02576"></a><span class="lineno"> 2576</span>&#160;</div><div class="line"><a name="l02577"></a><span class="lineno"> 2577</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span>, <span class="keyword">typename</span>&gt;</div><div class="line"><a name="l02578"></a><span class="lineno"> 2578</span>&#160; <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>;</div><div class="line"><a name="l02579"></a><span class="lineno"> 2579</span>&#160;</div><div class="line"><a name="l02580"></a><span class="lineno"> 2580</span>&#160; <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject</a>(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject</a>&amp; rhs) : value_(rhs.value_) {}</div><div class="line"><a name="l02581"></a><span class="lineno"> 2581</span>&#160; <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject</a>&amp; operator=(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject</a>&amp; rhs) { value_ = rhs.value_; <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l02582"></a><span class="lineno"> 2582</span>&#160; ~<a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject</a>() {}</div><div class="line"><a name="l02583"></a><span class="lineno"> 2583</span>&#160;</div><div class="line"><a name="l02584"></a><span class="lineno"> 2584</span>&#160; <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> MemberCount()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.MemberCount(); }</div><div class="line"><a name="l02585"></a><span class="lineno"> 2585</span>&#160; <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> MemberCapacity()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.MemberCapacity(); }</div><div class="line"><a name="l02586"></a><span class="lineno"> 2586</span>&#160; <span class="keywordtype">bool</span> ObjectEmpty()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.ObjectEmpty(); }</div><div class="line"><a name="l02587"></a><span class="lineno"> 2587</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt; ValueType&amp; operator[](T* name)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_[name]; }</div><div class="line"><a name="l02588"></a><span class="lineno"> 2588</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> SourceAllocator&gt; ValueType&amp; operator[](<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue&lt;EncodingType, SourceAllocator&gt;</a>&amp; name)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_[name]; }</div><div class="line"><a name="l02589"></a><span class="lineno"> 2589</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l02590"></a><span class="lineno"> 2590</span>&#160; ValueType&amp; operator[](<span class="keyword">const</span> std::basic_string&lt;Ch&gt;&amp; name)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_[name]; }</div><div class="line"><a name="l02591"></a><span class="lineno"> 2591</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02592"></a><span class="lineno"> 2592</span>&#160; MemberIterator MemberBegin()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.MemberBegin(); }</div><div class="line"><a name="l02593"></a><span class="lineno"> 2593</span>&#160; MemberIterator MemberEnd()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.MemberEnd(); }</div><div class="line"><a name="l02594"></a><span class="lineno"> 2594</span>&#160; <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject</a> MemberReserve(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> newCapacity, AllocatorType &amp;allocator)<span class="keyword"> const </span>{ value_.MemberReserve(newCapacity, allocator); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l02595"></a><span class="lineno"> 2595</span>&#160; <span class="keywordtype">bool</span> HasMember(<span class="keyword">const</span> Ch* name)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.HasMember(name); }</div><div class="line"><a name="l02596"></a><span class="lineno"> 2596</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l02597"></a><span class="lineno"> 2597</span>&#160; <span class="keywordtype">bool</span> HasMember(<span class="keyword">const</span> std::basic_string&lt;Ch&gt;&amp; name)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.HasMember(name); }</div><div class="line"><a name="l02598"></a><span class="lineno"> 2598</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02599"></a><span class="lineno"> 2599</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> SourceAllocator&gt; <span class="keywordtype">bool</span> HasMember(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue&lt;EncodingType, SourceAllocator&gt;</a>&amp; name)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.HasMember(name); }</div><div class="line"><a name="l02600"></a><span class="lineno"> 2600</span>&#160; MemberIterator FindMember(<span class="keyword">const</span> Ch* name)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.FindMember(name); }</div><div class="line"><a name="l02601"></a><span class="lineno"> 2601</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> SourceAllocator&gt; MemberIterator FindMember(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue&lt;EncodingType, SourceAllocator&gt;</a>&amp; name)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.FindMember(name); }</div><div class="line"><a name="l02602"></a><span class="lineno"> 2602</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l02603"></a><span class="lineno"> 2603</span>&#160; MemberIterator FindMember(<span class="keyword">const</span> std::basic_string&lt;Ch&gt;&amp; name)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.FindMember(name); }</div><div class="line"><a name="l02604"></a><span class="lineno"> 2604</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02605"></a><span class="lineno"> 2605</span>&#160; <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject</a> AddMember(ValueType&amp; name, ValueType&amp; value, AllocatorType&amp; allocator)<span class="keyword"> const </span>{ value_.AddMember(name, value, allocator); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l02606"></a><span class="lineno"> 2606</span>&#160; <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject</a> AddMember(ValueType&amp; name, StringRefType value, AllocatorType&amp; allocator)<span class="keyword"> const </span>{ value_.AddMember(name, value, allocator); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l02607"></a><span class="lineno"> 2607</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l02608"></a><span class="lineno"> 2608</span>&#160; <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject</a> AddMember(ValueType&amp; name, std::basic_string&lt;Ch&gt;&amp; value, AllocatorType&amp; allocator)<span class="keyword"> const </span>{ value_.AddMember(name, value, allocator); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l02609"></a><span class="lineno"> 2609</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02610"></a><span class="lineno"> 2610</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt; RAPIDJSON_DISABLEIF_RETURN((internal::OrExpr&lt;internal::IsPointer&lt;T&gt;, internal::IsGenericValue&lt;T&gt; &gt;), (ValueType&amp;)) AddMember(ValueType&amp; name, T value, AllocatorType&amp; allocator)<span class="keyword"> const </span>{ value_.AddMember(name, value, allocator); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l02611"></a><span class="lineno"> 2611</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l02612"></a><span class="lineno"> 2612</span>&#160; <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject</a> AddMember(ValueType&amp;&amp; name, ValueType&amp;&amp; value, AllocatorType&amp; allocator)<span class="keyword"> const </span>{ value_.AddMember(name, value, allocator); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l02613"></a><span class="lineno"> 2613</span>&#160; <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject</a> AddMember(ValueType&amp;&amp; name, ValueType&amp; value, AllocatorType&amp; allocator)<span class="keyword"> const </span>{ value_.AddMember(name, value, allocator); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l02614"></a><span class="lineno"> 2614</span>&#160; <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject</a> AddMember(ValueType&amp; name, ValueType&amp;&amp; value, AllocatorType&amp; allocator)<span class="keyword"> const </span>{ value_.AddMember(name, value, allocator); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l02615"></a><span class="lineno"> 2615</span>&#160; <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject</a> AddMember(StringRefType name, ValueType&amp;&amp; value, AllocatorType&amp; allocator)<span class="keyword"> const </span>{ value_.AddMember(name, value, allocator); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l02616"></a><span class="lineno"> 2616</span>&#160;<span class="preprocessor">#endif // RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l02617"></a><span class="lineno"> 2617</span>&#160; <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject</a> AddMember(StringRefType name, ValueType&amp; value, AllocatorType&amp; allocator)<span class="keyword"> const </span>{ value_.AddMember(name, value, allocator); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l02618"></a><span class="lineno"> 2618</span>&#160; <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject</a> AddMember(StringRefType name, StringRefType value, AllocatorType&amp; allocator)<span class="keyword"> const </span>{ value_.AddMember(name, value, allocator); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l02619"></a><span class="lineno"> 2619</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt; RAPIDJSON_DISABLEIF_RETURN((internal::OrExpr&lt;internal::IsPointer&lt;T&gt;, internal::IsGenericValue&lt;T&gt; &gt;), (<a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject</a>)) AddMember(StringRefType name, T value, AllocatorType&amp; allocator)<span class="keyword"> const </span>{ value_.AddMember(name, value, allocator); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l02620"></a><span class="lineno"> 2620</span>&#160; <span class="keywordtype">void</span> RemoveAllMembers() { value_.RemoveAllMembers(); }</div><div class="line"><a name="l02621"></a><span class="lineno"> 2621</span>&#160; <span class="keywordtype">bool</span> RemoveMember(<span class="keyword">const</span> Ch* name)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.RemoveMember(name); }</div><div class="line"><a name="l02622"></a><span class="lineno"> 2622</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l02623"></a><span class="lineno"> 2623</span>&#160; <span class="keywordtype">bool</span> RemoveMember(<span class="keyword">const</span> std::basic_string&lt;Ch&gt;&amp; name)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.RemoveMember(name); }</div><div class="line"><a name="l02624"></a><span class="lineno"> 2624</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02625"></a><span class="lineno"> 2625</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> SourceAllocator&gt; <span class="keywordtype">bool</span> RemoveMember(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue&lt;EncodingType, SourceAllocator&gt;</a>&amp; name)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.RemoveMember(name); }</div><div class="line"><a name="l02626"></a><span class="lineno"> 2626</span>&#160; MemberIterator RemoveMember(MemberIterator m)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.RemoveMember(m); }</div><div class="line"><a name="l02627"></a><span class="lineno"> 2627</span>&#160; MemberIterator EraseMember(ConstMemberIterator pos)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.EraseMember(pos); }</div><div class="line"><a name="l02628"></a><span class="lineno"> 2628</span>&#160; MemberIterator EraseMember(ConstMemberIterator first, ConstMemberIterator last)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.EraseMember(first, last); }</div><div class="line"><a name="l02629"></a><span class="lineno"> 2629</span>&#160; <span class="keywordtype">bool</span> EraseMember(<span class="keyword">const</span> Ch* name)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.EraseMember(name); }</div><div class="line"><a name="l02630"></a><span class="lineno"> 2630</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l02631"></a><span class="lineno"> 2631</span>&#160; <span class="keywordtype">bool</span> EraseMember(<span class="keyword">const</span> std::basic_string&lt;Ch&gt;&amp; name)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> EraseMember(ValueType(<a class="code" href="namespacerapidjson.html#af94951529a5d51e8c4e6e770bb707c1f">StringRef</a>(name))); }</div><div class="line"><a name="l02632"></a><span class="lineno"> 2632</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02633"></a><span class="lineno"> 2633</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> SourceAllocator&gt; <span class="keywordtype">bool</span> EraseMember(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue&lt;EncodingType, SourceAllocator&gt;</a>&amp; name)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.EraseMember(name); }</div><div class="line"><a name="l02634"></a><span class="lineno"> 2634</span>&#160;</div><div class="line"><a name="l02635"></a><span class="lineno"> 2635</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_CXX11_RANGE_FOR</span></div><div class="line"><a name="l02636"></a><span class="lineno"> 2636</span>&#160; MemberIterator begin()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.MemberBegin(); }</div><div class="line"><a name="l02637"></a><span class="lineno"> 2637</span>&#160; MemberIterator end()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.MemberEnd(); }</div><div class="line"><a name="l02638"></a><span class="lineno"> 2638</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02639"></a><span class="lineno"> 2639</span>&#160;</div><div class="line"><a name="l02640"></a><span class="lineno"> 2640</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l02641"></a><span class="lineno"> 2641</span>&#160; <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject</a>();</div><div class="line"><a name="l02642"></a><span class="lineno"> 2642</span>&#160; <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject</a>(ValueType&amp; value) : value_(value) {}</div><div class="line"><a name="l02643"></a><span class="lineno"> 2643</span>&#160; ValueType&amp; value_;</div><div class="line"><a name="l02644"></a><span class="lineno"> 2644</span>&#160;};</div><div class="line"><a name="l02645"></a><span class="lineno"> 2645</span>&#160;</div><div class="line"><a name="l02646"></a><span class="lineno"> 2646</span>&#160;RAPIDJSON_NAMESPACE_END</div><div class="line"><a name="l02647"></a><span class="lineno"> 2647</span>&#160;RAPIDJSON_DIAG_POP</div><div class="line"><a name="l02648"></a><span class="lineno"> 2648</span>&#160;</div><div class="line"><a name="l02649"></a><span class="lineno"> 2649</span>&#160;<span class="preprocessor">#endif // RAPIDJSON_DOCUMENT_H_</span></div><div class="ttc" id="classrapidjson_1_1_generic_document_html_a41bbec044c421e870a9d355075d741bc"><div class="ttname"><a href="classrapidjson_1_1_generic_document.html#a41bbec044c421e870a9d355075d741bc">rapidjson::GenericDocument::ValueType</a></div><div class="ttdeci">GenericValue&lt; Encoding, Allocator &gt; ValueType</div><div class="ttdoc">Value type of the document. </div><div class="ttdef"><b>Definition:</b> document.h:2124</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_a4a8060a42b7953a2981ad892180ca5a6"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a4a8060a42b7953a2981ad892180ca5a6">rapidjson::GenericValue::GenericValue</a></div><div class="ttdeci">GenericValue(unsigned u) RAPIDJSON_NOEXCEPT</div><div class="ttdoc">Constructor for unsigned value. </div><div class="ttdef"><b>Definition:</b> document.h:715</div></div>
-<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4a80d9f25b083abce45edbfdd3ba006c8e"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a80d9f25b083abce45edbfdd3ba006c8e">rapidjson::kTrueType</a></div><div class="ttdoc">true </div><div class="ttdef"><b>Definition:</b> rapidjson.h:634</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_a916f443e02f9379d8fbde49a4d440f61"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a916f443e02f9379d8fbde49a4d440f61">rapidjson::GenericValue::Erase</a></div><div class="ttdeci">ValueIterator Erase(ConstValueIterator first, ConstValueIterator last)</div><div class="ttdoc">Remove elements in the range [first, last) of the array. </div><div class="ttdef"><b>Definition:</b> document.h:1711</div></div>
-<div class="ttc" id="structrapidjson_1_1_generic_value_1_1_number_1_1_i_html"><div class="ttname"><a href="structrapidjson_1_1_generic_value_1_1_number_1_1_i.html">rapidjson::GenericValue::Number::I</a></div><div class="ttdef"><b>Definition:</b> document.h:1988</div></div>
+<a href="document_8h.html">浏览该文件的文档.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">// Tencent is pleased to support the open source community by making RapidJSON available.</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">// </span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">// Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved.</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment">// Licensed under the MIT License (the &quot;License&quot;); you may not use this file except</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment">// in compliance with the License. You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment">// http://opensource.org/licenses/MIT</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment">// Unless required by applicable law or agreed to in writing, software distributed </span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment">// under the License is distributed on an &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR </span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment">// CONDITIONS OF ANY KIND, either express or implied. See the License for the </span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment">// specific language governing permissions and limitations under the License.</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;</div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#ifndef RAPIDJSON_DOCUMENT_H_</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#define RAPIDJSON_DOCUMENT_H_</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment">/*! \file document.h */</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="reader_8h.html">reader.h</a>&quot;</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="preprocessor">#include &quot;internal/meta.h&quot;</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="preprocessor">#include &quot;internal/strfunc.h&quot;</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#include &quot;memorystream.h&quot;</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#include &quot;encodedstream.h&quot;</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor">#include &lt;new&gt;</span> <span class="comment">// placement new</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#include &lt;limits&gt;</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;RAPIDJSON_DIAG_PUSH</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="preprocessor">#ifdef __clang__</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;RAPIDJSON_DIAG_OFF(padded)</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;RAPIDJSON_DIAG_OFF(<span class="keywordflow">switch</span>-<span class="keyword">enum</span>)</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;RAPIDJSON_DIAG_OFF(c++98-compat)</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="preprocessor">#elif defined(_MSC_VER)</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;RAPIDJSON_DIAG_OFF(4127) <span class="comment">// conditional expression is constant</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;RAPIDJSON_DIAG_OFF(4244) <span class="comment">// conversion from kXxxFlags to &#39;uint16_t&#39;, possible loss of data</span></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;<span class="preprocessor">#ifdef __GNUC__</span></div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;RAPIDJSON_DIAG_OFF(effc++)</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;<span class="preprocessor">#endif // __GNUC__</span></div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;<span class="preprocessor">#ifndef RAPIDJSON_NOMEMBERITERATORCLASS</span></div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;<span class="preprocessor">#include &lt;iterator&gt;</span> <span class="comment">// std::random_access_iterator_tag</span></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;<span class="preprocessor">#include &lt;utility&gt;</span> <span class="comment">// std::move</span></div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;RAPIDJSON_NAMESPACE_BEGIN</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;<span class="comment">// Forward declaration.</span></div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> Encoding, <span class="keyword">typename</span> Allocator&gt;</div><div class="line"><a name="l00054"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html"> 54</a></span>&#160;<span class="keyword">class </span><a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>;</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> Encoding, <span class="keyword">typename</span> Allocator, <span class="keyword">typename</span> StackAllocator&gt;</div><div class="line"><a name="l00057"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_document.html"> 57</a></span>&#160;<span class="keyword">class </span><a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>;</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;<span class="comment">//! Name-value pair in a JSON object value.</span></div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;<span class="comment"></span><span class="comment">/*!</span></div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;<span class="comment"> This class was internal to GenericValue. It used to be a inner struct.</span></div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;<span class="comment"> But a compiler (IBM XL C/C++ for AIX) have reported to have problem with that so it moved as a namespace scope struct.</span></div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;<span class="comment"> https://code.google.com/p/rapidjson/issues/detail?id=64</span></div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> Encoding, <span class="keyword">typename</span> Allocator&gt; </div><div class="line"><a name="l00066"></a><span class="lineno"><a class="line" href="structrapidjson_1_1_generic_member.html"> 66</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structrapidjson_1_1_generic_member.html">GenericMember</a> { </div><div class="line"><a name="l00067"></a><span class="lineno"><a class="line" href="structrapidjson_1_1_generic_member.html#ae820eaa74b415a9073f3f3855f6c6607"> 67</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue&lt;Encoding, Allocator&gt;</a> <a class="code" href="structrapidjson_1_1_generic_member.html#ae820eaa74b415a9073f3f3855f6c6607">name</a>; <span class="comment">//!&lt; name of member (must be a string)</span></div><div class="line"><a name="l00068"></a><span class="lineno"><a class="line" href="structrapidjson_1_1_generic_member.html#a8ffff2076e62d988a070a136da6ffca6"> 68</a></span>&#160;<span class="comment"></span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue&lt;Encoding, Allocator&gt;</a> <a class="code" href="structrapidjson_1_1_generic_member.html#a8ffff2076e62d988a070a136da6ffca6">value</a>; <span class="comment">//!&lt; value of member.</span></div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;<span class="comment"></span>};</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;<span class="comment"></span><span class="comment">// GenericMemberIterator</span></div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;<span class="preprocessor">#ifndef RAPIDJSON_NOMEMBERITERATORCLASS</span></div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;<span class="comment">//! (Constant) member iterator for a JSON object value</span></div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;<span class="comment"></span><span class="comment">/*!</span></div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160;<span class="comment"> \tparam Const Is this a constant iterator?</span></div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;<span class="comment"> \tparam Encoding Encoding of the value. (Even non-string values need to have the same encoding in a document)</span></div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;<span class="comment"> \tparam Allocator Allocator type for allocating memory of object, array and string.</span></div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;<span class="comment"> This class implements a Random Access Iterator for GenericMember elements</span></div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;<span class="comment"> of a GenericValue, see ISO/IEC 14882:2003(E) C++ standard, 24.1 [lib.iterator.requirements].</span></div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160;<span class="comment"> \note This iterator implementation is mainly intended to avoid implicit</span></div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160;<span class="comment"> conversions from iterator values to \c NULL,</span></div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;<span class="comment"> e.g. from GenericValue::FindMember.</span></div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;<span class="comment"> \note Define \c RAPIDJSON_NOMEMBERITERATORCLASS to fall back to a</span></div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160;<span class="comment"> pointer-based implementation, if your platform doesn&#39;t provide</span></div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;<span class="comment"> the C++ &lt;iterator&gt; header.</span></div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;<span class="comment"> \see GenericMember, GenericValue::MemberIterator, GenericValue::ConstMemberIterator</span></div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">bool</span> Const, <span class="keyword">typename</span> Encoding, <span class="keyword">typename</span> Allocator&gt;</div><div class="line"><a name="l00096"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_member_iterator.html"> 96</a></span>&#160;<span class="keyword">class </span><a class="code" href="classrapidjson_1_1_generic_member_iterator.html">GenericMemberIterator</a> {</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&lt;Encoding,Allocator&gt;;</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="keyword">template</span> &lt;<span class="keywordtype">bool</span>, <span class="keyword">typename</span>, <span class="keyword">typename</span>&gt; <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classrapidjson_1_1_generic_member_iterator.html">GenericMemberIterator</a>;</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160;</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keyword">typedef</span> <a class="code" href="structrapidjson_1_1_generic_member.html">GenericMember&lt;Encoding,Allocator&gt;</a> <a class="code" href="structrapidjson_1_1_generic_member.html">PlainType</a>;</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">internal::MaybeAddConst&lt;Const,PlainType&gt;::Type</a> ValueType;</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160;</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160;<span class="keyword">public</span>:<span class="comment"></span></div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160;<span class="comment"> //! Iterator type itself</span></div><div class="line"><a name="l00106"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_member_iterator.html#a37091c3dd8470486ef5188f3c1108653"> 106</a></span>&#160;<span class="comment"></span> <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">GenericMemberIterator</a> <a class="code" href="classrapidjson_1_1_generic_member_iterator.html#a37091c3dd8470486ef5188f3c1108653">Iterator</a>;<span class="comment"></span></div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160;<span class="comment"> //! Constant iterator type</span></div><div class="line"><a name="l00108"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_member_iterator.html#a61b9a9ba8a5917d90406532f104605cc"> 108</a></span>&#160;<span class="comment"></span> <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">GenericMemberIterator&lt;true,Encoding,Allocator&gt;</a> <a class="code" href="classrapidjson_1_1_generic_member_iterator.html#a61b9a9ba8a5917d90406532f104605cc">ConstIterator</a>;<span class="comment"></span></div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160;<span class="comment"> //! Non-constant iterator type</span></div><div class="line"><a name="l00110"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_member_iterator.html#a1a91868fa388664bb301061e3e24badb"> 110</a></span>&#160;<span class="comment"></span> <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">GenericMemberIterator&lt;false,Encoding,Allocator&gt;</a> <a class="code" href="classrapidjson_1_1_generic_member_iterator.html#a1a91868fa388664bb301061e3e24badb">NonConstIterator</a>;</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160;<span class="comment"> /** \name std::iterator_traits support */</span><span class="comment"></span></div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160;<span class="comment"> //@{</span></div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160;<span class="comment"></span> <span class="keyword">typedef</span> ValueType value_type;</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <span class="keyword">typedef</span> ValueType * pointer;</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="keyword">typedef</span> ValueType &amp; reference;</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <span class="keyword">typedef</span> std::ptrdiff_t difference_type;</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <span class="keyword">typedef</span> std::random_access_iterator_tag iterator_category;<span class="comment"></span></div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160;<span class="comment"> //@}</span></div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160;<span class="comment"> //! Pointer to (const) GenericMember</span></div><div class="line"><a name="l00122"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_member_iterator.html#aa9d53504374c7c6bdf46775482c5b107"> 122</a></span>&#160;<span class="comment"></span> <span class="keyword">typedef</span> pointer <a class="code" href="classrapidjson_1_1_generic_member_iterator.html#aa9d53504374c7c6bdf46775482c5b107">Pointer</a>;<span class="comment"></span></div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160;<span class="comment"> //! Reference to (const) GenericMember</span></div><div class="line"><a name="l00124"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_member_iterator.html#abe27838f8dc71fdb38028ef27ae0b4f2"> 124</a></span>&#160;<span class="comment"></span> <span class="keyword">typedef</span> reference <a class="code" href="classrapidjson_1_1_generic_member_iterator.html#abe27838f8dc71fdb38028ef27ae0b4f2">Reference</a>;<span class="comment"></span></div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160;<span class="comment"> //! Signed integer type (e.g. \c ptrdiff_t)</span></div><div class="line"><a name="l00126"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_member_iterator.html#aff2739a9265639a7a4be8c3e6216b31a"> 126</a></span>&#160;<span class="comment"></span> <span class="keyword">typedef</span> difference_type <a class="code" href="classrapidjson_1_1_generic_member_iterator.html#aff2739a9265639a7a4be8c3e6216b31a">DifferenceType</a>;</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160;<span class="comment"> //! Default constructor (singular value)</span></div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160;<span class="comment"></span><span class="comment"> /*! Creates an iterator pointing to no element.</span></div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160;<span class="comment"> \note All operations, except for comparisons, are undefined on such values.</span></div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00132"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_member_iterator.html#ac920af483c9e31a6746c22acf0dffc50"> 132</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_member_iterator.html#ac920af483c9e31a6746c22acf0dffc50">GenericMemberIterator</a>() : ptr_() {}</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160;<span class="comment"> //! Iterator conversions to more const</span></div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160;<span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160;<span class="comment"> \param it (Non-const) iterator to copy from</span></div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160;<span class="comment"> Allows the creation of an iterator from another GenericMemberIterator</span></div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160;<span class="comment"> that is &quot;less const&quot;. Especially, creating a non-constant iterator</span></div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160;<span class="comment"> from a constant iterator are disabled:</span></div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160;<span class="comment"> \li const -&gt; non-const (not ok)</span></div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160;<span class="comment"> \li const -&gt; const (ok)</span></div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160;<span class="comment"> \li non-const -&gt; const (ok)</span></div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160;<span class="comment"> \li non-const -&gt; non-const (ok)</span></div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160;<span class="comment"> \note If the \c Const template parameter is already \c false, this</span></div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160;<span class="comment"> constructor effectively defines a regular copy-constructor.</span></div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160;<span class="comment"> Otherwise, the copy constructor is implicitly defined.</span></div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00150"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_member_iterator.html#aa30ffef74b3f4978b403024d81b484e4"> 150</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_member_iterator.html#aa30ffef74b3f4978b403024d81b484e4">GenericMemberIterator</a>(<span class="keyword">const</span> NonConstIterator &amp; it) : ptr_(it.ptr_) {}</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; Iterator&amp; operator=(<span class="keyword">const</span> NonConstIterator &amp; it) { ptr_ = it.ptr_; <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160;<span class="comment"> //! @name stepping</span></div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160;<span class="comment"></span><span class="comment"> //@{</span></div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160;<span class="comment"></span> Iterator&amp; operator++(){ ++ptr_; <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; Iterator&amp; operator--(){ --ptr_; <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; Iterator operator++(<span class="keywordtype">int</span>){ Iterator old(*<span class="keyword">this</span>); ++ptr_; <span class="keywordflow">return</span> old; }</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; Iterator operator--(<span class="keywordtype">int</span>){ Iterator old(*<span class="keyword">this</span>); --ptr_; <span class="keywordflow">return</span> old; }<span class="comment"></span></div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160;<span class="comment"> //@}</span></div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160;<span class="comment"> //! @name increment/decrement</span></div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160;<span class="comment"></span><span class="comment"> //@{</span></div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160;<span class="comment"></span> Iterator operator+(DifferenceType n)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> Iterator(ptr_+n); }</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; Iterator operator-(DifferenceType n)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> Iterator(ptr_-n); }</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160;</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; Iterator&amp; operator+=(DifferenceType n) { ptr_+=n; <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; Iterator&amp; operator-=(DifferenceType n) { ptr_-=n; <span class="keywordflow">return</span> *<span class="keyword">this</span>; }<span class="comment"></span></div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160;<span class="comment"> //@}</span></div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160;<span class="comment"> //! @name relations</span></div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160;<span class="comment"></span><span class="comment"> //@{</span></div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160;<span class="comment"></span> <span class="keywordtype">bool</span> operator==(ConstIterator that)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> ptr_ == that.ptr_; }</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <span class="keywordtype">bool</span> operator!=(ConstIterator that)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> ptr_ != that.ptr_; }</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; <span class="keywordtype">bool</span> operator&lt;=(ConstIterator that)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> ptr_ &lt;= that.ptr_; }</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <span class="keywordtype">bool</span> operator&gt;=(ConstIterator that)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> ptr_ &gt;= that.ptr_; }</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; <span class="keywordtype">bool</span> operator&lt; (ConstIterator that)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> ptr_ &lt; that.ptr_; }</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <span class="keywordtype">bool</span> operator&gt; (ConstIterator that)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> ptr_ &gt; that.ptr_; }<span class="comment"></span></div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160;<span class="comment"> //@}</span></div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160;<span class="comment"> //! @name dereference</span></div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160;<span class="comment"></span><span class="comment"> //@{</span></div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160;<span class="comment"></span> Reference operator*()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> *ptr_; }</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; Pointer operator-&gt;()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> ptr_; }</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; Reference operator[](DifferenceType n)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> ptr_[n]; }<span class="comment"></span></div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160;<span class="comment"> //@}</span></div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160;<span class="comment"> //! Distance</span></div><div class="line"><a name="l00188"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_member_iterator.html#abfad2c34a97f82178cbf9464e958e2c2"> 188</a></span>&#160;<span class="comment"></span> DifferenceType <a class="code" href="classrapidjson_1_1_generic_member_iterator.html#abfad2c34a97f82178cbf9464e958e2c2">operator-</a>(ConstIterator that)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> ptr_-that.ptr_; }</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160;</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160;<span class="keyword">private</span>:<span class="comment"></span></div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160;<span class="comment"> //! Internal constructor from plain pointer</span></div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160;<span class="comment"></span> <span class="keyword">explicit</span> <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">GenericMemberIterator</a>(Pointer p) : ptr_(p) {}</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160;</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; Pointer ptr_; <span class="comment">//!&lt; raw pointer</span></div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160;<span class="comment"></span>};</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160;</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160;<span class="preprocessor">#else // RAPIDJSON_NOMEMBERITERATORCLASS</span></div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160;</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160;<span class="comment">// class-based member iterator implementation disabled, use plain pointers</span></div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160;</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">bool</span> Const, <span class="keyword">typename</span> Encoding, <span class="keyword">typename</span> Allocator&gt;</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160;<span class="keyword">struct </span><a class="code" href="classrapidjson_1_1_generic_member_iterator.html">GenericMemberIterator</a>;</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160;<span class="comment">//! non-const GenericMemberIterator</span></div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160;<span class="comment"></span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> Encoding, <span class="keyword">typename</span> Allocator&gt;</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160;<span class="keyword">struct </span><a class="code" href="classrapidjson_1_1_generic_member_iterator.html">GenericMemberIterator</a>&lt;false,Encoding,Allocator&gt; {<span class="comment"></span></div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160;<span class="comment"> //! use plain pointer as iterator type</span></div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160;<span class="comment"></span> <span class="keyword">typedef</span> <a class="code" href="structrapidjson_1_1_generic_member.html">GenericMember&lt;Encoding,Allocator&gt;</a>* <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">Iterator</a>;</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160;};<span class="comment"></span></div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160;<span class="comment">//! const GenericMemberIterator</span></div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160;<span class="comment"></span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> Encoding, <span class="keyword">typename</span> Allocator&gt;</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160;<span class="keyword">struct </span><a class="code" href="classrapidjson_1_1_generic_member_iterator.html">GenericMemberIterator</a>&lt;true,Encoding,Allocator&gt; {<span class="comment"></span></div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160;<span class="comment"> //! use plain const pointer as iterator type</span></div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160;<span class="comment"></span> <span class="keyword">typedef</span> <span class="keyword">const</span> <a class="code" href="structrapidjson_1_1_generic_member.html">GenericMember&lt;Encoding,Allocator&gt;</a>* <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">Iterator</a>;</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160;};</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160;</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160;<span class="preprocessor">#endif // RAPIDJSON_NOMEMBERITERATORCLASS</span></div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160;<span class="comment"></span><span class="comment">// GenericStringRef</span></div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160;<span class="comment">//! Reference to a constant string (not taking a copy)</span></div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160;<span class="comment"></span><span class="comment">/*!</span></div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160;<span class="comment"> \tparam CharType character type of the string</span></div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160;<span class="comment"> This helper class is used to automatically infer constant string</span></div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160;<span class="comment"> references for string literals, especially from \c const \b (!)</span></div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160;<span class="comment"> character arrays.</span></div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160;<span class="comment"> The main use is for creating JSON string values without copying the</span></div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160;<span class="comment"> source string via an \ref Allocator. This requires that the referenced</span></div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160;<span class="comment"> string pointers have a sufficient lifetime, which exceeds the lifetime</span></div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160;<span class="comment"> of the associated GenericValue.</span></div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160;<span class="comment"> \b Example</span></div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160;<span class="comment"> \code</span></div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160;<span class="comment"> Value v(&quot;foo&quot;); // ok, no need to copy &amp; calculate length</span></div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160;<span class="comment"> const char foo[] = &quot;foo&quot;;</span></div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160;<span class="comment"> v.SetString(foo); // ok</span></div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160;<span class="comment"> const char* bar = foo;</span></div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160;<span class="comment"> // Value x(bar); // not ok, can&#39;t rely on bar&#39;s lifetime</span></div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160;<span class="comment"> Value x(StringRef(bar)); // lifetime explicitly guaranteed by user</span></div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160;<span class="comment"> Value y(StringRef(bar, 3)); // ok, explicitly pass length</span></div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160;<span class="comment"> \endcode</span></div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160;<span class="comment"> \see StringRef, GenericValue::SetString</span></div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> CharType&gt;</div><div class="line"><a name="l00250"></a><span class="lineno"><a class="line" href="structrapidjson_1_1_generic_string_ref.html"> 250</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structrapidjson_1_1_generic_string_ref.html">GenericStringRef</a> {</div><div class="line"><a name="l00251"></a><span class="lineno"><a class="line" href="structrapidjson_1_1_generic_string_ref.html#aa2a8eccae3d7eb14c30bc21afb7d6fba"> 251</a></span>&#160; <span class="keyword">typedef</span> CharType <a class="code" href="structrapidjson_1_1_generic_string_ref.html#aa2a8eccae3d7eb14c30bc21afb7d6fba">Ch</a>; <span class="comment">//!&lt; character type of the string</span></div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160;<span class="comment"> //! Create string reference from \c const character array</span></div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160;<span class="comment"></span><span class="preprocessor">#ifndef __clang__ // -Wdocumentation</span></div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160;<span class="comment"> /*!</span></div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160;<span class="comment"> This constructor implicitly creates a constant string reference from</span></div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160;<span class="comment"> a \c const character array. It has better performance than</span></div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160;<span class="comment"> \ref StringRef(const CharType*) by inferring the string \ref length</span></div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160;<span class="comment"> from the array length, and also supports strings containing null</span></div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160;<span class="comment"> characters.</span></div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160;<span class="comment"> \tparam N length of the string, automatically inferred</span></div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160;<span class="comment"> \param str Constant character array, lifetime assumed to be longer</span></div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160;<span class="comment"> than the use of the string in e.g. a GenericValue</span></div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160;<span class="comment"> \post \ref s == str</span></div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160;<span class="comment"> \note Constant complexity.</span></div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160;<span class="comment"> \note There is a hidden, private overload to disallow references to</span></div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160;<span class="comment"> non-const character arrays to be created via this constructor.</span></div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160;<span class="comment"> By this, e.g. function-scope arrays used to be filled via</span></div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160;<span class="comment"> \c snprintf are excluded from consideration.</span></div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160;<span class="comment"> In such cases, the referenced string should be \b copied to the</span></div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160;<span class="comment"> GenericValue instead.</span></div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; <span class="keyword">template</span>&lt;SizeType N&gt;</div><div class="line"><a name="l00279"></a><span class="lineno"><a class="line" href="structrapidjson_1_1_generic_string_ref.html#acd4d5ebac2b610ce647356aa52998002"> 279</a></span>&#160; <a class="code" href="structrapidjson_1_1_generic_string_ref.html#acd4d5ebac2b610ce647356aa52998002">GenericStringRef</a>(<span class="keyword">const</span> CharType (&amp;str)[N]) RAPIDJSON_NOEXCEPT</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; : s(str), length(N-1) {}</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160;<span class="comment"> //! Explicitly create string reference from \c const character pointer</span></div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160;<span class="comment"></span><span class="preprocessor">#ifndef __clang__ // -Wdocumentation</span></div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160;<span class="comment"> /*!</span></div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160;<span class="comment"> This constructor can be used to \b explicitly create a reference to</span></div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160;<span class="comment"> a constant string pointer.</span></div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160;<span class="comment"> \see StringRef(const CharType*)</span></div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160;<span class="comment"> \param str Constant character pointer, lifetime assumed to be longer</span></div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160;<span class="comment"> than the use of the string in e.g. a GenericValue</span></div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160;<span class="comment"> \post \ref s == str</span></div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160;<span class="comment"> \note There is a hidden, private overload to disallow references to</span></div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160;<span class="comment"> non-const character arrays to be created via this constructor.</span></div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160;<span class="comment"> By this, e.g. function-scope arrays used to be filled via</span></div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160;<span class="comment"> \c snprintf are excluded from consideration.</span></div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160;<span class="comment"> In such cases, the referenced string should be \b copied to the</span></div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160;<span class="comment"> GenericValue instead.</span></div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00303"></a><span class="lineno"><a class="line" href="structrapidjson_1_1_generic_string_ref.html#a29cf407c6aa2313f13dff78d6ce02687"> 303</a></span>&#160; <span class="keyword">explicit</span> <a class="code" href="structrapidjson_1_1_generic_string_ref.html#a29cf407c6aa2313f13dff78d6ce02687">GenericStringRef</a>(<span class="keyword">const</span> CharType* str)</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; : s(str), length(NotNullStrLen(str)) {}</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160;<span class="comment"> //! Create constant string reference from pointer and length</span></div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160;<span class="comment"></span><span class="preprocessor">#ifndef __clang__ // -Wdocumentation</span></div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160;<span class="comment"> /*! \param str constant string, lifetime assumed to be longer than the use of the string in e.g. a GenericValue</span></div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160;<span class="comment"> \param len length of the string, excluding the trailing NULL terminator</span></div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160;<span class="comment"> \post \ref s == str &amp;&amp; \ref length == len</span></div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160;<span class="comment"> \note Constant complexity.</span></div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00315"></a><span class="lineno"><a class="line" href="structrapidjson_1_1_generic_string_ref.html#ad9eb120a58cee500ff3bd5706779c4e4"> 315</a></span>&#160; <a class="code" href="structrapidjson_1_1_generic_string_ref.html#ad9eb120a58cee500ff3bd5706779c4e4">GenericStringRef</a>(<span class="keyword">const</span> CharType* str, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> len)</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; : s(<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga5dc14176a9e71ace282404b0bcda57a1">RAPIDJSON_LIKELY</a>(str) ? str : emptyString), length(len) { <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(str != 0 || len == 0u); }</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160;</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; <a class="code" href="structrapidjson_1_1_generic_string_ref.html">GenericStringRef</a>(<span class="keyword">const</span> <a class="code" href="structrapidjson_1_1_generic_string_ref.html">GenericStringRef</a>&amp; rhs) : s(rhs.<a class="code" href="structrapidjson_1_1_generic_string_ref.html#a001276ee57cbcbd3c14449045c71e994">s</a>), length(rhs.<a class="code" href="structrapidjson_1_1_generic_string_ref.html#ae223535ec20edf0c1db44a40b7735111">length</a>) {}</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160;<span class="comment"> //! implicit conversion to plain CharType pointer</span></div><div class="line"><a name="l00321"></a><span class="lineno"><a class="line" href="structrapidjson_1_1_generic_string_ref.html#a86d30bb594a41619a7a5ba6c8dcce2bd"> 321</a></span>&#160;<span class="comment"></span> <span class="keyword">operator</span> <span class="keyword">const</span> Ch *() <span class="keyword">const</span> { <span class="keywordflow">return</span> s; }</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160;</div><div class="line"><a name="l00323"></a><span class="lineno"><a class="line" href="structrapidjson_1_1_generic_string_ref.html#a001276ee57cbcbd3c14449045c71e994"> 323</a></span>&#160; <span class="keyword">const</span> Ch* <span class="keyword">const</span> <a class="code" href="structrapidjson_1_1_generic_string_ref.html#a001276ee57cbcbd3c14449045c71e994">s</a>; <span class="comment">//!&lt; plain CharType pointer</span></div><div class="line"><a name="l00324"></a><span class="lineno"><a class="line" href="structrapidjson_1_1_generic_string_ref.html#ae223535ec20edf0c1db44a40b7735111"> 324</a></span>&#160;<span class="comment"></span> <span class="keyword">const</span> <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> <a class="code" href="structrapidjson_1_1_generic_string_ref.html#ae223535ec20edf0c1db44a40b7735111">length</a>; <span class="comment">//!&lt; length of the string (excluding the trailing NULL terminator)</span></div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> NotNullStrLen(<span class="keyword">const</span> CharType* str) {</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(str != 0);</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; <span class="keywordflow">return</span> internal::StrLen(str);</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; }</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160;<span class="comment"> /// Empty string - used when passing in a NULL pointer</span></div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160;<span class="comment"></span> <span class="keyword">static</span> <span class="keyword">const</span> Ch emptyString[];</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160;<span class="comment"> //! Disallow construction from non-const array</span></div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160;<span class="comment"></span> <span class="keyword">template</span>&lt;SizeType N&gt;</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; <a class="code" href="structrapidjson_1_1_generic_string_ref.html">GenericStringRef</a>(CharType (&amp;str)[N]) <span class="comment">/* = delete */</span>;<span class="comment"></span></div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160;<span class="comment"> //! Copy assignment operator not permitted - immutable type</span></div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160;<span class="comment"></span> <a class="code" href="structrapidjson_1_1_generic_string_ref.html">GenericStringRef</a>&amp; operator=(<span class="keyword">const</span> <a class="code" href="structrapidjson_1_1_generic_string_ref.html">GenericStringRef</a>&amp; rhs) <span class="comment">/* = delete */</span>;</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160;};</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160;</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> CharType&gt;</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160;<span class="keyword">const</span> CharType <a class="code" href="structrapidjson_1_1_generic_string_ref.html">GenericStringRef&lt;CharType&gt;::emptyString</a>[] = { CharType() };</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160;<span class="comment">//! Mark a character pointer as constant string</span></div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160;<span class="comment"></span><span class="comment">/*! Mark a plain character pointer as a &quot;string literal&quot;. This function</span></div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160;<span class="comment"> can be used to avoid copying a character string to be referenced as a</span></div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160;<span class="comment"> value in a JSON GenericValue object, if the string&#39;s lifetime is known</span></div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160;<span class="comment"> to be valid long enough.</span></div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160;<span class="comment"> \tparam CharType Character type of the string</span></div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160;<span class="comment"> \param str Constant string, lifetime assumed to be longer than the use of the string in e.g. a GenericValue</span></div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160;<span class="comment"> \return GenericStringRef string reference object</span></div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160;<span class="comment"> \relatesalso GenericStringRef</span></div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160;<span class="comment"> \see GenericValue::GenericValue(StringRefType), GenericValue::operator=(StringRefType), GenericValue::SetString(StringRefType), GenericValue::PushBack(StringRefType, Allocator&amp;), GenericValue::AddMember</span></div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> CharType&gt;</div><div class="line"><a name="l00358"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#aa6b9fd9f6aa49405a574c362ba9af6b5"> 358</a></span>&#160;<span class="keyword">inline</span> <a class="code" href="structrapidjson_1_1_generic_string_ref.html">GenericStringRef&lt;CharType&gt;</a> <a class="code" href="namespacerapidjson.html#af94951529a5d51e8c4e6e770bb707c1f">StringRef</a>(<span class="keyword">const</span> CharType* str) {</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; <span class="keywordflow">return</span> <a class="code" href="structrapidjson_1_1_generic_string_ref.html">GenericStringRef&lt;CharType&gt;</a>(str);</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160;}</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160;<span class="comment">//! Mark a character pointer as constant string</span></div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160;<span class="comment"></span><span class="comment">/*! Mark a plain character pointer as a &quot;string literal&quot;. This function</span></div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160;<span class="comment"> can be used to avoid copying a character string to be referenced as a</span></div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160;<span class="comment"> value in a JSON GenericValue object, if the string&#39;s lifetime is known</span></div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160;<span class="comment"> to be valid long enough.</span></div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160;<span class="comment"> This version has better performance with supplied length, and also</span></div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160;<span class="comment"> supports string containing null characters.</span></div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160;<span class="comment"> \tparam CharType character type of the string</span></div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160;<span class="comment"> \param str Constant string, lifetime assumed to be longer than the use of the string in e.g. a GenericValue</span></div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160;<span class="comment"> \param length The length of source string.</span></div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160;<span class="comment"> \return GenericStringRef string reference object</span></div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160;<span class="comment"> \relatesalso GenericStringRef</span></div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> CharType&gt;</div><div class="line"><a name="l00378"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#a578c51ab574a50a9c760b9da7c7562f2"> 378</a></span>&#160;<span class="keyword">inline</span> <a class="code" href="structrapidjson_1_1_generic_string_ref.html">GenericStringRef&lt;CharType&gt;</a> <a class="code" href="namespacerapidjson.html#af94951529a5d51e8c4e6e770bb707c1f">StringRef</a>(<span class="keyword">const</span> CharType* str, <span class="keywordtype">size_t</span> length) {</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; <span class="keywordflow">return</span> <a class="code" href="structrapidjson_1_1_generic_string_ref.html">GenericStringRef&lt;CharType&gt;</a>(str, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a>(length));</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160;}</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160;</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160;<span class="comment">//! Mark a string object as constant string</span></div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160;<span class="comment"></span><span class="comment">/*! Mark a string object (e.g. \c std::string) as a &quot;string literal&quot;.</span></div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160;<span class="comment"> This function can be used to avoid copying a string to be referenced as a</span></div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160;<span class="comment"> value in a JSON GenericValue object, if the string&#39;s lifetime is known</span></div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160;<span class="comment"> to be valid long enough.</span></div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160;<span class="comment"> \tparam CharType character type of the string</span></div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160;<span class="comment"> \param str Constant string, lifetime assumed to be longer than the use of the string in e.g. a GenericValue</span></div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160;<span class="comment"> \return GenericStringRef string reference object</span></div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160;<span class="comment"> \relatesalso GenericStringRef</span></div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160;<span class="comment"> \note Requires the definition of the preprocessor symbol \ref RAPIDJSON_HAS_STDSTRING.</span></div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> CharType&gt;</div><div class="line"><a name="l00396"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#af94951529a5d51e8c4e6e770bb707c1f"> 396</a></span>&#160;<span class="keyword">inline</span> <a class="code" href="structrapidjson_1_1_generic_string_ref.html">GenericStringRef&lt;CharType&gt;</a> <a class="code" href="namespacerapidjson.html#af94951529a5d51e8c4e6e770bb707c1f">StringRef</a>(<span class="keyword">const</span> std::basic_string&lt;CharType&gt;&amp; str) {</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; <span class="keywordflow">return</span> <a class="code" href="structrapidjson_1_1_generic_string_ref.html">GenericStringRef&lt;CharType&gt;</a>(str.data(), <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a>(str.size()));</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160;}</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160;<span class="comment"></span><span class="comment">// GenericValue type traits</span></div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160;<span class="keyword">namespace </span>internal {</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160;</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T, <span class="keyword">typename</span> Encoding = <span class="keywordtype">void</span>, <span class="keyword">typename</span> Allocator = <span class="keywordtype">void</span>&gt;</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160;<span class="keyword">struct </span>IsGenericValueImpl : FalseType {};</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160;</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160;<span class="comment">// select candidates according to nested encoding and allocator types</span></div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt; <span class="keyword">struct </span>IsGenericValueImpl&lt;T, typename Void&lt;typename T::EncodingType&gt;<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">::Type</a>, typename Void&lt;typename T::AllocatorType&gt;<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">::Type</a>&gt;</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; : IsBaseOf&lt;GenericValue&lt;typename T::EncodingType, typename T::AllocatorType&gt;, T&gt;<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">::Type</a> {};</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160;</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160;<span class="comment">// helper to match arbitrary GenericValue instantiations, including derived classes</span></div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt; <span class="keyword">struct </span>IsGenericValue : IsGenericValueImpl&lt;T&gt;<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">::Type</a> {};</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160;</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160;} <span class="comment">// namespace internal</span></div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160;<span class="comment"></span><span class="comment">// TypeHelper</span></div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160;</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160;<span class="keyword">namespace </span>internal {</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160;</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> ValueType, <span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160;<span class="keyword">struct </span>TypeHelper {};</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160;</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> ValueType&gt; </div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160;<span class="keyword">struct </span>TypeHelper&lt;ValueType, bool&gt; {</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; <span class="keyword">static</span> <span class="keywordtype">bool</span> Is(<span class="keyword">const</span> ValueType&amp; v) { <span class="keywordflow">return</span> v.IsBool(); }</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; <span class="keyword">static</span> <span class="keywordtype">bool</span> Get(<span class="keyword">const</span> ValueType&amp; v) { <span class="keywordflow">return</span> v.GetBool(); }</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; <span class="keyword">static</span> ValueType&amp; Set(ValueType&amp; v, <span class="keywordtype">bool</span> data) { <span class="keywordflow">return</span> v.SetBool(data); }</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; <span class="keyword">static</span> ValueType&amp; Set(ValueType&amp; v, <span class="keywordtype">bool</span> data, <span class="keyword">typename</span> ValueType::AllocatorType&amp;) { <span class="keywordflow">return</span> v.SetBool(data); }</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160;};</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160;</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> ValueType&gt; </div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160;<span class="keyword">struct </span>TypeHelper&lt;ValueType, int&gt; {</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; <span class="keyword">static</span> <span class="keywordtype">bool</span> Is(<span class="keyword">const</span> ValueType&amp; v) { <span class="keywordflow">return</span> v.IsInt(); }</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; <span class="keyword">static</span> <span class="keywordtype">int</span> Get(<span class="keyword">const</span> ValueType&amp; v) { <span class="keywordflow">return</span> v.GetInt(); }</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; <span class="keyword">static</span> ValueType&amp; Set(ValueType&amp; v, <span class="keywordtype">int</span> data) { <span class="keywordflow">return</span> v.SetInt(data); }</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; <span class="keyword">static</span> ValueType&amp; Set(ValueType&amp; v, <span class="keywordtype">int</span> data, <span class="keyword">typename</span> ValueType::AllocatorType&amp;) { <span class="keywordflow">return</span> v.SetInt(data); }</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160;};</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160;</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> ValueType&gt; </div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160;<span class="keyword">struct </span>TypeHelper&lt;ValueType, unsigned&gt; {</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; <span class="keyword">static</span> <span class="keywordtype">bool</span> Is(<span class="keyword">const</span> ValueType&amp; v) { <span class="keywordflow">return</span> v.IsUint(); }</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; <span class="keyword">static</span> <span class="keywordtype">unsigned</span> Get(<span class="keyword">const</span> ValueType&amp; v) { <span class="keywordflow">return</span> v.GetUint(); }</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; <span class="keyword">static</span> ValueType&amp; Set(ValueType&amp; v, <span class="keywordtype">unsigned</span> data) { <span class="keywordflow">return</span> v.SetUint(data); }</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; <span class="keyword">static</span> ValueType&amp; Set(ValueType&amp; v, <span class="keywordtype">unsigned</span> data, <span class="keyword">typename</span> ValueType::AllocatorType&amp;) { <span class="keywordflow">return</span> v.SetUint(data); }</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160;};</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160;</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160;<span class="preprocessor">#ifdef _MSC_VER</span></div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160;<a class="code" href="rapidjson_8h.html#af95188da1d8eb6d4b148fe9ce71cd7c4">RAPIDJSON_STATIC_ASSERT</a>(<span class="keyword">sizeof</span>(<span class="keywordtype">long</span>) == <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> ValueType&gt;</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160;<span class="keyword">struct </span>TypeHelper&lt;ValueType, long&gt; {</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; <span class="keyword">static</span> <span class="keywordtype">bool</span> Is(<span class="keyword">const</span> ValueType&amp; v) { <span class="keywordflow">return</span> v.IsInt(); }</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; <span class="keyword">static</span> <span class="keywordtype">long</span> Get(<span class="keyword">const</span> ValueType&amp; v) { <span class="keywordflow">return</span> v.GetInt(); }</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; <span class="keyword">static</span> ValueType&amp; Set(ValueType&amp; v, <span class="keywordtype">long</span> data) { <span class="keywordflow">return</span> v.SetInt(data); }</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160; <span class="keyword">static</span> ValueType&amp; Set(ValueType&amp; v, <span class="keywordtype">long</span> data, <span class="keyword">typename</span> ValueType::AllocatorType&amp;) { <span class="keywordflow">return</span> v.SetInt(data); }</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160;};</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160;</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160;<a class="code" href="rapidjson_8h.html#af95188da1d8eb6d4b148fe9ce71cd7c4">RAPIDJSON_STATIC_ASSERT</a>(<span class="keyword">sizeof</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>) == <span class="keyword">sizeof</span>(<span class="keywordtype">unsigned</span>));</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> ValueType&gt;</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160;<span class="keyword">struct </span>TypeHelper&lt;ValueType, unsigned long&gt; {</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; <span class="keyword">static</span> <span class="keywordtype">bool</span> Is(<span class="keyword">const</span> ValueType&amp; v) { <span class="keywordflow">return</span> v.IsUint(); }</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160; <span class="keyword">static</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> Get(<span class="keyword">const</span> ValueType&amp; v) { <span class="keywordflow">return</span> v.GetUint(); }</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; <span class="keyword">static</span> ValueType&amp; Set(ValueType&amp; v, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> data) { <span class="keywordflow">return</span> v.SetUint(data); }</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; <span class="keyword">static</span> ValueType&amp; Set(ValueType&amp; v, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> data, <span class="keyword">typename</span> ValueType::AllocatorType&amp;) { <span class="keywordflow">return</span> v.SetUint(data); }</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160;};</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160;</div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> ValueType&gt; </div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160;<span class="keyword">struct </span>TypeHelper&lt;ValueType, int64_t&gt; {</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; <span class="keyword">static</span> <span class="keywordtype">bool</span> Is(<span class="keyword">const</span> ValueType&amp; v) { <span class="keywordflow">return</span> v.IsInt64(); }</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; <span class="keyword">static</span> int64_t Get(<span class="keyword">const</span> ValueType&amp; v) { <span class="keywordflow">return</span> v.GetInt64(); }</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; <span class="keyword">static</span> ValueType&amp; Set(ValueType&amp; v, int64_t data) { <span class="keywordflow">return</span> v.SetInt64(data); }</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; <span class="keyword">static</span> ValueType&amp; Set(ValueType&amp; v, int64_t data, <span class="keyword">typename</span> ValueType::AllocatorType&amp;) { <span class="keywordflow">return</span> v.SetInt64(data); }</div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160;};</div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160;</div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> ValueType&gt; </div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160;<span class="keyword">struct </span>TypeHelper&lt;ValueType, uint64_t&gt; {</div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160; <span class="keyword">static</span> <span class="keywordtype">bool</span> Is(<span class="keyword">const</span> ValueType&amp; v) { <span class="keywordflow">return</span> v.IsUint64(); }</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160; <span class="keyword">static</span> uint64_t Get(<span class="keyword">const</span> ValueType&amp; v) { <span class="keywordflow">return</span> v.GetUint64(); }</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; <span class="keyword">static</span> ValueType&amp; Set(ValueType&amp; v, uint64_t data) { <span class="keywordflow">return</span> v.SetUint64(data); }</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; <span class="keyword">static</span> ValueType&amp; Set(ValueType&amp; v, uint64_t data, <span class="keyword">typename</span> ValueType::AllocatorType&amp;) { <span class="keywordflow">return</span> v.SetUint64(data); }</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160;};</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160;</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> ValueType&gt; </div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160;<span class="keyword">struct </span>TypeHelper&lt;ValueType, double&gt; {</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; <span class="keyword">static</span> <span class="keywordtype">bool</span> Is(<span class="keyword">const</span> ValueType&amp; v) { <span class="keywordflow">return</span> v.IsDouble(); }</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; <span class="keyword">static</span> <span class="keywordtype">double</span> Get(<span class="keyword">const</span> ValueType&amp; v) { <span class="keywordflow">return</span> v.GetDouble(); }</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; <span class="keyword">static</span> ValueType&amp; Set(ValueType&amp; v, <span class="keywordtype">double</span> data) { <span class="keywordflow">return</span> v.SetDouble(data); }</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; <span class="keyword">static</span> ValueType&amp; Set(ValueType&amp; v, <span class="keywordtype">double</span> data, <span class="keyword">typename</span> ValueType::AllocatorType&amp;) { <span class="keywordflow">return</span> v.SetDouble(data); }</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160;};</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160;</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> ValueType&gt; </div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160;<span class="keyword">struct </span>TypeHelper&lt;ValueType, float&gt; {</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; <span class="keyword">static</span> <span class="keywordtype">bool</span> Is(<span class="keyword">const</span> ValueType&amp; v) { <span class="keywordflow">return</span> v.IsFloat(); }</div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160; <span class="keyword">static</span> <span class="keywordtype">float</span> Get(<span class="keyword">const</span> ValueType&amp; v) { <span class="keywordflow">return</span> v.GetFloat(); }</div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; <span class="keyword">static</span> ValueType&amp; Set(ValueType&amp; v, <span class="keywordtype">float</span> data) { <span class="keywordflow">return</span> v.SetFloat(data); }</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; <span class="keyword">static</span> ValueType&amp; Set(ValueType&amp; v, <span class="keywordtype">float</span> data, <span class="keyword">typename</span> ValueType::AllocatorType&amp;) { <span class="keywordflow">return</span> v.SetFloat(data); }</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160;};</div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160;</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> ValueType&gt; </div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160;<span class="keyword">struct </span>TypeHelper&lt;ValueType, const typename ValueType::Ch*&gt; {</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; <span class="keyword">typedef</span> <span class="keyword">const</span> <span class="keyword">typename</span> ValueType::Ch* StringType;</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; <span class="keyword">static</span> <span class="keywordtype">bool</span> Is(<span class="keyword">const</span> ValueType&amp; v) { <span class="keywordflow">return</span> v.IsString(); }</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; <span class="keyword">static</span> StringType Get(<span class="keyword">const</span> ValueType&amp; v) { <span class="keywordflow">return</span> v.GetString(); }</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; <span class="keyword">static</span> ValueType&amp; Set(ValueType&amp; v, <span class="keyword">const</span> StringType data) { <span class="keywordflow">return</span> v.SetString(<span class="keyword">typename</span> ValueType::StringRefType(data)); }</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; <span class="keyword">static</span> ValueType&amp; Set(ValueType&amp; v, <span class="keyword">const</span> StringType data, <span class="keyword">typename</span> ValueType::AllocatorType&amp; a) { <span class="keywordflow">return</span> v.SetString(data, a); }</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160;};</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160;</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> ValueType&gt; </div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160;<span class="keyword">struct </span>TypeHelper&lt;ValueType, std::basic_string&lt;typename ValueType::Ch&gt; &gt; {</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; <span class="keyword">typedef</span> std::basic_string&lt;typename ValueType::Ch&gt; StringType;</div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; <span class="keyword">static</span> <span class="keywordtype">bool</span> Is(<span class="keyword">const</span> ValueType&amp; v) { <span class="keywordflow">return</span> v.IsString(); }</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; <span class="keyword">static</span> StringType Get(<span class="keyword">const</span> ValueType&amp; v) { <span class="keywordflow">return</span> StringType(v.GetString(), v.GetStringLength()); }</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; <span class="keyword">static</span> ValueType&amp; Set(ValueType&amp; v, <span class="keyword">const</span> StringType&amp; data, <span class="keyword">typename</span> ValueType::AllocatorType&amp; a) { <span class="keywordflow">return</span> v.SetString(data, a); }</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160;};</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160;</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> ValueType&gt; </div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160;<span class="keyword">struct </span>TypeHelper&lt;ValueType, typename ValueType::Array&gt; {</div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160; <span class="keyword">typedef</span> <span class="keyword">typename</span> ValueType::Array ArrayType;</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; <span class="keyword">static</span> <span class="keywordtype">bool</span> Is(<span class="keyword">const</span> ValueType&amp; v) { <span class="keywordflow">return</span> v.IsArray(); }</div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; <span class="keyword">static</span> ArrayType Get(ValueType&amp; v) { <span class="keywordflow">return</span> v.GetArray(); }</div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; <span class="keyword">static</span> ValueType&amp; Set(ValueType&amp; v, ArrayType data) { <span class="keywordflow">return</span> v = data; }</div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; <span class="keyword">static</span> ValueType&amp; Set(ValueType&amp; v, ArrayType data, <span class="keyword">typename</span> ValueType::AllocatorType&amp;) { <span class="keywordflow">return</span> v = data; }</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160;};</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160;</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> ValueType&gt; </div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160;<span class="keyword">struct </span>TypeHelper&lt;ValueType, typename ValueType::ConstArray&gt; {</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; <span class="keyword">typedef</span> <span class="keyword">typename</span> ValueType::ConstArray ArrayType;</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; <span class="keyword">static</span> <span class="keywordtype">bool</span> Is(<span class="keyword">const</span> ValueType&amp; v) { <span class="keywordflow">return</span> v.IsArray(); }</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; <span class="keyword">static</span> ArrayType Get(<span class="keyword">const</span> ValueType&amp; v) { <span class="keywordflow">return</span> v.GetArray(); }</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160;};</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160;</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> ValueType&gt; </div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160;<span class="keyword">struct </span>TypeHelper&lt;ValueType, typename ValueType::Object&gt; {</div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; <span class="keyword">typedef</span> <span class="keyword">typename</span> ValueType::Object ObjectType;</div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; <span class="keyword">static</span> <span class="keywordtype">bool</span> Is(<span class="keyword">const</span> ValueType&amp; v) { <span class="keywordflow">return</span> v.IsObject(); }</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; <span class="keyword">static</span> ObjectType Get(ValueType&amp; v) { <span class="keywordflow">return</span> v.GetObject(); }</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; <span class="keyword">static</span> ValueType&amp; Set(ValueType&amp; v, ObjectType data) { <span class="keywordflow">return</span> v = data; }</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; <span class="keyword">static</span> ValueType&amp; Set(ValueType&amp; v, ObjectType data, <span class="keyword">typename</span> ValueType::AllocatorType&amp;) { <span class="keywordflow">return</span> v = data; }</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160;};</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160;</div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> ValueType&gt; </div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160;<span class="keyword">struct </span>TypeHelper&lt;ValueType, typename ValueType::ConstObject&gt; {</div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160; <span class="keyword">typedef</span> <span class="keyword">typename</span> ValueType::ConstObject ObjectType;</div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; <span class="keyword">static</span> <span class="keywordtype">bool</span> Is(<span class="keyword">const</span> ValueType&amp; v) { <span class="keywordflow">return</span> v.IsObject(); }</div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; <span class="keyword">static</span> ObjectType Get(<span class="keyword">const</span> ValueType&amp; v) { <span class="keywordflow">return</span> v.GetObject(); }</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160;};</div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160;</div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160;} <span class="comment">// namespace internal</span></div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160;</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160;<span class="comment">// Forward declarations</span></div><div class="line"><a name="l00555"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_array.html"> 555</a></span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">bool</span>, <span class="keyword">typename</span>&gt; <span class="keyword">class </span><a class="code" href="classrapidjson_1_1_generic_array.html">GenericArray</a>;</div><div class="line"><a name="l00556"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_object.html"> 556</a></span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">bool</span>, <span class="keyword">typename</span>&gt; <span class="keyword">class </span><a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject</a>;</div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160;<span class="comment"></span><span class="comment">// GenericValue</span></div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160;<span class="comment">//! Represents a JSON value. Use Value for UTF8 encoding and default allocator.</span></div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160;<span class="comment"></span><span class="comment">/*!</span></div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160;<span class="comment"> A JSON value can be one of 7 types. This class is a variant type supporting</span></div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160;<span class="comment"> these types.</span></div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160;<span class="comment"> Use the Value if UTF8 and default allocator</span></div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160;<span class="comment"> \tparam Encoding Encoding of the value. (Even non-string values need to have the same encoding in a document)</span></div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160;<span class="comment"> \tparam Allocator Allocator type for allocating memory of object, array and string.</span></div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> Encoding, <span class="keyword">typename</span> Allocator = MemoryPoolAllocator&lt;&gt; &gt; </div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160;<span class="keyword">class </span><a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a> {</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160;<span class="keyword">public</span>:<span class="comment"></span></div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160;<span class="comment"> //! Name-value pair in an object.</span></div><div class="line"><a name="l00575"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a0220ddebe2f023fa75b643a50e90e559"> 575</a></span>&#160;<span class="comment"></span> <span class="keyword">typedef</span> <a class="code" href="structrapidjson_1_1_generic_member.html">GenericMember&lt;Encoding, Allocator&gt;</a> <a class="code" href="classrapidjson_1_1_generic_value.html#a0220ddebe2f023fa75b643a50e90e559">Member</a>;</div><div class="line"><a name="l00576"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a05906384808645a2e798d29a9b2d441d"> 576</a></span>&#160; <span class="keyword">typedef</span> Encoding <a class="code" href="classrapidjson_1_1_generic_value.html#a05906384808645a2e798d29a9b2d441d">EncodingType</a>; <span class="comment">//!&lt; Encoding type from template parameter.</span></div><div class="line"><a name="l00577"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a5d47340c96346c5028fee4c9068d783d"> 577</a></span>&#160;<span class="comment"></span> <span class="keyword">typedef</span> Allocator <a class="code" href="classrapidjson_1_1_generic_value.html#a5d47340c96346c5028fee4c9068d783d">AllocatorType</a>; <span class="comment">//!&lt; Allocator type from template parameter.</span></div><div class="line"><a name="l00578"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#adcdbc7fa85a9a41b78966d7e0dcc2ac4"> 578</a></span>&#160;<span class="comment"></span> <span class="keyword">typedef</span> <span class="keyword">typename</span> Encoding::Ch <a class="code" href="classrapidjson_1_1_generic_value.html#adcdbc7fa85a9a41b78966d7e0dcc2ac4">Ch</a>; <span class="comment">//!&lt; Character type derived from Encoding.</span></div><div class="line"><a name="l00579"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a559eb9cea54364a35518b02f6d74f379"> 579</a></span>&#160;<span class="comment"></span> <span class="keyword">typedef</span> <a class="code" href="structrapidjson_1_1_generic_string_ref.html">GenericStringRef&lt;Ch&gt;</a> <a class="code" href="classrapidjson_1_1_generic_value.html#a559eb9cea54364a35518b02f6d74f379">StringRefType</a>; <span class="comment">//!&lt; Reference to a constant string</span></div><div class="line"><a name="l00580"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#aca5596987335016c1a7c2a9467baf80b"> 580</a></span>&#160;<span class="comment"></span> <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">GenericMemberIterator&lt;false,Encoding,Allocator&gt;::Iterator</a> <a class="code" href="classrapidjson_1_1_generic_value.html#aca5596987335016c1a7c2a9467baf80b">MemberIterator</a>; <span class="comment">//!&lt; Member iterator for iterating in object.</span></div><div class="line"><a name="l00581"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a6cd2b09795c48d2892bebc0ae350d51f"> 581</a></span>&#160;<span class="comment"></span> <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">GenericMemberIterator&lt;true,Encoding,Allocator&gt;::Iterator</a> <a class="code" href="classrapidjson_1_1_generic_value.html#a6cd2b09795c48d2892bebc0ae350d51f">ConstMemberIterator</a>; <span class="comment">//!&lt; Constant member iterator for iterating in object.</span></div><div class="line"><a name="l00582"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a06ce0e14ec83b53c83e1b1699b53a25e"> 582</a></span>&#160;<span class="comment"></span> <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>* <a class="code" href="classrapidjson_1_1_generic_value.html#a06ce0e14ec83b53c83e1b1699b53a25e">ValueIterator</a>; <span class="comment">//!&lt; Value iterator for iterating in array.</span></div><div class="line"><a name="l00583"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a89a6588121742fc3f154b10b8f15f45f"> 583</a></span>&#160;<span class="comment"></span> <span class="keyword">typedef</span> <span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>* <a class="code" href="classrapidjson_1_1_generic_value.html#a89a6588121742fc3f154b10b8f15f45f">ConstValueIterator</a>; <span class="comment">//!&lt; Constant value iterator for iterating in array.</span></div><div class="line"><a name="l00584"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#ad2935191ab28c2c2e472b739a9d58202"> 584</a></span>&#160;<span class="comment"></span> <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue&lt;Encoding, Allocator&gt;</a> <a class="code" href="classrapidjson_1_1_generic_value.html#ad2935191ab28c2c2e472b739a9d58202">ValueType</a>; <span class="comment">//!&lt; Value type of itself.</span></div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160;<span class="comment"></span> <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_array.html">GenericArray&lt;false, ValueType&gt;</a> <a class="code" href="classrapidjson_1_1_generic_array.html">Array</a>;</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160; <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_array.html">GenericArray&lt;true, ValueType&gt;</a> <a class="code" href="classrapidjson_1_1_generic_array.html">ConstArray</a>;</div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160; <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject&lt;false, ValueType&gt;</a> <a class="code" href="classrapidjson_1_1_generic_object.html">Object</a>;</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject&lt;true, ValueType&gt;</a> <a class="code" href="classrapidjson_1_1_generic_object.html">ConstObject</a>;</div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160;<span class="comment"> //!@name Constructors and destructor.</span></div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160;<span class="comment"></span><span class="comment"> //@{</span></div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160;<span class="comment"> //! Default constructor creates a null value.</span></div><div class="line"><a name="l00594"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#ad1f8199e65662e0d52a13a1577d4e4a5"> 594</a></span>&#160;<span class="comment"></span> <a class="code" href="classrapidjson_1_1_generic_value.html#ad1f8199e65662e0d52a13a1577d4e4a5">GenericValue</a>() RAPIDJSON_NOEXCEPT : data_() { data_.f.flags = kNullFlag; }</div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160;</div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160;<span class="comment"> //! Move constructor in C++11</span></div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160;<span class="comment"></span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp;&amp; rhs) RAPIDJSON_NOEXCEPT : data_(rhs.data_) {</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; rhs.data_.f.flags = kNullFlag; <span class="comment">// give up contents</span></div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160; }</div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160;</div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160;<span class="keyword">private</span>:<span class="comment"></span></div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160;<span class="comment"> //! Copy constructor is not permitted.</span></div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160;<span class="comment"></span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; rhs);</div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160;</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160;<span class="comment"> //! Moving from a GenericDocument is not permitted.</span></div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160;<span class="comment"></span> <span class="keyword">template</span> &lt;<span class="keyword">typename</span> StackAllocator&gt;</div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(<a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument&lt;Encoding,Allocator,StackAllocator&gt;</a>&amp;&amp; rhs);</div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160;<span class="comment"> //! Move assignment from a GenericDocument is not permitted.</span></div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160;<span class="comment"></span> <span class="keyword">template</span> &lt;<span class="keyword">typename</span> StackAllocator&gt;</div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; operator=(<a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument&lt;Encoding,Allocator,StackAllocator&gt;</a>&amp;&amp; rhs);</div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160;</div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160;<span class="comment"> //! Constructor with JSON value type.</span></div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160;<span class="comment"></span><span class="comment"> /*! This creates a Value of specified type with default content.</span></div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160;<span class="comment"> \param type Type of the value.</span></div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160;<span class="comment"> \note Default content for number is zero.</span></div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00624"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a646b6d4d3d98799a0926d96ffa127a58"> 624</a></span>&#160; <span class="keyword">explicit</span> <a class="code" href="classrapidjson_1_1_generic_value.html#a646b6d4d3d98799a0926d96ffa127a58">GenericValue</a>(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">Type</a> type) RAPIDJSON_NOEXCEPT : data_() {</div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> uint16_t defaultFlags[] = {</div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160; kNullFlag, kFalseFlag, kTrueFlag, kObjectFlag, kArrayFlag, kShortStringFlag,</div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160; kNumberAnyFlag</div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160; };</div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga2b2a0d9143aa4fb31205a85b34c43952">RAPIDJSON_NOEXCEPT_ASSERT</a>(type &gt;= <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a952871e4326b527154fc8aac1ac1f6ff">kNullType</a> &amp;&amp; type &lt;= <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a">kNumberType</a>);</div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160; data_.f.flags = defaultFlags[type];</div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160;</div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160; <span class="comment">// Use ShortString to store empty string.</span></div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160; <span class="keywordflow">if</span> (type == <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4ad6379da3dc04b83a591992bfb9fabba7">kStringType</a>)</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160; data_.ss.SetLength(0);</div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160; }</div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160;<span class="comment"> //! Explicit copy constructor (with allocator)</span></div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160;<span class="comment"></span><span class="comment"> /*! Creates a copy of a Value by using the given Allocator</span></div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160;<span class="comment"> \tparam SourceAllocator allocator of \c rhs</span></div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160;<span class="comment"> \param rhs Value to copy from (read-only)</span></div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160;<span class="comment"> \param allocator Allocator for allocating copied elements and buffers. Commonly use GenericDocument::GetAllocator().</span></div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160;<span class="comment"> \param copyConstStrings Force copying of constant strings (e.g. referencing an in-situ buffer)</span></div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160;<span class="comment"> \see CopyFrom()</span></div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> SourceAllocator&gt;</div><div class="line"><a name="l00646"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#adca019775f68f012643781cd2c2515ac"> 646</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html#adca019775f68f012643781cd2c2515ac">GenericValue</a>(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue&lt;Encoding,SourceAllocator&gt;</a>&amp; rhs, Allocator&amp; allocator, <span class="keywordtype">bool</span> copyConstStrings = <span class="keyword">false</span>) {</div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; <span class="keywordflow">switch</span> (rhs.GetType()) {</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4acf030b422a32c3647c7c5973bd4dd0a9">kObjectType</a>: {</div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160; <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> count = rhs.data_.o.size;</div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; Member* lm = <span class="keyword">reinterpret_cast&lt;</span>Member*<span class="keyword">&gt;</span>(allocator.Malloc(count * <span class="keyword">sizeof</span>(Member)));</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="structrapidjson_1_1_generic_member.html">GenericValue&lt;Encoding,SourceAllocator&gt;::Member</a>* rm = rhs.GetMembersPointer();</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> i = 0; i &lt; count; i++) {</div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; <span class="keyword">new</span> (&amp;lm[i].<a class="code" href="structrapidjson_1_1_generic_member.html#ae820eaa74b415a9073f3f3855f6c6607">name</a>) <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(rm[i].name, allocator, copyConstStrings);</div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160; <span class="keyword">new</span> (&amp;lm[i].<a class="code" href="structrapidjson_1_1_generic_member.html#a8ffff2076e62d988a070a136da6ffca6">value</a>) <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(rm[i].value, allocator, copyConstStrings);</div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; }</div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; data_.f.flags = kObjectFlag;</div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160; data_.o.size = data_.o.capacity = count;</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160; SetMembersPointer(lm);</div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; }</div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a058c622e1e7d59419ae58b895cbce468">kArrayType</a>: {</div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160; <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> count = rhs.data_.a.size;</div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>* le = <span class="keyword">reinterpret_cast&lt;</span><a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>*<span class="keyword">&gt;</span>(allocator.Malloc(count * <span class="keyword">sizeof</span>(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>)));</div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160; <span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue&lt;Encoding,SourceAllocator&gt;</a>* re = rhs.GetElementsPointer();</div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> i = 0; i &lt; count; i++)</div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160; <span class="keyword">new</span> (&amp;le[i]) <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(re[i], allocator, copyConstStrings);</div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160; data_.f.flags = kArrayFlag;</div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; data_.a.size = data_.a.capacity = count;</div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160; SetElementsPointer(le);</div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160; }</div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00672"></a><span class="lineno"> 672</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4ad6379da3dc04b83a591992bfb9fabba7">kStringType</a>:</div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160; <span class="keywordflow">if</span> (rhs.data_.f.flags == kConstStringFlag &amp;&amp; !copyConstStrings) {</div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160; data_.f.flags = rhs.data_.f.flags;</div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160; data_ = *<span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span>Data*<span class="keyword">&gt;</span>(&amp;rhs.data_);</div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160; }</div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160; SetStringRaw(<a class="code" href="namespacerapidjson.html#af94951529a5d51e8c4e6e770bb707c1f">StringRef</a>(rhs.GetString(), rhs.<a class="code" href="classrapidjson_1_1_generic_value.html#a18599e0d1a7e70a11b35f5e219390fea">GetStringLength</a>()), allocator);</div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160; data_.f.flags = rhs.data_.f.flags;</div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160; data_ = *<span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span>Data*<span class="keyword">&gt;</span>(&amp;rhs.data_);</div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160; }</div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; }</div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160;<span class="comment"> //! Constructor for boolean value.</span></div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160;<span class="comment"></span><span class="comment"> /*! \param b Boolean value</span></div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160;<span class="comment"> \note This constructor is limited to \em real boolean values and rejects</span></div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160;<span class="comment"> implicitly converted types like arbitrary pointers. Use an explicit cast</span></div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160;<span class="comment"> to \c bool, if you want to construct a boolean JSON value in such cases.</span></div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160;<span class="preprocessor">#ifndef RAPIDJSON_DOXYGEN_RUNNING // hide SFINAE from Doxygen</span></div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160; <span class="keyword">explicit</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(T b, RAPIDJSON_ENABLEIF((internal::IsSame&lt;bool, T&gt;))) RAPIDJSON_NOEXCEPT <span class="comment">// See #472</span></div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00697"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#ab933ad7ff8c9d08f73cebaecb700dbe9"> 697</a></span>&#160; <span class="keyword">explicit</span> <a class="code" href="classrapidjson_1_1_generic_value.html#ab933ad7ff8c9d08f73cebaecb700dbe9">GenericValue</a>(<span class="keywordtype">bool</span> b) RAPIDJSON_NOEXCEPT</div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160; : data_() {</div><div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160; <span class="comment">// safe-guard against failing SFINAE</span></div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span>&#160; <a class="code" href="rapidjson_8h.html#af95188da1d8eb6d4b148fe9ce71cd7c4">RAPIDJSON_STATIC_ASSERT</a>((<a class="code" href="namespacerapidjson.html#aa65fc9fb381b2cbc54f98673eadd6505">internal::IsSame&lt;bool,T&gt;::Value</a>));</div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160; data_.f.flags = b ? kTrueFlag : kFalseFlag;</div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160; }</div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160;<span class="comment"> //! Constructor for int value.</span></div><div class="line"><a name="l00706"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#abba0c9ccfd90726f916c36013a2e9e19"> 706</a></span>&#160;<span class="comment"></span> <span class="keyword">explicit</span> <a class="code" href="classrapidjson_1_1_generic_value.html#abba0c9ccfd90726f916c36013a2e9e19">GenericValue</a>(<span class="keywordtype">int</span> i) RAPIDJSON_NOEXCEPT : data_() {</div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160; data_.n.i64 = i;</div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160; data_.f.flags = (i &gt;= 0) ? (kNumberIntFlag | kUintFlag | kUint64Flag) : kNumberIntFlag;</div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160; }</div><div class="line"><a name="l00710"></a><span class="lineno"> 710</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00711"></a><span class="lineno"> 711</span>&#160;<span class="comment"> //! Constructor for unsigned value.</span></div><div class="line"><a name="l00712"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a4a8060a42b7953a2981ad892180ca5a6"> 712</a></span>&#160;<span class="comment"></span> <span class="keyword">explicit</span> <a class="code" href="classrapidjson_1_1_generic_value.html#a4a8060a42b7953a2981ad892180ca5a6">GenericValue</a>(<span class="keywordtype">unsigned</span> u) RAPIDJSON_NOEXCEPT : data_() {</div><div class="line"><a name="l00713"></a><span class="lineno"> 713</span>&#160; data_.n.u64 = u; </div><div class="line"><a name="l00714"></a><span class="lineno"> 714</span>&#160; data_.f.flags = (u &amp; 0x80000000) ? kNumberUintFlag : (kNumberUintFlag | kIntFlag | kInt64Flag);</div><div class="line"><a name="l00715"></a><span class="lineno"> 715</span>&#160; }</div><div class="line"><a name="l00716"></a><span class="lineno"> 716</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160;<span class="comment"> //! Constructor for int64_t value.</span></div><div class="line"><a name="l00718"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#acd4ae9a8dba4498d1d7cce6667529bb8"> 718</a></span>&#160;<span class="comment"></span> <span class="keyword">explicit</span> <a class="code" href="classrapidjson_1_1_generic_value.html#acd4ae9a8dba4498d1d7cce6667529bb8">GenericValue</a>(int64_t i64) RAPIDJSON_NOEXCEPT : data_() {</div><div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160; data_.n.i64 = i64;</div><div class="line"><a name="l00720"></a><span class="lineno"> 720</span>&#160; data_.f.flags = kNumberInt64Flag;</div><div class="line"><a name="l00721"></a><span class="lineno"> 721</span>&#160; <span class="keywordflow">if</span> (i64 &gt;= 0) {</div><div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160; data_.f.flags |= kNumberUint64Flag;</div><div class="line"><a name="l00723"></a><span class="lineno"> 723</span>&#160; <span class="keywordflow">if</span> (!(static_cast&lt;uint64_t&gt;(i64) &amp; <a class="code" href="rapidjson_8h.html#aaee1245f375a71be1ac9b8a07ba5fb8f">RAPIDJSON_UINT64_C2</a>(0xFFFFFFFF, 0x00000000)))</div><div class="line"><a name="l00724"></a><span class="lineno"> 724</span>&#160; data_.f.flags |= kUintFlag;</div><div class="line"><a name="l00725"></a><span class="lineno"> 725</span>&#160; <span class="keywordflow">if</span> (!(static_cast&lt;uint64_t&gt;(i64) &amp; <a class="code" href="rapidjson_8h.html#aaee1245f375a71be1ac9b8a07ba5fb8f">RAPIDJSON_UINT64_C2</a>(0xFFFFFFFF, 0x80000000)))</div><div class="line"><a name="l00726"></a><span class="lineno"> 726</span>&#160; data_.f.flags |= kIntFlag;</div><div class="line"><a name="l00727"></a><span class="lineno"> 727</span>&#160; }</div><div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (i64 &gt;= static_cast&lt;int64_t&gt;(<a class="code" href="rapidjson_8h.html#aaee1245f375a71be1ac9b8a07ba5fb8f">RAPIDJSON_UINT64_C2</a>(0xFFFFFFFF, 0x80000000)))</div><div class="line"><a name="l00729"></a><span class="lineno"> 729</span>&#160; data_.f.flags |= kIntFlag;</div><div class="line"><a name="l00730"></a><span class="lineno"> 730</span>&#160; }</div><div class="line"><a name="l00731"></a><span class="lineno"> 731</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00732"></a><span class="lineno"> 732</span>&#160;<span class="comment"> //! Constructor for uint64_t value.</span></div><div class="line"><a name="l00733"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a1f125e735577aae64c0306345de45563"> 733</a></span>&#160;<span class="comment"></span> <span class="keyword">explicit</span> <a class="code" href="classrapidjson_1_1_generic_value.html#a1f125e735577aae64c0306345de45563">GenericValue</a>(uint64_t u64) RAPIDJSON_NOEXCEPT : data_() {</div><div class="line"><a name="l00734"></a><span class="lineno"> 734</span>&#160; data_.n.u64 = u64;</div><div class="line"><a name="l00735"></a><span class="lineno"> 735</span>&#160; data_.f.flags = kNumberUint64Flag;</div><div class="line"><a name="l00736"></a><span class="lineno"> 736</span>&#160; <span class="keywordflow">if</span> (!(u64 &amp; <a class="code" href="rapidjson_8h.html#aaee1245f375a71be1ac9b8a07ba5fb8f">RAPIDJSON_UINT64_C2</a>(0x80000000, 0x00000000)))</div><div class="line"><a name="l00737"></a><span class="lineno"> 737</span>&#160; data_.f.flags |= kInt64Flag;</div><div class="line"><a name="l00738"></a><span class="lineno"> 738</span>&#160; <span class="keywordflow">if</span> (!(u64 &amp; <a class="code" href="rapidjson_8h.html#aaee1245f375a71be1ac9b8a07ba5fb8f">RAPIDJSON_UINT64_C2</a>(0xFFFFFFFF, 0x00000000)))</div><div class="line"><a name="l00739"></a><span class="lineno"> 739</span>&#160; data_.f.flags |= kUintFlag;</div><div class="line"><a name="l00740"></a><span class="lineno"> 740</span>&#160; <span class="keywordflow">if</span> (!(u64 &amp; <a class="code" href="rapidjson_8h.html#aaee1245f375a71be1ac9b8a07ba5fb8f">RAPIDJSON_UINT64_C2</a>(0xFFFFFFFF, 0x80000000)))</div><div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160; data_.f.flags |= kIntFlag;</div><div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160; }</div><div class="line"><a name="l00743"></a><span class="lineno"> 743</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00744"></a><span class="lineno"> 744</span>&#160;<span class="comment"> //! Constructor for double value.</span></div><div class="line"><a name="l00745"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a71b9e2ec1f7bf9e2f034126ca7b4945a"> 745</a></span>&#160;<span class="comment"></span> <span class="keyword">explicit</span> <a class="code" href="classrapidjson_1_1_generic_value.html#a71b9e2ec1f7bf9e2f034126ca7b4945a">GenericValue</a>(<span class="keywordtype">double</span> d) RAPIDJSON_NOEXCEPT : data_() { data_.n.d = d; data_.f.flags = kNumberDoubleFlag; }</div><div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00747"></a><span class="lineno"> 747</span>&#160;<span class="comment"> //! Constructor for float value.</span></div><div class="line"><a name="l00748"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#afe94e5e86a5b1a3fb605a9f8422f048b"> 748</a></span>&#160;<span class="comment"></span> <span class="keyword">explicit</span> <a class="code" href="classrapidjson_1_1_generic_value.html#afe94e5e86a5b1a3fb605a9f8422f048b">GenericValue</a>(<span class="keywordtype">float</span> f) RAPIDJSON_NOEXCEPT : data_() { data_.n.d = <span class="keyword">static_cast&lt;</span><span class="keywordtype">double</span><span class="keyword">&gt;</span>(f); data_.f.flags = kNumberDoubleFlag; }</div><div class="line"><a name="l00749"></a><span class="lineno"> 749</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00750"></a><span class="lineno"> 750</span>&#160;<span class="comment"> //! Constructor for constant string (i.e. do not make a copy of string)</span></div><div class="line"><a name="l00751"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a51e93a4fb57f77a39767acb076bf43c1"> 751</a></span>&#160;<span class="comment"></span> <a class="code" href="classrapidjson_1_1_generic_value.html#a51e93a4fb57f77a39767acb076bf43c1">GenericValue</a>(<span class="keyword">const</span> Ch* s, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> length) RAPIDJSON_NOEXCEPT : data_() { SetStringRaw(<a class="code" href="namespacerapidjson.html#af94951529a5d51e8c4e6e770bb707c1f">StringRef</a>(s, length)); }</div><div class="line"><a name="l00752"></a><span class="lineno"> 752</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00753"></a><span class="lineno"> 753</span>&#160;<span class="comment"> //! Constructor for constant string (i.e. do not make a copy of string)</span></div><div class="line"><a name="l00754"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a65bfc3073fa80ee5eba8e985abe2f941"> 754</a></span>&#160;<span class="comment"></span> <span class="keyword">explicit</span> <a class="code" href="classrapidjson_1_1_generic_value.html#a65bfc3073fa80ee5eba8e985abe2f941">GenericValue</a>(StringRefType s) RAPIDJSON_NOEXCEPT : data_() { SetStringRaw(s); }</div><div class="line"><a name="l00755"></a><span class="lineno"> 755</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00756"></a><span class="lineno"> 756</span>&#160;<span class="comment"> //! Constructor for copy-string (i.e. do make a copy of string)</span></div><div class="line"><a name="l00757"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#ad9553bb9ccbfd19547c473a95405a8b2"> 757</a></span>&#160;<span class="comment"></span> <a class="code" href="classrapidjson_1_1_generic_value.html#ad9553bb9ccbfd19547c473a95405a8b2">GenericValue</a>(<span class="keyword">const</span> Ch* s, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> length, Allocator&amp; allocator) : data_() { SetStringRaw(<a class="code" href="namespacerapidjson.html#af94951529a5d51e8c4e6e770bb707c1f">StringRef</a>(s, length), allocator); }</div><div class="line"><a name="l00758"></a><span class="lineno"> 758</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00759"></a><span class="lineno"> 759</span>&#160;<span class="comment"> //! Constructor for copy-string (i.e. do make a copy of string)</span></div><div class="line"><a name="l00760"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a83ba61e8a5170c2e172fd60ebc11016f"> 760</a></span>&#160;<span class="comment"></span> <a class="code" href="classrapidjson_1_1_generic_value.html#a83ba61e8a5170c2e172fd60ebc11016f">GenericValue</a>(<span class="keyword">const</span> Ch*s, Allocator&amp; allocator) : data_() { SetStringRaw(<a class="code" href="namespacerapidjson.html#af94951529a5d51e8c4e6e770bb707c1f">StringRef</a>(s), allocator); }</div><div class="line"><a name="l00761"></a><span class="lineno"> 761</span>&#160;</div><div class="line"><a name="l00762"></a><span class="lineno"> 762</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l00763"></a><span class="lineno"> 763</span>&#160;<span class="comment"> //! Constructor for copy-string from a string object (i.e. do make a copy of string)</span></div><div class="line"><a name="l00764"></a><span class="lineno"> 764</span>&#160;<span class="comment"></span><span class="comment"> /*! \note Requires the definition of the preprocessor symbol \ref RAPIDJSON_HAS_STDSTRING.</span></div><div class="line"><a name="l00765"></a><span class="lineno"> 765</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00766"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a852788b35257762cd8d6c4bf5c5d77bc"> 766</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html#a852788b35257762cd8d6c4bf5c5d77bc">GenericValue</a>(<span class="keyword">const</span> std::basic_string&lt;Ch&gt;&amp; s, Allocator&amp; allocator) : data_() { SetStringRaw(<a class="code" href="namespacerapidjson.html#af94951529a5d51e8c4e6e770bb707c1f">StringRef</a>(s), allocator); }</div><div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00769"></a><span class="lineno"> 769</span>&#160;<span class="comment"> //! Constructor for Array.</span></div><div class="line"><a name="l00770"></a><span class="lineno"> 770</span>&#160;<span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l00771"></a><span class="lineno"> 771</span>&#160;<span class="comment"> \param a An array obtained by \c GetArray().</span></div><div class="line"><a name="l00772"></a><span class="lineno"> 772</span>&#160;<span class="comment"> \note \c Array is always pass-by-value.</span></div><div class="line"><a name="l00773"></a><span class="lineno"> 773</span>&#160;<span class="comment"> \note the source array is moved into this value and the sourec array becomes empty.</span></div><div class="line"><a name="l00774"></a><span class="lineno"> 774</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00775"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a77b0f41557b3c34b57a180698312c4a8"> 775</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html#a77b0f41557b3c34b57a180698312c4a8">GenericValue</a>(Array a) RAPIDJSON_NOEXCEPT : data_(a.value_.data_) {</div><div class="line"><a name="l00776"></a><span class="lineno"> 776</span>&#160; a.value_.data_ = Data();</div><div class="line"><a name="l00777"></a><span class="lineno"> 777</span>&#160; a.value_.data_.f.flags = kArrayFlag;</div><div class="line"><a name="l00778"></a><span class="lineno"> 778</span>&#160; }</div><div class="line"><a name="l00779"></a><span class="lineno"> 779</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00780"></a><span class="lineno"> 780</span>&#160;<span class="comment"> //! Constructor for Object.</span></div><div class="line"><a name="l00781"></a><span class="lineno"> 781</span>&#160;<span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l00782"></a><span class="lineno"> 782</span>&#160;<span class="comment"> \param o An object obtained by \c GetObject().</span></div><div class="line"><a name="l00783"></a><span class="lineno"> 783</span>&#160;<span class="comment"> \note \c Object is always pass-by-value.</span></div><div class="line"><a name="l00784"></a><span class="lineno"> 784</span>&#160;<span class="comment"> \note the source object is moved into this value and the sourec object becomes empty.</span></div><div class="line"><a name="l00785"></a><span class="lineno"> 785</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00786"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a893da1069660536fd3943a0149206a6e"> 786</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html#a893da1069660536fd3943a0149206a6e">GenericValue</a>(Object o) RAPIDJSON_NOEXCEPT : data_(o.value_.data_) {</div><div class="line"><a name="l00787"></a><span class="lineno"> 787</span>&#160; o.value_.data_ = Data();</div><div class="line"><a name="l00788"></a><span class="lineno"> 788</span>&#160; o.value_.data_.f.flags = kObjectFlag;</div><div class="line"><a name="l00789"></a><span class="lineno"> 789</span>&#160; }</div><div class="line"><a name="l00790"></a><span class="lineno"> 790</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00791"></a><span class="lineno"> 791</span>&#160;<span class="comment"> //! Destructor.</span></div><div class="line"><a name="l00792"></a><span class="lineno"> 792</span>&#160;<span class="comment"></span><span class="comment"> /*! Need to destruct elements of array, members of object, or copy-string.</span></div><div class="line"><a name="l00793"></a><span class="lineno"> 793</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00794"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a433a64b466c80cadf7d1acaa6f065437"> 794</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html#a433a64b466c80cadf7d1acaa6f065437">~GenericValue</a>() {</div><div class="line"><a name="l00795"></a><span class="lineno"> 795</span>&#160; <span class="keywordflow">if</span> (Allocator::kNeedFree) { <span class="comment">// Shortcut by Allocator&#39;s trait</span></div><div class="line"><a name="l00796"></a><span class="lineno"> 796</span>&#160; <span class="keywordflow">switch</span>(data_.f.flags) {</div><div class="line"><a name="l00797"></a><span class="lineno"> 797</span>&#160; <span class="keywordflow">case</span> kArrayFlag:</div><div class="line"><a name="l00798"></a><span class="lineno"> 798</span>&#160; {</div><div class="line"><a name="l00799"></a><span class="lineno"> 799</span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>* e = GetElementsPointer();</div><div class="line"><a name="l00800"></a><span class="lineno"> 800</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>* v = e; v != e + data_.a.size; ++v)</div><div class="line"><a name="l00801"></a><span class="lineno"> 801</span>&#160; v-&gt;~GenericValue();</div><div class="line"><a name="l00802"></a><span class="lineno"> 802</span>&#160; Allocator::Free(e);</div><div class="line"><a name="l00803"></a><span class="lineno"> 803</span>&#160; }</div><div class="line"><a name="l00804"></a><span class="lineno"> 804</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00805"></a><span class="lineno"> 805</span>&#160;</div><div class="line"><a name="l00806"></a><span class="lineno"> 806</span>&#160; <span class="keywordflow">case</span> kObjectFlag:</div><div class="line"><a name="l00807"></a><span class="lineno"> 807</span>&#160; <span class="keywordflow">for</span> (MemberIterator m = MemberBegin(); m != MemberEnd(); ++m)</div><div class="line"><a name="l00808"></a><span class="lineno"> 808</span>&#160; m-&gt;~Member();</div><div class="line"><a name="l00809"></a><span class="lineno"> 809</span>&#160; Allocator::Free(GetMembersPointer());</div><div class="line"><a name="l00810"></a><span class="lineno"> 810</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00811"></a><span class="lineno"> 811</span>&#160;</div><div class="line"><a name="l00812"></a><span class="lineno"> 812</span>&#160; <span class="keywordflow">case</span> kCopyStringFlag:</div><div class="line"><a name="l00813"></a><span class="lineno"> 813</span>&#160; Allocator::Free(const_cast&lt;Ch*&gt;(GetStringPointer()));</div><div class="line"><a name="l00814"></a><span class="lineno"> 814</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00815"></a><span class="lineno"> 815</span>&#160;</div><div class="line"><a name="l00816"></a><span class="lineno"> 816</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l00817"></a><span class="lineno"> 817</span>&#160; <span class="keywordflow">break</span>; <span class="comment">// Do nothing for other types.</span></div><div class="line"><a name="l00818"></a><span class="lineno"> 818</span>&#160; }</div><div class="line"><a name="l00819"></a><span class="lineno"> 819</span>&#160; }</div><div class="line"><a name="l00820"></a><span class="lineno"> 820</span>&#160; }</div><div class="line"><a name="l00821"></a><span class="lineno"> 821</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00822"></a><span class="lineno"> 822</span>&#160;<span class="comment"> //@}</span></div><div class="line"><a name="l00823"></a><span class="lineno"> 823</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00824"></a><span class="lineno"> 824</span>&#160;<span class="comment"> //!@name Assignment operators</span></div><div class="line"><a name="l00825"></a><span class="lineno"> 825</span>&#160;<span class="comment"></span><span class="comment"> //@{</span></div><div class="line"><a name="l00826"></a><span class="lineno"> 826</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00827"></a><span class="lineno"> 827</span>&#160;<span class="comment"> //! Assignment with move semantics.</span></div><div class="line"><a name="l00828"></a><span class="lineno"> 828</span>&#160;<span class="comment"></span><span class="comment"> /*! \param rhs Source of the assignment. It will become a null value after assignment.</span></div><div class="line"><a name="l00829"></a><span class="lineno"> 829</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00830"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#ae8bcedd951f50b69786aaaa1828e9fac"> 830</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#ae8bcedd951f50b69786aaaa1828e9fac">operator=</a>(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; rhs) RAPIDJSON_NOEXCEPT {</div><div class="line"><a name="l00831"></a><span class="lineno"> 831</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga5dc14176a9e71ace282404b0bcda57a1">RAPIDJSON_LIKELY</a>(<span class="keyword">this</span> != &amp;rhs)) {</div><div class="line"><a name="l00832"></a><span class="lineno"> 832</span>&#160; this-&gt;~<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>();</div><div class="line"><a name="l00833"></a><span class="lineno"> 833</span>&#160; RawAssign(rhs);</div><div class="line"><a name="l00834"></a><span class="lineno"> 834</span>&#160; }</div><div class="line"><a name="l00835"></a><span class="lineno"> 835</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00836"></a><span class="lineno"> 836</span>&#160; }</div><div class="line"><a name="l00837"></a><span class="lineno"> 837</span>&#160;</div><div class="line"><a name="l00838"></a><span class="lineno"> 838</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l00839"></a><span class="lineno"> 839</span>&#160;<span class="comment"> //! Move assignment in C++11</span></div><div class="line"><a name="l00840"></a><span class="lineno"> 840</span>&#160;<span class="comment"></span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; operator=(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp;&amp; rhs) RAPIDJSON_NOEXCEPT {</div><div class="line"><a name="l00841"></a><span class="lineno"> 841</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span> = rhs.<a class="code" href="classrapidjson_1_1_generic_value.html#a07b19e65fb756cae13e5bdc515cfbd4b">Move</a>();</div><div class="line"><a name="l00842"></a><span class="lineno"> 842</span>&#160; }</div><div class="line"><a name="l00843"></a><span class="lineno"> 843</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00844"></a><span class="lineno"> 844</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00845"></a><span class="lineno"> 845</span>&#160;<span class="comment"> //! Assignment of constant string reference (no copy)</span></div><div class="line"><a name="l00846"></a><span class="lineno"> 846</span>&#160;<span class="comment"></span><span class="comment"> /*! \param str Constant string reference to be assigned</span></div><div class="line"><a name="l00847"></a><span class="lineno"> 847</span>&#160;<span class="comment"> \note This overload is needed to avoid clashes with the generic primitive type assignment overload below.</span></div><div class="line"><a name="l00848"></a><span class="lineno"> 848</span>&#160;<span class="comment"> \see GenericStringRef, operator=(T)</span></div><div class="line"><a name="l00849"></a><span class="lineno"> 849</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00850"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#aecc9d0a6aafe31f4fdf9f6e75e5f089c"> 850</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#aecc9d0a6aafe31f4fdf9f6e75e5f089c">operator=</a>(StringRefType str) RAPIDJSON_NOEXCEPT {</div><div class="line"><a name="l00851"></a><span class="lineno"> 851</span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a> s(str);</div><div class="line"><a name="l00852"></a><span class="lineno"> 852</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span> = s;</div><div class="line"><a name="l00853"></a><span class="lineno"> 853</span>&#160; }</div><div class="line"><a name="l00854"></a><span class="lineno"> 854</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00855"></a><span class="lineno"> 855</span>&#160;<span class="comment"> //! Assignment with primitive types.</span></div><div class="line"><a name="l00856"></a><span class="lineno"> 856</span>&#160;<span class="comment"></span><span class="comment"> /*! \tparam T Either \ref Type, \c int, \c unsigned, \c int64_t, \c uint64_t</span></div><div class="line"><a name="l00857"></a><span class="lineno"> 857</span>&#160;<span class="comment"> \param value The value to be assigned.</span></div><div class="line"><a name="l00858"></a><span class="lineno"> 858</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00859"></a><span class="lineno"> 859</span>&#160;<span class="comment"> \note The source type \c T explicitly disallows all pointer types,</span></div><div class="line"><a name="l00860"></a><span class="lineno"> 860</span>&#160;<span class="comment"> especially (\c const) \ref Ch*. This helps avoiding implicitly</span></div><div class="line"><a name="l00861"></a><span class="lineno"> 861</span>&#160;<span class="comment"> referencing character strings with insufficient lifetime, use</span></div><div class="line"><a name="l00862"></a><span class="lineno"> 862</span>&#160;<span class="comment"> \ref SetString(const Ch*, Allocator&amp;) (for copying) or</span></div><div class="line"><a name="l00863"></a><span class="lineno"> 863</span>&#160;<span class="comment"> \ref StringRef() (to explicitly mark the pointer as constant) instead.</span></div><div class="line"><a name="l00864"></a><span class="lineno"> 864</span>&#160;<span class="comment"> All other pointer types would implicitly convert to \c bool,</span></div><div class="line"><a name="l00865"></a><span class="lineno"> 865</span>&#160;<span class="comment"> use \ref SetBool() instead.</span></div><div class="line"><a name="l00866"></a><span class="lineno"> 866</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00867"></a><span class="lineno"> 867</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l00868"></a><span class="lineno"> 868</span>&#160; RAPIDJSON_DISABLEIF_RETURN((internal::IsPointer&lt;T&gt;), (<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp;))</div><div class="line"><a name="l00869"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#ab7446da62fdc61d6d987d508cdb6ac13"> 869</a></span>&#160; operator=(T value) {</div><div class="line"><a name="l00870"></a><span class="lineno"> 870</span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a> v(value);</div><div class="line"><a name="l00871"></a><span class="lineno"> 871</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span> = v;</div><div class="line"><a name="l00872"></a><span class="lineno"> 872</span>&#160; }</div><div class="line"><a name="l00873"></a><span class="lineno"> 873</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00874"></a><span class="lineno"> 874</span>&#160;<span class="comment"> //! Deep-copy assignment from Value</span></div><div class="line"><a name="l00875"></a><span class="lineno"> 875</span>&#160;<span class="comment"></span><span class="comment"> /*! Assigns a \b copy of the Value to the current Value object</span></div><div class="line"><a name="l00876"></a><span class="lineno"> 876</span>&#160;<span class="comment"> \tparam SourceAllocator Allocator type of \c rhs</span></div><div class="line"><a name="l00877"></a><span class="lineno"> 877</span>&#160;<span class="comment"> \param rhs Value to copy from (read-only)</span></div><div class="line"><a name="l00878"></a><span class="lineno"> 878</span>&#160;<span class="comment"> \param allocator Allocator to use for copying</span></div><div class="line"><a name="l00879"></a><span class="lineno"> 879</span>&#160;<span class="comment"> \param copyConstStrings Force copying of constant strings (e.g. referencing an in-situ buffer)</span></div><div class="line"><a name="l00880"></a><span class="lineno"> 880</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00881"></a><span class="lineno"> 881</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> SourceAllocator&gt;</div><div class="line"><a name="l00882"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#ad9399a2a69444c44a9db2f63c3aa3eae"> 882</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#ad9399a2a69444c44a9db2f63c3aa3eae">CopyFrom</a>(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue&lt;Encoding, SourceAllocator&gt;</a>&amp; rhs, Allocator&amp; allocator, <span class="keywordtype">bool</span> copyConstStrings = <span class="keyword">false</span>) {</div><div class="line"><a name="l00883"></a><span class="lineno"> 883</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(static_cast&lt;void*&gt;(<span class="keyword">this</span>) != static_cast&lt;void const*&gt;(&amp;rhs));</div><div class="line"><a name="l00884"></a><span class="lineno"> 884</span>&#160; this-&gt;~<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>();</div><div class="line"><a name="l00885"></a><span class="lineno"> 885</span>&#160; <span class="keyword">new</span> (<span class="keyword">this</span>) <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(rhs, allocator, copyConstStrings);</div><div class="line"><a name="l00886"></a><span class="lineno"> 886</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00887"></a><span class="lineno"> 887</span>&#160; }</div><div class="line"><a name="l00888"></a><span class="lineno"> 888</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00889"></a><span class="lineno"> 889</span>&#160;<span class="comment"> //! Exchange the contents of this value with those of other.</span></div><div class="line"><a name="l00890"></a><span class="lineno"> 890</span>&#160;<span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l00891"></a><span class="lineno"> 891</span>&#160;<span class="comment"> \param other Another value.</span></div><div class="line"><a name="l00892"></a><span class="lineno"> 892</span>&#160;<span class="comment"> \note Constant complexity.</span></div><div class="line"><a name="l00893"></a><span class="lineno"> 893</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00894"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a06f10ef54f5692ce08206c26624a21db"> 894</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#a06f10ef54f5692ce08206c26624a21db">Swap</a>(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; other) RAPIDJSON_NOEXCEPT {</div><div class="line"><a name="l00895"></a><span class="lineno"> 895</span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a> temp;</div><div class="line"><a name="l00896"></a><span class="lineno"> 896</span>&#160; temp.RawAssign(*<span class="keyword">this</span>);</div><div class="line"><a name="l00897"></a><span class="lineno"> 897</span>&#160; RawAssign(other);</div><div class="line"><a name="l00898"></a><span class="lineno"> 898</span>&#160; other.RawAssign(temp);</div><div class="line"><a name="l00899"></a><span class="lineno"> 899</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00900"></a><span class="lineno"> 900</span>&#160; }</div><div class="line"><a name="l00901"></a><span class="lineno"> 901</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00902"></a><span class="lineno"> 902</span>&#160;<span class="comment"> //! free-standing swap function helper</span></div><div class="line"><a name="l00903"></a><span class="lineno"> 903</span>&#160;<span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l00904"></a><span class="lineno"> 904</span>&#160;<span class="comment"> Helper function to enable support for common swap implementation pattern based on \c std::swap:</span></div><div class="line"><a name="l00905"></a><span class="lineno"> 905</span>&#160;<span class="comment"> \code</span></div><div class="line"><a name="l00906"></a><span class="lineno"> 906</span>&#160;<span class="comment"> void swap(MyClass&amp; a, MyClass&amp; b) {</span></div><div class="line"><a name="l00907"></a><span class="lineno"> 907</span>&#160;<span class="comment"> using std::swap;</span></div><div class="line"><a name="l00908"></a><span class="lineno"> 908</span>&#160;<span class="comment"> swap(a.value, b.value);</span></div><div class="line"><a name="l00909"></a><span class="lineno"> 909</span>&#160;<span class="comment"> // ...</span></div><div class="line"><a name="l00910"></a><span class="lineno"> 910</span>&#160;<span class="comment"> }</span></div><div class="line"><a name="l00911"></a><span class="lineno"> 911</span>&#160;<span class="comment"> \endcode</span></div><div class="line"><a name="l00912"></a><span class="lineno"> 912</span>&#160;<span class="comment"> \see Swap()</span></div><div class="line"><a name="l00913"></a><span class="lineno"> 913</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00914"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a58ecce8a34fc029039b8079de246bdaa"> 914</a></span>&#160; <span class="keyword">friend</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classrapidjson_1_1_generic_value.html#a58ecce8a34fc029039b8079de246bdaa">swap</a>(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; a, <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; b) RAPIDJSON_NOEXCEPT { a.Swap(b); }</div><div class="line"><a name="l00915"></a><span class="lineno"> 915</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00916"></a><span class="lineno"> 916</span>&#160;<span class="comment"> //! Prepare Value for move semantics</span></div><div class="line"><a name="l00917"></a><span class="lineno"> 917</span>&#160;<span class="comment"></span><span class="comment"> /*! \return *this */</span></div><div class="line"><a name="l00918"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a07b19e65fb756cae13e5bdc515cfbd4b"> 918</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#a07b19e65fb756cae13e5bdc515cfbd4b">Move</a>() RAPIDJSON_NOEXCEPT { <span class="keywordflow">return</span> *<span class="keyword">this</span>; }<span class="comment"></span></div><div class="line"><a name="l00919"></a><span class="lineno"> 919</span>&#160;<span class="comment"> //@}</span></div><div class="line"><a name="l00920"></a><span class="lineno"> 920</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00921"></a><span class="lineno"> 921</span>&#160;<span class="comment"> //!@name Equal-to and not-equal-to operators</span></div><div class="line"><a name="l00922"></a><span class="lineno"> 922</span>&#160;<span class="comment"></span><span class="comment"> //@{</span></div><div class="line"><a name="l00923"></a><span class="lineno"> 923</span>&#160;<span class="comment"></span><span class="comment"> //! Equal-to operator</span></div><div class="line"><a name="l00924"></a><span class="lineno"> 924</span>&#160;<span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l00925"></a><span class="lineno"> 925</span>&#160;<span class="comment"> \note If an object contains duplicated named member, comparing equality with any object is always \c false.</span></div><div class="line"><a name="l00926"></a><span class="lineno"> 926</span>&#160;<span class="comment"> \note Linear time complexity (number of all values in the subtree and total lengths of all strings).</span></div><div class="line"><a name="l00927"></a><span class="lineno"> 927</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00928"></a><span class="lineno"> 928</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> SourceAllocator&gt;</div><div class="line"><a name="l00929"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#ab4e5285102bb686f39bca2855a17a181"> 929</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_generic_value.html#ab4e5285102bb686f39bca2855a17a181">operator==</a>(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue&lt;Encoding, SourceAllocator&gt;</a>&amp; rhs)<span class="keyword"> const </span>{</div><div class="line"><a name="l00930"></a><span class="lineno"> 930</span>&#160; <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue&lt;Encoding, SourceAllocator&gt;</a> RhsType;</div><div class="line"><a name="l00931"></a><span class="lineno"> 931</span>&#160; <span class="keywordflow">if</span> (GetType() != rhs.GetType())</div><div class="line"><a name="l00932"></a><span class="lineno"> 932</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00933"></a><span class="lineno"> 933</span>&#160;</div><div class="line"><a name="l00934"></a><span class="lineno"> 934</span>&#160; <span class="keywordflow">switch</span> (GetType()) {</div><div class="line"><a name="l00935"></a><span class="lineno"> 935</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4acf030b422a32c3647c7c5973bd4dd0a9">kObjectType</a>: <span class="comment">// Warning: O(n^2) inner-loop</span></div><div class="line"><a name="l00936"></a><span class="lineno"> 936</span>&#160; <span class="keywordflow">if</span> (data_.o.size != rhs.data_.o.size)</div><div class="line"><a name="l00937"></a><span class="lineno"> 937</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>; </div><div class="line"><a name="l00938"></a><span class="lineno"> 938</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classrapidjson_1_1_generic_member_iterator.html">ConstMemberIterator</a> lhsMemberItr = MemberBegin(); lhsMemberItr != MemberEnd(); ++lhsMemberItr) {</div><div class="line"><a name="l00939"></a><span class="lineno"> 939</span>&#160; <span class="keyword">typename</span> RhsType::ConstMemberIterator rhsMemberItr = rhs.<a class="code" href="classrapidjson_1_1_generic_value.html#ad22fdeac87ec6c370dd43075d3586811">FindMember</a>(lhsMemberItr-&gt;name);</div><div class="line"><a name="l00940"></a><span class="lineno"> 940</span>&#160; <span class="keywordflow">if</span> (rhsMemberItr == rhs.<a class="code" href="classrapidjson_1_1_generic_value.html#a34ee3d75a7aa308043fb34b0743bfe7c">MemberEnd</a>() || lhsMemberItr-&gt;value != rhsMemberItr-&gt;value)</div><div class="line"><a name="l00941"></a><span class="lineno"> 941</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00942"></a><span class="lineno"> 942</span>&#160; }</div><div class="line"><a name="l00943"></a><span class="lineno"> 943</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00944"></a><span class="lineno"> 944</span>&#160; </div><div class="line"><a name="l00945"></a><span class="lineno"> 945</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a058c622e1e7d59419ae58b895cbce468">kArrayType</a>:</div><div class="line"><a name="l00946"></a><span class="lineno"> 946</span>&#160; <span class="keywordflow">if</span> (data_.a.size != rhs.data_.a.size)</div><div class="line"><a name="l00947"></a><span class="lineno"> 947</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00948"></a><span class="lineno"> 948</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> i = 0; i &lt; data_.a.size; i++)</div><div class="line"><a name="l00949"></a><span class="lineno"> 949</span>&#160; <span class="keywordflow">if</span> ((*<span class="keyword">this</span>)[i] != rhs[i])</div><div class="line"><a name="l00950"></a><span class="lineno"> 950</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00951"></a><span class="lineno"> 951</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00952"></a><span class="lineno"> 952</span>&#160;</div><div class="line"><a name="l00953"></a><span class="lineno"> 953</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4ad6379da3dc04b83a591992bfb9fabba7">kStringType</a>:</div><div class="line"><a name="l00954"></a><span class="lineno"> 954</span>&#160; <span class="keywordflow">return</span> StringEqual(rhs);</div><div class="line"><a name="l00955"></a><span class="lineno"> 955</span>&#160;</div><div class="line"><a name="l00956"></a><span class="lineno"> 956</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a">kNumberType</a>:</div><div class="line"><a name="l00957"></a><span class="lineno"> 957</span>&#160; <span class="keywordflow">if</span> (IsDouble() || rhs.IsDouble()) {</div><div class="line"><a name="l00958"></a><span class="lineno"> 958</span>&#160; <span class="keywordtype">double</span> a = GetDouble(); <span class="comment">// May convert from integer to double.</span></div><div class="line"><a name="l00959"></a><span class="lineno"> 959</span>&#160; <span class="keywordtype">double</span> b = rhs.<a class="code" href="classrapidjson_1_1_generic_value.html#aa27d086d265f0ce447b15b15f0a2ed6e">GetDouble</a>(); <span class="comment">// Ditto</span></div><div class="line"><a name="l00960"></a><span class="lineno"> 960</span>&#160; <span class="keywordflow">return</span> a &gt;= b &amp;&amp; a &lt;= b; <span class="comment">// Prevent -Wfloat-equal</span></div><div class="line"><a name="l00961"></a><span class="lineno"> 961</span>&#160; }</div><div class="line"><a name="l00962"></a><span class="lineno"> 962</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00963"></a><span class="lineno"> 963</span>&#160; <span class="keywordflow">return</span> data_.n.u64 == rhs.data_.n.u64;</div><div class="line"><a name="l00964"></a><span class="lineno"> 964</span>&#160;</div><div class="line"><a name="l00965"></a><span class="lineno"> 965</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l00966"></a><span class="lineno"> 966</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00967"></a><span class="lineno"> 967</span>&#160; }</div><div class="line"><a name="l00968"></a><span class="lineno"> 968</span>&#160; }</div><div class="line"><a name="l00969"></a><span class="lineno"> 969</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00970"></a><span class="lineno"> 970</span>&#160;<span class="comment"> //! Equal-to operator with const C-string pointer</span></div><div class="line"><a name="l00971"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#af03ef6020e188bbfceb018da5cd8becc"> 971</a></span>&#160;<span class="comment"></span> <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_generic_value.html#af03ef6020e188bbfceb018da5cd8becc">operator==</a>(<span class="keyword">const</span> Ch* rhs)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> *<span class="keyword">this</span> == <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(<a class="code" href="namespacerapidjson.html#af94951529a5d51e8c4e6e770bb707c1f">StringRef</a>(rhs)); }</div><div class="line"><a name="l00972"></a><span class="lineno"> 972</span>&#160;</div><div class="line"><a name="l00973"></a><span class="lineno"> 973</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l00974"></a><span class="lineno"> 974</span>&#160;<span class="comment"> //! Equal-to operator with string object</span></div><div class="line"><a name="l00975"></a><span class="lineno"> 975</span>&#160;<span class="comment"></span><span class="comment"> /*! \note Requires the definition of the preprocessor symbol \ref RAPIDJSON_HAS_STDSTRING.</span></div><div class="line"><a name="l00976"></a><span class="lineno"> 976</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00977"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#af089d2bee0386ca7504ff4fab466c87f"> 977</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_generic_value.html#af089d2bee0386ca7504ff4fab466c87f">operator==</a>(<span class="keyword">const</span> std::basic_string&lt;Ch&gt;&amp; rhs)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> *<span class="keyword">this</span> == <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(<a class="code" href="namespacerapidjson.html#af94951529a5d51e8c4e6e770bb707c1f">StringRef</a>(rhs)); }</div><div class="line"><a name="l00978"></a><span class="lineno"> 978</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00979"></a><span class="lineno"> 979</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00980"></a><span class="lineno"> 980</span>&#160;<span class="comment"> //! Equal-to operator with primitive types</span></div><div class="line"><a name="l00981"></a><span class="lineno"> 981</span>&#160;<span class="comment"></span><span class="comment"> /*! \tparam T Either \ref Type, \c int, \c unsigned, \c int64_t, \c uint64_t, \c double, \c true, \c false</span></div><div class="line"><a name="l00982"></a><span class="lineno"> 982</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00983"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#aaddbbbb35cd783f209f889cf8dea9570"> 983</a></span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt; RAPIDJSON_DISABLEIF_RETURN((internal::OrExpr&lt;internal::IsPointer&lt;T&gt;,internal::IsGenericValue&lt;T&gt; &gt;), (<span class="keywordtype">bool</span>)) <a class="code" href="classrapidjson_1_1_generic_value.html#aaddbbbb35cd783f209f889cf8dea9570">operator==</a>(<span class="keyword">const</span> T&amp; rhs)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> *<span class="keyword">this</span> == <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(rhs); }</div><div class="line"><a name="l00984"></a><span class="lineno"> 984</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00985"></a><span class="lineno"> 985</span>&#160;<span class="comment"> //! Not-equal-to operator</span></div><div class="line"><a name="l00986"></a><span class="lineno"> 986</span>&#160;<span class="comment"></span><span class="comment"> /*! \return !(*this == rhs)</span></div><div class="line"><a name="l00987"></a><span class="lineno"> 987</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00988"></a><span class="lineno"> 988</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> SourceAllocator&gt;</div><div class="line"><a name="l00989"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#ad5bf5afd53f21f370f917041b3be4bfc"> 989</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_generic_value.html#ad5bf5afd53f21f370f917041b3be4bfc">operator!=</a>(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue&lt;Encoding, SourceAllocator&gt;</a>&amp; rhs)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> !(*<span class="keyword">this</span> == rhs); }</div><div class="line"><a name="l00990"></a><span class="lineno"> 990</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00991"></a><span class="lineno"> 991</span>&#160;<span class="comment"> //! Not-equal-to operator with const C-string pointer</span></div><div class="line"><a name="l00992"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a6443cf5323fb46c4c51cd15a365da49b"> 992</a></span>&#160;<span class="comment"></span> <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_generic_value.html#a6443cf5323fb46c4c51cd15a365da49b">operator!=</a>(<span class="keyword">const</span> Ch* rhs)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> !(*<span class="keyword">this</span> == rhs); }</div><div class="line"><a name="l00993"></a><span class="lineno"> 993</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00994"></a><span class="lineno"> 994</span>&#160;<span class="comment"> //! Not-equal-to operator with arbitrary types</span></div><div class="line"><a name="l00995"></a><span class="lineno"> 995</span>&#160;<span class="comment"></span><span class="comment"> /*! \return !(*this == rhs)</span></div><div class="line"><a name="l00996"></a><span class="lineno"> 996</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00997"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#ae6fe0576ff0336f6e2b09fe32f3ff809"> 997</a></span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt; RAPIDJSON_DISABLEIF_RETURN((internal::IsGenericValue&lt;T&gt;), (<span class="keywordtype">bool</span>)) <a class="code" href="classrapidjson_1_1_generic_value.html#ae6fe0576ff0336f6e2b09fe32f3ff809">operator!=</a>(<span class="keyword">const</span> T&amp; rhs)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> !(*<span class="keyword">this</span> == rhs); }</div><div class="line"><a name="l00998"></a><span class="lineno"> 998</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00999"></a><span class="lineno"> 999</span>&#160;<span class="comment"> //! Equal-to operator with arbitrary types (symmetric version)</span></div><div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>&#160;<span class="comment"></span><span class="comment"> /*! \return (rhs == lhs)</span></div><div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01002"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#aaa465706fda1e1ef4513ce877e0b4b69"> 1002</a></span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt; <span class="keyword">friend</span> RAPIDJSON_DISABLEIF_RETURN((internal::IsGenericValue&lt;T&gt;), (<span class="keywordtype">bool</span>)) <a class="code" href="classrapidjson_1_1_generic_value.html#aaa465706fda1e1ef4513ce877e0b4b69">operator==</a>(<span class="keyword">const</span> T&amp; lhs, <span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; rhs) { <span class="keywordflow">return</span> rhs == lhs; }</div><div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>&#160;<span class="comment"> //! Not-Equal-to operator with arbitrary types (symmetric version)</span></div><div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>&#160;<span class="comment"></span><span class="comment"> /*! \return !(rhs == lhs)</span></div><div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01007"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#ae08898bef949f217f0e5d28e19f05992"> 1007</a></span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt; <span class="keyword">friend</span> RAPIDJSON_DISABLEIF_RETURN((internal::IsGenericValue&lt;T&gt;), (<span class="keywordtype">bool</span>)) <a class="code" href="classrapidjson_1_1_generic_value.html#ae08898bef949f217f0e5d28e19f05992">operator!=</a>(<span class="keyword">const</span> T&amp; lhs, <span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; rhs) { <span class="keywordflow">return</span> !(rhs == lhs); }<span class="comment"></span></div><div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>&#160;<span class="comment"> //@}</span></div><div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>&#160;<span class="comment"> //!@name Type</span></div><div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>&#160;<span class="comment"></span><span class="comment"> //@{</span></div><div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>&#160; <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">Type</a> GetType()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span><a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">Type</a><span class="keyword">&gt;</span>(data_.f.flags &amp; kTypeMask); }</div><div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>&#160; <span class="keywordtype">bool</span> IsNull()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> data_.f.flags == kNullFlag; }</div><div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>&#160; <span class="keywordtype">bool</span> IsFalse()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> data_.f.flags == kFalseFlag; }</div><div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>&#160; <span class="keywordtype">bool</span> IsTrue()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> data_.f.flags == kTrueFlag; }</div><div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>&#160; <span class="keywordtype">bool</span> IsBool()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (data_.f.flags &amp; kBoolFlag) != 0; }</div><div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>&#160; <span class="keywordtype">bool</span> IsObject()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> data_.f.flags == kObjectFlag; }</div><div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>&#160; <span class="keywordtype">bool</span> IsArray()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> data_.f.flags == kArrayFlag; }</div><div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>&#160; <span class="keywordtype">bool</span> IsNumber()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (data_.f.flags &amp; kNumberFlag) != 0; }</div><div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>&#160; <span class="keywordtype">bool</span> IsInt()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (data_.f.flags &amp; kIntFlag) != 0; }</div><div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>&#160; <span class="keywordtype">bool</span> IsUint()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (data_.f.flags &amp; kUintFlag) != 0; }</div><div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>&#160; <span class="keywordtype">bool</span> IsInt64()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (data_.f.flags &amp; kInt64Flag) != 0; }</div><div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>&#160; <span class="keywordtype">bool</span> IsUint64()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (data_.f.flags &amp; kUint64Flag) != 0; }</div><div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>&#160; <span class="keywordtype">bool</span> IsDouble()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (data_.f.flags &amp; kDoubleFlag) != 0; }</div><div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>&#160; <span class="keywordtype">bool</span> IsString()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (data_.f.flags &amp; kStringFlag) != 0; }</div><div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>&#160;</div><div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>&#160; <span class="comment">// Checks whether a number can be losslessly converted to a double.</span></div><div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>&#160; <span class="keywordtype">bool</span> IsLosslessDouble()<span class="keyword"> const </span>{</div><div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>&#160; <span class="keywordflow">if</span> (!IsNumber()) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>&#160; <span class="keywordflow">if</span> (IsUint64()) {</div><div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>&#160; uint64_t u = GetUint64();</div><div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>&#160; <span class="keyword">volatile</span> <span class="keywordtype">double</span> d = <span class="keyword">static_cast&lt;</span><span class="keywordtype">double</span><span class="keyword">&gt;</span>(u);</div><div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>&#160; <span class="keywordflow">return</span> (d &gt;= 0.0)</div><div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>&#160; &amp;&amp; (d &lt; static_cast&lt;double&gt;((std::numeric_limits&lt;uint64_t&gt;::max)()))</div><div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>&#160; &amp;&amp; (u == <span class="keyword">static_cast&lt;</span>uint64_t<span class="keyword">&gt;</span>(d));</div><div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>&#160; }</div><div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>&#160; <span class="keywordflow">if</span> (IsInt64()) {</div><div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>&#160; int64_t i = GetInt64();</div><div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>&#160; <span class="keyword">volatile</span> <span class="keywordtype">double</span> d = <span class="keyword">static_cast&lt;</span><span class="keywordtype">double</span><span class="keyword">&gt;</span>(i);</div><div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>&#160; <span class="keywordflow">return</span> (d &gt;= static_cast&lt;double&gt;((std::numeric_limits&lt;int64_t&gt;::min)()))</div><div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>&#160; &amp;&amp; (d &lt; static_cast&lt;double&gt;((std::numeric_limits&lt;int64_t&gt;::max)()))</div><div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>&#160; &amp;&amp; (i == static_cast&lt;int64_t&gt;(d));</div><div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>&#160; }</div><div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>; <span class="comment">// double, int, uint are always lossless</span></div><div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>&#160; }</div><div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>&#160;</div><div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>&#160; <span class="comment">// Checks whether a number is a float (possible lossy).</span></div><div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>&#160; <span class="keywordtype">bool</span> IsFloat()<span class="keyword"> const </span>{</div><div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>&#160; <span class="keywordflow">if</span> ((data_.f.flags &amp; kDoubleFlag) == 0)</div><div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>&#160; <span class="keywordtype">double</span> d = GetDouble();</div><div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>&#160; <span class="keywordflow">return</span> d &gt;= -3.4028234e38 &amp;&amp; d &lt;= 3.4028234e38;</div><div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>&#160; }</div><div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>&#160; <span class="comment">// Checks whether a number can be losslessly converted to a float.</span></div><div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>&#160; <span class="keywordtype">bool</span> IsLosslessFloat()<span class="keyword"> const </span>{</div><div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>&#160; <span class="keywordflow">if</span> (!IsNumber()) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>&#160; <span class="keywordtype">double</span> a = GetDouble();</div><div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>&#160; <span class="keywordflow">if</span> (a &lt; static_cast&lt;double&gt;(-(std::numeric_limits&lt;float&gt;::max)())</div><div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>&#160; || a &gt; static_cast&lt;double&gt;((std::numeric_limits&lt;float&gt;::max)()))</div><div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>&#160; <span class="keywordtype">double</span> b = <span class="keyword">static_cast&lt;</span><span class="keywordtype">double</span><span class="keyword">&gt;</span>(<span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span>(a));</div><div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>&#160; <span class="keywordflow">return</span> a &gt;= b &amp;&amp; a &lt;= b; <span class="comment">// Prevent -Wfloat-equal</span></div><div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>&#160; }</div><div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>&#160;<span class="comment"> //@}</span></div><div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>&#160;<span class="comment"> //!@name Null</span></div><div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>&#160;<span class="comment"></span><span class="comment"> //@{</span></div><div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; SetNull() { this-&gt;~<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(); <span class="keyword">new</span> (<span class="keyword">this</span>) <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>&#160;<span class="comment"> //@}</span></div><div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>&#160;<span class="comment"> //!@name Bool</span></div><div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>&#160;<span class="comment"></span><span class="comment"> //@{</span></div><div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01078"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a78d80b935babeedbfa71914a8fe5baa7"> 1078</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_generic_value.html#a78d80b935babeedbfa71914a8fe5baa7">GetBool</a>()<span class="keyword"> const </span>{ <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsBool()); <span class="keywordflow">return</span> data_.f.flags == kTrueFlag; }<span class="comment"></span></div><div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>&#160;<span class="comment"> //!&lt; Set boolean value</span></div><div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>&#160;<span class="comment"></span><span class="comment"> /*! \post IsBool() == true */</span></div><div class="line"><a name="l01081"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a5623c9039977ca0daf394e5c12f10c2d"> 1081</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#a5623c9039977ca0daf394e5c12f10c2d">SetBool</a>(<span class="keywordtype">bool</span> b) { this-&gt;~<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(); <span class="keyword">new</span> (<span class="keyword">this</span>) <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(b); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>&#160;<span class="comment"> //@}</span></div><div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>&#160;<span class="comment"> //!@name Object</span></div><div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>&#160;<span class="comment"></span><span class="comment"> //@{</span></div><div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>&#160;<span class="comment"> //! Set this value as an empty object.</span></div><div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>&#160;<span class="comment"></span><span class="comment"> /*! \post IsObject() == true */</span></div><div class="line"><a name="l01090"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a7cb3cbaefe4fb99aaf9f155fb4ee039b"> 1090</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#a7cb3cbaefe4fb99aaf9f155fb4ee039b">SetObject</a>() { this-&gt;~<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(); <span class="keyword">new</span> (<span class="keyword">this</span>) <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4acf030b422a32c3647c7c5973bd4dd0a9">kObjectType</a>); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>&#160;<span class="comment"> //! Get the number of members in the object.</span></div><div class="line"><a name="l01093"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a8b7e47c57a20d0de0cd19eee799ebd88"> 1093</a></span>&#160;<span class="comment"></span> <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> <a class="code" href="classrapidjson_1_1_generic_value.html#a8b7e47c57a20d0de0cd19eee799ebd88">MemberCount</a>()<span class="keyword"> const </span>{ <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsObject()); <span class="keywordflow">return</span> data_.o.size; }</div><div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>&#160;<span class="comment"> //! Get the capacity of object.</span></div><div class="line"><a name="l01096"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#af2a406c67f2d6a7849f0c167025827b2"> 1096</a></span>&#160;<span class="comment"></span> <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> <a class="code" href="classrapidjson_1_1_generic_value.html#af2a406c67f2d6a7849f0c167025827b2">MemberCapacity</a>()<span class="keyword"> const </span>{ <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsObject()); <span class="keywordflow">return</span> data_.o.capacity; }</div><div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>&#160;<span class="comment"> //! Check whether the object is empty.</span></div><div class="line"><a name="l01099"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a1f4835373e05abae52b91e1c6b7ec92c"> 1099</a></span>&#160;<span class="comment"></span> <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_generic_value.html#a1f4835373e05abae52b91e1c6b7ec92c">ObjectEmpty</a>()<span class="keyword"> const </span>{ <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsObject()); <span class="keywordflow">return</span> data_.o.size == 0; }</div><div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>&#160;<span class="comment"> //! Get a value from an object associated with the name.</span></div><div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>&#160;<span class="comment"></span><span class="comment"> /*! \pre IsObject() == true</span></div><div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>&#160;<span class="comment"> \tparam T Either \c Ch or \c const \c Ch (template used for disambiguation with \ref operator[](SizeType))</span></div><div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>&#160;<span class="comment"> \note In version 0.1x, if the member is not found, this function returns a null value. This makes issue 7.</span></div><div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>&#160;<span class="comment"> Since 0.2, if the name is not correct, it will assert.</span></div><div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>&#160;<span class="comment"> If user is unsure whether a member exists, user should use HasMember() first.</span></div><div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>&#160;<span class="comment"> A better approach is to use FindMember().</span></div><div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>&#160;<span class="comment"> \note Linear time complexity.</span></div><div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l01111"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a8ec7fc7f221306925c7674dccbe02b07"> 1111</a></span>&#160; RAPIDJSON_DISABLEIF_RETURN((internal::NotExpr&lt;internal::IsSame&lt;<span class="keyword">typename</span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">internal::RemoveConst&lt;T&gt;::Type</a>, Ch&gt; &gt;),(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp;)) <a class="code" href="classrapidjson_1_1_generic_value.html#a8ec7fc7f221306925c7674dccbe02b07">operator[]</a>(T* name) {</div><div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a> n(<a class="code" href="namespacerapidjson.html#af94951529a5d51e8c4e6e770bb707c1f">StringRef</a>(name));</div><div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>&#160; <span class="keywordflow">return</span> (*<span class="keyword">this</span>)[n];</div><div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>&#160; }</div><div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>&#160; RAPIDJSON_DISABLEIF_RETURN((internal::NotExpr&lt;internal::IsSame&lt;<span class="keyword">typename</span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">internal::RemoveConst&lt;T&gt;::Type</a>, Ch&gt; &gt;),(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp;)) operator[](T* name)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">const_cast&lt;</span><a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp;<span class="keyword">&gt;</span>(*this)[name]; }</div><div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>&#160;<span class="comment"> //! Get a value from an object associated with the name.</span></div><div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>&#160;<span class="comment"></span><span class="comment"> /*! \pre IsObject() == true</span></div><div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>&#160;<span class="comment"> \tparam SourceAllocator Allocator of the \c name value</span></div><div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>&#160;<span class="comment"> \note Compared to \ref operator[](T*), this version is faster because it does not need a StrLen().</span></div><div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>&#160;<span class="comment"> And it can also handle strings with embedded null characters.</span></div><div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>&#160;<span class="comment"> \note Linear time complexity.</span></div><div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> SourceAllocator&gt;</div><div class="line"><a name="l01128"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#aa62b57746c96ce3d264b2fe178196062"> 1128</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#aa62b57746c96ce3d264b2fe178196062">operator[]</a>(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue&lt;Encoding, SourceAllocator&gt;</a>&amp; name) {</div><div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>&#160; <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">MemberIterator</a> member = FindMember(name);</div><div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>&#160; <span class="keywordflow">if</span> (member != MemberEnd())</div><div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>&#160; <span class="keywordflow">return</span> member-&gt;value;</div><div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>&#160; <span class="keywordflow">else</span> {</div><div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(<span class="keyword">false</span>); <span class="comment">// see above note</span></div><div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>&#160;</div><div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>&#160; <span class="comment">// This will generate -Wexit-time-destructors in clang</span></div><div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>&#160; <span class="comment">// static GenericValue NullValue;</span></div><div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>&#160; <span class="comment">// return NullValue;</span></div><div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>&#160;</div><div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>&#160; <span class="comment">// Use static buffer and placement-new to prevent destruction</span></div><div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>&#160; <span class="keyword">static</span> <span class="keywordtype">char</span> buffer[<span class="keyword">sizeof</span>(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>)];</div><div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">new</span> (buffer) <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>();</div><div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>&#160; }</div><div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>&#160; }</div><div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> SourceAllocator&gt;</div><div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>&#160; <span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; operator[](<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue&lt;Encoding, SourceAllocator&gt;</a>&amp; name)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">const_cast&lt;</span><a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp;<span class="keyword">&gt;</span>(*this)[name]; }</div><div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>&#160;</div><div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>&#160;<span class="comment"> //! Get a value from an object associated with name (string object).</span></div><div class="line"><a name="l01149"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a4d337239ee3e2096462f6a36b9ab0811"> 1149</a></span>&#160;<span class="comment"></span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#a4d337239ee3e2096462f6a36b9ab0811">operator[]</a>(<span class="keyword">const</span> std::basic_string&lt;Ch&gt;&amp; name) { <span class="keywordflow">return</span> (*<span class="keyword">this</span>)[<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(<a class="code" href="namespacerapidjson.html#af94951529a5d51e8c4e6e770bb707c1f">StringRef</a>(name))]; }</div><div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>&#160; <span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; operator[](<span class="keyword">const</span> std::basic_string&lt;Ch&gt;&amp; name)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (*<span class="keyword">this</span>)[<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(<a class="code" href="namespacerapidjson.html#af94951529a5d51e8c4e6e770bb707c1f">StringRef</a>(name))]; }</div><div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>&#160;<span class="comment"> //! Const member iterator</span></div><div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>&#160;<span class="comment"></span><span class="comment"> /*! \pre IsObject() == true */</span></div><div class="line"><a name="l01155"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#ae89a77887aa3eb1f1f913727cbff6786"> 1155</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">ConstMemberIterator</a> <a class="code" href="classrapidjson_1_1_generic_value.html#ae89a77887aa3eb1f1f913727cbff6786">MemberBegin</a>()<span class="keyword"> const </span>{ <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsObject()); <span class="keywordflow">return</span> <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">ConstMemberIterator</a>(GetMembersPointer()); }<span class="comment"></span></div><div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>&#160;<span class="comment"> //! Const \em past-the-end member iterator</span></div><div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>&#160;<span class="comment"></span><span class="comment"> /*! \pre IsObject() == true */</span></div><div class="line"><a name="l01158"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a34ee3d75a7aa308043fb34b0743bfe7c"> 1158</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">ConstMemberIterator</a> <a class="code" href="classrapidjson_1_1_generic_value.html#a34ee3d75a7aa308043fb34b0743bfe7c">MemberEnd</a>()<span class="keyword"> const </span>{ <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsObject()); <span class="keywordflow">return</span> <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">ConstMemberIterator</a>(GetMembersPointer() + data_.o.size); }<span class="comment"></span></div><div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>&#160;<span class="comment"> //! Member iterator</span></div><div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>&#160;<span class="comment"></span><span class="comment"> /*! \pre IsObject() == true */</span></div><div class="line"><a name="l01161"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a93f0f317f397c36a24a0f3c32648623a"> 1161</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">MemberIterator</a> <a class="code" href="classrapidjson_1_1_generic_value.html#a93f0f317f397c36a24a0f3c32648623a">MemberBegin</a>() { <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsObject()); <span class="keywordflow">return</span> <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">MemberIterator</a>(GetMembersPointer()); }<span class="comment"></span></div><div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>&#160;<span class="comment"> //! \em Past-the-end member iterator</span></div><div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>&#160;<span class="comment"></span><span class="comment"> /*! \pre IsObject() == true */</span></div><div class="line"><a name="l01164"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#adb109ae9f12615efadf9277cb5e9c4ee"> 1164</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">MemberIterator</a> <a class="code" href="classrapidjson_1_1_generic_value.html#adb109ae9f12615efadf9277cb5e9c4ee">MemberEnd</a>() { <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsObject()); <span class="keywordflow">return</span> <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">MemberIterator</a>(GetMembersPointer() + data_.o.size); }</div><div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>&#160;<span class="comment"> //! Request the object to have enough capacity to store members.</span></div><div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>&#160;<span class="comment"></span><span class="comment"> /*! \param newCapacity The capacity that the object at least need to have.</span></div><div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>&#160;<span class="comment"> \param allocator Allocator for reallocating memory. It must be the same one as used before. Commonly use GenericDocument::GetAllocator().</span></div><div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>&#160;<span class="comment"> \return The value itself for fluent API.</span></div><div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>&#160;<span class="comment"> \note Linear time complexity.</span></div><div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01172"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a9131d6e49ac5a6bf8000d851381e4a25"> 1172</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#a9131d6e49ac5a6bf8000d851381e4a25">MemberReserve</a>(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> newCapacity, Allocator &amp;allocator) {</div><div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsObject());</div><div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>&#160; <span class="keywordflow">if</span> (newCapacity &gt; data_.o.capacity) {</div><div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>&#160; SetMembersPointer(reinterpret_cast&lt;Member*&gt;(allocator.Realloc(GetMembersPointer(), data_.o.capacity * <span class="keyword">sizeof</span>(<a class="code" href="structrapidjson_1_1_generic_member.html">Member</a>), newCapacity * <span class="keyword">sizeof</span>(<a class="code" href="structrapidjson_1_1_generic_member.html">Member</a>))));</div><div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>&#160; data_.o.capacity = newCapacity;</div><div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>&#160; }</div><div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>&#160; }</div><div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>&#160;<span class="comment"> //! Check whether a member exists in the object.</span></div><div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>&#160;<span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>&#160;<span class="comment"> \param name Member name to be searched.</span></div><div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>&#160;<span class="comment"> \pre IsObject() == true</span></div><div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>&#160;<span class="comment"> \return Whether a member with that name exists.</span></div><div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>&#160;<span class="comment"> \note It is better to use FindMember() directly if you need the obtain the value as well.</span></div><div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>&#160;<span class="comment"> \note Linear time complexity.</span></div><div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01189"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#aa78e2eb30c6b918826eccf03f04f166b"> 1189</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_generic_value.html#aa78e2eb30c6b918826eccf03f04f166b">HasMember</a>(<span class="keyword">const</span> Ch* name)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> FindMember(name) != MemberEnd(); }</div><div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>&#160;</div><div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>&#160;<span class="comment"> //! Check whether a member exists in the object with string object.</span></div><div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>&#160;<span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>&#160;<span class="comment"> \param name Member name to be searched.</span></div><div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>&#160;<span class="comment"> \pre IsObject() == true</span></div><div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>&#160;<span class="comment"> \return Whether a member with that name exists.</span></div><div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>&#160;<span class="comment"> \note It is better to use FindMember() directly if you need the obtain the value as well.</span></div><div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>&#160;<span class="comment"> \note Linear time complexity.</span></div><div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01200"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a9b3b30acbe60d7a5b105afa05c1ddfb0"> 1200</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_generic_value.html#a9b3b30acbe60d7a5b105afa05c1ddfb0">HasMember</a>(<span class="keyword">const</span> std::basic_string&lt;Ch&gt;&amp; name)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> FindMember(name) != MemberEnd(); }</div><div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>&#160;<span class="comment"> //! Check whether a member exists in the object with GenericValue name.</span></div><div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>&#160;<span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>&#160;<span class="comment"> This version is faster because it does not need a StrLen(). It can also handle string with null character.</span></div><div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>&#160;<span class="comment"> \param name Member name to be searched.</span></div><div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>&#160;<span class="comment"> \pre IsObject() == true</span></div><div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>&#160;<span class="comment"> \return Whether a member with that name exists.</span></div><div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>&#160;<span class="comment"> \note It is better to use FindMember() directly if you need the obtain the value as well.</span></div><div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>&#160;<span class="comment"> \note Linear time complexity.</span></div><div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> SourceAllocator&gt;</div><div class="line"><a name="l01213"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a794129b8adffb97d123306a0c0ccaf71"> 1213</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_generic_value.html#a794129b8adffb97d123306a0c0ccaf71">HasMember</a>(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue&lt;Encoding, SourceAllocator&gt;</a>&amp; name)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> FindMember(name) != MemberEnd(); }</div><div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>&#160;<span class="comment"> //! Find member by name.</span></div><div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>&#160;<span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>&#160;<span class="comment"> \param name Member name to be searched.</span></div><div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>&#160;<span class="comment"> \pre IsObject() == true</span></div><div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>&#160;<span class="comment"> \return Iterator to member, if it exists.</span></div><div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>&#160;<span class="comment"> Otherwise returns \ref MemberEnd().</span></div><div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01222"></a><span class="lineno"> 1222</span>&#160;<span class="comment"> \note Earlier versions of Rapidjson returned a \c NULL pointer, in case</span></div><div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>&#160;<span class="comment"> the requested member doesn&#39;t exist. For consistency with e.g.</span></div><div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>&#160;<span class="comment"> \c std::map, this has been changed to MemberEnd() now.</span></div><div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>&#160;<span class="comment"> \note Linear time complexity.</span></div><div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01227"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#ad22fdeac87ec6c370dd43075d3586811"> 1227</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">MemberIterator</a> <a class="code" href="classrapidjson_1_1_generic_value.html#ad22fdeac87ec6c370dd43075d3586811">FindMember</a>(<span class="keyword">const</span> Ch* name) {</div><div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a> n(<a class="code" href="namespacerapidjson.html#af94951529a5d51e8c4e6e770bb707c1f">StringRef</a>(name));</div><div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>&#160; <span class="keywordflow">return</span> FindMember(n);</div><div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>&#160; }</div><div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>&#160;</div><div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>&#160; <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">ConstMemberIterator</a> FindMember(<span class="keyword">const</span> Ch* name)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">const_cast&lt;</span><a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp;<span class="keyword">&gt;</span>(*this).<a class="code" href="classrapidjson_1_1_generic_value.html#ad22fdeac87ec6c370dd43075d3586811">FindMember</a>(name); }</div><div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>&#160;<span class="comment"> //! Find member by name.</span></div><div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>&#160;<span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>&#160;<span class="comment"> This version is faster because it does not need a StrLen(). It can also handle string with null character.</span></div><div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>&#160;<span class="comment"> \param name Member name to be searched.</span></div><div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>&#160;<span class="comment"> \pre IsObject() == true</span></div><div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>&#160;<span class="comment"> \return Iterator to member, if it exists.</span></div><div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>&#160;<span class="comment"> Otherwise returns \ref MemberEnd().</span></div><div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>&#160;<span class="comment"> \note Earlier versions of Rapidjson returned a \c NULL pointer, in case</span></div><div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>&#160;<span class="comment"> the requested member doesn&#39;t exist. For consistency with e.g.</span></div><div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>&#160;<span class="comment"> \c std::map, this has been changed to MemberEnd() now.</span></div><div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>&#160;<span class="comment"> \note Linear time complexity.</span></div><div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> SourceAllocator&gt;</div><div class="line"><a name="l01248"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a8d75bf0c6c0fa4f8d340a4236e98539b"> 1248</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">MemberIterator</a> <a class="code" href="classrapidjson_1_1_generic_value.html#a8d75bf0c6c0fa4f8d340a4236e98539b">FindMember</a>(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue&lt;Encoding, SourceAllocator&gt;</a>&amp; name) {</div><div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsObject());</div><div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(name.IsString());</div><div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>&#160; <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">MemberIterator</a> member = MemberBegin();</div><div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>&#160; <span class="keywordflow">for</span> ( ; member != MemberEnd(); ++member)</div><div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>&#160; <span class="keywordflow">if</span> (name.StringEqual(member-&gt;name))</div><div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>&#160; <span class="keywordflow">return</span> member;</div><div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>&#160; }</div><div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> SourceAllocator&gt; <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">ConstMemberIterator</a> FindMember(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue&lt;Encoding, SourceAllocator&gt;</a>&amp; name)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">const_cast&lt;</span><a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp;<span class="keyword">&gt;</span>(*this).<a class="code" href="classrapidjson_1_1_generic_value.html#ad22fdeac87ec6c370dd43075d3586811">FindMember</a>(name); }</div><div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>&#160;</div><div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>&#160;<span class="comment"> //! Find member by string object name.</span></div><div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>&#160;<span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>&#160;<span class="comment"> \param name Member name to be searched.</span></div><div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>&#160;<span class="comment"> \pre IsObject() == true</span></div><div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>&#160;<span class="comment"> \return Iterator to member, if it exists.</span></div><div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>&#160;<span class="comment"> Otherwise returns \ref MemberEnd().</span></div><div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01267"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a278b420ea75b0ec18d88d4c9e9199d62"> 1267</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">MemberIterator</a> <a class="code" href="classrapidjson_1_1_generic_value.html#a278b420ea75b0ec18d88d4c9e9199d62">FindMember</a>(<span class="keyword">const</span> std::basic_string&lt;Ch&gt;&amp; name) { <span class="keywordflow">return</span> <a class="code" href="classrapidjson_1_1_generic_value.html#a278b420ea75b0ec18d88d4c9e9199d62">FindMember</a>(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(<a class="code" href="namespacerapidjson.html#af94951529a5d51e8c4e6e770bb707c1f">StringRef</a>(name))); }</div><div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>&#160; <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">ConstMemberIterator</a> FindMember(<span class="keyword">const</span> std::basic_string&lt;Ch&gt;&amp; name)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> FindMember(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(<a class="code" href="namespacerapidjson.html#af94951529a5d51e8c4e6e770bb707c1f">StringRef</a>(name))); }</div><div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>&#160;<span class="comment"> //! Add a member (name-value pair) to the object.</span></div><div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>&#160;<span class="comment"></span><span class="comment"> /*! \param name A string value as name of member.</span></div><div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>&#160;<span class="comment"> \param value Value of any type.</span></div><div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>&#160;<span class="comment"> \param allocator Allocator for reallocating memory. It must be the same one as used before. Commonly use GenericDocument::GetAllocator().</span></div><div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>&#160;<span class="comment"> \return The value itself for fluent API.</span></div><div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>&#160;<span class="comment"> \note The ownership of \c name and \c value will be transferred to this object on success.</span></div><div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>&#160;<span class="comment"> \pre IsObject() &amp;&amp; name.IsString()</span></div><div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>&#160;<span class="comment"> \post name.IsNull() &amp;&amp; value.IsNull()</span></div><div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>&#160;<span class="comment"> \note Amortized Constant time complexity.</span></div><div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01281"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#ab018d734d189532b27943bc45776ba68"> 1281</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#ab018d734d189532b27943bc45776ba68">AddMember</a>(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; name, <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; value, Allocator&amp; allocator) {</div><div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsObject());</div><div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(name.IsString());</div><div class="line"><a name="l01284"></a><span class="lineno"> 1284</span>&#160;</div><div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>&#160; ObjectData&amp; o = data_.o;</div><div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>&#160; <span class="keywordflow">if</span> (o.size &gt;= o.capacity)</div><div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>&#160; MemberReserve(o.capacity == 0 ? kDefaultObjectCapacity : (o.capacity + (o.capacity + 1) / 2), allocator);</div><div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>&#160; <a class="code" href="structrapidjson_1_1_generic_member.html">Member</a>* members = GetMembersPointer();</div><div class="line"><a name="l01289"></a><span class="lineno"> 1289</span>&#160; members[o.size].<a class="code" href="structrapidjson_1_1_generic_member.html#ae820eaa74b415a9073f3f3855f6c6607">name</a>.RawAssign(name);</div><div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>&#160; members[o.size].<a class="code" href="structrapidjson_1_1_generic_member.html#a8ffff2076e62d988a070a136da6ffca6">value</a>.RawAssign(value);</div><div class="line"><a name="l01291"></a><span class="lineno"> 1291</span>&#160; o.size++;</div><div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>&#160; }</div><div class="line"><a name="l01294"></a><span class="lineno"> 1294</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>&#160;<span class="comment"> //! Add a constant string value as member (name-value pair) to the object.</span></div><div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>&#160;<span class="comment"></span><span class="comment"> /*! \param name A string value as name of member.</span></div><div class="line"><a name="l01297"></a><span class="lineno"> 1297</span>&#160;<span class="comment"> \param value constant string reference as value of member.</span></div><div class="line"><a name="l01298"></a><span class="lineno"> 1298</span>&#160;<span class="comment"> \param allocator Allocator for reallocating memory. It must be the same one as used before. Commonly use GenericDocument::GetAllocator().</span></div><div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>&#160;<span class="comment"> \return The value itself for fluent API.</span></div><div class="line"><a name="l01300"></a><span class="lineno"> 1300</span>&#160;<span class="comment"> \pre IsObject()</span></div><div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>&#160;<span class="comment"> \note This overload is needed to avoid clashes with the generic primitive type AddMember(GenericValue&amp;,T,Allocator&amp;) overload below.</span></div><div class="line"><a name="l01302"></a><span class="lineno"> 1302</span>&#160;<span class="comment"> \note Amortized Constant time complexity.</span></div><div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01304"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#ad290f179591025e871bedbbac89ac276"> 1304</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#ad290f179591025e871bedbbac89ac276">AddMember</a>(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; name, <a class="code" href="structrapidjson_1_1_generic_string_ref.html">StringRefType</a> value, Allocator&amp; allocator) {</div><div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a> v(value);</div><div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>&#160; <span class="keywordflow">return</span> AddMember(name, v, allocator);</div><div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>&#160; }</div><div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>&#160;</div><div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>&#160;<span class="comment"> //! Add a string object as member (name-value pair) to the object.</span></div><div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>&#160;<span class="comment"></span><span class="comment"> /*! \param name A string value as name of member.</span></div><div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>&#160;<span class="comment"> \param value constant string reference as value of member.</span></div><div class="line"><a name="l01313"></a><span class="lineno"> 1313</span>&#160;<span class="comment"> \param allocator Allocator for reallocating memory. It must be the same one as used before. Commonly use GenericDocument::GetAllocator().</span></div><div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>&#160;<span class="comment"> \return The value itself for fluent API.</span></div><div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>&#160;<span class="comment"> \pre IsObject()</span></div><div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>&#160;<span class="comment"> \note This overload is needed to avoid clashes with the generic primitive type AddMember(GenericValue&amp;,T,Allocator&amp;) overload below.</span></div><div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>&#160;<span class="comment"> \note Amortized Constant time complexity.</span></div><div class="line"><a name="l01318"></a><span class="lineno"> 1318</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01319"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a578e35f3350717db2aae534969b2346a"> 1319</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#a578e35f3350717db2aae534969b2346a">AddMember</a>(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; name, std::basic_string&lt;Ch&gt;&amp; value, Allocator&amp; allocator) {</div><div class="line"><a name="l01320"></a><span class="lineno"> 1320</span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a> v(value, allocator);</div><div class="line"><a name="l01321"></a><span class="lineno"> 1321</span>&#160; <span class="keywordflow">return</span> AddMember(name, v, allocator);</div><div class="line"><a name="l01322"></a><span class="lineno"> 1322</span>&#160; }</div><div class="line"><a name="l01323"></a><span class="lineno"> 1323</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01324"></a><span class="lineno"> 1324</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01325"></a><span class="lineno"> 1325</span>&#160;<span class="comment"> //! Add any primitive value as member (name-value pair) to the object.</span></div><div class="line"><a name="l01326"></a><span class="lineno"> 1326</span>&#160;<span class="comment"></span><span class="comment"> /*! \tparam T Either \ref Type, \c int, \c unsigned, \c int64_t, \c uint64_t</span></div><div class="line"><a name="l01327"></a><span class="lineno"> 1327</span>&#160;<span class="comment"> \param name A string value as name of member.</span></div><div class="line"><a name="l01328"></a><span class="lineno"> 1328</span>&#160;<span class="comment"> \param value Value of primitive type \c T as value of member</span></div><div class="line"><a name="l01329"></a><span class="lineno"> 1329</span>&#160;<span class="comment"> \param allocator Allocator for reallocating memory. Commonly use GenericDocument::GetAllocator().</span></div><div class="line"><a name="l01330"></a><span class="lineno"> 1330</span>&#160;<span class="comment"> \return The value itself for fluent API.</span></div><div class="line"><a name="l01331"></a><span class="lineno"> 1331</span>&#160;<span class="comment"> \pre IsObject()</span></div><div class="line"><a name="l01332"></a><span class="lineno"> 1332</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01333"></a><span class="lineno"> 1333</span>&#160;<span class="comment"> \note The source type \c T explicitly disallows all pointer types,</span></div><div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>&#160;<span class="comment"> especially (\c const) \ref Ch*. This helps avoiding implicitly</span></div><div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>&#160;<span class="comment"> referencing character strings with insufficient lifetime, use</span></div><div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>&#160;<span class="comment"> \ref AddMember(StringRefType, GenericValue&amp;, Allocator&amp;) or \ref</span></div><div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>&#160;<span class="comment"> AddMember(StringRefType, StringRefType, Allocator&amp;).</span></div><div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>&#160;<span class="comment"> All other pointer types would implicitly convert to \c bool,</span></div><div class="line"><a name="l01339"></a><span class="lineno"> 1339</span>&#160;<span class="comment"> use an explicit cast instead, if needed.</span></div><div class="line"><a name="l01340"></a><span class="lineno"> 1340</span>&#160;<span class="comment"> \note Amortized Constant time complexity.</span></div><div class="line"><a name="l01341"></a><span class="lineno"> 1341</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01342"></a><span class="lineno"> 1342</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l01343"></a><span class="lineno"> 1343</span>&#160; RAPIDJSON_DISABLEIF_RETURN((internal::OrExpr&lt;internal::IsPointer&lt;T&gt;, internal::IsGenericValue&lt;T&gt; &gt;), (<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp;))</div><div class="line"><a name="l01344"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#ab705cb56bfb380005704cda2d0edf168"> 1344</a></span>&#160; AddMember(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; name, T value, Allocator&amp; allocator) {</div><div class="line"><a name="l01345"></a><span class="lineno"> 1345</span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a> v(value);</div><div class="line"><a name="l01346"></a><span class="lineno"> 1346</span>&#160; <span class="keywordflow">return</span> AddMember(name, v, allocator);</div><div class="line"><a name="l01347"></a><span class="lineno"> 1347</span>&#160; }</div><div class="line"><a name="l01348"></a><span class="lineno"> 1348</span>&#160;</div><div class="line"><a name="l01349"></a><span class="lineno"> 1349</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l01350"></a><span class="lineno"> 1350</span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; AddMember(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp;&amp; name, <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp;&amp; value, Allocator&amp; allocator) {</div><div class="line"><a name="l01351"></a><span class="lineno"> 1351</span>&#160; <span class="keywordflow">return</span> AddMember(name, value, allocator);</div><div class="line"><a name="l01352"></a><span class="lineno"> 1352</span>&#160; }</div><div class="line"><a name="l01353"></a><span class="lineno"> 1353</span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; AddMember(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp;&amp; name, <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; value, Allocator&amp; allocator) {</div><div class="line"><a name="l01354"></a><span class="lineno"> 1354</span>&#160; <span class="keywordflow">return</span> AddMember(name, value, allocator);</div><div class="line"><a name="l01355"></a><span class="lineno"> 1355</span>&#160; }</div><div class="line"><a name="l01356"></a><span class="lineno"> 1356</span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; AddMember(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; name, <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp;&amp; value, Allocator&amp; allocator) {</div><div class="line"><a name="l01357"></a><span class="lineno"> 1357</span>&#160; <span class="keywordflow">return</span> AddMember(name, value, allocator);</div><div class="line"><a name="l01358"></a><span class="lineno"> 1358</span>&#160; }</div><div class="line"><a name="l01359"></a><span class="lineno"> 1359</span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; AddMember(<a class="code" href="structrapidjson_1_1_generic_string_ref.html">StringRefType</a> name, <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp;&amp; value, Allocator&amp; allocator) {</div><div class="line"><a name="l01360"></a><span class="lineno"> 1360</span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a> n(name);</div><div class="line"><a name="l01361"></a><span class="lineno"> 1361</span>&#160; <span class="keywordflow">return</span> AddMember(n, value, allocator);</div><div class="line"><a name="l01362"></a><span class="lineno"> 1362</span>&#160; }</div><div class="line"><a name="l01363"></a><span class="lineno"> 1363</span>&#160;<span class="preprocessor">#endif // RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l01364"></a><span class="lineno"> 1364</span>&#160;</div><div class="line"><a name="l01365"></a><span class="lineno"> 1365</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01366"></a><span class="lineno"> 1366</span>&#160;<span class="comment"> //! Add a member (name-value pair) to the object.</span></div><div class="line"><a name="l01367"></a><span class="lineno"> 1367</span>&#160;<span class="comment"></span><span class="comment"> /*! \param name A constant string reference as name of member.</span></div><div class="line"><a name="l01368"></a><span class="lineno"> 1368</span>&#160;<span class="comment"> \param value Value of any type.</span></div><div class="line"><a name="l01369"></a><span class="lineno"> 1369</span>&#160;<span class="comment"> \param allocator Allocator for reallocating memory. It must be the same one as used before. Commonly use GenericDocument::GetAllocator().</span></div><div class="line"><a name="l01370"></a><span class="lineno"> 1370</span>&#160;<span class="comment"> \return The value itself for fluent API.</span></div><div class="line"><a name="l01371"></a><span class="lineno"> 1371</span>&#160;<span class="comment"> \note The ownership of \c value will be transferred to this object on success.</span></div><div class="line"><a name="l01372"></a><span class="lineno"> 1372</span>&#160;<span class="comment"> \pre IsObject()</span></div><div class="line"><a name="l01373"></a><span class="lineno"> 1373</span>&#160;<span class="comment"> \post value.IsNull()</span></div><div class="line"><a name="l01374"></a><span class="lineno"> 1374</span>&#160;<span class="comment"> \note Amortized Constant time complexity.</span></div><div class="line"><a name="l01375"></a><span class="lineno"> 1375</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01376"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a85dc131bdad8077ce970d580d333d15a"> 1376</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#a85dc131bdad8077ce970d580d333d15a">AddMember</a>(<a class="code" href="structrapidjson_1_1_generic_string_ref.html">StringRefType</a> name, <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; value, Allocator&amp; allocator) {</div><div class="line"><a name="l01377"></a><span class="lineno"> 1377</span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a> n(name);</div><div class="line"><a name="l01378"></a><span class="lineno"> 1378</span>&#160; <span class="keywordflow">return</span> AddMember(n, value, allocator);</div><div class="line"><a name="l01379"></a><span class="lineno"> 1379</span>&#160; }</div><div class="line"><a name="l01380"></a><span class="lineno"> 1380</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01381"></a><span class="lineno"> 1381</span>&#160;<span class="comment"> //! Add a constant string value as member (name-value pair) to the object.</span></div><div class="line"><a name="l01382"></a><span class="lineno"> 1382</span>&#160;<span class="comment"></span><span class="comment"> /*! \param name A constant string reference as name of member.</span></div><div class="line"><a name="l01383"></a><span class="lineno"> 1383</span>&#160;<span class="comment"> \param value constant string reference as value of member.</span></div><div class="line"><a name="l01384"></a><span class="lineno"> 1384</span>&#160;<span class="comment"> \param allocator Allocator for reallocating memory. It must be the same one as used before. Commonly use GenericDocument::GetAllocator().</span></div><div class="line"><a name="l01385"></a><span class="lineno"> 1385</span>&#160;<span class="comment"> \return The value itself for fluent API.</span></div><div class="line"><a name="l01386"></a><span class="lineno"> 1386</span>&#160;<span class="comment"> \pre IsObject()</span></div><div class="line"><a name="l01387"></a><span class="lineno"> 1387</span>&#160;<span class="comment"> \note This overload is needed to avoid clashes with the generic primitive type AddMember(StringRefType,T,Allocator&amp;) overload below.</span></div><div class="line"><a name="l01388"></a><span class="lineno"> 1388</span>&#160;<span class="comment"> \note Amortized Constant time complexity.</span></div><div class="line"><a name="l01389"></a><span class="lineno"> 1389</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01390"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a2ccb4736d0f2ec07f06f630d8fe54f8d"> 1390</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#a2ccb4736d0f2ec07f06f630d8fe54f8d">AddMember</a>(<a class="code" href="structrapidjson_1_1_generic_string_ref.html">StringRefType</a> name, <a class="code" href="structrapidjson_1_1_generic_string_ref.html">StringRefType</a> value, Allocator&amp; allocator) {</div><div class="line"><a name="l01391"></a><span class="lineno"> 1391</span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a> v(value);</div><div class="line"><a name="l01392"></a><span class="lineno"> 1392</span>&#160; <span class="keywordflow">return</span> AddMember(name, v, allocator);</div><div class="line"><a name="l01393"></a><span class="lineno"> 1393</span>&#160; }</div><div class="line"><a name="l01394"></a><span class="lineno"> 1394</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01395"></a><span class="lineno"> 1395</span>&#160;<span class="comment"> //! Add any primitive value as member (name-value pair) to the object.</span></div><div class="line"><a name="l01396"></a><span class="lineno"> 1396</span>&#160;<span class="comment"></span><span class="comment"> /*! \tparam T Either \ref Type, \c int, \c unsigned, \c int64_t, \c uint64_t</span></div><div class="line"><a name="l01397"></a><span class="lineno"> 1397</span>&#160;<span class="comment"> \param name A constant string reference as name of member.</span></div><div class="line"><a name="l01398"></a><span class="lineno"> 1398</span>&#160;<span class="comment"> \param value Value of primitive type \c T as value of member</span></div><div class="line"><a name="l01399"></a><span class="lineno"> 1399</span>&#160;<span class="comment"> \param allocator Allocator for reallocating memory. Commonly use GenericDocument::GetAllocator().</span></div><div class="line"><a name="l01400"></a><span class="lineno"> 1400</span>&#160;<span class="comment"> \return The value itself for fluent API.</span></div><div class="line"><a name="l01401"></a><span class="lineno"> 1401</span>&#160;<span class="comment"> \pre IsObject()</span></div><div class="line"><a name="l01402"></a><span class="lineno"> 1402</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01403"></a><span class="lineno"> 1403</span>&#160;<span class="comment"> \note The source type \c T explicitly disallows all pointer types,</span></div><div class="line"><a name="l01404"></a><span class="lineno"> 1404</span>&#160;<span class="comment"> especially (\c const) \ref Ch*. This helps avoiding implicitly</span></div><div class="line"><a name="l01405"></a><span class="lineno"> 1405</span>&#160;<span class="comment"> referencing character strings with insufficient lifetime, use</span></div><div class="line"><a name="l01406"></a><span class="lineno"> 1406</span>&#160;<span class="comment"> \ref AddMember(StringRefType, GenericValue&amp;, Allocator&amp;) or \ref</span></div><div class="line"><a name="l01407"></a><span class="lineno"> 1407</span>&#160;<span class="comment"> AddMember(StringRefType, StringRefType, Allocator&amp;).</span></div><div class="line"><a name="l01408"></a><span class="lineno"> 1408</span>&#160;<span class="comment"> All other pointer types would implicitly convert to \c bool,</span></div><div class="line"><a name="l01409"></a><span class="lineno"> 1409</span>&#160;<span class="comment"> use an explicit cast instead, if needed.</span></div><div class="line"><a name="l01410"></a><span class="lineno"> 1410</span>&#160;<span class="comment"> \note Amortized Constant time complexity.</span></div><div class="line"><a name="l01411"></a><span class="lineno"> 1411</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01412"></a><span class="lineno"> 1412</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l01413"></a><span class="lineno"> 1413</span>&#160; RAPIDJSON_DISABLEIF_RETURN((internal::OrExpr&lt;internal::IsPointer&lt;T&gt;, internal::IsGenericValue&lt;T&gt; &gt;), (<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp;))</div><div class="line"><a name="l01414"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#aa70ada250f3a0c5aeee0ce138d136b06"> 1414</a></span>&#160; AddMember(<a class="code" href="structrapidjson_1_1_generic_string_ref.html">StringRefType</a> name, T value, Allocator&amp; allocator) {</div><div class="line"><a name="l01415"></a><span class="lineno"> 1415</span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a> n(name);</div><div class="line"><a name="l01416"></a><span class="lineno"> 1416</span>&#160; <span class="keywordflow">return</span> AddMember(n, value, allocator);</div><div class="line"><a name="l01417"></a><span class="lineno"> 1417</span>&#160; }</div><div class="line"><a name="l01418"></a><span class="lineno"> 1418</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01419"></a><span class="lineno"> 1419</span>&#160;<span class="comment"> //! Remove all members in the object.</span></div><div class="line"><a name="l01420"></a><span class="lineno"> 1420</span>&#160;<span class="comment"></span><span class="comment"> /*! This function do not deallocate memory in the object, i.e. the capacity is unchanged.</span></div><div class="line"><a name="l01421"></a><span class="lineno"> 1421</span>&#160;<span class="comment"> \note Linear time complexity.</span></div><div class="line"><a name="l01422"></a><span class="lineno"> 1422</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01423"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a68d8d197ae1fb83d4dc202f9812af4cc"> 1423</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classrapidjson_1_1_generic_value.html#a68d8d197ae1fb83d4dc202f9812af4cc">RemoveAllMembers</a>() {</div><div class="line"><a name="l01424"></a><span class="lineno"> 1424</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsObject()); </div><div class="line"><a name="l01425"></a><span class="lineno"> 1425</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classrapidjson_1_1_generic_member_iterator.html">MemberIterator</a> m = MemberBegin(); m != MemberEnd(); ++m)</div><div class="line"><a name="l01426"></a><span class="lineno"> 1426</span>&#160; m-&gt;~Member();</div><div class="line"><a name="l01427"></a><span class="lineno"> 1427</span>&#160; data_.o.size = 0;</div><div class="line"><a name="l01428"></a><span class="lineno"> 1428</span>&#160; }</div><div class="line"><a name="l01429"></a><span class="lineno"> 1429</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01430"></a><span class="lineno"> 1430</span>&#160;<span class="comment"> //! Remove a member in object by its name.</span></div><div class="line"><a name="l01431"></a><span class="lineno"> 1431</span>&#160;<span class="comment"></span><span class="comment"> /*! \param name Name of member to be removed.</span></div><div class="line"><a name="l01432"></a><span class="lineno"> 1432</span>&#160;<span class="comment"> \return Whether the member existed.</span></div><div class="line"><a name="l01433"></a><span class="lineno"> 1433</span>&#160;<span class="comment"> \note This function may reorder the object members. Use \ref</span></div><div class="line"><a name="l01434"></a><span class="lineno"> 1434</span>&#160;<span class="comment"> EraseMember(ConstMemberIterator) if you need to preserve the</span></div><div class="line"><a name="l01435"></a><span class="lineno"> 1435</span>&#160;<span class="comment"> relative order of the remaining members.</span></div><div class="line"><a name="l01436"></a><span class="lineno"> 1436</span>&#160;<span class="comment"> \note Linear time complexity.</span></div><div class="line"><a name="l01437"></a><span class="lineno"> 1437</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01438"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#aa60074f72a6d1651828a104b0c6387b1"> 1438</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_generic_value.html#aa60074f72a6d1651828a104b0c6387b1">RemoveMember</a>(<span class="keyword">const</span> Ch* name) {</div><div class="line"><a name="l01439"></a><span class="lineno"> 1439</span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a> n(<a class="code" href="namespacerapidjson.html#af94951529a5d51e8c4e6e770bb707c1f">StringRef</a>(name));</div><div class="line"><a name="l01440"></a><span class="lineno"> 1440</span>&#160; <span class="keywordflow">return</span> RemoveMember(n);</div><div class="line"><a name="l01441"></a><span class="lineno"> 1441</span>&#160; }</div><div class="line"><a name="l01442"></a><span class="lineno"> 1442</span>&#160;</div><div class="line"><a name="l01443"></a><span class="lineno"> 1443</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l01444"></a><span class="lineno"> 1444</span>&#160; <span class="keywordtype">bool</span> RemoveMember(<span class="keyword">const</span> std::basic_string&lt;Ch&gt;&amp; name) { <span class="keywordflow">return</span> RemoveMember(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(<a class="code" href="namespacerapidjson.html#af94951529a5d51e8c4e6e770bb707c1f">StringRef</a>(name))); }</div><div class="line"><a name="l01445"></a><span class="lineno"> 1445</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01446"></a><span class="lineno"> 1446</span>&#160;</div><div class="line"><a name="l01447"></a><span class="lineno"> 1447</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> SourceAllocator&gt;</div><div class="line"><a name="l01448"></a><span class="lineno"> 1448</span>&#160; <span class="keywordtype">bool</span> RemoveMember(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue&lt;Encoding, SourceAllocator&gt;</a>&amp; name) {</div><div class="line"><a name="l01449"></a><span class="lineno"> 1449</span>&#160; <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">MemberIterator</a> m = FindMember(name);</div><div class="line"><a name="l01450"></a><span class="lineno"> 1450</span>&#160; <span class="keywordflow">if</span> (m != MemberEnd()) {</div><div class="line"><a name="l01451"></a><span class="lineno"> 1451</span>&#160; RemoveMember(m);</div><div class="line"><a name="l01452"></a><span class="lineno"> 1452</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l01453"></a><span class="lineno"> 1453</span>&#160; }</div><div class="line"><a name="l01454"></a><span class="lineno"> 1454</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01455"></a><span class="lineno"> 1455</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01456"></a><span class="lineno"> 1456</span>&#160; }</div><div class="line"><a name="l01457"></a><span class="lineno"> 1457</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01458"></a><span class="lineno"> 1458</span>&#160;<span class="comment"> //! Remove a member in object by iterator.</span></div><div class="line"><a name="l01459"></a><span class="lineno"> 1459</span>&#160;<span class="comment"></span><span class="comment"> /*! \param m member iterator (obtained by FindMember() or MemberBegin()).</span></div><div class="line"><a name="l01460"></a><span class="lineno"> 1460</span>&#160;<span class="comment"> \return the new iterator after removal.</span></div><div class="line"><a name="l01461"></a><span class="lineno"> 1461</span>&#160;<span class="comment"> \note This function may reorder the object members. Use \ref</span></div><div class="line"><a name="l01462"></a><span class="lineno"> 1462</span>&#160;<span class="comment"> EraseMember(ConstMemberIterator) if you need to preserve the</span></div><div class="line"><a name="l01463"></a><span class="lineno"> 1463</span>&#160;<span class="comment"> relative order of the remaining members.</span></div><div class="line"><a name="l01464"></a><span class="lineno"> 1464</span>&#160;<span class="comment"> \note Constant time complexity.</span></div><div class="line"><a name="l01465"></a><span class="lineno"> 1465</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01466"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#af91573ce61d798f0bc5dc88b00742697"> 1466</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">MemberIterator</a> <a class="code" href="classrapidjson_1_1_generic_value.html#af91573ce61d798f0bc5dc88b00742697">RemoveMember</a>(<a class="code" href="classrapidjson_1_1_generic_member_iterator.html">MemberIterator</a> m) {</div><div class="line"><a name="l01467"></a><span class="lineno"> 1467</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsObject());</div><div class="line"><a name="l01468"></a><span class="lineno"> 1468</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(data_.o.size &gt; 0);</div><div class="line"><a name="l01469"></a><span class="lineno"> 1469</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(GetMembersPointer() != 0);</div><div class="line"><a name="l01470"></a><span class="lineno"> 1470</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(m &gt;= MemberBegin() &amp;&amp; m &lt; MemberEnd());</div><div class="line"><a name="l01471"></a><span class="lineno"> 1471</span>&#160;</div><div class="line"><a name="l01472"></a><span class="lineno"> 1472</span>&#160; <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">MemberIterator</a> last(GetMembersPointer() + (data_.o.size - 1));</div><div class="line"><a name="l01473"></a><span class="lineno"> 1473</span>&#160; <span class="keywordflow">if</span> (data_.o.size &gt; 1 &amp;&amp; m != last)</div><div class="line"><a name="l01474"></a><span class="lineno"> 1474</span>&#160; *m = *last; <span class="comment">// Move the last one to this place</span></div><div class="line"><a name="l01475"></a><span class="lineno"> 1475</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01476"></a><span class="lineno"> 1476</span>&#160; m-&gt;~Member(); <span class="comment">// Only one left, just destroy</span></div><div class="line"><a name="l01477"></a><span class="lineno"> 1477</span>&#160; --data_.o.size;</div><div class="line"><a name="l01478"></a><span class="lineno"> 1478</span>&#160; <span class="keywordflow">return</span> m;</div><div class="line"><a name="l01479"></a><span class="lineno"> 1479</span>&#160; }</div><div class="line"><a name="l01480"></a><span class="lineno"> 1480</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01481"></a><span class="lineno"> 1481</span>&#160;<span class="comment"> //! Remove a member from an object by iterator.</span></div><div class="line"><a name="l01482"></a><span class="lineno"> 1482</span>&#160;<span class="comment"></span><span class="comment"> /*! \param pos iterator to the member to remove</span></div><div class="line"><a name="l01483"></a><span class="lineno"> 1483</span>&#160;<span class="comment"> \pre IsObject() == true &amp;&amp; \ref MemberBegin() &lt;= \c pos &lt; \ref MemberEnd()</span></div><div class="line"><a name="l01484"></a><span class="lineno"> 1484</span>&#160;<span class="comment"> \return Iterator following the removed element.</span></div><div class="line"><a name="l01485"></a><span class="lineno"> 1485</span>&#160;<span class="comment"> If the iterator \c pos refers to the last element, the \ref MemberEnd() iterator is returned.</span></div><div class="line"><a name="l01486"></a><span class="lineno"> 1486</span>&#160;<span class="comment"> \note This function preserves the relative order of the remaining object</span></div><div class="line"><a name="l01487"></a><span class="lineno"> 1487</span>&#160;<span class="comment"> members. If you do not need this, use the more efficient \ref RemoveMember(MemberIterator).</span></div><div class="line"><a name="l01488"></a><span class="lineno"> 1488</span>&#160;<span class="comment"> \note Linear time complexity.</span></div><div class="line"><a name="l01489"></a><span class="lineno"> 1489</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01490"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a163e60b101e5ae534597c050a6eba511"> 1490</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">MemberIterator</a> <a class="code" href="classrapidjson_1_1_generic_value.html#a163e60b101e5ae534597c050a6eba511">EraseMember</a>(<a class="code" href="classrapidjson_1_1_generic_member_iterator.html">ConstMemberIterator</a> pos) {</div><div class="line"><a name="l01491"></a><span class="lineno"> 1491</span>&#160; <span class="keywordflow">return</span> EraseMember(pos, pos +1);</div><div class="line"><a name="l01492"></a><span class="lineno"> 1492</span>&#160; }</div><div class="line"><a name="l01493"></a><span class="lineno"> 1493</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01494"></a><span class="lineno"> 1494</span>&#160;<span class="comment"> //! Remove members in the range [first, last) from an object.</span></div><div class="line"><a name="l01495"></a><span class="lineno"> 1495</span>&#160;<span class="comment"></span><span class="comment"> /*! \param first iterator to the first member to remove</span></div><div class="line"><a name="l01496"></a><span class="lineno"> 1496</span>&#160;<span class="comment"> \param last iterator following the last member to remove</span></div><div class="line"><a name="l01497"></a><span class="lineno"> 1497</span>&#160;<span class="comment"> \pre IsObject() == true &amp;&amp; \ref MemberBegin() &lt;= \c first &lt;= \c last &lt;= \ref MemberEnd()</span></div><div class="line"><a name="l01498"></a><span class="lineno"> 1498</span>&#160;<span class="comment"> \return Iterator following the last removed element.</span></div><div class="line"><a name="l01499"></a><span class="lineno"> 1499</span>&#160;<span class="comment"> \note This function preserves the relative order of the remaining object</span></div><div class="line"><a name="l01500"></a><span class="lineno"> 1500</span>&#160;<span class="comment"> members.</span></div><div class="line"><a name="l01501"></a><span class="lineno"> 1501</span>&#160;<span class="comment"> \note Linear time complexity.</span></div><div class="line"><a name="l01502"></a><span class="lineno"> 1502</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01503"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a121e40b5944be337189eb63b98b7e6ce"> 1503</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">MemberIterator</a> <a class="code" href="classrapidjson_1_1_generic_value.html#a121e40b5944be337189eb63b98b7e6ce">EraseMember</a>(<a class="code" href="classrapidjson_1_1_generic_member_iterator.html">ConstMemberIterator</a> first, <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">ConstMemberIterator</a> last) {</div><div class="line"><a name="l01504"></a><span class="lineno"> 1504</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsObject());</div><div class="line"><a name="l01505"></a><span class="lineno"> 1505</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(data_.o.size &gt; 0);</div><div class="line"><a name="l01506"></a><span class="lineno"> 1506</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(GetMembersPointer() != 0);</div><div class="line"><a name="l01507"></a><span class="lineno"> 1507</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(first &gt;= MemberBegin());</div><div class="line"><a name="l01508"></a><span class="lineno"> 1508</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(first &lt;= last);</div><div class="line"><a name="l01509"></a><span class="lineno"> 1509</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(last &lt;= MemberEnd());</div><div class="line"><a name="l01510"></a><span class="lineno"> 1510</span>&#160;</div><div class="line"><a name="l01511"></a><span class="lineno"> 1511</span>&#160; <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">MemberIterator</a> pos = MemberBegin() + (first - MemberBegin());</div><div class="line"><a name="l01512"></a><span class="lineno"> 1512</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classrapidjson_1_1_generic_member_iterator.html">MemberIterator</a> itr = pos; itr != last; ++itr)</div><div class="line"><a name="l01513"></a><span class="lineno"> 1513</span>&#160; itr-&gt;~Member();</div><div class="line"><a name="l01514"></a><span class="lineno"> 1514</span>&#160; std::memmove(static_cast&lt;void*&gt;(&amp;*pos), &amp;*last, static_cast&lt;size_t&gt;(MemberEnd() - last) * <span class="keyword">sizeof</span>(<a class="code" href="structrapidjson_1_1_generic_member.html">Member</a>));</div><div class="line"><a name="l01515"></a><span class="lineno"> 1515</span>&#160; data_.o.size -= <span class="keyword">static_cast&lt;</span><a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a><span class="keyword">&gt;</span>(last - first);</div><div class="line"><a name="l01516"></a><span class="lineno"> 1516</span>&#160; <span class="keywordflow">return</span> pos;</div><div class="line"><a name="l01517"></a><span class="lineno"> 1517</span>&#160; }</div><div class="line"><a name="l01518"></a><span class="lineno"> 1518</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01519"></a><span class="lineno"> 1519</span>&#160;<span class="comment"> //! Erase a member in object by its name.</span></div><div class="line"><a name="l01520"></a><span class="lineno"> 1520</span>&#160;<span class="comment"></span><span class="comment"> /*! \param name Name of member to be removed.</span></div><div class="line"><a name="l01521"></a><span class="lineno"> 1521</span>&#160;<span class="comment"> \return Whether the member existed.</span></div><div class="line"><a name="l01522"></a><span class="lineno"> 1522</span>&#160;<span class="comment"> \note Linear time complexity.</span></div><div class="line"><a name="l01523"></a><span class="lineno"> 1523</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01524"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#ac51a3b3046aaa12aa1d88ac876a28cec"> 1524</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_generic_value.html#ac51a3b3046aaa12aa1d88ac876a28cec">EraseMember</a>(<span class="keyword">const</span> Ch* name) {</div><div class="line"><a name="l01525"></a><span class="lineno"> 1525</span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a> n(<a class="code" href="namespacerapidjson.html#af94951529a5d51e8c4e6e770bb707c1f">StringRef</a>(name));</div><div class="line"><a name="l01526"></a><span class="lineno"> 1526</span>&#160; <span class="keywordflow">return</span> EraseMember(n);</div><div class="line"><a name="l01527"></a><span class="lineno"> 1527</span>&#160; }</div><div class="line"><a name="l01528"></a><span class="lineno"> 1528</span>&#160;</div><div class="line"><a name="l01529"></a><span class="lineno"> 1529</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l01530"></a><span class="lineno"> 1530</span>&#160; <span class="keywordtype">bool</span> EraseMember(<span class="keyword">const</span> std::basic_string&lt;Ch&gt;&amp; name) { <span class="keywordflow">return</span> EraseMember(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(<a class="code" href="namespacerapidjson.html#af94951529a5d51e8c4e6e770bb707c1f">StringRef</a>(name))); }</div><div class="line"><a name="l01531"></a><span class="lineno"> 1531</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01532"></a><span class="lineno"> 1532</span>&#160;</div><div class="line"><a name="l01533"></a><span class="lineno"> 1533</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> SourceAllocator&gt;</div><div class="line"><a name="l01534"></a><span class="lineno"> 1534</span>&#160; <span class="keywordtype">bool</span> EraseMember(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue&lt;Encoding, SourceAllocator&gt;</a>&amp; name) {</div><div class="line"><a name="l01535"></a><span class="lineno"> 1535</span>&#160; <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">MemberIterator</a> m = FindMember(name);</div><div class="line"><a name="l01536"></a><span class="lineno"> 1536</span>&#160; <span class="keywordflow">if</span> (m != MemberEnd()) {</div><div class="line"><a name="l01537"></a><span class="lineno"> 1537</span>&#160; EraseMember(m);</div><div class="line"><a name="l01538"></a><span class="lineno"> 1538</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l01539"></a><span class="lineno"> 1539</span>&#160; }</div><div class="line"><a name="l01540"></a><span class="lineno"> 1540</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01541"></a><span class="lineno"> 1541</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01542"></a><span class="lineno"> 1542</span>&#160; }</div><div class="line"><a name="l01543"></a><span class="lineno"> 1543</span>&#160;</div><div class="line"><a name="l01544"></a><span class="lineno"> 1544</span>&#160; <a class="code" href="classrapidjson_1_1_generic_object.html">Object</a> GetObject() { <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsObject()); <span class="keywordflow">return</span> <a class="code" href="classrapidjson_1_1_generic_object.html">Object</a>(*<span class="keyword">this</span>); }</div><div class="line"><a name="l01545"></a><span class="lineno"> 1545</span>&#160; <a class="code" href="classrapidjson_1_1_generic_object.html">ConstObject</a> GetObject()<span class="keyword"> const </span>{ <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsObject()); <span class="keywordflow">return</span> <a class="code" href="classrapidjson_1_1_generic_object.html">ConstObject</a>(*<span class="keyword">this</span>); }</div><div class="line"><a name="l01546"></a><span class="lineno"> 1546</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01547"></a><span class="lineno"> 1547</span>&#160;<span class="comment"> //@}</span></div><div class="line"><a name="l01548"></a><span class="lineno"> 1548</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l01549"></a><span class="lineno"> 1549</span>&#160;<span class="comment"> //!@name Array</span></div><div class="line"><a name="l01550"></a><span class="lineno"> 1550</span>&#160;<span class="comment"></span><span class="comment"> //@{</span></div><div class="line"><a name="l01551"></a><span class="lineno"> 1551</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l01552"></a><span class="lineno"> 1552</span>&#160;<span class="comment"> //! Set this value as an empty array.</span></div><div class="line"><a name="l01553"></a><span class="lineno"> 1553</span>&#160;<span class="comment"></span><span class="comment"> /*! \post IsArray == true */</span></div><div class="line"><a name="l01554"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a25069c76d045b058e54835d8c467c789"> 1554</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#a25069c76d045b058e54835d8c467c789">SetArray</a>() { this-&gt;~<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(); <span class="keyword">new</span> (<span class="keyword">this</span>) <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a058c622e1e7d59419ae58b895cbce468">kArrayType</a>); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l01555"></a><span class="lineno"> 1555</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01556"></a><span class="lineno"> 1556</span>&#160;<span class="comment"> //! Get the number of elements in array.</span></div><div class="line"><a name="l01557"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a799a8a2503989f486f3fc7a660266555"> 1557</a></span>&#160;<span class="comment"></span> <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> <a class="code" href="classrapidjson_1_1_generic_value.html#a799a8a2503989f486f3fc7a660266555">Size</a>()<span class="keyword"> const </span>{ <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsArray()); <span class="keywordflow">return</span> data_.a.size; }</div><div class="line"><a name="l01558"></a><span class="lineno"> 1558</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01559"></a><span class="lineno"> 1559</span>&#160;<span class="comment"> //! Get the capacity of array.</span></div><div class="line"><a name="l01560"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a812e5c07f74a90566e7636330740eb6a"> 1560</a></span>&#160;<span class="comment"></span> <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> <a class="code" href="classrapidjson_1_1_generic_value.html#a812e5c07f74a90566e7636330740eb6a">Capacity</a>()<span class="keyword"> const </span>{ <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsArray()); <span class="keywordflow">return</span> data_.a.capacity; }</div><div class="line"><a name="l01561"></a><span class="lineno"> 1561</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01562"></a><span class="lineno"> 1562</span>&#160;<span class="comment"> //! Check whether the array is empty.</span></div><div class="line"><a name="l01563"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#ad08a62c65a793ab1d0abe7eac03776fd"> 1563</a></span>&#160;<span class="comment"></span> <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_generic_value.html#ad08a62c65a793ab1d0abe7eac03776fd">Empty</a>()<span class="keyword"> const </span>{ <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsArray()); <span class="keywordflow">return</span> data_.a.size == 0; }</div><div class="line"><a name="l01564"></a><span class="lineno"> 1564</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01565"></a><span class="lineno"> 1565</span>&#160;<span class="comment"> //! Remove all elements in the array.</span></div><div class="line"><a name="l01566"></a><span class="lineno"> 1566</span>&#160;<span class="comment"></span><span class="comment"> /*! This function do not deallocate memory in the array, i.e. the capacity is unchanged.</span></div><div class="line"><a name="l01567"></a><span class="lineno"> 1567</span>&#160;<span class="comment"> \note Linear time complexity.</span></div><div class="line"><a name="l01568"></a><span class="lineno"> 1568</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01569"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#aa56b69bac5423622eff6998ce4802106"> 1569</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classrapidjson_1_1_generic_value.html#aa56b69bac5423622eff6998ce4802106">Clear</a>() {</div><div class="line"><a name="l01570"></a><span class="lineno"> 1570</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsArray()); </div><div class="line"><a name="l01571"></a><span class="lineno"> 1571</span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>* e = GetElementsPointer();</div><div class="line"><a name="l01572"></a><span class="lineno"> 1572</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>* v = e; v != e + data_.a.size; ++v)</div><div class="line"><a name="l01573"></a><span class="lineno"> 1573</span>&#160; v-&gt;~GenericValue();</div><div class="line"><a name="l01574"></a><span class="lineno"> 1574</span>&#160; data_.a.size = 0;</div><div class="line"><a name="l01575"></a><span class="lineno"> 1575</span>&#160; }</div><div class="line"><a name="l01576"></a><span class="lineno"> 1576</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01577"></a><span class="lineno"> 1577</span>&#160;<span class="comment"> //! Get an element from array by index.</span></div><div class="line"><a name="l01578"></a><span class="lineno"> 1578</span>&#160;<span class="comment"></span><span class="comment"> /*! \pre IsArray() == true</span></div><div class="line"><a name="l01579"></a><span class="lineno"> 1579</span>&#160;<span class="comment"> \param index Zero-based index of element.</span></div><div class="line"><a name="l01580"></a><span class="lineno"> 1580</span>&#160;<span class="comment"> \see operator[](T*)</span></div><div class="line"><a name="l01581"></a><span class="lineno"> 1581</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01582"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#adc312de070d03a63e6c692c9c61db156"> 1582</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#adc312de070d03a63e6c692c9c61db156">operator[]</a>(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> index) {</div><div class="line"><a name="l01583"></a><span class="lineno"> 1583</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsArray());</div><div class="line"><a name="l01584"></a><span class="lineno"> 1584</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(index &lt; data_.a.size);</div><div class="line"><a name="l01585"></a><span class="lineno"> 1585</span>&#160; <span class="keywordflow">return</span> GetElementsPointer()[index];</div><div class="line"><a name="l01586"></a><span class="lineno"> 1586</span>&#160; }</div><div class="line"><a name="l01587"></a><span class="lineno"> 1587</span>&#160; <span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; operator[](<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> index)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">const_cast&lt;</span><a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp;<span class="keyword">&gt;</span>(*this)[index]; }</div><div class="line"><a name="l01588"></a><span class="lineno"> 1588</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01589"></a><span class="lineno"> 1589</span>&#160;<span class="comment"> //! Element iterator</span></div><div class="line"><a name="l01590"></a><span class="lineno"> 1590</span>&#160;<span class="comment"></span><span class="comment"> /*! \pre IsArray() == true */</span></div><div class="line"><a name="l01591"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a8d1040c479d89edb261db86400ebe603"> 1591</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">ValueIterator</a> <a class="code" href="classrapidjson_1_1_generic_value.html#a8d1040c479d89edb261db86400ebe603">Begin</a>() { <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsArray()); <span class="keywordflow">return</span> GetElementsPointer(); }<span class="comment"></span></div><div class="line"><a name="l01592"></a><span class="lineno"> 1592</span>&#160;<span class="comment"> //! \em Past-the-end element iterator</span></div><div class="line"><a name="l01593"></a><span class="lineno"> 1593</span>&#160;<span class="comment"></span><span class="comment"> /*! \pre IsArray() == true */</span></div><div class="line"><a name="l01594"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#aaf58b9337ccc0cdf16aa9634c4645109"> 1594</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">ValueIterator</a> <a class="code" href="classrapidjson_1_1_generic_value.html#aaf58b9337ccc0cdf16aa9634c4645109">End</a>() { <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsArray()); <span class="keywordflow">return</span> GetElementsPointer() + data_.a.size; }<span class="comment"></span></div><div class="line"><a name="l01595"></a><span class="lineno"> 1595</span>&#160;<span class="comment"> //! Constant element iterator</span></div><div class="line"><a name="l01596"></a><span class="lineno"> 1596</span>&#160;<span class="comment"></span><span class="comment"> /*! \pre IsArray() == true */</span></div><div class="line"><a name="l01597"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a07d947971c59c9ce884b3c5205c9238f"> 1597</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">ConstValueIterator</a> <a class="code" href="classrapidjson_1_1_generic_value.html#a07d947971c59c9ce884b3c5205c9238f">Begin</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">const_cast&lt;</span><a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp;<span class="keyword">&gt;</span>(*this).<a class="code" href="classrapidjson_1_1_generic_value.html#a8d1040c479d89edb261db86400ebe603">Begin</a>(); }<span class="comment"></span></div><div class="line"><a name="l01598"></a><span class="lineno"> 1598</span>&#160;<span class="comment"> //! Constant \em past-the-end element iterator</span></div><div class="line"><a name="l01599"></a><span class="lineno"> 1599</span>&#160;<span class="comment"></span><span class="comment"> /*! \pre IsArray() == true */</span></div><div class="line"><a name="l01600"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#abdd6a3b703a03aada4c186a2365698e7"> 1600</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">ConstValueIterator</a> <a class="code" href="classrapidjson_1_1_generic_value.html#abdd6a3b703a03aada4c186a2365698e7">End</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">const_cast&lt;</span><a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp;<span class="keyword">&gt;</span>(*this).<a class="code" href="classrapidjson_1_1_generic_value.html#aaf58b9337ccc0cdf16aa9634c4645109">End</a>(); }</div><div class="line"><a name="l01601"></a><span class="lineno"> 1601</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01602"></a><span class="lineno"> 1602</span>&#160;<span class="comment"> //! Request the array to have enough capacity to store elements.</span></div><div class="line"><a name="l01603"></a><span class="lineno"> 1603</span>&#160;<span class="comment"></span><span class="comment"> /*! \param newCapacity The capacity that the array at least need to have.</span></div><div class="line"><a name="l01604"></a><span class="lineno"> 1604</span>&#160;<span class="comment"> \param allocator Allocator for reallocating memory. It must be the same one as used before. Commonly use GenericDocument::GetAllocator().</span></div><div class="line"><a name="l01605"></a><span class="lineno"> 1605</span>&#160;<span class="comment"> \return The value itself for fluent API.</span></div><div class="line"><a name="l01606"></a><span class="lineno"> 1606</span>&#160;<span class="comment"> \note Linear time complexity.</span></div><div class="line"><a name="l01607"></a><span class="lineno"> 1607</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01608"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a17971ba2bcd4eb1716098fdfe9182386"> 1608</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#a17971ba2bcd4eb1716098fdfe9182386">Reserve</a>(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> newCapacity, Allocator &amp;allocator) {</div><div class="line"><a name="l01609"></a><span class="lineno"> 1609</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsArray());</div><div class="line"><a name="l01610"></a><span class="lineno"> 1610</span>&#160; <span class="keywordflow">if</span> (newCapacity &gt; data_.a.capacity) {</div><div class="line"><a name="l01611"></a><span class="lineno"> 1611</span>&#160; SetElementsPointer(reinterpret_cast&lt;GenericValue*&gt;(allocator.Realloc(GetElementsPointer(), data_.a.capacity * <span class="keyword">sizeof</span>(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>), newCapacity * <span class="keyword">sizeof</span>(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>))));</div><div class="line"><a name="l01612"></a><span class="lineno"> 1612</span>&#160; data_.a.capacity = newCapacity;</div><div class="line"><a name="l01613"></a><span class="lineno"> 1613</span>&#160; }</div><div class="line"><a name="l01614"></a><span class="lineno"> 1614</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l01615"></a><span class="lineno"> 1615</span>&#160; }</div><div class="line"><a name="l01616"></a><span class="lineno"> 1616</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01617"></a><span class="lineno"> 1617</span>&#160;<span class="comment"> //! Append a GenericValue at the end of the array.</span></div><div class="line"><a name="l01618"></a><span class="lineno"> 1618</span>&#160;<span class="comment"></span><span class="comment"> /*! \param value Value to be appended.</span></div><div class="line"><a name="l01619"></a><span class="lineno"> 1619</span>&#160;<span class="comment"> \param allocator Allocator for reallocating memory. It must be the same one as used before. Commonly use GenericDocument::GetAllocator().</span></div><div class="line"><a name="l01620"></a><span class="lineno"> 1620</span>&#160;<span class="comment"> \pre IsArray() == true</span></div><div class="line"><a name="l01621"></a><span class="lineno"> 1621</span>&#160;<span class="comment"> \post value.IsNull() == true</span></div><div class="line"><a name="l01622"></a><span class="lineno"> 1622</span>&#160;<span class="comment"> \return The value itself for fluent API.</span></div><div class="line"><a name="l01623"></a><span class="lineno"> 1623</span>&#160;<span class="comment"> \note The ownership of \c value will be transferred to this array on success.</span></div><div class="line"><a name="l01624"></a><span class="lineno"> 1624</span>&#160;<span class="comment"> \note If the number of elements to be appended is known, calls Reserve() once first may be more efficient.</span></div><div class="line"><a name="l01625"></a><span class="lineno"> 1625</span>&#160;<span class="comment"> \note Amortized constant time complexity.</span></div><div class="line"><a name="l01626"></a><span class="lineno"> 1626</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01627"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a0ec9f34bef5890241d4bc882b73b1db4"> 1627</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#a0ec9f34bef5890241d4bc882b73b1db4">PushBack</a>(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; value, Allocator&amp; allocator) {</div><div class="line"><a name="l01628"></a><span class="lineno"> 1628</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsArray());</div><div class="line"><a name="l01629"></a><span class="lineno"> 1629</span>&#160; <span class="keywordflow">if</span> (data_.a.size &gt;= data_.a.capacity)</div><div class="line"><a name="l01630"></a><span class="lineno"> 1630</span>&#160; Reserve(data_.a.capacity == 0 ? kDefaultArrayCapacity : (data_.a.capacity + (data_.a.capacity + 1) / 2), allocator);</div><div class="line"><a name="l01631"></a><span class="lineno"> 1631</span>&#160; GetElementsPointer()[data_.a.size++].RawAssign(value);</div><div class="line"><a name="l01632"></a><span class="lineno"> 1632</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l01633"></a><span class="lineno"> 1633</span>&#160; }</div><div class="line"><a name="l01634"></a><span class="lineno"> 1634</span>&#160;</div><div class="line"><a name="l01635"></a><span class="lineno"> 1635</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l01636"></a><span class="lineno"> 1636</span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; PushBack(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp;&amp; value, Allocator&amp; allocator) {</div><div class="line"><a name="l01637"></a><span class="lineno"> 1637</span>&#160; <span class="keywordflow">return</span> PushBack(value, allocator);</div><div class="line"><a name="l01638"></a><span class="lineno"> 1638</span>&#160; }</div><div class="line"><a name="l01639"></a><span class="lineno"> 1639</span>&#160;<span class="preprocessor">#endif // RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l01640"></a><span class="lineno"> 1640</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01641"></a><span class="lineno"> 1641</span>&#160;<span class="comment"> //! Append a constant string reference at the end of the array.</span></div><div class="line"><a name="l01642"></a><span class="lineno"> 1642</span>&#160;<span class="comment"></span><span class="comment"> /*! \param value Constant string reference to be appended.</span></div><div class="line"><a name="l01643"></a><span class="lineno"> 1643</span>&#160;<span class="comment"> \param allocator Allocator for reallocating memory. It must be the same one used previously. Commonly use GenericDocument::GetAllocator().</span></div><div class="line"><a name="l01644"></a><span class="lineno"> 1644</span>&#160;<span class="comment"> \pre IsArray() == true</span></div><div class="line"><a name="l01645"></a><span class="lineno"> 1645</span>&#160;<span class="comment"> \return The value itself for fluent API.</span></div><div class="line"><a name="l01646"></a><span class="lineno"> 1646</span>&#160;<span class="comment"> \note If the number of elements to be appended is known, calls Reserve() once first may be more efficient.</span></div><div class="line"><a name="l01647"></a><span class="lineno"> 1647</span>&#160;<span class="comment"> \note Amortized constant time complexity.</span></div><div class="line"><a name="l01648"></a><span class="lineno"> 1648</span>&#160;<span class="comment"> \see GenericStringRef</span></div><div class="line"><a name="l01649"></a><span class="lineno"> 1649</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01650"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a41946915cb219a684f6ffc9341efee22"> 1650</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#a41946915cb219a684f6ffc9341efee22">PushBack</a>(<a class="code" href="structrapidjson_1_1_generic_string_ref.html">StringRefType</a> value, Allocator&amp; allocator) {</div><div class="line"><a name="l01651"></a><span class="lineno"> 1651</span>&#160; <span class="keywordflow">return</span> (*this).template PushBack&lt;StringRefType&gt;(value, allocator);</div><div class="line"><a name="l01652"></a><span class="lineno"> 1652</span>&#160; }</div><div class="line"><a name="l01653"></a><span class="lineno"> 1653</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01654"></a><span class="lineno"> 1654</span>&#160;<span class="comment"> //! Append a primitive value at the end of the array.</span></div><div class="line"><a name="l01655"></a><span class="lineno"> 1655</span>&#160;<span class="comment"></span><span class="comment"> /*! \tparam T Either \ref Type, \c int, \c unsigned, \c int64_t, \c uint64_t</span></div><div class="line"><a name="l01656"></a><span class="lineno"> 1656</span>&#160;<span class="comment"> \param value Value of primitive type T to be appended.</span></div><div class="line"><a name="l01657"></a><span class="lineno"> 1657</span>&#160;<span class="comment"> \param allocator Allocator for reallocating memory. It must be the same one as used before. Commonly use GenericDocument::GetAllocator().</span></div><div class="line"><a name="l01658"></a><span class="lineno"> 1658</span>&#160;<span class="comment"> \pre IsArray() == true</span></div><div class="line"><a name="l01659"></a><span class="lineno"> 1659</span>&#160;<span class="comment"> \return The value itself for fluent API.</span></div><div class="line"><a name="l01660"></a><span class="lineno"> 1660</span>&#160;<span class="comment"> \note If the number of elements to be appended is known, calls Reserve() once first may be more efficient.</span></div><div class="line"><a name="l01661"></a><span class="lineno"> 1661</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01662"></a><span class="lineno"> 1662</span>&#160;<span class="comment"> \note The source type \c T explicitly disallows all pointer types,</span></div><div class="line"><a name="l01663"></a><span class="lineno"> 1663</span>&#160;<span class="comment"> especially (\c const) \ref Ch*. This helps avoiding implicitly</span></div><div class="line"><a name="l01664"></a><span class="lineno"> 1664</span>&#160;<span class="comment"> referencing character strings with insufficient lifetime, use</span></div><div class="line"><a name="l01665"></a><span class="lineno"> 1665</span>&#160;<span class="comment"> \ref PushBack(GenericValue&amp;, Allocator&amp;) or \ref</span></div><div class="line"><a name="l01666"></a><span class="lineno"> 1666</span>&#160;<span class="comment"> PushBack(StringRefType, Allocator&amp;).</span></div><div class="line"><a name="l01667"></a><span class="lineno"> 1667</span>&#160;<span class="comment"> All other pointer types would implicitly convert to \c bool,</span></div><div class="line"><a name="l01668"></a><span class="lineno"> 1668</span>&#160;<span class="comment"> use an explicit cast instead, if needed.</span></div><div class="line"><a name="l01669"></a><span class="lineno"> 1669</span>&#160;<span class="comment"> \note Amortized constant time complexity.</span></div><div class="line"><a name="l01670"></a><span class="lineno"> 1670</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01671"></a><span class="lineno"> 1671</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l01672"></a><span class="lineno"> 1672</span>&#160; RAPIDJSON_DISABLEIF_RETURN((internal::OrExpr&lt;internal::IsPointer&lt;T&gt;, internal::IsGenericValue&lt;T&gt; &gt;), (<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp;))</div><div class="line"><a name="l01673"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#aa59273e0adfe2a9d0e6ac29d2537d9ed"> 1673</a></span>&#160; PushBack(T value, Allocator&amp; allocator) {</div><div class="line"><a name="l01674"></a><span class="lineno"> 1674</span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a> v(value);</div><div class="line"><a name="l01675"></a><span class="lineno"> 1675</span>&#160; <span class="keywordflow">return</span> PushBack(v, allocator);</div><div class="line"><a name="l01676"></a><span class="lineno"> 1676</span>&#160; }</div><div class="line"><a name="l01677"></a><span class="lineno"> 1677</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01678"></a><span class="lineno"> 1678</span>&#160;<span class="comment"> //! Remove the last element in the array.</span></div><div class="line"><a name="l01679"></a><span class="lineno"> 1679</span>&#160;<span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l01680"></a><span class="lineno"> 1680</span>&#160;<span class="comment"> \note Constant time complexity.</span></div><div class="line"><a name="l01681"></a><span class="lineno"> 1681</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01682"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#ae475f31fb851138ced40e2ff6cb43ca6"> 1682</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#ae475f31fb851138ced40e2ff6cb43ca6">PopBack</a>() {</div><div class="line"><a name="l01683"></a><span class="lineno"> 1683</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsArray());</div><div class="line"><a name="l01684"></a><span class="lineno"> 1684</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(!Empty());</div><div class="line"><a name="l01685"></a><span class="lineno"> 1685</span>&#160; GetElementsPointer()[--data_.a.size].~GenericValue();</div><div class="line"><a name="l01686"></a><span class="lineno"> 1686</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l01687"></a><span class="lineno"> 1687</span>&#160; }</div><div class="line"><a name="l01688"></a><span class="lineno"> 1688</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01689"></a><span class="lineno"> 1689</span>&#160;<span class="comment"> //! Remove an element of array by iterator.</span></div><div class="line"><a name="l01690"></a><span class="lineno"> 1690</span>&#160;<span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l01691"></a><span class="lineno"> 1691</span>&#160;<span class="comment"> \param pos iterator to the element to remove</span></div><div class="line"><a name="l01692"></a><span class="lineno"> 1692</span>&#160;<span class="comment"> \pre IsArray() == true &amp;&amp; \ref Begin() &lt;= \c pos &lt; \ref End()</span></div><div class="line"><a name="l01693"></a><span class="lineno"> 1693</span>&#160;<span class="comment"> \return Iterator following the removed element. If the iterator pos refers to the last element, the End() iterator is returned.</span></div><div class="line"><a name="l01694"></a><span class="lineno"> 1694</span>&#160;<span class="comment"> \note Linear time complexity.</span></div><div class="line"><a name="l01695"></a><span class="lineno"> 1695</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01696"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a68ba73eeda7b9429ca05267065d3cc99"> 1696</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">ValueIterator</a> <a class="code" href="classrapidjson_1_1_generic_value.html#a68ba73eeda7b9429ca05267065d3cc99">Erase</a>(<a class="code" href="classrapidjson_1_1_generic_value.html">ConstValueIterator</a> pos) {</div><div class="line"><a name="l01697"></a><span class="lineno"> 1697</span>&#160; <span class="keywordflow">return</span> Erase(pos, pos + 1);</div><div class="line"><a name="l01698"></a><span class="lineno"> 1698</span>&#160; }</div><div class="line"><a name="l01699"></a><span class="lineno"> 1699</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01700"></a><span class="lineno"> 1700</span>&#160;<span class="comment"> //! Remove elements in the range [first, last) of the array.</span></div><div class="line"><a name="l01701"></a><span class="lineno"> 1701</span>&#160;<span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l01702"></a><span class="lineno"> 1702</span>&#160;<span class="comment"> \param first iterator to the first element to remove</span></div><div class="line"><a name="l01703"></a><span class="lineno"> 1703</span>&#160;<span class="comment"> \param last iterator following the last element to remove</span></div><div class="line"><a name="l01704"></a><span class="lineno"> 1704</span>&#160;<span class="comment"> \pre IsArray() == true &amp;&amp; \ref Begin() &lt;= \c first &lt;= \c last &lt;= \ref End()</span></div><div class="line"><a name="l01705"></a><span class="lineno"> 1705</span>&#160;<span class="comment"> \return Iterator following the last removed element.</span></div><div class="line"><a name="l01706"></a><span class="lineno"> 1706</span>&#160;<span class="comment"> \note Linear time complexity.</span></div><div class="line"><a name="l01707"></a><span class="lineno"> 1707</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01708"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a916f443e02f9379d8fbde49a4d440f61"> 1708</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">ValueIterator</a> <a class="code" href="classrapidjson_1_1_generic_value.html#a916f443e02f9379d8fbde49a4d440f61">Erase</a>(<a class="code" href="classrapidjson_1_1_generic_value.html">ConstValueIterator</a> first, <a class="code" href="classrapidjson_1_1_generic_value.html">ConstValueIterator</a> last) {</div><div class="line"><a name="l01709"></a><span class="lineno"> 1709</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsArray());</div><div class="line"><a name="l01710"></a><span class="lineno"> 1710</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(data_.a.size &gt; 0);</div><div class="line"><a name="l01711"></a><span class="lineno"> 1711</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(GetElementsPointer() != 0);</div><div class="line"><a name="l01712"></a><span class="lineno"> 1712</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(first &gt;= Begin());</div><div class="line"><a name="l01713"></a><span class="lineno"> 1713</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(first &lt;= last);</div><div class="line"><a name="l01714"></a><span class="lineno"> 1714</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(last &lt;= End());</div><div class="line"><a name="l01715"></a><span class="lineno"> 1715</span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">ValueIterator</a> pos = Begin() + (first - Begin());</div><div class="line"><a name="l01716"></a><span class="lineno"> 1716</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classrapidjson_1_1_generic_value.html">ValueIterator</a> itr = pos; itr != last; ++itr)</div><div class="line"><a name="l01717"></a><span class="lineno"> 1717</span>&#160; itr-&gt;<a class="code" href="classrapidjson_1_1_generic_value.html#a433a64b466c80cadf7d1acaa6f065437">~GenericValue</a>();</div><div class="line"><a name="l01718"></a><span class="lineno"> 1718</span>&#160; std::memmove(static_cast&lt;void*&gt;(pos), last, static_cast&lt;size_t&gt;(End() - last) * <span class="keyword">sizeof</span>(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>));</div><div class="line"><a name="l01719"></a><span class="lineno"> 1719</span>&#160; data_.a.size -= <span class="keyword">static_cast&lt;</span><a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a><span class="keyword">&gt;</span>(last - first);</div><div class="line"><a name="l01720"></a><span class="lineno"> 1720</span>&#160; <span class="keywordflow">return</span> pos;</div><div class="line"><a name="l01721"></a><span class="lineno"> 1721</span>&#160; }</div><div class="line"><a name="l01722"></a><span class="lineno"> 1722</span>&#160;</div><div class="line"><a name="l01723"></a><span class="lineno"> 1723</span>&#160; <a class="code" href="classrapidjson_1_1_generic_array.html">Array</a> GetArray() { <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsArray()); <span class="keywordflow">return</span> <a class="code" href="classrapidjson_1_1_generic_array.html">Array</a>(*<span class="keyword">this</span>); }</div><div class="line"><a name="l01724"></a><span class="lineno"> 1724</span>&#160; <a class="code" href="classrapidjson_1_1_generic_array.html">ConstArray</a> GetArray()<span class="keyword"> const </span>{ <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsArray()); <span class="keywordflow">return</span> <a class="code" href="classrapidjson_1_1_generic_array.html">ConstArray</a>(*<span class="keyword">this</span>); }</div><div class="line"><a name="l01725"></a><span class="lineno"> 1725</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01726"></a><span class="lineno"> 1726</span>&#160;<span class="comment"> //@}</span></div><div class="line"><a name="l01727"></a><span class="lineno"> 1727</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l01728"></a><span class="lineno"> 1728</span>&#160;<span class="comment"> //!@name Number</span></div><div class="line"><a name="l01729"></a><span class="lineno"> 1729</span>&#160;<span class="comment"></span><span class="comment"> //@{</span></div><div class="line"><a name="l01730"></a><span class="lineno"> 1730</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01731"></a><span class="lineno"> 1731</span>&#160; <span class="keywordtype">int</span> GetInt()<span class="keyword"> const </span>{ <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(data_.f.flags &amp; kIntFlag); <span class="keywordflow">return</span> data_.n.i.i; }</div><div class="line"><a name="l01732"></a><span class="lineno"> 1732</span>&#160; <span class="keywordtype">unsigned</span> GetUint()<span class="keyword"> const </span>{ <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(data_.f.flags &amp; kUintFlag); <span class="keywordflow">return</span> data_.n.u.u; }</div><div class="line"><a name="l01733"></a><span class="lineno"> 1733</span>&#160; int64_t GetInt64()<span class="keyword"> const </span>{ <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(data_.f.flags &amp; kInt64Flag); <span class="keywordflow">return</span> data_.n.i64; }</div><div class="line"><a name="l01734"></a><span class="lineno"> 1734</span>&#160; uint64_t GetUint64()<span class="keyword"> const </span>{ <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(data_.f.flags &amp; kUint64Flag); <span class="keywordflow">return</span> data_.n.u64; }</div><div class="line"><a name="l01735"></a><span class="lineno"> 1735</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01736"></a><span class="lineno"> 1736</span>&#160;<span class="comment"> //! Get the value as double type.</span></div><div class="line"><a name="l01737"></a><span class="lineno"> 1737</span>&#160;<span class="comment"></span><span class="comment"> /*! \note If the value is 64-bit integer type, it may lose precision. Use \c IsLosslessDouble() to check whether the converison is lossless.</span></div><div class="line"><a name="l01738"></a><span class="lineno"> 1738</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01739"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#aa27d086d265f0ce447b15b15f0a2ed6e"> 1739</a></span>&#160; <span class="keywordtype">double</span> <a class="code" href="classrapidjson_1_1_generic_value.html#aa27d086d265f0ce447b15b15f0a2ed6e">GetDouble</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l01740"></a><span class="lineno"> 1740</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsNumber());</div><div class="line"><a name="l01741"></a><span class="lineno"> 1741</span>&#160; <span class="keywordflow">if</span> ((data_.f.flags &amp; kDoubleFlag) != 0) <span class="keywordflow">return</span> data_.n.d; <span class="comment">// exact type, no conversion.</span></div><div class="line"><a name="l01742"></a><span class="lineno"> 1742</span>&#160; <span class="keywordflow">if</span> ((data_.f.flags &amp; kIntFlag) != 0) <span class="keywordflow">return</span> data_.n.i.i; <span class="comment">// int -&gt; double</span></div><div class="line"><a name="l01743"></a><span class="lineno"> 1743</span>&#160; <span class="keywordflow">if</span> ((data_.f.flags &amp; kUintFlag) != 0) <span class="keywordflow">return</span> data_.n.u.u; <span class="comment">// unsigned -&gt; double</span></div><div class="line"><a name="l01744"></a><span class="lineno"> 1744</span>&#160; <span class="keywordflow">if</span> ((data_.f.flags &amp; kInt64Flag) != 0) <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span><span class="keywordtype">double</span><span class="keyword">&gt;</span>(data_.n.i64); <span class="comment">// int64_t -&gt; double (may lose precision)</span></div><div class="line"><a name="l01745"></a><span class="lineno"> 1745</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>((data_.f.flags &amp; kUint64Flag) != 0); <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span><span class="keywordtype">double</span><span class="keyword">&gt;</span>(data_.n.u64); <span class="comment">// uint64_t -&gt; double (may lose precision)</span></div><div class="line"><a name="l01746"></a><span class="lineno"> 1746</span>&#160; }</div><div class="line"><a name="l01747"></a><span class="lineno"> 1747</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01748"></a><span class="lineno"> 1748</span>&#160;<span class="comment"> //! Get the value as float type.</span></div><div class="line"><a name="l01749"></a><span class="lineno"> 1749</span>&#160;<span class="comment"></span><span class="comment"> /*! \note If the value is 64-bit integer type, it may lose precision. Use \c IsLosslessFloat() to check whether the converison is lossless.</span></div><div class="line"><a name="l01750"></a><span class="lineno"> 1750</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01751"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a573712808dd5d8814c103cf55fd761b4"> 1751</a></span>&#160; <span class="keywordtype">float</span> <a class="code" href="classrapidjson_1_1_generic_value.html#a573712808dd5d8814c103cf55fd761b4">GetFloat</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l01752"></a><span class="lineno"> 1752</span>&#160; <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span>(GetDouble());</div><div class="line"><a name="l01753"></a><span class="lineno"> 1753</span>&#160; }</div><div class="line"><a name="l01754"></a><span class="lineno"> 1754</span>&#160;</div><div class="line"><a name="l01755"></a><span class="lineno"> 1755</span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; SetInt(<span class="keywordtype">int</span> i) { this-&gt;~<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(); <span class="keyword">new</span> (<span class="keyword">this</span>) <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(i); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l01756"></a><span class="lineno"> 1756</span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; SetUint(<span class="keywordtype">unsigned</span> u) { this-&gt;~<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(); <span class="keyword">new</span> (<span class="keyword">this</span>) <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(u); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l01757"></a><span class="lineno"> 1757</span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; SetInt64(int64_t i64) { this-&gt;~<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(); <span class="keyword">new</span> (<span class="keyword">this</span>) <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(i64); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l01758"></a><span class="lineno"> 1758</span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; SetUint64(uint64_t u64) { this-&gt;~<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(); <span class="keyword">new</span> (<span class="keyword">this</span>) <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(u64); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l01759"></a><span class="lineno"> 1759</span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; SetDouble(<span class="keywordtype">double</span> d) { this-&gt;~<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(); <span class="keyword">new</span> (<span class="keyword">this</span>) <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(d); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l01760"></a><span class="lineno"> 1760</span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; SetFloat(<span class="keywordtype">float</span> f) { this-&gt;~<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(); <span class="keyword">new</span> (<span class="keyword">this</span>) <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(static_cast&lt;double&gt;(f)); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l01761"></a><span class="lineno"> 1761</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01762"></a><span class="lineno"> 1762</span>&#160;<span class="comment"> //@}</span></div><div class="line"><a name="l01763"></a><span class="lineno"> 1763</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l01764"></a><span class="lineno"> 1764</span>&#160;<span class="comment"> //!@name String</span></div><div class="line"><a name="l01765"></a><span class="lineno"> 1765</span>&#160;<span class="comment"></span><span class="comment"> //@{</span></div><div class="line"><a name="l01766"></a><span class="lineno"> 1766</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01767"></a><span class="lineno"> 1767</span>&#160; <span class="keyword">const</span> Ch* GetString()<span class="keyword"> const </span>{ <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsString()); <span class="keywordflow">return</span> (data_.f.flags &amp; kInlineStrFlag) ? data_.ss.str : GetStringPointer(); }</div><div class="line"><a name="l01768"></a><span class="lineno"> 1768</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01769"></a><span class="lineno"> 1769</span>&#160;<span class="comment"> //! Get the length of string.</span></div><div class="line"><a name="l01770"></a><span class="lineno"> 1770</span>&#160;<span class="comment"></span><span class="comment"> /*! Since rapidjson permits &quot;\\u0000&quot; in the json string, strlen(v.GetString()) may not equal to v.GetStringLength().</span></div><div class="line"><a name="l01771"></a><span class="lineno"> 1771</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01772"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a18599e0d1a7e70a11b35f5e219390fea"> 1772</a></span>&#160; <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> <a class="code" href="classrapidjson_1_1_generic_value.html#a18599e0d1a7e70a11b35f5e219390fea">GetStringLength</a>()<span class="keyword"> const </span>{ <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsString()); <span class="keywordflow">return</span> ((data_.f.flags &amp; kInlineStrFlag) ? (data_.ss.GetLength()) : data_.s.length); }</div><div class="line"><a name="l01773"></a><span class="lineno"> 1773</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01774"></a><span class="lineno"> 1774</span>&#160;<span class="comment"> //! Set this value as a string without copying source string.</span></div><div class="line"><a name="l01775"></a><span class="lineno"> 1775</span>&#160;<span class="comment"></span><span class="comment"> /*! This version has better performance with supplied length, and also support string containing null character.</span></div><div class="line"><a name="l01776"></a><span class="lineno"> 1776</span>&#160;<span class="comment"> \param s source string pointer. </span></div><div class="line"><a name="l01777"></a><span class="lineno"> 1777</span>&#160;<span class="comment"> \param length The length of source string, excluding the trailing null terminator.</span></div><div class="line"><a name="l01778"></a><span class="lineno"> 1778</span>&#160;<span class="comment"> \return The value itself for fluent API.</span></div><div class="line"><a name="l01779"></a><span class="lineno"> 1779</span>&#160;<span class="comment"> \post IsString() == true &amp;&amp; GetString() == s &amp;&amp; GetStringLength() == length</span></div><div class="line"><a name="l01780"></a><span class="lineno"> 1780</span>&#160;<span class="comment"> \see SetString(StringRefType)</span></div><div class="line"><a name="l01781"></a><span class="lineno"> 1781</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01782"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#afb91480cc6242ca96ffc603e649c319f"> 1782</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#afb91480cc6242ca96ffc603e649c319f">SetString</a>(<span class="keyword">const</span> Ch* s, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> length) { <span class="keywordflow">return</span> <a class="code" href="classrapidjson_1_1_generic_value.html#afb91480cc6242ca96ffc603e649c319f">SetString</a>(<a class="code" href="namespacerapidjson.html#af94951529a5d51e8c4e6e770bb707c1f">StringRef</a>(s, length)); }</div><div class="line"><a name="l01783"></a><span class="lineno"> 1783</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01784"></a><span class="lineno"> 1784</span>&#160;<span class="comment"> //! Set this value as a string without copying source string.</span></div><div class="line"><a name="l01785"></a><span class="lineno"> 1785</span>&#160;<span class="comment"></span><span class="comment"> /*! \param s source string reference</span></div><div class="line"><a name="l01786"></a><span class="lineno"> 1786</span>&#160;<span class="comment"> \return The value itself for fluent API.</span></div><div class="line"><a name="l01787"></a><span class="lineno"> 1787</span>&#160;<span class="comment"> \post IsString() == true &amp;&amp; GetString() == s &amp;&amp; GetStringLength() == s.length</span></div><div class="line"><a name="l01788"></a><span class="lineno"> 1788</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01789"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#aabb538578a3c1e60c86cda32d062bc1c"> 1789</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#aabb538578a3c1e60c86cda32d062bc1c">SetString</a>(<a class="code" href="structrapidjson_1_1_generic_string_ref.html">StringRefType</a> s) { this-&gt;~<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(); SetStringRaw(s); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l01790"></a><span class="lineno"> 1790</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01791"></a><span class="lineno"> 1791</span>&#160;<span class="comment"> //! Set this value as a string by copying from source string.</span></div><div class="line"><a name="l01792"></a><span class="lineno"> 1792</span>&#160;<span class="comment"></span><span class="comment"> /*! This version has better performance with supplied length, and also support string containing null character.</span></div><div class="line"><a name="l01793"></a><span class="lineno"> 1793</span>&#160;<span class="comment"> \param s source string. </span></div><div class="line"><a name="l01794"></a><span class="lineno"> 1794</span>&#160;<span class="comment"> \param length The length of source string, excluding the trailing null terminator.</span></div><div class="line"><a name="l01795"></a><span class="lineno"> 1795</span>&#160;<span class="comment"> \param allocator Allocator for allocating copied buffer. Commonly use GenericDocument::GetAllocator().</span></div><div class="line"><a name="l01796"></a><span class="lineno"> 1796</span>&#160;<span class="comment"> \return The value itself for fluent API.</span></div><div class="line"><a name="l01797"></a><span class="lineno"> 1797</span>&#160;<span class="comment"> \post IsString() == true &amp;&amp; GetString() != s &amp;&amp; strcmp(GetString(),s) == 0 &amp;&amp; GetStringLength() == length</span></div><div class="line"><a name="l01798"></a><span class="lineno"> 1798</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01799"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#ae6351043ec30d8a151b0a072cfbc46d5"> 1799</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#ae6351043ec30d8a151b0a072cfbc46d5">SetString</a>(<span class="keyword">const</span> Ch* s, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> length, Allocator&amp; allocator) { <span class="keywordflow">return</span> <a class="code" href="classrapidjson_1_1_generic_value.html#ae6351043ec30d8a151b0a072cfbc46d5">SetString</a>(<a class="code" href="namespacerapidjson.html#af94951529a5d51e8c4e6e770bb707c1f">StringRef</a>(s, length), allocator); }</div><div class="line"><a name="l01800"></a><span class="lineno"> 1800</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01801"></a><span class="lineno"> 1801</span>&#160;<span class="comment"> //! Set this value as a string by copying from source string.</span></div><div class="line"><a name="l01802"></a><span class="lineno"> 1802</span>&#160;<span class="comment"></span><span class="comment"> /*! \param s source string. </span></div><div class="line"><a name="l01803"></a><span class="lineno"> 1803</span>&#160;<span class="comment"> \param allocator Allocator for allocating copied buffer. Commonly use GenericDocument::GetAllocator().</span></div><div class="line"><a name="l01804"></a><span class="lineno"> 1804</span>&#160;<span class="comment"> \return The value itself for fluent API.</span></div><div class="line"><a name="l01805"></a><span class="lineno"> 1805</span>&#160;<span class="comment"> \post IsString() == true &amp;&amp; GetString() != s &amp;&amp; strcmp(GetString(),s) == 0 &amp;&amp; GetStringLength() == length</span></div><div class="line"><a name="l01806"></a><span class="lineno"> 1806</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01807"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#ab4babf200cac2dacb412a3ea279ddf5b"> 1807</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#ab4babf200cac2dacb412a3ea279ddf5b">SetString</a>(<span class="keyword">const</span> Ch* s, Allocator&amp; allocator) { <span class="keywordflow">return</span> <a class="code" href="classrapidjson_1_1_generic_value.html#ab4babf200cac2dacb412a3ea279ddf5b">SetString</a>(<a class="code" href="namespacerapidjson.html#af94951529a5d51e8c4e6e770bb707c1f">StringRef</a>(s), allocator); }</div><div class="line"><a name="l01808"></a><span class="lineno"> 1808</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01809"></a><span class="lineno"> 1809</span>&#160;<span class="comment"> //! Set this value as a string by copying from source string.</span></div><div class="line"><a name="l01810"></a><span class="lineno"> 1810</span>&#160;<span class="comment"></span><span class="comment"> /*! \param s source string reference</span></div><div class="line"><a name="l01811"></a><span class="lineno"> 1811</span>&#160;<span class="comment"> \param allocator Allocator for allocating copied buffer. Commonly use GenericDocument::GetAllocator().</span></div><div class="line"><a name="l01812"></a><span class="lineno"> 1812</span>&#160;<span class="comment"> \return The value itself for fluent API.</span></div><div class="line"><a name="l01813"></a><span class="lineno"> 1813</span>&#160;<span class="comment"> \post IsString() == true &amp;&amp; GetString() != s.s &amp;&amp; strcmp(GetString(),s) == 0 &amp;&amp; GetStringLength() == length</span></div><div class="line"><a name="l01814"></a><span class="lineno"> 1814</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01815"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a9ba3d9d8a106d5b7e92fb49db897c21b"> 1815</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#a9ba3d9d8a106d5b7e92fb49db897c21b">SetString</a>(<a class="code" href="structrapidjson_1_1_generic_string_ref.html">StringRefType</a> s, Allocator&amp; allocator) { this-&gt;~<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(); SetStringRaw(s, allocator); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l01816"></a><span class="lineno"> 1816</span>&#160;</div><div class="line"><a name="l01817"></a><span class="lineno"> 1817</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l01818"></a><span class="lineno"> 1818</span>&#160;<span class="comment"> //! Set this value as a string by copying from source string.</span></div><div class="line"><a name="l01819"></a><span class="lineno"> 1819</span>&#160;<span class="comment"></span><span class="comment"> /*! \param s source string.</span></div><div class="line"><a name="l01820"></a><span class="lineno"> 1820</span>&#160;<span class="comment"> \param allocator Allocator for allocating copied buffer. Commonly use GenericDocument::GetAllocator().</span></div><div class="line"><a name="l01821"></a><span class="lineno"> 1821</span>&#160;<span class="comment"> \return The value itself for fluent API.</span></div><div class="line"><a name="l01822"></a><span class="lineno"> 1822</span>&#160;<span class="comment"> \post IsString() == true &amp;&amp; GetString() != s.data() &amp;&amp; strcmp(GetString(),s.data() == 0 &amp;&amp; GetStringLength() == s.size()</span></div><div class="line"><a name="l01823"></a><span class="lineno"> 1823</span>&#160;<span class="comment"> \note Requires the definition of the preprocessor symbol \ref RAPIDJSON_HAS_STDSTRING.</span></div><div class="line"><a name="l01824"></a><span class="lineno"> 1824</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01825"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a3e930bffb40a78e570e3deef461f0532"> 1825</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#a3e930bffb40a78e570e3deef461f0532">SetString</a>(<span class="keyword">const</span> std::basic_string&lt;Ch&gt;&amp; s, Allocator&amp; allocator) { <span class="keywordflow">return</span> <a class="code" href="classrapidjson_1_1_generic_value.html#a3e930bffb40a78e570e3deef461f0532">SetString</a>(<a class="code" href="namespacerapidjson.html#af94951529a5d51e8c4e6e770bb707c1f">StringRef</a>(s), allocator); }</div><div class="line"><a name="l01826"></a><span class="lineno"> 1826</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01827"></a><span class="lineno"> 1827</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01828"></a><span class="lineno"> 1828</span>&#160;<span class="comment"> //@}</span></div><div class="line"><a name="l01829"></a><span class="lineno"> 1829</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l01830"></a><span class="lineno"> 1830</span>&#160;<span class="comment"> //!@name Array</span></div><div class="line"><a name="l01831"></a><span class="lineno"> 1831</span>&#160;<span class="comment"></span><span class="comment"> //@{</span></div><div class="line"><a name="l01832"></a><span class="lineno"> 1832</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l01833"></a><span class="lineno"> 1833</span>&#160;<span class="comment"> //! Templated version for checking whether this value is type T.</span></div><div class="line"><a name="l01834"></a><span class="lineno"> 1834</span>&#160;<span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l01835"></a><span class="lineno"> 1835</span>&#160;<span class="comment"> \tparam T Either \c bool, \c int, \c unsigned, \c int64_t, \c uint64_t, \c double, \c float, \c const \c char*, \c std::basic_string&lt;Ch&gt;</span></div><div class="line"><a name="l01836"></a><span class="lineno"> 1836</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01837"></a><span class="lineno"> 1837</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l01838"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#acc6b1791cca8daef18521918136264b7"> 1838</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_generic_value.html#acc6b1791cca8daef18521918136264b7">Is</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> internal::TypeHelper&lt;ValueType, T&gt;::Is(*<span class="keyword">this</span>); }</div><div class="line"><a name="l01839"></a><span class="lineno"> 1839</span>&#160;</div><div class="line"><a name="l01840"></a><span class="lineno"> 1840</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l01841"></a><span class="lineno"> 1841</span>&#160; T Get()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> internal::TypeHelper&lt;ValueType, T&gt;::Get(*<span class="keyword">this</span>); }</div><div class="line"><a name="l01842"></a><span class="lineno"> 1842</span>&#160;</div><div class="line"><a name="l01843"></a><span class="lineno"> 1843</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l01844"></a><span class="lineno"> 1844</span>&#160; T Get() { <span class="keywordflow">return</span> internal::TypeHelper&lt;ValueType, T&gt;::Get(*<span class="keyword">this</span>); }</div><div class="line"><a name="l01845"></a><span class="lineno"> 1845</span>&#160;</div><div class="line"><a name="l01846"></a><span class="lineno"> 1846</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l01847"></a><span class="lineno"> 1847</span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">ValueType</a>&amp; Set(<span class="keyword">const</span> T&amp; data) { <span class="keywordflow">return</span> internal::TypeHelper&lt;ValueType, T&gt;::Set(*<span class="keyword">this</span>, data); }</div><div class="line"><a name="l01848"></a><span class="lineno"> 1848</span>&#160;</div><div class="line"><a name="l01849"></a><span class="lineno"> 1849</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l01850"></a><span class="lineno"> 1850</span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">ValueType</a>&amp; Set(<span class="keyword">const</span> T&amp; data, <a class="code" href="classrapidjson_1_1_allocator.html">AllocatorType</a>&amp; allocator) { <span class="keywordflow">return</span> internal::TypeHelper&lt;ValueType, T&gt;::Set(*<span class="keyword">this</span>, data, allocator); }</div><div class="line"><a name="l01851"></a><span class="lineno"> 1851</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01852"></a><span class="lineno"> 1852</span>&#160;<span class="comment"> //@}</span></div><div class="line"><a name="l01853"></a><span class="lineno"> 1853</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l01854"></a><span class="lineno"> 1854</span>&#160;<span class="comment"> //! Generate events of this value to a Handler.</span></div><div class="line"><a name="l01855"></a><span class="lineno"> 1855</span>&#160;<span class="comment"></span><span class="comment"> /*! This function adopts the GoF visitor pattern.</span></div><div class="line"><a name="l01856"></a><span class="lineno"> 1856</span>&#160;<span class="comment"> Typical usage is to output this JSON value as JSON text via Writer, which is a Handler.</span></div><div class="line"><a name="l01857"></a><span class="lineno"> 1857</span>&#160;<span class="comment"> It can also be used to deep clone this value via GenericDocument, which is also a Handler.</span></div><div class="line"><a name="l01858"></a><span class="lineno"> 1858</span>&#160;<span class="comment"> \tparam Handler type of handler.</span></div><div class="line"><a name="l01859"></a><span class="lineno"> 1859</span>&#160;<span class="comment"> \param handler An object implementing concept Handler.</span></div><div class="line"><a name="l01860"></a><span class="lineno"> 1860</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01861"></a><span class="lineno"> 1861</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> Handler&gt;</div><div class="line"><a name="l01862"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#ad3ebfa73796f4db4836ec47c2261700c"> 1862</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_generic_value.html#ad3ebfa73796f4db4836ec47c2261700c">Accept</a>(<a class="code" href="classrapidjson_1_1_handler.html">Handler</a>&amp; handler)<span class="keyword"> const </span>{</div><div class="line"><a name="l01863"></a><span class="lineno"> 1863</span>&#160; <span class="keywordflow">switch</span>(GetType()) {</div><div class="line"><a name="l01864"></a><span class="lineno"> 1864</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a952871e4326b527154fc8aac1ac1f6ff">kNullType</a>: <span class="keywordflow">return</span> handler.Null();</div><div class="line"><a name="l01865"></a><span class="lineno"> 1865</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a9f2e7047832dce1029551b5de0f05607">kFalseType</a>: <span class="keywordflow">return</span> handler.Bool(<span class="keyword">false</span>);</div><div class="line"><a name="l01866"></a><span class="lineno"> 1866</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a80d9f25b083abce45edbfdd3ba006c8e">kTrueType</a>: <span class="keywordflow">return</span> handler.Bool(<span class="keyword">true</span>);</div><div class="line"><a name="l01867"></a><span class="lineno"> 1867</span>&#160;</div><div class="line"><a name="l01868"></a><span class="lineno"> 1868</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4acf030b422a32c3647c7c5973bd4dd0a9">kObjectType</a>:</div><div class="line"><a name="l01869"></a><span class="lineno"> 1869</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(!handler.StartObject()))</div><div class="line"><a name="l01870"></a><span class="lineno"> 1870</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01871"></a><span class="lineno"> 1871</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classrapidjson_1_1_generic_member_iterator.html">ConstMemberIterator</a> m = MemberBegin(); m != MemberEnd(); ++m) {</div><div class="line"><a name="l01872"></a><span class="lineno"> 1872</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(m-&gt;name.IsString()); <span class="comment">// User may change the type of name by MemberIterator.</span></div><div class="line"><a name="l01873"></a><span class="lineno"> 1873</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(!handler.Key(m-&gt;name.GetString(), m-&gt;name.GetStringLength(), (m-&gt;name.data_.f.flags &amp; kCopyFlag) != 0)))</div><div class="line"><a name="l01874"></a><span class="lineno"> 1874</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01875"></a><span class="lineno"> 1875</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(!m-&gt;value.Accept(handler)))</div><div class="line"><a name="l01876"></a><span class="lineno"> 1876</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01877"></a><span class="lineno"> 1877</span>&#160; }</div><div class="line"><a name="l01878"></a><span class="lineno"> 1878</span>&#160; <span class="keywordflow">return</span> handler.EndObject(data_.o.size);</div><div class="line"><a name="l01879"></a><span class="lineno"> 1879</span>&#160;</div><div class="line"><a name="l01880"></a><span class="lineno"> 1880</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a058c622e1e7d59419ae58b895cbce468">kArrayType</a>:</div><div class="line"><a name="l01881"></a><span class="lineno"> 1881</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(!handler.StartArray()))</div><div class="line"><a name="l01882"></a><span class="lineno"> 1882</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01883"></a><span class="lineno"> 1883</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>* v = Begin(); v != End(); ++v)</div><div class="line"><a name="l01884"></a><span class="lineno"> 1884</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(!v-&gt;Accept(handler)))</div><div class="line"><a name="l01885"></a><span class="lineno"> 1885</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01886"></a><span class="lineno"> 1886</span>&#160; <span class="keywordflow">return</span> handler.EndArray(data_.a.size);</div><div class="line"><a name="l01887"></a><span class="lineno"> 1887</span>&#160; </div><div class="line"><a name="l01888"></a><span class="lineno"> 1888</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4ad6379da3dc04b83a591992bfb9fabba7">kStringType</a>:</div><div class="line"><a name="l01889"></a><span class="lineno"> 1889</span>&#160; <span class="keywordflow">return</span> handler.String(GetString(), GetStringLength(), (data_.f.flags &amp; kCopyFlag) != 0);</div><div class="line"><a name="l01890"></a><span class="lineno"> 1890</span>&#160; </div><div class="line"><a name="l01891"></a><span class="lineno"> 1891</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l01892"></a><span class="lineno"> 1892</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(GetType() == <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a">kNumberType</a>);</div><div class="line"><a name="l01893"></a><span class="lineno"> 1893</span>&#160; <span class="keywordflow">if</span> (IsDouble()) <span class="keywordflow">return</span> handler.Double(data_.n.d);</div><div class="line"><a name="l01894"></a><span class="lineno"> 1894</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (IsInt()) <span class="keywordflow">return</span> handler.Int(data_.n.i.i);</div><div class="line"><a name="l01895"></a><span class="lineno"> 1895</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (IsUint()) <span class="keywordflow">return</span> handler.Uint(data_.n.u.u);</div><div class="line"><a name="l01896"></a><span class="lineno"> 1896</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (IsInt64()) <span class="keywordflow">return</span> handler.Int64(data_.n.i64);</div><div class="line"><a name="l01897"></a><span class="lineno"> 1897</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">return</span> handler.Uint64(data_.n.u64);</div><div class="line"><a name="l01898"></a><span class="lineno"> 1898</span>&#160; }</div><div class="line"><a name="l01899"></a><span class="lineno"> 1899</span>&#160; }</div><div class="line"><a name="l01900"></a><span class="lineno"> 1900</span>&#160;</div><div class="line"><a name="l01901"></a><span class="lineno"> 1901</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l01902"></a><span class="lineno"> 1902</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span>, <span class="keyword">typename</span>&gt; <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>;</div><div class="line"><a name="l01903"></a><span class="lineno"> 1903</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span>, <span class="keyword">typename</span>, <span class="keyword">typename</span>&gt; <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>;</div><div class="line"><a name="l01904"></a><span class="lineno"> 1904</span>&#160;</div><div class="line"><a name="l01905"></a><span class="lineno"> 1905</span>&#160; <span class="keyword">enum</span> {</div><div class="line"><a name="l01906"></a><span class="lineno"> 1906</span>&#160; kBoolFlag = 0x0008,</div><div class="line"><a name="l01907"></a><span class="lineno"> 1907</span>&#160; kNumberFlag = 0x0010,</div><div class="line"><a name="l01908"></a><span class="lineno"> 1908</span>&#160; kIntFlag = 0x0020,</div><div class="line"><a name="l01909"></a><span class="lineno"> 1909</span>&#160; kUintFlag = 0x0040,</div><div class="line"><a name="l01910"></a><span class="lineno"> 1910</span>&#160; kInt64Flag = 0x0080,</div><div class="line"><a name="l01911"></a><span class="lineno"> 1911</span>&#160; kUint64Flag = 0x0100,</div><div class="line"><a name="l01912"></a><span class="lineno"> 1912</span>&#160; kDoubleFlag = 0x0200,</div><div class="line"><a name="l01913"></a><span class="lineno"> 1913</span>&#160; kStringFlag = 0x0400,</div><div class="line"><a name="l01914"></a><span class="lineno"> 1914</span>&#160; kCopyFlag = 0x0800,</div><div class="line"><a name="l01915"></a><span class="lineno"> 1915</span>&#160; kInlineStrFlag = 0x1000,</div><div class="line"><a name="l01916"></a><span class="lineno"> 1916</span>&#160;</div><div class="line"><a name="l01917"></a><span class="lineno"> 1917</span>&#160; <span class="comment">// Initial flags of different types.</span></div><div class="line"><a name="l01918"></a><span class="lineno"> 1918</span>&#160; kNullFlag = <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a952871e4326b527154fc8aac1ac1f6ff">kNullType</a>,</div><div class="line"><a name="l01919"></a><span class="lineno"> 1919</span>&#160; kTrueFlag = <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a80d9f25b083abce45edbfdd3ba006c8e">kTrueType</a> | kBoolFlag,</div><div class="line"><a name="l01920"></a><span class="lineno"> 1920</span>&#160; kFalseFlag = <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a9f2e7047832dce1029551b5de0f05607">kFalseType</a> | kBoolFlag,</div><div class="line"><a name="l01921"></a><span class="lineno"> 1921</span>&#160; kNumberIntFlag = <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a">kNumberType</a> | kNumberFlag | kIntFlag | kInt64Flag,</div><div class="line"><a name="l01922"></a><span class="lineno"> 1922</span>&#160; kNumberUintFlag = <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a">kNumberType</a> | kNumberFlag | kUintFlag | kUint64Flag | kInt64Flag,</div><div class="line"><a name="l01923"></a><span class="lineno"> 1923</span>&#160; kNumberInt64Flag = <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a">kNumberType</a> | kNumberFlag | kInt64Flag,</div><div class="line"><a name="l01924"></a><span class="lineno"> 1924</span>&#160; kNumberUint64Flag = <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a">kNumberType</a> | kNumberFlag | kUint64Flag,</div><div class="line"><a name="l01925"></a><span class="lineno"> 1925</span>&#160; kNumberDoubleFlag = <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a">kNumberType</a> | kNumberFlag | kDoubleFlag,</div><div class="line"><a name="l01926"></a><span class="lineno"> 1926</span>&#160; kNumberAnyFlag = <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a">kNumberType</a> | kNumberFlag | kIntFlag | kInt64Flag | kUintFlag | kUint64Flag | kDoubleFlag,</div><div class="line"><a name="l01927"></a><span class="lineno"> 1927</span>&#160; kConstStringFlag = <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4ad6379da3dc04b83a591992bfb9fabba7">kStringType</a> | kStringFlag,</div><div class="line"><a name="l01928"></a><span class="lineno"> 1928</span>&#160; kCopyStringFlag = <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4ad6379da3dc04b83a591992bfb9fabba7">kStringType</a> | kStringFlag | kCopyFlag,</div><div class="line"><a name="l01929"></a><span class="lineno"> 1929</span>&#160; kShortStringFlag = <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4ad6379da3dc04b83a591992bfb9fabba7">kStringType</a> | kStringFlag | kCopyFlag | kInlineStrFlag,</div><div class="line"><a name="l01930"></a><span class="lineno"> 1930</span>&#160; kObjectFlag = <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4acf030b422a32c3647c7c5973bd4dd0a9">kObjectType</a>,</div><div class="line"><a name="l01931"></a><span class="lineno"> 1931</span>&#160; kArrayFlag = <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a058c622e1e7d59419ae58b895cbce468">kArrayType</a>,</div><div class="line"><a name="l01932"></a><span class="lineno"> 1932</span>&#160;</div><div class="line"><a name="l01933"></a><span class="lineno"> 1933</span>&#160; kTypeMask = 0x07</div><div class="line"><a name="l01934"></a><span class="lineno"> 1934</span>&#160; };</div><div class="line"><a name="l01935"></a><span class="lineno"> 1935</span>&#160;</div><div class="line"><a name="l01936"></a><span class="lineno"> 1936</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> kDefaultArrayCapacity = 16;</div><div class="line"><a name="l01937"></a><span class="lineno"> 1937</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> kDefaultObjectCapacity = 16;</div><div class="line"><a name="l01938"></a><span class="lineno"> 1938</span>&#160;</div><div class="line"><a name="l01939"></a><span class="lineno"> 1939</span>&#160; <span class="keyword">struct </span>Flag {</div><div class="line"><a name="l01940"></a><span class="lineno"> 1940</span>&#160;<span class="preprocessor">#if RAPIDJSON_48BITPOINTER_OPTIMIZATION</span></div><div class="line"><a name="l01941"></a><span class="lineno"> 1941</span>&#160; <span class="keywordtype">char</span> payload[<span class="keyword">sizeof</span>(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a>) * 2 + 6]; <span class="comment">// 2 x SizeType + lower 48-bit pointer</span></div><div class="line"><a name="l01942"></a><span class="lineno"> 1942</span>&#160;<span class="preprocessor">#elif RAPIDJSON_64BIT</span></div><div class="line"><a name="l01943"></a><span class="lineno"> 1943</span>&#160; <span class="keywordtype">char</span> payload[<span class="keyword">sizeof</span>(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a>) * 2 + <span class="keyword">sizeof</span>(<span class="keywordtype">void</span>*) + 6]; <span class="comment">// 6 padding bytes</span></div><div class="line"><a name="l01944"></a><span class="lineno"> 1944</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l01945"></a><span class="lineno"> 1945</span>&#160; <span class="keywordtype">char</span> payload[<span class="keyword">sizeof</span>(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a>) * 2 + <span class="keyword">sizeof</span>(<span class="keywordtype">void</span>*) + 2]; <span class="comment">// 2 padding bytes</span></div><div class="line"><a name="l01946"></a><span class="lineno"> 1946</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01947"></a><span class="lineno"> 1947</span>&#160; uint16_t flags;</div><div class="line"><a name="l01948"></a><span class="lineno"> 1948</span>&#160; };</div><div class="line"><a name="l01949"></a><span class="lineno"> 1949</span>&#160;</div><div class="line"><a name="l01950"></a><span class="lineno"> 1950</span>&#160; <span class="keyword">struct </span>String {</div><div class="line"><a name="l01951"></a><span class="lineno"> 1951</span>&#160; <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> length;</div><div class="line"><a name="l01952"></a><span class="lineno"> 1952</span>&#160; <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> hashcode; <span class="comment">//!&lt; reserved</span></div><div class="line"><a name="l01953"></a><span class="lineno"> 1953</span>&#160;<span class="comment"></span> <span class="keyword">const</span> Ch* str;</div><div class="line"><a name="l01954"></a><span class="lineno"> 1954</span>&#160; }; <span class="comment">// 12 bytes in 32-bit mode, 16 bytes in 64-bit mode</span></div><div class="line"><a name="l01955"></a><span class="lineno"> 1955</span>&#160;</div><div class="line"><a name="l01956"></a><span class="lineno"> 1956</span>&#160; <span class="comment">// implementation detail: ShortString can represent zero-terminated strings up to MaxSize chars</span></div><div class="line"><a name="l01957"></a><span class="lineno"> 1957</span>&#160; <span class="comment">// (excluding the terminating zero) and store a value to determine the length of the contained</span></div><div class="line"><a name="l01958"></a><span class="lineno"> 1958</span>&#160; <span class="comment">// string in the last character str[LenPos] by storing &quot;MaxSize - length&quot; there. If the string</span></div><div class="line"><a name="l01959"></a><span class="lineno"> 1959</span>&#160; <span class="comment">// to store has the maximal length of MaxSize then str[LenPos] will be 0 and therefore act as</span></div><div class="line"><a name="l01960"></a><span class="lineno"> 1960</span>&#160; <span class="comment">// the string terminator as well. For getting the string length back from that value just use</span></div><div class="line"><a name="l01961"></a><span class="lineno"> 1961</span>&#160; <span class="comment">// &quot;MaxSize - str[LenPos]&quot;.</span></div><div class="line"><a name="l01962"></a><span class="lineno"> 1962</span>&#160; <span class="comment">// This allows to store 13-chars strings in 32-bit mode, 21-chars strings in 64-bit mode,</span></div><div class="line"><a name="l01963"></a><span class="lineno"> 1963</span>&#160; <span class="comment">// 13-chars strings for RAPIDJSON_48BITPOINTER_OPTIMIZATION=1 inline (for `UTF8`-encoded strings).</span></div><div class="line"><a name="l01964"></a><span class="lineno"> 1964</span>&#160; <span class="keyword">struct </span>ShortString {</div><div class="line"><a name="l01965"></a><span class="lineno"> 1965</span>&#160; <span class="keyword">enum</span> { MaxChars = <span class="keyword">sizeof</span>(<span class="keyword">static_cast&lt;</span>Flag*<span class="keyword">&gt;</span>(0)-&gt;payload) / <span class="keyword">sizeof</span>(Ch), MaxSize = MaxChars - 1, LenPos = MaxSize };</div><div class="line"><a name="l01966"></a><span class="lineno"> 1966</span>&#160; Ch str[MaxChars];</div><div class="line"><a name="l01967"></a><span class="lineno"> 1967</span>&#160;</div><div class="line"><a name="l01968"></a><span class="lineno"> 1968</span>&#160; <span class="keyword">inline</span> <span class="keyword">static</span> <span class="keywordtype">bool</span> Usable(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> len) { <span class="keywordflow">return</span> (MaxSize &gt;= len); }</div><div class="line"><a name="l01969"></a><span class="lineno"> 1969</span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> SetLength(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> len) { str[LenPos] = <span class="keyword">static_cast&lt;</span>Ch<span class="keyword">&gt;</span>(MaxSize - len); }</div><div class="line"><a name="l01970"></a><span class="lineno"> 1970</span>&#160; <span class="keyword">inline</span> <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> GetLength()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span><a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a><span class="keyword">&gt;</span>(MaxSize - str[LenPos]); }</div><div class="line"><a name="l01971"></a><span class="lineno"> 1971</span>&#160; }; <span class="comment">// at most as many bytes as &quot;String&quot; above =&gt; 12 bytes in 32-bit mode, 16 bytes in 64-bit mode</span></div><div class="line"><a name="l01972"></a><span class="lineno"> 1972</span>&#160;</div><div class="line"><a name="l01973"></a><span class="lineno"> 1973</span>&#160; <span class="comment">// By using proper binary layout, retrieval of different integer types do not need conversions.</span></div><div class="line"><a name="l01974"></a><span class="lineno"> 1974</span>&#160; <span class="keyword">union </span>Number {</div><div class="line"><a name="l01975"></a><span class="lineno"> 1975</span>&#160;<span class="preprocessor">#if RAPIDJSON_ENDIAN == RAPIDJSON_LITTLEENDIAN</span></div><div class="line"><a name="l01976"></a><span class="lineno"> 1976</span>&#160; <span class="keyword">struct </span>I {</div><div class="line"><a name="l01977"></a><span class="lineno"> 1977</span>&#160; <span class="keywordtype">int</span> i;</div><div class="line"><a name="l01978"></a><span class="lineno"> 1978</span>&#160; <span class="keywordtype">char</span> padding[4];</div><div class="line"><a name="l01979"></a><span class="lineno"> 1979</span>&#160; }i;</div><div class="line"><a name="l01980"></a><span class="lineno"> 1980</span>&#160; <span class="keyword">struct </span>U {</div><div class="line"><a name="l01981"></a><span class="lineno"> 1981</span>&#160; <span class="keywordtype">unsigned</span> u;</div><div class="line"><a name="l01982"></a><span class="lineno"> 1982</span>&#160; <span class="keywordtype">char</span> padding2[4];</div><div class="line"><a name="l01983"></a><span class="lineno"> 1983</span>&#160; }u;</div><div class="line"><a name="l01984"></a><span class="lineno"> 1984</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l01985"></a><span class="lineno"><a class="line" href="structrapidjson_1_1_generic_value_1_1_number_1_1_i.html"> 1985</a></span>&#160; <span class="keyword">struct </span><a class="code" href="structrapidjson_1_1_generic_value_1_1_number_1_1_i.html">I</a> {</div><div class="line"><a name="l01986"></a><span class="lineno"> 1986</span>&#160; <span class="keywordtype">char</span> padding[4];</div><div class="line"><a name="l01987"></a><span class="lineno"> 1987</span>&#160; <span class="keywordtype">int</span> i;</div><div class="line"><a name="l01988"></a><span class="lineno"> 1988</span>&#160; }i;</div><div class="line"><a name="l01989"></a><span class="lineno"><a class="line" href="structrapidjson_1_1_generic_value_1_1_number_1_1_u.html"> 1989</a></span>&#160; <span class="keyword">struct </span><a class="code" href="structrapidjson_1_1_generic_value_1_1_number_1_1_u.html">U</a> {</div><div class="line"><a name="l01990"></a><span class="lineno"> 1990</span>&#160; <span class="keywordtype">char</span> padding2[4];</div><div class="line"><a name="l01991"></a><span class="lineno"> 1991</span>&#160; <span class="keywordtype">unsigned</span> u;</div><div class="line"><a name="l01992"></a><span class="lineno"> 1992</span>&#160; }u;</div><div class="line"><a name="l01993"></a><span class="lineno"> 1993</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01994"></a><span class="lineno"> 1994</span>&#160; int64_t i64;</div><div class="line"><a name="l01995"></a><span class="lineno"> 1995</span>&#160; uint64_t u64;</div><div class="line"><a name="l01996"></a><span class="lineno"> 1996</span>&#160; <span class="keywordtype">double</span> d;</div><div class="line"><a name="l01997"></a><span class="lineno"> 1997</span>&#160; }; <span class="comment">// 8 bytes</span></div><div class="line"><a name="l01998"></a><span class="lineno"> 1998</span>&#160;</div><div class="line"><a name="l01999"></a><span class="lineno"> 1999</span>&#160; <span class="keyword">struct </span>ObjectData {</div><div class="line"><a name="l02000"></a><span class="lineno"> 2000</span>&#160; <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> size;</div><div class="line"><a name="l02001"></a><span class="lineno"> 2001</span>&#160; <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> capacity;</div><div class="line"><a name="l02002"></a><span class="lineno"> 2002</span>&#160; <a class="code" href="structrapidjson_1_1_generic_member.html">Member</a>* members;</div><div class="line"><a name="l02003"></a><span class="lineno"> 2003</span>&#160; }; <span class="comment">// 12 bytes in 32-bit mode, 16 bytes in 64-bit mode</span></div><div class="line"><a name="l02004"></a><span class="lineno"> 2004</span>&#160;</div><div class="line"><a name="l02005"></a><span class="lineno"> 2005</span>&#160; <span class="keyword">struct </span>ArrayData {</div><div class="line"><a name="l02006"></a><span class="lineno"> 2006</span>&#160; <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> size;</div><div class="line"><a name="l02007"></a><span class="lineno"> 2007</span>&#160; <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> capacity;</div><div class="line"><a name="l02008"></a><span class="lineno"> 2008</span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>* elements;</div><div class="line"><a name="l02009"></a><span class="lineno"> 2009</span>&#160; }; <span class="comment">// 12 bytes in 32-bit mode, 16 bytes in 64-bit mode</span></div><div class="line"><a name="l02010"></a><span class="lineno"> 2010</span>&#160;</div><div class="line"><a name="l02011"></a><span class="lineno"> 2011</span>&#160; <span class="keyword">union </span>Data {</div><div class="line"><a name="l02012"></a><span class="lineno"> 2012</span>&#160; String s;</div><div class="line"><a name="l02013"></a><span class="lineno"> 2013</span>&#160; ShortString ss;</div><div class="line"><a name="l02014"></a><span class="lineno"> 2014</span>&#160; Number n;</div><div class="line"><a name="l02015"></a><span class="lineno"> 2015</span>&#160; ObjectData o;</div><div class="line"><a name="l02016"></a><span class="lineno"> 2016</span>&#160; ArrayData a;</div><div class="line"><a name="l02017"></a><span class="lineno"> 2017</span>&#160; Flag f;</div><div class="line"><a name="l02018"></a><span class="lineno"> 2018</span>&#160; }; <span class="comment">// 16 bytes in 32-bit mode, 24 bytes in 64-bit mode, 16 bytes in 64-bit with RAPIDJSON_48BITPOINTER_OPTIMIZATION</span></div><div class="line"><a name="l02019"></a><span class="lineno"> 2019</span>&#160;</div><div class="line"><a name="l02020"></a><span class="lineno"> 2020</span>&#160; RAPIDJSON_FORCEINLINE <span class="keyword">const</span> Ch* GetStringPointer()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> RAPIDJSON_GETPOINTER(Ch, data_.s.str); }</div><div class="line"><a name="l02021"></a><span class="lineno"> 2021</span>&#160; RAPIDJSON_FORCEINLINE <span class="keyword">const</span> Ch* SetStringPointer(<span class="keyword">const</span> Ch* str) { <span class="keywordflow">return</span> RAPIDJSON_SETPOINTER(Ch, data_.s.str, str); }</div><div class="line"><a name="l02022"></a><span class="lineno"> 2022</span>&#160; RAPIDJSON_FORCEINLINE <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>* GetElementsPointer()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> RAPIDJSON_GETPOINTER(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>, data_.a.elements); }</div><div class="line"><a name="l02023"></a><span class="lineno"> 2023</span>&#160; RAPIDJSON_FORCEINLINE <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>* SetElementsPointer(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>* elements) { <span class="keywordflow">return</span> RAPIDJSON_SETPOINTER(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>, data_.a.elements, elements); }</div><div class="line"><a name="l02024"></a><span class="lineno"> 2024</span>&#160; RAPIDJSON_FORCEINLINE <a class="code" href="structrapidjson_1_1_generic_member.html">Member</a>* GetMembersPointer()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> RAPIDJSON_GETPOINTER(<a class="code" href="structrapidjson_1_1_generic_member.html">Member</a>, data_.o.members); }</div><div class="line"><a name="l02025"></a><span class="lineno"> 2025</span>&#160; RAPIDJSON_FORCEINLINE <a class="code" href="structrapidjson_1_1_generic_member.html">Member</a>* SetMembersPointer(<a class="code" href="structrapidjson_1_1_generic_member.html">Member</a>* members) { <span class="keywordflow">return</span> RAPIDJSON_SETPOINTER(<a class="code" href="structrapidjson_1_1_generic_member.html">Member</a>, data_.o.members, members); }</div><div class="line"><a name="l02026"></a><span class="lineno"> 2026</span>&#160;</div><div class="line"><a name="l02027"></a><span class="lineno"> 2027</span>&#160; <span class="comment">// Initialize this value as array with initial data, without calling destructor.</span></div><div class="line"><a name="l02028"></a><span class="lineno"> 2028</span>&#160; <span class="keywordtype">void</span> SetArrayRaw(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>* values, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> count, Allocator&amp; allocator) {</div><div class="line"><a name="l02029"></a><span class="lineno"> 2029</span>&#160; data_.f.flags = kArrayFlag;</div><div class="line"><a name="l02030"></a><span class="lineno"> 2030</span>&#160; <span class="keywordflow">if</span> (count) {</div><div class="line"><a name="l02031"></a><span class="lineno"> 2031</span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>* e = <span class="keyword">static_cast&lt;</span><a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>*<span class="keyword">&gt;</span>(allocator.Malloc(count * <span class="keyword">sizeof</span>(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>)));</div><div class="line"><a name="l02032"></a><span class="lineno"> 2032</span>&#160; SetElementsPointer(e);</div><div class="line"><a name="l02033"></a><span class="lineno"> 2033</span>&#160; std::memcpy(static_cast&lt;void*&gt;(e), values, count * <span class="keyword">sizeof</span>(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>));</div><div class="line"><a name="l02034"></a><span class="lineno"> 2034</span>&#160; }</div><div class="line"><a name="l02035"></a><span class="lineno"> 2035</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l02036"></a><span class="lineno"> 2036</span>&#160; SetElementsPointer(0);</div><div class="line"><a name="l02037"></a><span class="lineno"> 2037</span>&#160; data_.a.size = data_.a.capacity = count;</div><div class="line"><a name="l02038"></a><span class="lineno"> 2038</span>&#160; }</div><div class="line"><a name="l02039"></a><span class="lineno"> 2039</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02040"></a><span class="lineno"> 2040</span>&#160;<span class="comment"> //! Initialize this value as object with initial data, without calling destructor.</span></div><div class="line"><a name="l02041"></a><span class="lineno"> 2041</span>&#160;<span class="comment"></span> <span class="keywordtype">void</span> SetObjectRaw(<a class="code" href="structrapidjson_1_1_generic_member.html">Member</a>* members, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> count, Allocator&amp; allocator) {</div><div class="line"><a name="l02042"></a><span class="lineno"> 2042</span>&#160; data_.f.flags = kObjectFlag;</div><div class="line"><a name="l02043"></a><span class="lineno"> 2043</span>&#160; <span class="keywordflow">if</span> (count) {</div><div class="line"><a name="l02044"></a><span class="lineno"> 2044</span>&#160; <a class="code" href="structrapidjson_1_1_generic_member.html">Member</a>* m = <span class="keyword">static_cast&lt;</span><a class="code" href="structrapidjson_1_1_generic_member.html">Member</a>*<span class="keyword">&gt;</span>(allocator.Malloc(count * <span class="keyword">sizeof</span>(<a class="code" href="structrapidjson_1_1_generic_member.html">Member</a>)));</div><div class="line"><a name="l02045"></a><span class="lineno"> 2045</span>&#160; SetMembersPointer(m);</div><div class="line"><a name="l02046"></a><span class="lineno"> 2046</span>&#160; std::memcpy(static_cast&lt;void*&gt;(m), members, count * <span class="keyword">sizeof</span>(<a class="code" href="structrapidjson_1_1_generic_member.html">Member</a>));</div><div class="line"><a name="l02047"></a><span class="lineno"> 2047</span>&#160; }</div><div class="line"><a name="l02048"></a><span class="lineno"> 2048</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l02049"></a><span class="lineno"> 2049</span>&#160; SetMembersPointer(0);</div><div class="line"><a name="l02050"></a><span class="lineno"> 2050</span>&#160; data_.o.size = data_.o.capacity = count;</div><div class="line"><a name="l02051"></a><span class="lineno"> 2051</span>&#160; }</div><div class="line"><a name="l02052"></a><span class="lineno"> 2052</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02053"></a><span class="lineno"> 2053</span>&#160;<span class="comment"> //! Initialize this value as constant string, without calling destructor.</span></div><div class="line"><a name="l02054"></a><span class="lineno"> 2054</span>&#160;<span class="comment"></span> <span class="keywordtype">void</span> SetStringRaw(<a class="code" href="structrapidjson_1_1_generic_string_ref.html">StringRefType</a> s) RAPIDJSON_NOEXCEPT {</div><div class="line"><a name="l02055"></a><span class="lineno"> 2055</span>&#160; data_.f.flags = kConstStringFlag;</div><div class="line"><a name="l02056"></a><span class="lineno"> 2056</span>&#160; SetStringPointer(s);</div><div class="line"><a name="l02057"></a><span class="lineno"> 2057</span>&#160; data_.s.length = s.<a class="code" href="structrapidjson_1_1_generic_string_ref.html#ae223535ec20edf0c1db44a40b7735111">length</a>;</div><div class="line"><a name="l02058"></a><span class="lineno"> 2058</span>&#160; }</div><div class="line"><a name="l02059"></a><span class="lineno"> 2059</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02060"></a><span class="lineno"> 2060</span>&#160;<span class="comment"> //! Initialize this value as copy string with initial data, without calling destructor.</span></div><div class="line"><a name="l02061"></a><span class="lineno"> 2061</span>&#160;<span class="comment"></span> <span class="keywordtype">void</span> SetStringRaw(<a class="code" href="structrapidjson_1_1_generic_string_ref.html">StringRefType</a> s, Allocator&amp; allocator) {</div><div class="line"><a name="l02062"></a><span class="lineno"> 2062</span>&#160; Ch* str = 0;</div><div class="line"><a name="l02063"></a><span class="lineno"> 2063</span>&#160; <span class="keywordflow">if</span> (ShortString::Usable(s.<a class="code" href="structrapidjson_1_1_generic_string_ref.html#ae223535ec20edf0c1db44a40b7735111">length</a>)) {</div><div class="line"><a name="l02064"></a><span class="lineno"> 2064</span>&#160; data_.f.flags = kShortStringFlag;</div><div class="line"><a name="l02065"></a><span class="lineno"> 2065</span>&#160; data_.ss.SetLength(s.<a class="code" href="structrapidjson_1_1_generic_string_ref.html#ae223535ec20edf0c1db44a40b7735111">length</a>);</div><div class="line"><a name="l02066"></a><span class="lineno"> 2066</span>&#160; str = data_.ss.str;</div><div class="line"><a name="l02067"></a><span class="lineno"> 2067</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l02068"></a><span class="lineno"> 2068</span>&#160; data_.f.flags = kCopyStringFlag;</div><div class="line"><a name="l02069"></a><span class="lineno"> 2069</span>&#160; data_.s.length = s.<a class="code" href="structrapidjson_1_1_generic_string_ref.html#ae223535ec20edf0c1db44a40b7735111">length</a>;</div><div class="line"><a name="l02070"></a><span class="lineno"> 2070</span>&#160; str = <span class="keyword">static_cast&lt;</span>Ch *<span class="keyword">&gt;</span>(allocator.Malloc((s.<a class="code" href="structrapidjson_1_1_generic_string_ref.html#ae223535ec20edf0c1db44a40b7735111">length</a> + 1) * <span class="keyword">sizeof</span>(Ch)));</div><div class="line"><a name="l02071"></a><span class="lineno"> 2071</span>&#160; SetStringPointer(str);</div><div class="line"><a name="l02072"></a><span class="lineno"> 2072</span>&#160; }</div><div class="line"><a name="l02073"></a><span class="lineno"> 2073</span>&#160; std::memcpy(str, s, s.<a class="code" href="structrapidjson_1_1_generic_string_ref.html#ae223535ec20edf0c1db44a40b7735111">length</a> * <span class="keyword">sizeof</span>(Ch));</div><div class="line"><a name="l02074"></a><span class="lineno"> 2074</span>&#160; str[s.<a class="code" href="structrapidjson_1_1_generic_string_ref.html#ae223535ec20edf0c1db44a40b7735111">length</a>] = <span class="charliteral">&#39;\0&#39;</span>;</div><div class="line"><a name="l02075"></a><span class="lineno"> 2075</span>&#160; }</div><div class="line"><a name="l02076"></a><span class="lineno"> 2076</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02077"></a><span class="lineno"> 2077</span>&#160;<span class="comment"> //! Assignment without calling destructor</span></div><div class="line"><a name="l02078"></a><span class="lineno"> 2078</span>&#160;<span class="comment"></span> <span class="keywordtype">void</span> RawAssign(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; rhs) RAPIDJSON_NOEXCEPT {</div><div class="line"><a name="l02079"></a><span class="lineno"> 2079</span>&#160; data_ = rhs.data_;</div><div class="line"><a name="l02080"></a><span class="lineno"> 2080</span>&#160; <span class="comment">// data_.f.flags = rhs.data_.f.flags;</span></div><div class="line"><a name="l02081"></a><span class="lineno"> 2081</span>&#160; rhs.data_.f.flags = kNullFlag;</div><div class="line"><a name="l02082"></a><span class="lineno"> 2082</span>&#160; }</div><div class="line"><a name="l02083"></a><span class="lineno"> 2083</span>&#160;</div><div class="line"><a name="l02084"></a><span class="lineno"> 2084</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> SourceAllocator&gt;</div><div class="line"><a name="l02085"></a><span class="lineno"> 2085</span>&#160; <span class="keywordtype">bool</span> StringEqual(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue&lt;Encoding, SourceAllocator&gt;</a>&amp; rhs)<span class="keyword"> const </span>{</div><div class="line"><a name="l02086"></a><span class="lineno"> 2086</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsString());</div><div class="line"><a name="l02087"></a><span class="lineno"> 2087</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(rhs.IsString());</div><div class="line"><a name="l02088"></a><span class="lineno"> 2088</span>&#160;</div><div class="line"><a name="l02089"></a><span class="lineno"> 2089</span>&#160; <span class="keyword">const</span> <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> len1 = GetStringLength();</div><div class="line"><a name="l02090"></a><span class="lineno"> 2090</span>&#160; <span class="keyword">const</span> <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> len2 = rhs.<a class="code" href="classrapidjson_1_1_generic_value.html#a18599e0d1a7e70a11b35f5e219390fea">GetStringLength</a>();</div><div class="line"><a name="l02091"></a><span class="lineno"> 2091</span>&#160; <span class="keywordflow">if</span>(len1 != len2) { <span class="keywordflow">return</span> <span class="keyword">false</span>; }</div><div class="line"><a name="l02092"></a><span class="lineno"> 2092</span>&#160;</div><div class="line"><a name="l02093"></a><span class="lineno"> 2093</span>&#160; <span class="keyword">const</span> Ch* <span class="keyword">const</span> str1 = GetString();</div><div class="line"><a name="l02094"></a><span class="lineno"> 2094</span>&#160; <span class="keyword">const</span> Ch* <span class="keyword">const</span> str2 = rhs.GetString();</div><div class="line"><a name="l02095"></a><span class="lineno"> 2095</span>&#160; <span class="keywordflow">if</span>(str1 == str2) { <span class="keywordflow">return</span> <span class="keyword">true</span>; } <span class="comment">// fast path for constant string</span></div><div class="line"><a name="l02096"></a><span class="lineno"> 2096</span>&#160;</div><div class="line"><a name="l02097"></a><span class="lineno"> 2097</span>&#160; <span class="keywordflow">return</span> (std::memcmp(str1, str2, <span class="keyword">sizeof</span>(Ch) * len1) == 0);</div><div class="line"><a name="l02098"></a><span class="lineno"> 2098</span>&#160; }</div><div class="line"><a name="l02099"></a><span class="lineno"> 2099</span>&#160;</div><div class="line"><a name="l02100"></a><span class="lineno"> 2100</span>&#160; Data data_;</div><div class="line"><a name="l02101"></a><span class="lineno"> 2101</span>&#160;};</div><div class="line"><a name="l02102"></a><span class="lineno"> 2102</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02103"></a><span class="lineno"> 2103</span>&#160;<span class="comment">//! GenericValue with UTF8 encoding</span></div><div class="line"><a name="l02104"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#aa65fc9fb381b2cbc54f98673eadd6505"> 2104</a></span>&#160;<span class="comment"></span><span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue&lt;UTF8&lt;&gt;</a> &gt; <a class="code" href="namespacerapidjson.html#aa65fc9fb381b2cbc54f98673eadd6505">Value</a>;</div><div class="line"><a name="l02105"></a><span class="lineno"> 2105</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02106"></a><span class="lineno"> 2106</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l02107"></a><span class="lineno"> 2107</span>&#160;<span class="comment"></span><span class="comment">// GenericDocument </span></div><div class="line"><a name="l02108"></a><span class="lineno"> 2108</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02109"></a><span class="lineno"> 2109</span>&#160;<span class="comment">//! A document for parsing JSON text as DOM.</span></div><div class="line"><a name="l02110"></a><span class="lineno"> 2110</span>&#160;<span class="comment"></span><span class="comment">/*!</span></div><div class="line"><a name="l02111"></a><span class="lineno"> 2111</span>&#160;<span class="comment"> \note implements Handler concept</span></div><div class="line"><a name="l02112"></a><span class="lineno"> 2112</span>&#160;<span class="comment"> \tparam Encoding Encoding for both parsing and string storage.</span></div><div class="line"><a name="l02113"></a><span class="lineno"> 2113</span>&#160;<span class="comment"> \tparam Allocator Allocator for allocating memory for the DOM</span></div><div class="line"><a name="l02114"></a><span class="lineno"> 2114</span>&#160;<span class="comment"> \tparam StackAllocator Allocator for allocating memory for stack during parsing.</span></div><div class="line"><a name="l02115"></a><span class="lineno"> 2115</span>&#160;<span class="comment"> \warning Although GenericDocument inherits from GenericValue, the API does \b not provide any virtual functions, especially no virtual destructor. To avoid memory leaks, do not \c delete a GenericDocument object via a pointer to a GenericValue.</span></div><div class="line"><a name="l02116"></a><span class="lineno"> 2116</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l02117"></a><span class="lineno"> 2117</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> Encoding, <span class="keyword">typename</span> Allocator = MemoryPoolAllocator&lt;&gt;, <span class="keyword">typename</span> StackAllocator = CrtAllocator&gt;</div><div class="line"><a name="l02118"></a><span class="lineno"> 2118</span>&#160;<span class="keyword">class </span><a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a> : <span class="keyword">public</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&lt;Encoding, Allocator&gt; {</div><div class="line"><a name="l02119"></a><span class="lineno"> 2119</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l02120"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_document.html#a8367a827588dd91d02e21ef945bec9f5"> 2120</a></span>&#160; <span class="keyword">typedef</span> <span class="keyword">typename</span> Encoding::Ch <a class="code" href="classrapidjson_1_1_generic_document.html#a8367a827588dd91d02e21ef945bec9f5">Ch</a>; <span class="comment">//!&lt; Character type derived from Encoding.</span></div><div class="line"><a name="l02121"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_document.html#a41bbec044c421e870a9d355075d741bc"> 2121</a></span>&#160;<span class="comment"></span> <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue&lt;Encoding, Allocator&gt;</a> <a class="code" href="classrapidjson_1_1_generic_document.html#a41bbec044c421e870a9d355075d741bc">ValueType</a>; <span class="comment">//!&lt; Value type of the document.</span></div><div class="line"><a name="l02122"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_document.html#a4c85243a28c9dcf2d1357da00fcaa773"> 2122</a></span>&#160;<span class="comment"></span> <span class="keyword">typedef</span> Allocator <a class="code" href="classrapidjson_1_1_generic_document.html#a4c85243a28c9dcf2d1357da00fcaa773">AllocatorType</a>; <span class="comment">//!&lt; Allocator type from template parameter.</span></div><div class="line"><a name="l02123"></a><span class="lineno"> 2123</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l02124"></a><span class="lineno"> 2124</span>&#160;<span class="comment"> //! Constructor</span></div><div class="line"><a name="l02125"></a><span class="lineno"> 2125</span>&#160;<span class="comment"></span><span class="comment"> /*! Creates an empty document of specified type.</span></div><div class="line"><a name="l02126"></a><span class="lineno"> 2126</span>&#160;<span class="comment"> \param type Mandatory type of object to create.</span></div><div class="line"><a name="l02127"></a><span class="lineno"> 2127</span>&#160;<span class="comment"> \param allocator Optional allocator for allocating memory.</span></div><div class="line"><a name="l02128"></a><span class="lineno"> 2128</span>&#160;<span class="comment"> \param stackCapacity Optional initial capacity of stack in bytes.</span></div><div class="line"><a name="l02129"></a><span class="lineno"> 2129</span>&#160;<span class="comment"> \param stackAllocator Optional allocator for allocating memory for stack.</span></div><div class="line"><a name="l02130"></a><span class="lineno"> 2130</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l02131"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_document.html#aa52c3016961f25ecd989d82839bce4e5"> 2131</a></span>&#160; <span class="keyword">explicit</span> <a class="code" href="classrapidjson_1_1_generic_document.html#aa52c3016961f25ecd989d82839bce4e5">GenericDocument</a>(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">Type</a> type, Allocator* allocator = 0, <span class="keywordtype">size_t</span> stackCapacity = kDefaultStackCapacity, StackAllocator* stackAllocator = 0) :</div><div class="line"><a name="l02132"></a><span class="lineno"> 2132</span>&#160; <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&lt;Encoding, Allocator&gt;(type), allocator_(allocator), ownAllocator_(0), stack_(stackAllocator, stackCapacity), parseResult_()</div><div class="line"><a name="l02133"></a><span class="lineno"> 2133</span>&#160; {</div><div class="line"><a name="l02134"></a><span class="lineno"> 2134</span>&#160; <span class="keywordflow">if</span> (!allocator_)</div><div class="line"><a name="l02135"></a><span class="lineno"> 2135</span>&#160; ownAllocator_ = allocator_ = <a class="code" href="rapidjson_8h.html#abdc7cd7902748ffe6626d71c59a73c3b">RAPIDJSON_NEW</a>(Allocator)();</div><div class="line"><a name="l02136"></a><span class="lineno"> 2136</span>&#160; }</div><div class="line"><a name="l02137"></a><span class="lineno"> 2137</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02138"></a><span class="lineno"> 2138</span>&#160;<span class="comment"> //! Constructor</span></div><div class="line"><a name="l02139"></a><span class="lineno"> 2139</span>&#160;<span class="comment"></span><span class="comment"> /*! Creates an empty document which type is Null. </span></div><div class="line"><a name="l02140"></a><span class="lineno"> 2140</span>&#160;<span class="comment"> \param allocator Optional allocator for allocating memory.</span></div><div class="line"><a name="l02141"></a><span class="lineno"> 2141</span>&#160;<span class="comment"> \param stackCapacity Optional initial capacity of stack in bytes.</span></div><div class="line"><a name="l02142"></a><span class="lineno"> 2142</span>&#160;<span class="comment"> \param stackAllocator Optional allocator for allocating memory for stack.</span></div><div class="line"><a name="l02143"></a><span class="lineno"> 2143</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l02144"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_document.html#a82b27e7b228eb46a23f99720063ab4fb"> 2144</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_document.html#a82b27e7b228eb46a23f99720063ab4fb">GenericDocument</a>(Allocator* allocator = 0, <span class="keywordtype">size_t</span> stackCapacity = kDefaultStackCapacity, StackAllocator* stackAllocator = 0) : </div><div class="line"><a name="l02145"></a><span class="lineno"> 2145</span>&#160; allocator_(allocator), ownAllocator_(0), stack_(stackAllocator, stackCapacity), parseResult_()</div><div class="line"><a name="l02146"></a><span class="lineno"> 2146</span>&#160; {</div><div class="line"><a name="l02147"></a><span class="lineno"> 2147</span>&#160; <span class="keywordflow">if</span> (!allocator_)</div><div class="line"><a name="l02148"></a><span class="lineno"> 2148</span>&#160; ownAllocator_ = allocator_ = <a class="code" href="rapidjson_8h.html#abdc7cd7902748ffe6626d71c59a73c3b">RAPIDJSON_NEW</a>(Allocator)();</div><div class="line"><a name="l02149"></a><span class="lineno"> 2149</span>&#160; }</div><div class="line"><a name="l02150"></a><span class="lineno"> 2150</span>&#160;</div><div class="line"><a name="l02151"></a><span class="lineno"> 2151</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l02152"></a><span class="lineno"> 2152</span>&#160;<span class="comment"> //! Move constructor in C++11</span></div><div class="line"><a name="l02153"></a><span class="lineno"> 2153</span>&#160;<span class="comment"></span> <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>(<a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>&amp;&amp; rhs) RAPIDJSON_NOEXCEPT</div><div class="line"><a name="l02154"></a><span class="lineno"> 2154</span>&#160; : ValueType(std::forward&lt;ValueType&gt;(rhs)), <span class="comment">// explicit cast to avoid prohibited move from Document</span></div><div class="line"><a name="l02155"></a><span class="lineno"> 2155</span>&#160; allocator_(rhs.allocator_),</div><div class="line"><a name="l02156"></a><span class="lineno"> 2156</span>&#160; ownAllocator_(rhs.ownAllocator_),</div><div class="line"><a name="l02157"></a><span class="lineno"> 2157</span>&#160; stack_(std::move(rhs.stack_)),</div><div class="line"><a name="l02158"></a><span class="lineno"> 2158</span>&#160; parseResult_(rhs.parseResult_)</div><div class="line"><a name="l02159"></a><span class="lineno"> 2159</span>&#160; {</div><div class="line"><a name="l02160"></a><span class="lineno"> 2160</span>&#160; rhs.allocator_ = 0;</div><div class="line"><a name="l02161"></a><span class="lineno"> 2161</span>&#160; rhs.ownAllocator_ = 0;</div><div class="line"><a name="l02162"></a><span class="lineno"> 2162</span>&#160; rhs.parseResult_ = <a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#structrapidjson_1_1_parse_result">ParseResult</a>();</div><div class="line"><a name="l02163"></a><span class="lineno"> 2163</span>&#160; }</div><div class="line"><a name="l02164"></a><span class="lineno"> 2164</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02165"></a><span class="lineno"> 2165</span>&#160;</div><div class="line"><a name="l02166"></a><span class="lineno"> 2166</span>&#160; ~<a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>() {</div><div class="line"><a name="l02167"></a><span class="lineno"> 2167</span>&#160; Destroy();</div><div class="line"><a name="l02168"></a><span class="lineno"> 2168</span>&#160; }</div><div class="line"><a name="l02169"></a><span class="lineno"> 2169</span>&#160;</div><div class="line"><a name="l02170"></a><span class="lineno"> 2170</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l02171"></a><span class="lineno"> 2171</span>&#160;<span class="comment"> //! Move assignment in C++11</span></div><div class="line"><a name="l02172"></a><span class="lineno"> 2172</span>&#160;<span class="comment"></span> <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>&amp; operator=(<a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>&amp;&amp; rhs) RAPIDJSON_NOEXCEPT</div><div class="line"><a name="l02173"></a><span class="lineno"> 2173</span>&#160; {</div><div class="line"><a name="l02174"></a><span class="lineno"> 2174</span>&#160; <span class="comment">// The cast to ValueType is necessary here, because otherwise it would</span></div><div class="line"><a name="l02175"></a><span class="lineno"> 2175</span>&#160; <span class="comment">// attempt to call GenericValue&#39;s templated assignment operator.</span></div><div class="line"><a name="l02176"></a><span class="lineno"> 2176</span>&#160; ValueType::operator=(std::forward&lt;ValueType&gt;(rhs));</div><div class="line"><a name="l02177"></a><span class="lineno"> 2177</span>&#160;</div><div class="line"><a name="l02178"></a><span class="lineno"> 2178</span>&#160; <span class="comment">// Calling the destructor here would prematurely call stack_&#39;s destructor</span></div><div class="line"><a name="l02179"></a><span class="lineno"> 2179</span>&#160; Destroy();</div><div class="line"><a name="l02180"></a><span class="lineno"> 2180</span>&#160;</div><div class="line"><a name="l02181"></a><span class="lineno"> 2181</span>&#160; allocator_ = rhs.allocator_;</div><div class="line"><a name="l02182"></a><span class="lineno"> 2182</span>&#160; ownAllocator_ = rhs.ownAllocator_;</div><div class="line"><a name="l02183"></a><span class="lineno"> 2183</span>&#160; stack_ = std::move(rhs.stack_);</div><div class="line"><a name="l02184"></a><span class="lineno"> 2184</span>&#160; parseResult_ = rhs.parseResult_;</div><div class="line"><a name="l02185"></a><span class="lineno"> 2185</span>&#160;</div><div class="line"><a name="l02186"></a><span class="lineno"> 2186</span>&#160; rhs.allocator_ = 0;</div><div class="line"><a name="l02187"></a><span class="lineno"> 2187</span>&#160; rhs.ownAllocator_ = 0;</div><div class="line"><a name="l02188"></a><span class="lineno"> 2188</span>&#160; rhs.parseResult_ = <a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#structrapidjson_1_1_parse_result">ParseResult</a>();</div><div class="line"><a name="l02189"></a><span class="lineno"> 2189</span>&#160;</div><div class="line"><a name="l02190"></a><span class="lineno"> 2190</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l02191"></a><span class="lineno"> 2191</span>&#160; }</div><div class="line"><a name="l02192"></a><span class="lineno"> 2192</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02193"></a><span class="lineno"> 2193</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02194"></a><span class="lineno"> 2194</span>&#160;<span class="comment"> //! Exchange the contents of this document with those of another.</span></div><div class="line"><a name="l02195"></a><span class="lineno"> 2195</span>&#160;<span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l02196"></a><span class="lineno"> 2196</span>&#160;<span class="comment"> \param rhs Another document.</span></div><div class="line"><a name="l02197"></a><span class="lineno"> 2197</span>&#160;<span class="comment"> \note Constant complexity.</span></div><div class="line"><a name="l02198"></a><span class="lineno"> 2198</span>&#160;<span class="comment"> \see GenericValue::Swap</span></div><div class="line"><a name="l02199"></a><span class="lineno"> 2199</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l02200"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_document.html#abf1cbab989b856f9d260787b2575750b"> 2200</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>&amp; <a class="code" href="classrapidjson_1_1_generic_document.html#abf1cbab989b856f9d260787b2575750b">Swap</a>(<a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>&amp; rhs) RAPIDJSON_NOEXCEPT {</div><div class="line"><a name="l02201"></a><span class="lineno"> 2201</span>&#160; ValueType::Swap(rhs);</div><div class="line"><a name="l02202"></a><span class="lineno"> 2202</span>&#160; stack_.Swap(rhs.stack_);</div><div class="line"><a name="l02203"></a><span class="lineno"> 2203</span>&#160; internal::Swap(allocator_, rhs.allocator_);</div><div class="line"><a name="l02204"></a><span class="lineno"> 2204</span>&#160; internal::Swap(ownAllocator_, rhs.ownAllocator_);</div><div class="line"><a name="l02205"></a><span class="lineno"> 2205</span>&#160; internal::Swap(parseResult_, rhs.parseResult_);</div><div class="line"><a name="l02206"></a><span class="lineno"> 2206</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l02207"></a><span class="lineno"> 2207</span>&#160; }</div><div class="line"><a name="l02208"></a><span class="lineno"> 2208</span>&#160;</div><div class="line"><a name="l02209"></a><span class="lineno"> 2209</span>&#160; <span class="comment">// Allow Swap with ValueType.</span></div><div class="line"><a name="l02210"></a><span class="lineno"> 2210</span>&#160; <span class="comment">// Refer to Effective C++ 3rd Edition/Item 33: Avoid hiding inherited names.</span></div><div class="line"><a name="l02211"></a><span class="lineno"> 2211</span>&#160; <span class="keyword">using</span> ValueType::Swap;</div><div class="line"><a name="l02212"></a><span class="lineno"> 2212</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02213"></a><span class="lineno"> 2213</span>&#160;<span class="comment"> //! free-standing swap function helper</span></div><div class="line"><a name="l02214"></a><span class="lineno"> 2214</span>&#160;<span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l02215"></a><span class="lineno"> 2215</span>&#160;<span class="comment"> Helper function to enable support for common swap implementation pattern based on \c std::swap:</span></div><div class="line"><a name="l02216"></a><span class="lineno"> 2216</span>&#160;<span class="comment"> \code</span></div><div class="line"><a name="l02217"></a><span class="lineno"> 2217</span>&#160;<span class="comment"> void swap(MyClass&amp; a, MyClass&amp; b) {</span></div><div class="line"><a name="l02218"></a><span class="lineno"> 2218</span>&#160;<span class="comment"> using std::swap;</span></div><div class="line"><a name="l02219"></a><span class="lineno"> 2219</span>&#160;<span class="comment"> swap(a.doc, b.doc);</span></div><div class="line"><a name="l02220"></a><span class="lineno"> 2220</span>&#160;<span class="comment"> // ...</span></div><div class="line"><a name="l02221"></a><span class="lineno"> 2221</span>&#160;<span class="comment"> }</span></div><div class="line"><a name="l02222"></a><span class="lineno"> 2222</span>&#160;<span class="comment"> \endcode</span></div><div class="line"><a name="l02223"></a><span class="lineno"> 2223</span>&#160;<span class="comment"> \see Swap()</span></div><div class="line"><a name="l02224"></a><span class="lineno"> 2224</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l02225"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_document.html#a0d63efcc43758ac3aed77e868233369d"> 2225</a></span>&#160; <span class="keyword">friend</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classrapidjson_1_1_generic_document.html#a0d63efcc43758ac3aed77e868233369d">swap</a>(<a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>&amp; a, <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>&amp; b) RAPIDJSON_NOEXCEPT { a.Swap(b); }</div><div class="line"><a name="l02226"></a><span class="lineno"> 2226</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02227"></a><span class="lineno"> 2227</span>&#160;<span class="comment"> //! Populate this document by a generator which produces SAX events.</span></div><div class="line"><a name="l02228"></a><span class="lineno"> 2228</span>&#160;<span class="comment"></span><span class="comment"> /*! \tparam Generator A functor with &lt;tt&gt;bool f(Handler)&lt;/tt&gt; prototype.</span></div><div class="line"><a name="l02229"></a><span class="lineno"> 2229</span>&#160;<span class="comment"> \param g Generator functor which sends SAX events to the parameter.</span></div><div class="line"><a name="l02230"></a><span class="lineno"> 2230</span>&#160;<span class="comment"> \return The document itself for fluent API.</span></div><div class="line"><a name="l02231"></a><span class="lineno"> 2231</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l02232"></a><span class="lineno"> 2232</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> Generator&gt;</div><div class="line"><a name="l02233"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_document.html#a63e18887979da500ece6f0bd10d29b64"> 2233</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>&amp; <a class="code" href="classrapidjson_1_1_generic_document.html#a63e18887979da500ece6f0bd10d29b64">Populate</a>(Generator&amp; g) {</div><div class="line"><a name="l02234"></a><span class="lineno"> 2234</span>&#160; ClearStackOnExit scope(*<span class="keyword">this</span>);</div><div class="line"><a name="l02235"></a><span class="lineno"> 2235</span>&#160; <span class="keywordflow">if</span> (g(*<span class="keyword">this</span>)) {</div><div class="line"><a name="l02236"></a><span class="lineno"> 2236</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(stack_.GetSize() == <span class="keyword">sizeof</span>(ValueType)); <span class="comment">// Got one and only one root object</span></div><div class="line"><a name="l02237"></a><span class="lineno"> 2237</span>&#160; ValueType::operator=(*stack_.template Pop&lt;ValueType&gt;(1));<span class="comment">// Move value from stack to document</span></div><div class="line"><a name="l02238"></a><span class="lineno"> 2238</span>&#160; }</div><div class="line"><a name="l02239"></a><span class="lineno"> 2239</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l02240"></a><span class="lineno"> 2240</span>&#160; }</div><div class="line"><a name="l02241"></a><span class="lineno"> 2241</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02242"></a><span class="lineno"> 2242</span>&#160;<span class="comment"> //!@name Parse from stream</span></div><div class="line"><a name="l02243"></a><span class="lineno"> 2243</span>&#160;<span class="comment"> //!@{</span></div><div class="line"><a name="l02244"></a><span class="lineno"> 2244</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l02245"></a><span class="lineno"> 2245</span>&#160;<span class="comment"> //! Parse JSON text from an input stream (with Encoding conversion)</span></div><div class="line"><a name="l02246"></a><span class="lineno"> 2246</span>&#160;<span class="comment"></span><span class="comment"> /*! \tparam parseFlags Combination of \ref ParseFlag.</span></div><div class="line"><a name="l02247"></a><span class="lineno"> 2247</span>&#160;<span class="comment"> \tparam SourceEncoding Encoding of input stream</span></div><div class="line"><a name="l02248"></a><span class="lineno"> 2248</span>&#160;<span class="comment"> \tparam InputStream Type of input stream, implementing Stream concept</span></div><div class="line"><a name="l02249"></a><span class="lineno"> 2249</span>&#160;<span class="comment"> \param is Input stream to be parsed.</span></div><div class="line"><a name="l02250"></a><span class="lineno"> 2250</span>&#160;<span class="comment"> \return The document itself for fluent API.</span></div><div class="line"><a name="l02251"></a><span class="lineno"> 2251</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l02252"></a><span class="lineno"> 2252</span>&#160; <span class="keyword">template</span> &lt;<span class="keywordtype">unsigned</span> parseFlags, <span class="keyword">typename</span> SourceEncoding, <span class="keyword">typename</span> InputStream&gt;</div><div class="line"><a name="l02253"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_document.html#a3ae97682cf04685c7db9d89ebc399b85"> 2253</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>&amp; <a class="code" href="classrapidjson_1_1_generic_document.html#a3ae97682cf04685c7db9d89ebc399b85">ParseStream</a>(InputStream&amp; is) {</div><div class="line"><a name="l02254"></a><span class="lineno"> 2254</span>&#160; <a class="code" href="classrapidjson_1_1_generic_reader.html">GenericReader&lt;SourceEncoding, Encoding, StackAllocator&gt;</a> reader(</div><div class="line"><a name="l02255"></a><span class="lineno"> 2255</span>&#160; stack_.HasAllocator() ? &amp;stack_.GetAllocator() : 0);</div><div class="line"><a name="l02256"></a><span class="lineno"> 2256</span>&#160; ClearStackOnExit scope(*<span class="keyword">this</span>);</div><div class="line"><a name="l02257"></a><span class="lineno"> 2257</span>&#160; parseResult_ = reader.template Parse&lt;parseFlags&gt;(is, *<span class="keyword">this</span>);</div><div class="line"><a name="l02258"></a><span class="lineno"> 2258</span>&#160; <span class="keywordflow">if</span> (parseResult_) {</div><div class="line"><a name="l02259"></a><span class="lineno"> 2259</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(stack_.GetSize() == <span class="keyword">sizeof</span>(ValueType)); <span class="comment">// Got one and only one root object</span></div><div class="line"><a name="l02260"></a><span class="lineno"> 2260</span>&#160; ValueType::operator=(*stack_.template Pop&lt;ValueType&gt;(1));<span class="comment">// Move value from stack to document</span></div><div class="line"><a name="l02261"></a><span class="lineno"> 2261</span>&#160; }</div><div class="line"><a name="l02262"></a><span class="lineno"> 2262</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l02263"></a><span class="lineno"> 2263</span>&#160; }</div><div class="line"><a name="l02264"></a><span class="lineno"> 2264</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02265"></a><span class="lineno"> 2265</span>&#160;<span class="comment"> //! Parse JSON text from an input stream</span></div><div class="line"><a name="l02266"></a><span class="lineno"> 2266</span>&#160;<span class="comment"></span><span class="comment"> /*! \tparam parseFlags Combination of \ref ParseFlag.</span></div><div class="line"><a name="l02267"></a><span class="lineno"> 2267</span>&#160;<span class="comment"> \tparam InputStream Type of input stream, implementing Stream concept</span></div><div class="line"><a name="l02268"></a><span class="lineno"> 2268</span>&#160;<span class="comment"> \param is Input stream to be parsed.</span></div><div class="line"><a name="l02269"></a><span class="lineno"> 2269</span>&#160;<span class="comment"> \return The document itself for fluent API.</span></div><div class="line"><a name="l02270"></a><span class="lineno"> 2270</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l02271"></a><span class="lineno"> 2271</span>&#160; <span class="keyword">template</span> &lt;<span class="keywordtype">unsigned</span> parseFlags, <span class="keyword">typename</span> InputStream&gt;</div><div class="line"><a name="l02272"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_document.html#ae4ee7d86b8c906c83dbe15e57eb6ac6a"> 2272</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>&amp; <a class="code" href="classrapidjson_1_1_generic_document.html#ae4ee7d86b8c906c83dbe15e57eb6ac6a">ParseStream</a>(InputStream&amp; is) {</div><div class="line"><a name="l02273"></a><span class="lineno"> 2273</span>&#160; <span class="keywordflow">return</span> ParseStream&lt;parseFlags, Encoding, InputStream&gt;(is);</div><div class="line"><a name="l02274"></a><span class="lineno"> 2274</span>&#160; }</div><div class="line"><a name="l02275"></a><span class="lineno"> 2275</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02276"></a><span class="lineno"> 2276</span>&#160;<span class="comment"> //! Parse JSON text from an input stream (with \ref kParseDefaultFlags)</span></div><div class="line"><a name="l02277"></a><span class="lineno"> 2277</span>&#160;<span class="comment"></span><span class="comment"> /*! \tparam InputStream Type of input stream, implementing Stream concept</span></div><div class="line"><a name="l02278"></a><span class="lineno"> 2278</span>&#160;<span class="comment"> \param is Input stream to be parsed.</span></div><div class="line"><a name="l02279"></a><span class="lineno"> 2279</span>&#160;<span class="comment"> \return The document itself for fluent API.</span></div><div class="line"><a name="l02280"></a><span class="lineno"> 2280</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l02281"></a><span class="lineno"> 2281</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> InputStream&gt;</div><div class="line"><a name="l02282"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_document.html#acf96a3c7fd61486d049c701b1fe5d414"> 2282</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>&amp; <a class="code" href="classrapidjson_1_1_generic_document.html#acf96a3c7fd61486d049c701b1fe5d414">ParseStream</a>(InputStream&amp; is) {</div><div class="line"><a name="l02283"></a><span class="lineno"> 2283</span>&#160; <span class="keywordflow">return</span> ParseStream&lt;kParseDefaultFlags, Encoding, InputStream&gt;(is);</div><div class="line"><a name="l02284"></a><span class="lineno"> 2284</span>&#160; }<span class="comment"></span></div><div class="line"><a name="l02285"></a><span class="lineno"> 2285</span>&#160;<span class="comment"> //!@}</span></div><div class="line"><a name="l02286"></a><span class="lineno"> 2286</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l02287"></a><span class="lineno"> 2287</span>&#160;<span class="comment"> //!@name Parse in-place from mutable string</span></div><div class="line"><a name="l02288"></a><span class="lineno"> 2288</span>&#160;<span class="comment"> //!@{</span></div><div class="line"><a name="l02289"></a><span class="lineno"> 2289</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l02290"></a><span class="lineno"> 2290</span>&#160;<span class="comment"> //! Parse JSON text from a mutable string</span></div><div class="line"><a name="l02291"></a><span class="lineno"> 2291</span>&#160;<span class="comment"></span><span class="comment"> /*! \tparam parseFlags Combination of \ref ParseFlag.</span></div><div class="line"><a name="l02292"></a><span class="lineno"> 2292</span>&#160;<span class="comment"> \param str Mutable zero-terminated string to be parsed.</span></div><div class="line"><a name="l02293"></a><span class="lineno"> 2293</span>&#160;<span class="comment"> \return The document itself for fluent API.</span></div><div class="line"><a name="l02294"></a><span class="lineno"> 2294</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l02295"></a><span class="lineno"> 2295</span>&#160; <span class="keyword">template</span> &lt;<span class="keywordtype">unsigned</span> parseFlags&gt;</div><div class="line"><a name="l02296"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_document.html#a7ba626bf84eb45a9bca0b7723bf47f3f"> 2296</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>&amp; <a class="code" href="classrapidjson_1_1_generic_document.html#a7ba626bf84eb45a9bca0b7723bf47f3f">ParseInsitu</a>(Ch* str) {</div><div class="line"><a name="l02297"></a><span class="lineno"> 2297</span>&#160; <a class="code" href="structrapidjson_1_1_generic_insitu_string_stream.html">GenericInsituStringStream&lt;Encoding&gt;</a> s(str);</div><div class="line"><a name="l02298"></a><span class="lineno"> 2298</span>&#160; <span class="keywordflow">return</span> ParseStream&lt;parseFlags | kParseInsituFlag&gt;(s);</div><div class="line"><a name="l02299"></a><span class="lineno"> 2299</span>&#160; }</div><div class="line"><a name="l02300"></a><span class="lineno"> 2300</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02301"></a><span class="lineno"> 2301</span>&#160;<span class="comment"> //! Parse JSON text from a mutable string (with \ref kParseDefaultFlags)</span></div><div class="line"><a name="l02302"></a><span class="lineno"> 2302</span>&#160;<span class="comment"></span><span class="comment"> /*! \param str Mutable zero-terminated string to be parsed.</span></div><div class="line"><a name="l02303"></a><span class="lineno"> 2303</span>&#160;<span class="comment"> \return The document itself for fluent API.</span></div><div class="line"><a name="l02304"></a><span class="lineno"> 2304</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l02305"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_document.html#af061c039a990c2970dc31e5626149367"> 2305</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>&amp; <a class="code" href="classrapidjson_1_1_generic_document.html#af061c039a990c2970dc31e5626149367">ParseInsitu</a>(Ch* str) {</div><div class="line"><a name="l02306"></a><span class="lineno"> 2306</span>&#160; <span class="keywordflow">return</span> ParseInsitu&lt;kParseDefaultFlags&gt;(str);</div><div class="line"><a name="l02307"></a><span class="lineno"> 2307</span>&#160; }<span class="comment"></span></div><div class="line"><a name="l02308"></a><span class="lineno"> 2308</span>&#160;<span class="comment"> //!@}</span></div><div class="line"><a name="l02309"></a><span class="lineno"> 2309</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l02310"></a><span class="lineno"> 2310</span>&#160;<span class="comment"> //!@name Parse from read-only string</span></div><div class="line"><a name="l02311"></a><span class="lineno"> 2311</span>&#160;<span class="comment"> //!@{</span></div><div class="line"><a name="l02312"></a><span class="lineno"> 2312</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l02313"></a><span class="lineno"> 2313</span>&#160;<span class="comment"> //! Parse JSON text from a read-only string (with Encoding conversion)</span></div><div class="line"><a name="l02314"></a><span class="lineno"> 2314</span>&#160;<span class="comment"></span><span class="comment"> /*! \tparam parseFlags Combination of \ref ParseFlag (must not contain \ref kParseInsituFlag).</span></div><div class="line"><a name="l02315"></a><span class="lineno"> 2315</span>&#160;<span class="comment"> \tparam SourceEncoding Transcoding from input Encoding</span></div><div class="line"><a name="l02316"></a><span class="lineno"> 2316</span>&#160;<span class="comment"> \param str Read-only zero-terminated string to be parsed.</span></div><div class="line"><a name="l02317"></a><span class="lineno"> 2317</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l02318"></a><span class="lineno"> 2318</span>&#160; <span class="keyword">template</span> &lt;<span class="keywordtype">unsigned</span> parseFlags, <span class="keyword">typename</span> SourceEncoding&gt;</div><div class="line"><a name="l02319"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_document.html#aea842b533a858c9a3861451ad9e8642c"> 2319</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>&amp; <a class="code" href="classrapidjson_1_1_generic_document.html#aea842b533a858c9a3861451ad9e8642c">Parse</a>(<span class="keyword">const</span> <span class="keyword">typename</span> SourceEncoding::Ch* str) {</div><div class="line"><a name="l02320"></a><span class="lineno"> 2320</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(!(parseFlags &amp; <a class="code" href="namespacerapidjson.html#a81379eb4e94a0386d71d15fda882ebc9a02748971d6ea0c5e22c69b8aa7f344ea">kParseInsituFlag</a>));</div><div class="line"><a name="l02321"></a><span class="lineno"> 2321</span>&#160; <a class="code" href="structrapidjson_1_1_generic_string_stream.html">GenericStringStream&lt;SourceEncoding&gt;</a> s(str);</div><div class="line"><a name="l02322"></a><span class="lineno"> 2322</span>&#160; <span class="keywordflow">return</span> ParseStream&lt;parseFlags, SourceEncoding&gt;(s);</div><div class="line"><a name="l02323"></a><span class="lineno"> 2323</span>&#160; }</div><div class="line"><a name="l02324"></a><span class="lineno"> 2324</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02325"></a><span class="lineno"> 2325</span>&#160;<span class="comment"> //! Parse JSON text from a read-only string</span></div><div class="line"><a name="l02326"></a><span class="lineno"> 2326</span>&#160;<span class="comment"></span><span class="comment"> /*! \tparam parseFlags Combination of \ref ParseFlag (must not contain \ref kParseInsituFlag).</span></div><div class="line"><a name="l02327"></a><span class="lineno"> 2327</span>&#160;<span class="comment"> \param str Read-only zero-terminated string to be parsed.</span></div><div class="line"><a name="l02328"></a><span class="lineno"> 2328</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l02329"></a><span class="lineno"> 2329</span>&#160; <span class="keyword">template</span> &lt;<span class="keywordtype">unsigned</span> parseFlags&gt;</div><div class="line"><a name="l02330"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_document.html#a42c35e2f64c288f14b74fec2792500c8"> 2330</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>&amp; <a class="code" href="classrapidjson_1_1_generic_document.html#a42c35e2f64c288f14b74fec2792500c8">Parse</a>(<span class="keyword">const</span> Ch* str) {</div><div class="line"><a name="l02331"></a><span class="lineno"> 2331</span>&#160; <span class="keywordflow">return</span> Parse&lt;parseFlags, Encoding&gt;(str);</div><div class="line"><a name="l02332"></a><span class="lineno"> 2332</span>&#160; }</div><div class="line"><a name="l02333"></a><span class="lineno"> 2333</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02334"></a><span class="lineno"> 2334</span>&#160;<span class="comment"> //! Parse JSON text from a read-only string (with \ref kParseDefaultFlags)</span></div><div class="line"><a name="l02335"></a><span class="lineno"> 2335</span>&#160;<span class="comment"></span><span class="comment"> /*! \param str Read-only zero-terminated string to be parsed.</span></div><div class="line"><a name="l02336"></a><span class="lineno"> 2336</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l02337"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_document.html#ab031375318d133f83a114314b75703de"> 2337</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>&amp; <a class="code" href="classrapidjson_1_1_generic_document.html#ab031375318d133f83a114314b75703de">Parse</a>(<span class="keyword">const</span> Ch* str) {</div><div class="line"><a name="l02338"></a><span class="lineno"> 2338</span>&#160; <span class="keywordflow">return</span> Parse&lt;kParseDefaultFlags&gt;(str);</div><div class="line"><a name="l02339"></a><span class="lineno"> 2339</span>&#160; }</div><div class="line"><a name="l02340"></a><span class="lineno"> 2340</span>&#160;</div><div class="line"><a name="l02341"></a><span class="lineno"> 2341</span>&#160; <span class="keyword">template</span> &lt;<span class="keywordtype">unsigned</span> parseFlags, <span class="keyword">typename</span> SourceEncoding&gt;</div><div class="line"><a name="l02342"></a><span class="lineno"> 2342</span>&#160; <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>&amp; Parse(<span class="keyword">const</span> <span class="keyword">typename</span> SourceEncoding::Ch* str, <span class="keywordtype">size_t</span> length) {</div><div class="line"><a name="l02343"></a><span class="lineno"> 2343</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(!(parseFlags &amp; <a class="code" href="namespacerapidjson.html#a81379eb4e94a0386d71d15fda882ebc9a02748971d6ea0c5e22c69b8aa7f344ea">kParseInsituFlag</a>));</div><div class="line"><a name="l02344"></a><span class="lineno"> 2344</span>&#160; <a class="code" href="structrapidjson_1_1_memory_stream.html">MemoryStream</a> ms(reinterpret_cast&lt;const char*&gt;(str), length * <span class="keyword">sizeof</span>(<span class="keyword">typename</span> SourceEncoding::Ch));</div><div class="line"><a name="l02345"></a><span class="lineno"> 2345</span>&#160; <a class="code" href="classrapidjson_1_1_encoded_input_stream.html">EncodedInputStream&lt;SourceEncoding, MemoryStream&gt;</a> is(ms);</div><div class="line"><a name="l02346"></a><span class="lineno"> 2346</span>&#160; ParseStream&lt;parseFlags, SourceEncoding&gt;(is);</div><div class="line"><a name="l02347"></a><span class="lineno"> 2347</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l02348"></a><span class="lineno"> 2348</span>&#160; }</div><div class="line"><a name="l02349"></a><span class="lineno"> 2349</span>&#160;</div><div class="line"><a name="l02350"></a><span class="lineno"> 2350</span>&#160; <span class="keyword">template</span> &lt;<span class="keywordtype">unsigned</span> parseFlags&gt;</div><div class="line"><a name="l02351"></a><span class="lineno"> 2351</span>&#160; <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>&amp; Parse(<span class="keyword">const</span> Ch* str, <span class="keywordtype">size_t</span> length) {</div><div class="line"><a name="l02352"></a><span class="lineno"> 2352</span>&#160; <span class="keywordflow">return</span> Parse&lt;parseFlags, Encoding&gt;(str, length);</div><div class="line"><a name="l02353"></a><span class="lineno"> 2353</span>&#160; }</div><div class="line"><a name="l02354"></a><span class="lineno"> 2354</span>&#160; </div><div class="line"><a name="l02355"></a><span class="lineno"> 2355</span>&#160; <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>&amp; Parse(<span class="keyword">const</span> Ch* str, <span class="keywordtype">size_t</span> length) {</div><div class="line"><a name="l02356"></a><span class="lineno"> 2356</span>&#160; <span class="keywordflow">return</span> Parse&lt;kParseDefaultFlags&gt;(str, length);</div><div class="line"><a name="l02357"></a><span class="lineno"> 2357</span>&#160; }</div><div class="line"><a name="l02358"></a><span class="lineno"> 2358</span>&#160;</div><div class="line"><a name="l02359"></a><span class="lineno"> 2359</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l02360"></a><span class="lineno"> 2360</span>&#160; <span class="keyword">template</span> &lt;<span class="keywordtype">unsigned</span> parseFlags, <span class="keyword">typename</span> SourceEncoding&gt;</div><div class="line"><a name="l02361"></a><span class="lineno"> 2361</span>&#160; <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>&amp; Parse(<span class="keyword">const</span> std::basic_string&lt;typename SourceEncoding::Ch&gt;&amp; str) {</div><div class="line"><a name="l02362"></a><span class="lineno"> 2362</span>&#160; <span class="comment">// c_str() is constant complexity according to standard. Should be faster than Parse(const char*, size_t)</span></div><div class="line"><a name="l02363"></a><span class="lineno"> 2363</span>&#160; <span class="keywordflow">return</span> Parse&lt;parseFlags, SourceEncoding&gt;(str.c_str());</div><div class="line"><a name="l02364"></a><span class="lineno"> 2364</span>&#160; }</div><div class="line"><a name="l02365"></a><span class="lineno"> 2365</span>&#160;</div><div class="line"><a name="l02366"></a><span class="lineno"> 2366</span>&#160; <span class="keyword">template</span> &lt;<span class="keywordtype">unsigned</span> parseFlags&gt;</div><div class="line"><a name="l02367"></a><span class="lineno"> 2367</span>&#160; <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>&amp; Parse(<span class="keyword">const</span> std::basic_string&lt;Ch&gt;&amp; str) {</div><div class="line"><a name="l02368"></a><span class="lineno"> 2368</span>&#160; <span class="keywordflow">return</span> Parse&lt;parseFlags, Encoding&gt;(str.c_str());</div><div class="line"><a name="l02369"></a><span class="lineno"> 2369</span>&#160; }</div><div class="line"><a name="l02370"></a><span class="lineno"> 2370</span>&#160;</div><div class="line"><a name="l02371"></a><span class="lineno"> 2371</span>&#160; <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>&amp; Parse(<span class="keyword">const</span> std::basic_string&lt;Ch&gt;&amp; str) {</div><div class="line"><a name="l02372"></a><span class="lineno"> 2372</span>&#160; <span class="keywordflow">return</span> Parse&lt;kParseDefaultFlags&gt;(str);</div><div class="line"><a name="l02373"></a><span class="lineno"> 2373</span>&#160; }</div><div class="line"><a name="l02374"></a><span class="lineno"> 2374</span>&#160;<span class="preprocessor">#endif // RAPIDJSON_HAS_STDSTRING </span></div><div class="line"><a name="l02375"></a><span class="lineno"> 2375</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02376"></a><span class="lineno"> 2376</span>&#160;<span class="comment"> //!@}</span></div><div class="line"><a name="l02377"></a><span class="lineno"> 2377</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l02378"></a><span class="lineno"> 2378</span>&#160;<span class="comment"> //!@name Handling parse errors</span></div><div class="line"><a name="l02379"></a><span class="lineno"> 2379</span>&#160;<span class="comment"> //!@{</span></div><div class="line"><a name="l02380"></a><span class="lineno"> 2380</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l02381"></a><span class="lineno"> 2381</span>&#160;<span class="comment"> //! Whether a parse error has occurred in the last parsing.</span></div><div class="line"><a name="l02382"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_document.html#a7607bb42b51547e44bfd4cab35d8f20e"> 2382</a></span>&#160;<span class="comment"></span> <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_generic_document.html#a7607bb42b51547e44bfd4cab35d8f20e">HasParseError</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> parseResult_.IsError(); }</div><div class="line"><a name="l02383"></a><span class="lineno"> 2383</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02384"></a><span class="lineno"> 2384</span>&#160;<span class="comment"> //! Get the \ref ParseErrorCode of last parsing.</span></div><div class="line"><a name="l02385"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_document.html#ab94c280c079a6837a24951cb4d8f337b"> 2385</a></span>&#160;<span class="comment"></span> <a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#ga7d3acf640886b1f2552dc8c4cd6dea60">ParseErrorCode</a> <a class="code" href="classrapidjson_1_1_generic_document.html#ab94c280c079a6837a24951cb4d8f337b">GetParseError</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> parseResult_.Code(); }</div><div class="line"><a name="l02386"></a><span class="lineno"> 2386</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02387"></a><span class="lineno"> 2387</span>&#160;<span class="comment"> //! Get the position of last parsing error in input, 0 otherwise.</span></div><div class="line"><a name="l02388"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_document.html#af532179ca5ad5434a5e8af63f5da4c5f"> 2388</a></span>&#160;<span class="comment"></span> <span class="keywordtype">size_t</span> <a class="code" href="classrapidjson_1_1_generic_document.html#af532179ca5ad5434a5e8af63f5da4c5f">GetErrorOffset</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> parseResult_.Offset(); }</div><div class="line"><a name="l02389"></a><span class="lineno"> 2389</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02390"></a><span class="lineno"> 2390</span>&#160;<span class="comment"> //! Implicit conversion to get the last parse result</span></div><div class="line"><a name="l02391"></a><span class="lineno"> 2391</span>&#160;<span class="comment"></span><span class="preprocessor">#ifndef __clang // -Wdocumentation</span></div><div class="line"><a name="l02392"></a><span class="lineno"> 2392</span>&#160;<span class="comment"> /*! \return \ref ParseResult of the last parse operation</span></div><div class="line"><a name="l02393"></a><span class="lineno"> 2393</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02394"></a><span class="lineno"> 2394</span>&#160;<span class="comment"> \code</span></div><div class="line"><a name="l02395"></a><span class="lineno"> 2395</span>&#160;<span class="comment"> Document doc;</span></div><div class="line"><a name="l02396"></a><span class="lineno"> 2396</span>&#160;<span class="comment"> ParseResult ok = doc.Parse(json);</span></div><div class="line"><a name="l02397"></a><span class="lineno"> 2397</span>&#160;<span class="comment"> if (!ok)</span></div><div class="line"><a name="l02398"></a><span class="lineno"> 2398</span>&#160;<span class="comment"> printf( &quot;JSON parse error: %s (%u)\n&quot;, GetParseError_En(ok.Code()), ok.Offset());</span></div><div class="line"><a name="l02399"></a><span class="lineno"> 2399</span>&#160;<span class="comment"> \endcode</span></div><div class="line"><a name="l02400"></a><span class="lineno"> 2400</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l02401"></a><span class="lineno"> 2401</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02402"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_document.html#a36d19989c9221b27036675455516a974"> 2402</a></span>&#160; <span class="keyword">operator</span> <a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#structrapidjson_1_1_parse_result">ParseResult</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> parseResult_; }<span class="comment"></span></div><div class="line"><a name="l02403"></a><span class="lineno"> 2403</span>&#160;<span class="comment"> //!@}</span></div><div class="line"><a name="l02404"></a><span class="lineno"> 2404</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l02405"></a><span class="lineno"> 2405</span>&#160;<span class="comment"> //! Get the allocator of this document.</span></div><div class="line"><a name="l02406"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_document.html#ad92c6cd025d411258d1f2ad890e2ee3f"> 2406</a></span>&#160;<span class="comment"></span> Allocator&amp; <a class="code" href="classrapidjson_1_1_generic_document.html#ad92c6cd025d411258d1f2ad890e2ee3f">GetAllocator</a>() {</div><div class="line"><a name="l02407"></a><span class="lineno"> 2407</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(allocator_);</div><div class="line"><a name="l02408"></a><span class="lineno"> 2408</span>&#160; <span class="keywordflow">return</span> *allocator_;</div><div class="line"><a name="l02409"></a><span class="lineno"> 2409</span>&#160; }</div><div class="line"><a name="l02410"></a><span class="lineno"> 2410</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02411"></a><span class="lineno"> 2411</span>&#160;<span class="comment"> //! Get the capacity of stack in bytes.</span></div><div class="line"><a name="l02412"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_document.html#a153e5a065ca9660673974f9df203be4b"> 2412</a></span>&#160;<span class="comment"></span> <span class="keywordtype">size_t</span> <a class="code" href="classrapidjson_1_1_generic_document.html#a153e5a065ca9660673974f9df203be4b">GetStackCapacity</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> stack_.GetCapacity(); }</div><div class="line"><a name="l02413"></a><span class="lineno"> 2413</span>&#160;</div><div class="line"><a name="l02414"></a><span class="lineno"> 2414</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l02415"></a><span class="lineno"> 2415</span>&#160; <span class="comment">// clear stack on any exit from ParseStream, e.g. due to exception</span></div><div class="line"><a name="l02416"></a><span class="lineno"> 2416</span>&#160; <span class="keyword">struct </span>ClearStackOnExit {</div><div class="line"><a name="l02417"></a><span class="lineno"> 2417</span>&#160; <span class="keyword">explicit</span> ClearStackOnExit(<a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>&amp; d) : d_(d) {}</div><div class="line"><a name="l02418"></a><span class="lineno"> 2418</span>&#160; ~ClearStackOnExit() { d_.ClearStack(); }</div><div class="line"><a name="l02419"></a><span class="lineno"> 2419</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l02420"></a><span class="lineno"> 2420</span>&#160; ClearStackOnExit(<span class="keyword">const</span> ClearStackOnExit&amp;);</div><div class="line"><a name="l02421"></a><span class="lineno"> 2421</span>&#160; ClearStackOnExit&amp; operator=(<span class="keyword">const</span> ClearStackOnExit&amp;);</div><div class="line"><a name="l02422"></a><span class="lineno"> 2422</span>&#160; <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>&amp; d_;</div><div class="line"><a name="l02423"></a><span class="lineno"> 2423</span>&#160; };</div><div class="line"><a name="l02424"></a><span class="lineno"> 2424</span>&#160;</div><div class="line"><a name="l02425"></a><span class="lineno"> 2425</span>&#160; <span class="comment">// callers of the following private Handler functions</span></div><div class="line"><a name="l02426"></a><span class="lineno"> 2426</span>&#160; <span class="comment">// template &lt;typename,typename,typename&gt; friend class GenericReader; // for parsing</span></div><div class="line"><a name="l02427"></a><span class="lineno"> 2427</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span>, <span class="keyword">typename</span>&gt; <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>; <span class="comment">// for deep copying</span></div><div class="line"><a name="l02428"></a><span class="lineno"> 2428</span>&#160;</div><div class="line"><a name="l02429"></a><span class="lineno"> 2429</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l02430"></a><span class="lineno"> 2430</span>&#160; <span class="comment">// Implementation of Handler</span></div><div class="line"><a name="l02431"></a><span class="lineno"> 2431</span>&#160; <span class="keywordtype">bool</span> Null() { <span class="keyword">new</span> (stack_.template Push&lt;ValueType&gt;()) ValueType(); <span class="keywordflow">return</span> <span class="keyword">true</span>; }</div><div class="line"><a name="l02432"></a><span class="lineno"> 2432</span>&#160; <span class="keywordtype">bool</span> Bool(<span class="keywordtype">bool</span> b) { <span class="keyword">new</span> (stack_.template Push&lt;ValueType&gt;()) ValueType(b); <span class="keywordflow">return</span> <span class="keyword">true</span>; }</div><div class="line"><a name="l02433"></a><span class="lineno"> 2433</span>&#160; <span class="keywordtype">bool</span> Int(<span class="keywordtype">int</span> i) { <span class="keyword">new</span> (stack_.template Push&lt;ValueType&gt;()) ValueType(i); <span class="keywordflow">return</span> <span class="keyword">true</span>; }</div><div class="line"><a name="l02434"></a><span class="lineno"> 2434</span>&#160; <span class="keywordtype">bool</span> Uint(<span class="keywordtype">unsigned</span> i) { <span class="keyword">new</span> (stack_.template Push&lt;ValueType&gt;()) ValueType(i); <span class="keywordflow">return</span> <span class="keyword">true</span>; }</div><div class="line"><a name="l02435"></a><span class="lineno"> 2435</span>&#160; <span class="keywordtype">bool</span> Int64(int64_t i) { <span class="keyword">new</span> (stack_.template Push&lt;ValueType&gt;()) ValueType(i); <span class="keywordflow">return</span> <span class="keyword">true</span>; }</div><div class="line"><a name="l02436"></a><span class="lineno"> 2436</span>&#160; <span class="keywordtype">bool</span> Uint64(uint64_t i) { <span class="keyword">new</span> (stack_.template Push&lt;ValueType&gt;()) ValueType(i); <span class="keywordflow">return</span> <span class="keyword">true</span>; }</div><div class="line"><a name="l02437"></a><span class="lineno"> 2437</span>&#160; <span class="keywordtype">bool</span> Double(<span class="keywordtype">double</span> d) { <span class="keyword">new</span> (stack_.template Push&lt;ValueType&gt;()) ValueType(d); <span class="keywordflow">return</span> <span class="keyword">true</span>; }</div><div class="line"><a name="l02438"></a><span class="lineno"> 2438</span>&#160;</div><div class="line"><a name="l02439"></a><span class="lineno"> 2439</span>&#160; <span class="keywordtype">bool</span> RawNumber(<span class="keyword">const</span> Ch* str, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> length, <span class="keywordtype">bool</span> copy) { </div><div class="line"><a name="l02440"></a><span class="lineno"> 2440</span>&#160; <span class="keywordflow">if</span> (copy) </div><div class="line"><a name="l02441"></a><span class="lineno"> 2441</span>&#160; <span class="keyword">new</span> (stack_.template Push&lt;ValueType&gt;()) ValueType(str, length, GetAllocator());</div><div class="line"><a name="l02442"></a><span class="lineno"> 2442</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l02443"></a><span class="lineno"> 2443</span>&#160; <span class="keyword">new</span> (stack_.template Push&lt;ValueType&gt;()) ValueType(str, length);</div><div class="line"><a name="l02444"></a><span class="lineno"> 2444</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l02445"></a><span class="lineno"> 2445</span>&#160; }</div><div class="line"><a name="l02446"></a><span class="lineno"> 2446</span>&#160;</div><div class="line"><a name="l02447"></a><span class="lineno"> 2447</span>&#160; <span class="keywordtype">bool</span> String(<span class="keyword">const</span> Ch* str, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> length, <span class="keywordtype">bool</span> copy) { </div><div class="line"><a name="l02448"></a><span class="lineno"> 2448</span>&#160; <span class="keywordflow">if</span> (copy) </div><div class="line"><a name="l02449"></a><span class="lineno"> 2449</span>&#160; <span class="keyword">new</span> (stack_.template Push&lt;ValueType&gt;()) ValueType(str, length, GetAllocator());</div><div class="line"><a name="l02450"></a><span class="lineno"> 2450</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l02451"></a><span class="lineno"> 2451</span>&#160; <span class="keyword">new</span> (stack_.template Push&lt;ValueType&gt;()) ValueType(str, length);</div><div class="line"><a name="l02452"></a><span class="lineno"> 2452</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l02453"></a><span class="lineno"> 2453</span>&#160; }</div><div class="line"><a name="l02454"></a><span class="lineno"> 2454</span>&#160;</div><div class="line"><a name="l02455"></a><span class="lineno"> 2455</span>&#160; <span class="keywordtype">bool</span> StartObject() { <span class="keyword">new</span> (stack_.template Push&lt;ValueType&gt;()) ValueType(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4acf030b422a32c3647c7c5973bd4dd0a9">kObjectType</a>); <span class="keywordflow">return</span> <span class="keyword">true</span>; }</div><div class="line"><a name="l02456"></a><span class="lineno"> 2456</span>&#160; </div><div class="line"><a name="l02457"></a><span class="lineno"> 2457</span>&#160; <span class="keywordtype">bool</span> Key(<span class="keyword">const</span> Ch* str, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> length, <span class="keywordtype">bool</span> copy) { <span class="keywordflow">return</span> String(str, length, copy); }</div><div class="line"><a name="l02458"></a><span class="lineno"> 2458</span>&#160;</div><div class="line"><a name="l02459"></a><span class="lineno"> 2459</span>&#160; <span class="keywordtype">bool</span> EndObject(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> memberCount) {</div><div class="line"><a name="l02460"></a><span class="lineno"> 2460</span>&#160; <span class="keyword">typename</span> <a class="code" href="structrapidjson_1_1_generic_member.html">ValueType::Member</a>* members = stack_.template Pop&lt;typename ValueType::Member&gt;(memberCount);</div><div class="line"><a name="l02461"></a><span class="lineno"> 2461</span>&#160; stack_.template Top&lt;ValueType&gt;()-&gt;SetObjectRaw(members, memberCount, GetAllocator());</div><div class="line"><a name="l02462"></a><span class="lineno"> 2462</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l02463"></a><span class="lineno"> 2463</span>&#160; }</div><div class="line"><a name="l02464"></a><span class="lineno"> 2464</span>&#160;</div><div class="line"><a name="l02465"></a><span class="lineno"> 2465</span>&#160; <span class="keywordtype">bool</span> StartArray() { <span class="keyword">new</span> (stack_.template Push&lt;ValueType&gt;()) ValueType(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a058c622e1e7d59419ae58b895cbce468">kArrayType</a>); <span class="keywordflow">return</span> <span class="keyword">true</span>; }</div><div class="line"><a name="l02466"></a><span class="lineno"> 2466</span>&#160; </div><div class="line"><a name="l02467"></a><span class="lineno"> 2467</span>&#160; <span class="keywordtype">bool</span> EndArray(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> elementCount) {</div><div class="line"><a name="l02468"></a><span class="lineno"> 2468</span>&#160; ValueType* elements = stack_.template Pop&lt;ValueType&gt;(elementCount);</div><div class="line"><a name="l02469"></a><span class="lineno"> 2469</span>&#160; stack_.template Top&lt;ValueType&gt;()-&gt;SetArrayRaw(elements, elementCount, GetAllocator());</div><div class="line"><a name="l02470"></a><span class="lineno"> 2470</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l02471"></a><span class="lineno"> 2471</span>&#160; }</div><div class="line"><a name="l02472"></a><span class="lineno"> 2472</span>&#160;</div><div class="line"><a name="l02473"></a><span class="lineno"> 2473</span>&#160;<span class="keyword">private</span>:<span class="comment"></span></div><div class="line"><a name="l02474"></a><span class="lineno"> 2474</span>&#160;<span class="comment"> //! Prohibit copying</span></div><div class="line"><a name="l02475"></a><span class="lineno"> 2475</span>&#160;<span class="comment"></span> <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>&amp;);<span class="comment"></span></div><div class="line"><a name="l02476"></a><span class="lineno"> 2476</span>&#160;<span class="comment"> //! Prohibit assignment</span></div><div class="line"><a name="l02477"></a><span class="lineno"> 2477</span>&#160;<span class="comment"></span> <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>&amp; operator=(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>&amp;);</div><div class="line"><a name="l02478"></a><span class="lineno"> 2478</span>&#160;</div><div class="line"><a name="l02479"></a><span class="lineno"> 2479</span>&#160; <span class="keywordtype">void</span> ClearStack() {</div><div class="line"><a name="l02480"></a><span class="lineno"> 2480</span>&#160; <span class="keywordflow">if</span> (Allocator::kNeedFree)</div><div class="line"><a name="l02481"></a><span class="lineno"> 2481</span>&#160; <span class="keywordflow">while</span> (stack_.GetSize() &gt; 0) <span class="comment">// Here assumes all elements in stack array are GenericValue (Member is actually 2 GenericValue objects)</span></div><div class="line"><a name="l02482"></a><span class="lineno"> 2482</span>&#160; (stack_.template Pop&lt;ValueType&gt;(1))-&gt;~ValueType();</div><div class="line"><a name="l02483"></a><span class="lineno"> 2483</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l02484"></a><span class="lineno"> 2484</span>&#160; stack_.Clear();</div><div class="line"><a name="l02485"></a><span class="lineno"> 2485</span>&#160; stack_.ShrinkToFit();</div><div class="line"><a name="l02486"></a><span class="lineno"> 2486</span>&#160; }</div><div class="line"><a name="l02487"></a><span class="lineno"> 2487</span>&#160;</div><div class="line"><a name="l02488"></a><span class="lineno"> 2488</span>&#160; <span class="keywordtype">void</span> Destroy() {</div><div class="line"><a name="l02489"></a><span class="lineno"> 2489</span>&#160; <a class="code" href="rapidjson_8h.html#a52c941c3fdd646527cdcd42aa846a28a">RAPIDJSON_DELETE</a>(ownAllocator_);</div><div class="line"><a name="l02490"></a><span class="lineno"> 2490</span>&#160; }</div><div class="line"><a name="l02491"></a><span class="lineno"> 2491</span>&#160;</div><div class="line"><a name="l02492"></a><span class="lineno"> 2492</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">size_t</span> kDefaultStackCapacity = 1024;</div><div class="line"><a name="l02493"></a><span class="lineno"> 2493</span>&#160; Allocator* allocator_;</div><div class="line"><a name="l02494"></a><span class="lineno"> 2494</span>&#160; Allocator* ownAllocator_;</div><div class="line"><a name="l02495"></a><span class="lineno"> 2495</span>&#160; internal::Stack&lt;StackAllocator&gt; stack_;</div><div class="line"><a name="l02496"></a><span class="lineno"> 2496</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#structrapidjson_1_1_parse_result">ParseResult</a> parseResult_;</div><div class="line"><a name="l02497"></a><span class="lineno"> 2497</span>&#160;};</div><div class="line"><a name="l02498"></a><span class="lineno"> 2498</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02499"></a><span class="lineno"> 2499</span>&#160;<span class="comment">//! GenericDocument with UTF8 encoding</span></div><div class="line"><a name="l02500"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#ace11b5b575baf1cccd5ba5f8586dcdc8"> 2500</a></span>&#160;<span class="comment"></span><span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument&lt;UTF8&lt;&gt;</a> &gt; <a class="code" href="namespacerapidjson.html#ace11b5b575baf1cccd5ba5f8586dcdc8">Document</a>;</div><div class="line"><a name="l02501"></a><span class="lineno"> 2501</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02502"></a><span class="lineno"> 2502</span>&#160;<span class="comment">//! Helper class for accessing Value of array type.</span></div><div class="line"><a name="l02503"></a><span class="lineno"> 2503</span>&#160;<span class="comment"></span><span class="comment">/*!</span></div><div class="line"><a name="l02504"></a><span class="lineno"> 2504</span>&#160;<span class="comment"> Instance of this helper class is obtained by \c GenericValue::GetArray().</span></div><div class="line"><a name="l02505"></a><span class="lineno"> 2505</span>&#160;<span class="comment"> In addition to all APIs for array type, it provides range-based for loop if \c RAPIDJSON_HAS_CXX11_RANGE_FOR=1.</span></div><div class="line"><a name="l02506"></a><span class="lineno"> 2506</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l02507"></a><span class="lineno"> 2507</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">bool</span> Const, <span class="keyword">typename</span> ValueT&gt;</div><div class="line"><a name="l02508"></a><span class="lineno"> 2508</span>&#160;<span class="keyword">class </span><a class="code" href="classrapidjson_1_1_generic_array.html">GenericArray</a> {</div><div class="line"><a name="l02509"></a><span class="lineno"> 2509</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l02510"></a><span class="lineno"> 2510</span>&#160; <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_array.html">GenericArray&lt;true, ValueT&gt;</a> ConstArray;</div><div class="line"><a name="l02511"></a><span class="lineno"> 2511</span>&#160; <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_array.html">GenericArray&lt;false, ValueT&gt;</a> Array;</div><div class="line"><a name="l02512"></a><span class="lineno"> 2512</span>&#160; <span class="keyword">typedef</span> ValueT PlainType;</div><div class="line"><a name="l02513"></a><span class="lineno"> 2513</span>&#160; <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">internal::MaybeAddConst&lt;Const,PlainType&gt;::Type</a> ValueType;</div><div class="line"><a name="l02514"></a><span class="lineno"> 2514</span>&#160; <span class="keyword">typedef</span> ValueType* ValueIterator; <span class="comment">// This may be const or non-const iterator</span></div><div class="line"><a name="l02515"></a><span class="lineno"> 2515</span>&#160; <span class="keyword">typedef</span> <span class="keyword">const</span> ValueT* ConstValueIterator;</div><div class="line"><a name="l02516"></a><span class="lineno"> 2516</span>&#160; <span class="keyword">typedef</span> <span class="keyword">typename</span> ValueType::AllocatorType AllocatorType;</div><div class="line"><a name="l02517"></a><span class="lineno"> 2517</span>&#160; <span class="keyword">typedef</span> <span class="keyword">typename</span> ValueType::StringRefType StringRefType;</div><div class="line"><a name="l02518"></a><span class="lineno"> 2518</span>&#160;</div><div class="line"><a name="l02519"></a><span class="lineno"> 2519</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span>, <span class="keyword">typename</span>&gt;</div><div class="line"><a name="l02520"></a><span class="lineno"> 2520</span>&#160; <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>;</div><div class="line"><a name="l02521"></a><span class="lineno"> 2521</span>&#160;</div><div class="line"><a name="l02522"></a><span class="lineno"> 2522</span>&#160; <a class="code" href="classrapidjson_1_1_generic_array.html">GenericArray</a>(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_array.html">GenericArray</a>&amp; rhs) : value_(rhs.value_) {}</div><div class="line"><a name="l02523"></a><span class="lineno"> 2523</span>&#160; <a class="code" href="classrapidjson_1_1_generic_array.html">GenericArray</a>&amp; operator=(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_array.html">GenericArray</a>&amp; rhs) { value_ = rhs.value_; <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l02524"></a><span class="lineno"> 2524</span>&#160; ~<a class="code" href="classrapidjson_1_1_generic_array.html">GenericArray</a>() {}</div><div class="line"><a name="l02525"></a><span class="lineno"> 2525</span>&#160;</div><div class="line"><a name="l02526"></a><span class="lineno"> 2526</span>&#160; <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> Size()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.Size(); }</div><div class="line"><a name="l02527"></a><span class="lineno"> 2527</span>&#160; <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> Capacity()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.Capacity(); }</div><div class="line"><a name="l02528"></a><span class="lineno"> 2528</span>&#160; <span class="keywordtype">bool</span> Empty()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.Empty(); }</div><div class="line"><a name="l02529"></a><span class="lineno"> 2529</span>&#160; <span class="keywordtype">void</span> Clear()<span class="keyword"> const </span>{ value_.Clear(); }</div><div class="line"><a name="l02530"></a><span class="lineno"> 2530</span>&#160; ValueType&amp; operator[](<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> index)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_[index]; }</div><div class="line"><a name="l02531"></a><span class="lineno"> 2531</span>&#160; ValueIterator Begin()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.Begin(); }</div><div class="line"><a name="l02532"></a><span class="lineno"> 2532</span>&#160; ValueIterator End()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.End(); }</div><div class="line"><a name="l02533"></a><span class="lineno"> 2533</span>&#160; <a class="code" href="classrapidjson_1_1_generic_array.html">GenericArray</a> Reserve(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> newCapacity, AllocatorType &amp;allocator)<span class="keyword"> const </span>{ value_.Reserve(newCapacity, allocator); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l02534"></a><span class="lineno"> 2534</span>&#160; <a class="code" href="classrapidjson_1_1_generic_array.html">GenericArray</a> PushBack(ValueType&amp; value, AllocatorType&amp; allocator)<span class="keyword"> const </span>{ value_.PushBack(value, allocator); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l02535"></a><span class="lineno"> 2535</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l02536"></a><span class="lineno"> 2536</span>&#160; <a class="code" href="classrapidjson_1_1_generic_array.html">GenericArray</a> PushBack(ValueType&amp;&amp; value, AllocatorType&amp; allocator)<span class="keyword"> const </span>{ value_.PushBack(value, allocator); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l02537"></a><span class="lineno"> 2537</span>&#160;<span class="preprocessor">#endif // RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l02538"></a><span class="lineno"> 2538</span>&#160; <a class="code" href="classrapidjson_1_1_generic_array.html">GenericArray</a> PushBack(StringRefType value, AllocatorType&amp; allocator)<span class="keyword"> const </span>{ value_.PushBack(value, allocator); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l02539"></a><span class="lineno"> 2539</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt; RAPIDJSON_DISABLEIF_RETURN((internal::OrExpr&lt;internal::IsPointer&lt;T&gt;, internal::IsGenericValue&lt;T&gt; &gt;), (<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_array.html">GenericArray</a>&amp;)) PushBack(T value, AllocatorType&amp; allocator)<span class="keyword"> const </span>{ value_.PushBack(value, allocator); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l02540"></a><span class="lineno"> 2540</span>&#160; <a class="code" href="classrapidjson_1_1_generic_array.html">GenericArray</a> PopBack()<span class="keyword"> const </span>{ value_.PopBack(); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l02541"></a><span class="lineno"> 2541</span>&#160; ValueIterator Erase(ConstValueIterator pos)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.Erase(pos); }</div><div class="line"><a name="l02542"></a><span class="lineno"> 2542</span>&#160; ValueIterator Erase(ConstValueIterator first, ConstValueIterator last)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.Erase(first, last); }</div><div class="line"><a name="l02543"></a><span class="lineno"> 2543</span>&#160;</div><div class="line"><a name="l02544"></a><span class="lineno"> 2544</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_CXX11_RANGE_FOR</span></div><div class="line"><a name="l02545"></a><span class="lineno"> 2545</span>&#160; ValueIterator begin()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.Begin(); }</div><div class="line"><a name="l02546"></a><span class="lineno"> 2546</span>&#160; ValueIterator end()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.End(); }</div><div class="line"><a name="l02547"></a><span class="lineno"> 2547</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02548"></a><span class="lineno"> 2548</span>&#160;</div><div class="line"><a name="l02549"></a><span class="lineno"> 2549</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l02550"></a><span class="lineno"> 2550</span>&#160; <a class="code" href="classrapidjson_1_1_generic_array.html">GenericArray</a>();</div><div class="line"><a name="l02551"></a><span class="lineno"> 2551</span>&#160; <a class="code" href="classrapidjson_1_1_generic_array.html">GenericArray</a>(ValueType&amp; value) : value_(value) {}</div><div class="line"><a name="l02552"></a><span class="lineno"> 2552</span>&#160; ValueType&amp; value_;</div><div class="line"><a name="l02553"></a><span class="lineno"> 2553</span>&#160;};</div><div class="line"><a name="l02554"></a><span class="lineno"> 2554</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02555"></a><span class="lineno"> 2555</span>&#160;<span class="comment">//! Helper class for accessing Value of object type.</span></div><div class="line"><a name="l02556"></a><span class="lineno"> 2556</span>&#160;<span class="comment"></span><span class="comment">/*!</span></div><div class="line"><a name="l02557"></a><span class="lineno"> 2557</span>&#160;<span class="comment"> Instance of this helper class is obtained by \c GenericValue::GetObject().</span></div><div class="line"><a name="l02558"></a><span class="lineno"> 2558</span>&#160;<span class="comment"> In addition to all APIs for array type, it provides range-based for loop if \c RAPIDJSON_HAS_CXX11_RANGE_FOR=1.</span></div><div class="line"><a name="l02559"></a><span class="lineno"> 2559</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l02560"></a><span class="lineno"> 2560</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">bool</span> Const, <span class="keyword">typename</span> ValueT&gt;</div><div class="line"><a name="l02561"></a><span class="lineno"> 2561</span>&#160;<span class="keyword">class </span><a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject</a> {</div><div class="line"><a name="l02562"></a><span class="lineno"> 2562</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l02563"></a><span class="lineno"> 2563</span>&#160; <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject&lt;true, ValueT&gt;</a> ConstObject;</div><div class="line"><a name="l02564"></a><span class="lineno"> 2564</span>&#160; <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject&lt;false, ValueT&gt;</a> Object;</div><div class="line"><a name="l02565"></a><span class="lineno"> 2565</span>&#160; <span class="keyword">typedef</span> ValueT PlainType;</div><div class="line"><a name="l02566"></a><span class="lineno"> 2566</span>&#160; <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">internal::MaybeAddConst&lt;Const,PlainType&gt;::Type</a> ValueType;</div><div class="line"><a name="l02567"></a><span class="lineno"> 2567</span>&#160; <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">GenericMemberIterator&lt;Const, typename ValueT::EncodingType, typename ValueT::AllocatorType&gt;</a> MemberIterator; <span class="comment">// This may be const or non-const iterator</span></div><div class="line"><a name="l02568"></a><span class="lineno"> 2568</span>&#160; <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">GenericMemberIterator&lt;true, typename ValueT::EncodingType, typename ValueT::AllocatorType&gt;</a> ConstMemberIterator;</div><div class="line"><a name="l02569"></a><span class="lineno"> 2569</span>&#160; <span class="keyword">typedef</span> <span class="keyword">typename</span> ValueType::AllocatorType AllocatorType;</div><div class="line"><a name="l02570"></a><span class="lineno"> 2570</span>&#160; <span class="keyword">typedef</span> <span class="keyword">typename</span> ValueType::StringRefType StringRefType;</div><div class="line"><a name="l02571"></a><span class="lineno"> 2571</span>&#160; <span class="keyword">typedef</span> <span class="keyword">typename</span> ValueType::EncodingType EncodingType;</div><div class="line"><a name="l02572"></a><span class="lineno"> 2572</span>&#160; <span class="keyword">typedef</span> <span class="keyword">typename</span> ValueType::Ch Ch;</div><div class="line"><a name="l02573"></a><span class="lineno"> 2573</span>&#160;</div><div class="line"><a name="l02574"></a><span class="lineno"> 2574</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span>, <span class="keyword">typename</span>&gt;</div><div class="line"><a name="l02575"></a><span class="lineno"> 2575</span>&#160; <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>;</div><div class="line"><a name="l02576"></a><span class="lineno"> 2576</span>&#160;</div><div class="line"><a name="l02577"></a><span class="lineno"> 2577</span>&#160; <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject</a>(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject</a>&amp; rhs) : value_(rhs.value_) {}</div><div class="line"><a name="l02578"></a><span class="lineno"> 2578</span>&#160; <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject</a>&amp; operator=(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject</a>&amp; rhs) { value_ = rhs.value_; <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l02579"></a><span class="lineno"> 2579</span>&#160; ~<a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject</a>() {}</div><div class="line"><a name="l02580"></a><span class="lineno"> 2580</span>&#160;</div><div class="line"><a name="l02581"></a><span class="lineno"> 2581</span>&#160; <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> MemberCount()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.MemberCount(); }</div><div class="line"><a name="l02582"></a><span class="lineno"> 2582</span>&#160; <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> MemberCapacity()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.MemberCapacity(); }</div><div class="line"><a name="l02583"></a><span class="lineno"> 2583</span>&#160; <span class="keywordtype">bool</span> ObjectEmpty()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.ObjectEmpty(); }</div><div class="line"><a name="l02584"></a><span class="lineno"> 2584</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt; ValueType&amp; operator[](T* name)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_[name]; }</div><div class="line"><a name="l02585"></a><span class="lineno"> 2585</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> SourceAllocator&gt; ValueType&amp; operator[](<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue&lt;EncodingType, SourceAllocator&gt;</a>&amp; name)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_[name]; }</div><div class="line"><a name="l02586"></a><span class="lineno"> 2586</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l02587"></a><span class="lineno"> 2587</span>&#160; ValueType&amp; operator[](<span class="keyword">const</span> std::basic_string&lt;Ch&gt;&amp; name)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_[name]; }</div><div class="line"><a name="l02588"></a><span class="lineno"> 2588</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02589"></a><span class="lineno"> 2589</span>&#160; MemberIterator MemberBegin()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.MemberBegin(); }</div><div class="line"><a name="l02590"></a><span class="lineno"> 2590</span>&#160; MemberIterator MemberEnd()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.MemberEnd(); }</div><div class="line"><a name="l02591"></a><span class="lineno"> 2591</span>&#160; <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject</a> MemberReserve(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> newCapacity, AllocatorType &amp;allocator)<span class="keyword"> const </span>{ value_.MemberReserve(newCapacity, allocator); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l02592"></a><span class="lineno"> 2592</span>&#160; <span class="keywordtype">bool</span> HasMember(<span class="keyword">const</span> Ch* name)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.HasMember(name); }</div><div class="line"><a name="l02593"></a><span class="lineno"> 2593</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l02594"></a><span class="lineno"> 2594</span>&#160; <span class="keywordtype">bool</span> HasMember(<span class="keyword">const</span> std::basic_string&lt;Ch&gt;&amp; name)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.HasMember(name); }</div><div class="line"><a name="l02595"></a><span class="lineno"> 2595</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02596"></a><span class="lineno"> 2596</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> SourceAllocator&gt; <span class="keywordtype">bool</span> HasMember(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue&lt;EncodingType, SourceAllocator&gt;</a>&amp; name)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.HasMember(name); }</div><div class="line"><a name="l02597"></a><span class="lineno"> 2597</span>&#160; MemberIterator FindMember(<span class="keyword">const</span> Ch* name)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.FindMember(name); }</div><div class="line"><a name="l02598"></a><span class="lineno"> 2598</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> SourceAllocator&gt; MemberIterator FindMember(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue&lt;EncodingType, SourceAllocator&gt;</a>&amp; name)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.FindMember(name); }</div><div class="line"><a name="l02599"></a><span class="lineno"> 2599</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l02600"></a><span class="lineno"> 2600</span>&#160; MemberIterator FindMember(<span class="keyword">const</span> std::basic_string&lt;Ch&gt;&amp; name)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.FindMember(name); }</div><div class="line"><a name="l02601"></a><span class="lineno"> 2601</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02602"></a><span class="lineno"> 2602</span>&#160; <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject</a> AddMember(ValueType&amp; name, ValueType&amp; value, AllocatorType&amp; allocator)<span class="keyword"> const </span>{ value_.AddMember(name, value, allocator); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l02603"></a><span class="lineno"> 2603</span>&#160; <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject</a> AddMember(ValueType&amp; name, StringRefType value, AllocatorType&amp; allocator)<span class="keyword"> const </span>{ value_.AddMember(name, value, allocator); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l02604"></a><span class="lineno"> 2604</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l02605"></a><span class="lineno"> 2605</span>&#160; <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject</a> AddMember(ValueType&amp; name, std::basic_string&lt;Ch&gt;&amp; value, AllocatorType&amp; allocator)<span class="keyword"> const </span>{ value_.AddMember(name, value, allocator); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l02606"></a><span class="lineno"> 2606</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02607"></a><span class="lineno"> 2607</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt; RAPIDJSON_DISABLEIF_RETURN((internal::OrExpr&lt;internal::IsPointer&lt;T&gt;, internal::IsGenericValue&lt;T&gt; &gt;), (ValueType&amp;)) AddMember(ValueType&amp; name, T value, AllocatorType&amp; allocator)<span class="keyword"> const </span>{ value_.AddMember(name, value, allocator); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l02608"></a><span class="lineno"> 2608</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l02609"></a><span class="lineno"> 2609</span>&#160; <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject</a> AddMember(ValueType&amp;&amp; name, ValueType&amp;&amp; value, AllocatorType&amp; allocator)<span class="keyword"> const </span>{ value_.AddMember(name, value, allocator); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l02610"></a><span class="lineno"> 2610</span>&#160; <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject</a> AddMember(ValueType&amp;&amp; name, ValueType&amp; value, AllocatorType&amp; allocator)<span class="keyword"> const </span>{ value_.AddMember(name, value, allocator); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l02611"></a><span class="lineno"> 2611</span>&#160; <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject</a> AddMember(ValueType&amp; name, ValueType&amp;&amp; value, AllocatorType&amp; allocator)<span class="keyword"> const </span>{ value_.AddMember(name, value, allocator); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l02612"></a><span class="lineno"> 2612</span>&#160; <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject</a> AddMember(StringRefType name, ValueType&amp;&amp; value, AllocatorType&amp; allocator)<span class="keyword"> const </span>{ value_.AddMember(name, value, allocator); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l02613"></a><span class="lineno"> 2613</span>&#160;<span class="preprocessor">#endif // RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l02614"></a><span class="lineno"> 2614</span>&#160; <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject</a> AddMember(StringRefType name, ValueType&amp; value, AllocatorType&amp; allocator)<span class="keyword"> const </span>{ value_.AddMember(name, value, allocator); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l02615"></a><span class="lineno"> 2615</span>&#160; <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject</a> AddMember(StringRefType name, StringRefType value, AllocatorType&amp; allocator)<span class="keyword"> const </span>{ value_.AddMember(name, value, allocator); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l02616"></a><span class="lineno"> 2616</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt; RAPIDJSON_DISABLEIF_RETURN((internal::OrExpr&lt;internal::IsPointer&lt;T&gt;, internal::IsGenericValue&lt;T&gt; &gt;), (<a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject</a>)) AddMember(StringRefType name, T value, AllocatorType&amp; allocator)<span class="keyword"> const </span>{ value_.AddMember(name, value, allocator); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l02617"></a><span class="lineno"> 2617</span>&#160; <span class="keywordtype">void</span> RemoveAllMembers() { value_.RemoveAllMembers(); }</div><div class="line"><a name="l02618"></a><span class="lineno"> 2618</span>&#160; <span class="keywordtype">bool</span> RemoveMember(<span class="keyword">const</span> Ch* name)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.RemoveMember(name); }</div><div class="line"><a name="l02619"></a><span class="lineno"> 2619</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l02620"></a><span class="lineno"> 2620</span>&#160; <span class="keywordtype">bool</span> RemoveMember(<span class="keyword">const</span> std::basic_string&lt;Ch&gt;&amp; name)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.RemoveMember(name); }</div><div class="line"><a name="l02621"></a><span class="lineno"> 2621</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02622"></a><span class="lineno"> 2622</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> SourceAllocator&gt; <span class="keywordtype">bool</span> RemoveMember(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue&lt;EncodingType, SourceAllocator&gt;</a>&amp; name)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.RemoveMember(name); }</div><div class="line"><a name="l02623"></a><span class="lineno"> 2623</span>&#160; MemberIterator RemoveMember(MemberIterator m)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.RemoveMember(m); }</div><div class="line"><a name="l02624"></a><span class="lineno"> 2624</span>&#160; MemberIterator EraseMember(ConstMemberIterator pos)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.EraseMember(pos); }</div><div class="line"><a name="l02625"></a><span class="lineno"> 2625</span>&#160; MemberIterator EraseMember(ConstMemberIterator first, ConstMemberIterator last)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.EraseMember(first, last); }</div><div class="line"><a name="l02626"></a><span class="lineno"> 2626</span>&#160; <span class="keywordtype">bool</span> EraseMember(<span class="keyword">const</span> Ch* name)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.EraseMember(name); }</div><div class="line"><a name="l02627"></a><span class="lineno"> 2627</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l02628"></a><span class="lineno"> 2628</span>&#160; <span class="keywordtype">bool</span> EraseMember(<span class="keyword">const</span> std::basic_string&lt;Ch&gt;&amp; name)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> EraseMember(ValueType(<a class="code" href="namespacerapidjson.html#af94951529a5d51e8c4e6e770bb707c1f">StringRef</a>(name))); }</div><div class="line"><a name="l02629"></a><span class="lineno"> 2629</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02630"></a><span class="lineno"> 2630</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> SourceAllocator&gt; <span class="keywordtype">bool</span> EraseMember(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue&lt;EncodingType, SourceAllocator&gt;</a>&amp; name)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.EraseMember(name); }</div><div class="line"><a name="l02631"></a><span class="lineno"> 2631</span>&#160;</div><div class="line"><a name="l02632"></a><span class="lineno"> 2632</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_CXX11_RANGE_FOR</span></div><div class="line"><a name="l02633"></a><span class="lineno"> 2633</span>&#160; MemberIterator begin()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.MemberBegin(); }</div><div class="line"><a name="l02634"></a><span class="lineno"> 2634</span>&#160; MemberIterator end()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.MemberEnd(); }</div><div class="line"><a name="l02635"></a><span class="lineno"> 2635</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02636"></a><span class="lineno"> 2636</span>&#160;</div><div class="line"><a name="l02637"></a><span class="lineno"> 2637</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l02638"></a><span class="lineno"> 2638</span>&#160; <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject</a>();</div><div class="line"><a name="l02639"></a><span class="lineno"> 2639</span>&#160; <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject</a>(ValueType&amp; value) : value_(value) {}</div><div class="line"><a name="l02640"></a><span class="lineno"> 2640</span>&#160; ValueType&amp; value_;</div><div class="line"><a name="l02641"></a><span class="lineno"> 2641</span>&#160;};</div><div class="line"><a name="l02642"></a><span class="lineno"> 2642</span>&#160;</div><div class="line"><a name="l02643"></a><span class="lineno"> 2643</span>&#160;RAPIDJSON_NAMESPACE_END</div><div class="line"><a name="l02644"></a><span class="lineno"> 2644</span>&#160;RAPIDJSON_DIAG_POP</div><div class="line"><a name="l02645"></a><span class="lineno"> 2645</span>&#160;</div><div class="line"><a name="l02646"></a><span class="lineno"> 2646</span>&#160;<span class="preprocessor">#endif // RAPIDJSON_DOCUMENT_H_</span></div><div class="ttc" id="classrapidjson_1_1_generic_document_html_a41bbec044c421e870a9d355075d741bc"><div class="ttname"><a href="classrapidjson_1_1_generic_document.html#a41bbec044c421e870a9d355075d741bc">rapidjson::GenericDocument::ValueType</a></div><div class="ttdeci">GenericValue&lt; Encoding, Allocator &gt; ValueType</div><div class="ttdoc">Value type of the document. </div><div class="ttdef"><b>Definition:</b> document.h:2121</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_a4a8060a42b7953a2981ad892180ca5a6"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a4a8060a42b7953a2981ad892180ca5a6">rapidjson::GenericValue::GenericValue</a></div><div class="ttdeci">GenericValue(unsigned u) RAPIDJSON_NOEXCEPT</div><div class="ttdoc">Constructor for unsigned value. </div><div class="ttdef"><b>Definition:</b> document.h:712</div></div>
+<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4a80d9f25b083abce45edbfdd3ba006c8e"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a80d9f25b083abce45edbfdd3ba006c8e">rapidjson::kTrueType</a></div><div class="ttdoc">true </div><div class="ttdef"><b>Definition:</b> rapidjson.h:645</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_a916f443e02f9379d8fbde49a4d440f61"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a916f443e02f9379d8fbde49a4d440f61">rapidjson::GenericValue::Erase</a></div><div class="ttdeci">ValueIterator Erase(ConstValueIterator first, ConstValueIterator last)</div><div class="ttdoc">Remove elements in the range [first, last) of the array. </div><div class="ttdef"><b>Definition:</b> document.h:1708</div></div>
+<div class="ttc" id="structrapidjson_1_1_generic_value_1_1_number_1_1_i_html"><div class="ttname"><a href="structrapidjson_1_1_generic_value_1_1_number_1_1_i.html">rapidjson::GenericValue::Number::I</a></div><div class="ttdef"><b>Definition:</b> document.h:1985</div></div>
<div class="ttc" id="structrapidjson_1_1_generic_string_stream_html"><div class="ttname"><a href="structrapidjson_1_1_generic_string_stream.html">rapidjson::GenericStringStream</a></div><div class="ttdoc">Read-only string stream. </div><div class="ttdef"><b>Definition:</b> fwd.h:47</div></div>
<div class="ttc" id="classrapidjson_1_1_handler_html"><div class="ttname"><a href="classrapidjson_1_1_handler.html">rapidjson::Handler</a></div><div class="ttdoc">Concept for receiving events from GenericReader upon parsing. The functions return true if no error o...</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_a07b19e65fb756cae13e5bdc515cfbd4b"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a07b19e65fb756cae13e5bdc515cfbd4b">rapidjson::GenericValue::Move</a></div><div class="ttdeci">GenericValue &amp; Move() RAPIDJSON_NOEXCEPT</div><div class="ttdoc">Prepare Value for move semantics </div><div class="ttdef"><b>Definition:</b> document.h:921</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_ab4e5285102bb686f39bca2855a17a181"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#ab4e5285102bb686f39bca2855a17a181">rapidjson::GenericValue::operator==</a></div><div class="ttdeci">bool operator==(const GenericValue&lt; Encoding, SourceAllocator &gt; &amp;rhs) const</div><div class="ttdoc">Equal-to operator </div><div class="ttdef"><b>Definition:</b> document.h:932</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_a9ba3d9d8a106d5b7e92fb49db897c21b"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a9ba3d9d8a106d5b7e92fb49db897c21b">rapidjson::GenericValue::SetString</a></div><div class="ttdeci">GenericValue &amp; SetString(StringRefType s, Allocator &amp;allocator)</div><div class="ttdoc">Set this value as a string by copying from source string. </div><div class="ttdef"><b>Definition:</b> document.h:1818</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_a8d1040c479d89edb261db86400ebe603"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a8d1040c479d89edb261db86400ebe603">rapidjson::GenericValue::Begin</a></div><div class="ttdeci">ValueIterator Begin()</div><div class="ttdoc">Element iterator </div><div class="ttdef"><b>Definition:</b> document.h:1594</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_member_iterator_html_a61b9a9ba8a5917d90406532f104605cc"><div class="ttname"><a href="classrapidjson_1_1_generic_member_iterator.html#a61b9a9ba8a5917d90406532f104605cc">rapidjson::GenericMemberIterator::ConstIterator</a></div><div class="ttdeci">GenericMemberIterator&lt; true, Encoding, Allocator &gt; ConstIterator</div><div class="ttdoc">Constant iterator type </div><div class="ttdef"><b>Definition:</b> document.h:111</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_ad9553bb9ccbfd19547c473a95405a8b2"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#ad9553bb9ccbfd19547c473a95405a8b2">rapidjson::GenericValue::GenericValue</a></div><div class="ttdeci">GenericValue(const Ch *s, SizeType length, Allocator &amp;allocator)</div><div class="ttdoc">Constructor for copy-string (i.e. do make a copy of string) </div><div class="ttdef"><b>Definition:</b> document.h:760</div></div>
-<div class="ttc" id="namespacerapidjson_html_aa65fc9fb381b2cbc54f98673eadd6505"><div class="ttname"><a href="namespacerapidjson.html#aa65fc9fb381b2cbc54f98673eadd6505">rapidjson::Value</a></div><div class="ttdeci">GenericValue&lt; UTF8&lt;&gt; &gt; Value</div><div class="ttdoc">GenericValue with UTF8 encoding </div><div class="ttdef"><b>Definition:</b> document.h:2107</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_acd4ae9a8dba4498d1d7cce6667529bb8"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#acd4ae9a8dba4498d1d7cce6667529bb8">rapidjson::GenericValue::GenericValue</a></div><div class="ttdeci">GenericValue(int64_t i64) RAPIDJSON_NOEXCEPT</div><div class="ttdoc">Constructor for int64_t value. </div><div class="ttdef"><b>Definition:</b> document.h:721</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_af089d2bee0386ca7504ff4fab466c87f"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#af089d2bee0386ca7504ff4fab466c87f">rapidjson::GenericValue::operator==</a></div><div class="ttdeci">bool operator==(const std::basic_string&lt; Ch &gt; &amp;rhs) const</div><div class="ttdoc">Equal-to operator with string object </div><div class="ttdef"><b>Definition:</b> document.h:980</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_a433a64b466c80cadf7d1acaa6f065437"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a433a64b466c80cadf7d1acaa6f065437">rapidjson::GenericValue::~GenericValue</a></div><div class="ttdeci">~GenericValue()</div><div class="ttdoc">Destructor. </div><div class="ttdef"><b>Definition:</b> document.h:797</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_a07b19e65fb756cae13e5bdc515cfbd4b"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a07b19e65fb756cae13e5bdc515cfbd4b">rapidjson::GenericValue::Move</a></div><div class="ttdeci">GenericValue &amp; Move() RAPIDJSON_NOEXCEPT</div><div class="ttdoc">Prepare Value for move semantics </div><div class="ttdef"><b>Definition:</b> document.h:918</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_ab4e5285102bb686f39bca2855a17a181"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#ab4e5285102bb686f39bca2855a17a181">rapidjson::GenericValue::operator==</a></div><div class="ttdeci">bool operator==(const GenericValue&lt; Encoding, SourceAllocator &gt; &amp;rhs) const</div><div class="ttdoc">Equal-to operator </div><div class="ttdef"><b>Definition:</b> document.h:929</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_a9ba3d9d8a106d5b7e92fb49db897c21b"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a9ba3d9d8a106d5b7e92fb49db897c21b">rapidjson::GenericValue::SetString</a></div><div class="ttdeci">GenericValue &amp; SetString(StringRefType s, Allocator &amp;allocator)</div><div class="ttdoc">Set this value as a string by copying from source string. </div><div class="ttdef"><b>Definition:</b> document.h:1815</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_a8d1040c479d89edb261db86400ebe603"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a8d1040c479d89edb261db86400ebe603">rapidjson::GenericValue::Begin</a></div><div class="ttdeci">ValueIterator Begin()</div><div class="ttdoc">Element iterator </div><div class="ttdef"><b>Definition:</b> document.h:1591</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_member_iterator_html_a61b9a9ba8a5917d90406532f104605cc"><div class="ttname"><a href="classrapidjson_1_1_generic_member_iterator.html#a61b9a9ba8a5917d90406532f104605cc">rapidjson::GenericMemberIterator::ConstIterator</a></div><div class="ttdeci">GenericMemberIterator&lt; true, Encoding, Allocator &gt; ConstIterator</div><div class="ttdoc">Constant iterator type </div><div class="ttdef"><b>Definition:</b> document.h:108</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_ad9553bb9ccbfd19547c473a95405a8b2"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#ad9553bb9ccbfd19547c473a95405a8b2">rapidjson::GenericValue::GenericValue</a></div><div class="ttdeci">GenericValue(const Ch *s, SizeType length, Allocator &amp;allocator)</div><div class="ttdoc">Constructor for copy-string (i.e. do make a copy of string) </div><div class="ttdef"><b>Definition:</b> document.h:757</div></div>
+<div class="ttc" id="namespacerapidjson_html_aa65fc9fb381b2cbc54f98673eadd6505"><div class="ttname"><a href="namespacerapidjson.html#aa65fc9fb381b2cbc54f98673eadd6505">rapidjson::Value</a></div><div class="ttdeci">GenericValue&lt; UTF8&lt;&gt; &gt; Value</div><div class="ttdoc">GenericValue with UTF8 encoding </div><div class="ttdef"><b>Definition:</b> document.h:2104</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_acd4ae9a8dba4498d1d7cce6667529bb8"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#acd4ae9a8dba4498d1d7cce6667529bb8">rapidjson::GenericValue::GenericValue</a></div><div class="ttdeci">GenericValue(int64_t i64) RAPIDJSON_NOEXCEPT</div><div class="ttdoc">Constructor for int64_t value. </div><div class="ttdef"><b>Definition:</b> document.h:718</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_af089d2bee0386ca7504ff4fab466c87f"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#af089d2bee0386ca7504ff4fab466c87f">rapidjson::GenericValue::operator==</a></div><div class="ttdeci">bool operator==(const std::basic_string&lt; Ch &gt; &amp;rhs) const</div><div class="ttdoc">Equal-to operator with string object </div><div class="ttdef"><b>Definition:</b> document.h:977</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_a433a64b466c80cadf7d1acaa6f065437"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a433a64b466c80cadf7d1acaa6f065437">rapidjson::GenericValue::~GenericValue</a></div><div class="ttdeci">~GenericValue()</div><div class="ttdoc">Destructor. </div><div class="ttdef"><b>Definition:</b> document.h:794</div></div>
<div class="ttc" id="rapidjson_8h_html_aaee1245f375a71be1ac9b8a07ba5fb8f"><div class="ttname"><a href="rapidjson_8h.html#aaee1245f375a71be1ac9b8a07ba5fb8f">RAPIDJSON_UINT64_C2</a></div><div class="ttdeci">#define RAPIDJSON_UINT64_C2(high32, low32)</div><div class="ttdoc">Construct a 64-bit literal by a pair of 32-bit integer. </div><div class="ttdef"><b>Definition:</b> rapidjson.h:289</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_reader_html"><div class="ttname"><a href="classrapidjson_1_1_generic_reader.html">rapidjson::GenericReader</a></div><div class="ttdoc">SAX-style JSON parser. Use Reader for UTF8 encoding and default allocator. </div><div class="ttdef"><b>Definition:</b> fwd.h:88</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_document_html_acf96a3c7fd61486d049c701b1fe5d414"><div class="ttname"><a href="classrapidjson_1_1_generic_document.html#acf96a3c7fd61486d049c701b1fe5d414">rapidjson::GenericDocument::ParseStream</a></div><div class="ttdeci">GenericDocument &amp; ParseStream(InputStream &amp;is)</div><div class="ttdoc">Parse JSON text from an input stream (with kParseDefaultFlags) </div><div class="ttdef"><b>Definition:</b> document.h:2285</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_a893da1069660536fd3943a0149206a6e"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a893da1069660536fd3943a0149206a6e">rapidjson::GenericValue::GenericValue</a></div><div class="ttdeci">GenericValue(Object o) RAPIDJSON_NOEXCEPT</div><div class="ttdoc">Constructor for Object. </div><div class="ttdef"><b>Definition:</b> document.h:789</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_a65bfc3073fa80ee5eba8e985abe2f941"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a65bfc3073fa80ee5eba8e985abe2f941">rapidjson::GenericValue::GenericValue</a></div><div class="ttdeci">GenericValue(StringRefType s) RAPIDJSON_NOEXCEPT</div><div class="ttdoc">Constructor for constant string (i.e. do not make a copy of string) </div><div class="ttdef"><b>Definition:</b> document.h:757</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_a3e930bffb40a78e570e3deef461f0532"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a3e930bffb40a78e570e3deef461f0532">rapidjson::GenericValue::SetString</a></div><div class="ttdeci">GenericValue &amp; SetString(const std::basic_string&lt; Ch &gt; &amp;s, Allocator &amp;allocator)</div><div class="ttdoc">Set this value as a string by copying from source string. </div><div class="ttdef"><b>Definition:</b> document.h:1828</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_document_html_acf96a3c7fd61486d049c701b1fe5d414"><div class="ttname"><a href="classrapidjson_1_1_generic_document.html#acf96a3c7fd61486d049c701b1fe5d414">rapidjson::GenericDocument::ParseStream</a></div><div class="ttdeci">GenericDocument &amp; ParseStream(InputStream &amp;is)</div><div class="ttdoc">Parse JSON text from an input stream (with kParseDefaultFlags) </div><div class="ttdef"><b>Definition:</b> document.h:2282</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_a893da1069660536fd3943a0149206a6e"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a893da1069660536fd3943a0149206a6e">rapidjson::GenericValue::GenericValue</a></div><div class="ttdeci">GenericValue(Object o) RAPIDJSON_NOEXCEPT</div><div class="ttdoc">Constructor for Object. </div><div class="ttdef"><b>Definition:</b> document.h:786</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_a65bfc3073fa80ee5eba8e985abe2f941"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a65bfc3073fa80ee5eba8e985abe2f941">rapidjson::GenericValue::GenericValue</a></div><div class="ttdeci">GenericValue(StringRefType s) RAPIDJSON_NOEXCEPT</div><div class="ttdoc">Constructor for constant string (i.e. do not make a copy of string) </div><div class="ttdef"><b>Definition:</b> document.h:754</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_a3e930bffb40a78e570e3deef461f0532"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a3e930bffb40a78e570e3deef461f0532">rapidjson::GenericValue::SetString</a></div><div class="ttdeci">GenericValue &amp; SetString(const std::basic_string&lt; Ch &gt; &amp;s, Allocator &amp;allocator)</div><div class="ttdoc">Set this value as a string by copying from source string. </div><div class="ttdef"><b>Definition:</b> document.h:1825</div></div>
<div class="ttc" id="reader_8h_html"><div class="ttname"><a href="reader_8h.html">reader.h</a></div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_a9b3b30acbe60d7a5b105afa05c1ddfb0"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a9b3b30acbe60d7a5b105afa05c1ddfb0">rapidjson::GenericValue::HasMember</a></div><div class="ttdeci">bool HasMember(const std::basic_string&lt; Ch &gt; &amp;name) const</div><div class="ttdoc">Check whether a member exists in the object with string object. </div><div class="ttdef"><b>Definition:</b> document.h:1203</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_a7cb3cbaefe4fb99aaf9f155fb4ee039b"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a7cb3cbaefe4fb99aaf9f155fb4ee039b">rapidjson::GenericValue::SetObject</a></div><div class="ttdeci">GenericValue &amp; SetObject()</div><div class="ttdoc">Set this value as an empty object. </div><div class="ttdef"><b>Definition:</b> document.h:1093</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_a559eb9cea54364a35518b02f6d74f379"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a559eb9cea54364a35518b02f6d74f379">rapidjson::GenericValue::StringRefType</a></div><div class="ttdeci">GenericStringRef&lt; Ch &gt; StringRefType</div><div class="ttdoc">Reference to a constant string </div><div class="ttdef"><b>Definition:</b> document.h:582</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_member_iterator_html_a37091c3dd8470486ef5188f3c1108653"><div class="ttname"><a href="classrapidjson_1_1_generic_member_iterator.html#a37091c3dd8470486ef5188f3c1108653">rapidjson::GenericMemberIterator::Iterator</a></div><div class="ttdeci">GenericMemberIterator Iterator</div><div class="ttdoc">Iterator type itself </div><div class="ttdef"><b>Definition:</b> document.h:109</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_adca019775f68f012643781cd2c2515ac"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#adca019775f68f012643781cd2c2515ac">rapidjson::GenericValue::GenericValue</a></div><div class="ttdeci">GenericValue(const GenericValue&lt; Encoding, SourceAllocator &gt; &amp;rhs, Allocator &amp;allocator, bool copyConstStrings=false)</div><div class="ttdoc">Explicit copy constructor (with allocator) </div><div class="ttdef"><b>Definition:</b> document.h:649</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_ae8bcedd951f50b69786aaaa1828e9fac"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#ae8bcedd951f50b69786aaaa1828e9fac">rapidjson::GenericValue::operator=</a></div><div class="ttdeci">GenericValue &amp; operator=(GenericValue &amp;rhs) RAPIDJSON_NOEXCEPT</div><div class="ttdoc">Assignment with move semantics. </div><div class="ttdef"><b>Definition:</b> document.h:833</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_af03ef6020e188bbfceb018da5cd8becc"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#af03ef6020e188bbfceb018da5cd8becc">rapidjson::GenericValue::operator==</a></div><div class="ttdeci">bool operator==(const Ch *rhs) const</div><div class="ttdoc">Equal-to operator with const C-string pointer </div><div class="ttdef"><b>Definition:</b> document.h:974</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_a9b3b30acbe60d7a5b105afa05c1ddfb0"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a9b3b30acbe60d7a5b105afa05c1ddfb0">rapidjson::GenericValue::HasMember</a></div><div class="ttdeci">bool HasMember(const std::basic_string&lt; Ch &gt; &amp;name) const</div><div class="ttdoc">Check whether a member exists in the object with string object. </div><div class="ttdef"><b>Definition:</b> document.h:1200</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_a7cb3cbaefe4fb99aaf9f155fb4ee039b"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a7cb3cbaefe4fb99aaf9f155fb4ee039b">rapidjson::GenericValue::SetObject</a></div><div class="ttdeci">GenericValue &amp; SetObject()</div><div class="ttdoc">Set this value as an empty object. </div><div class="ttdef"><b>Definition:</b> document.h:1090</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_a559eb9cea54364a35518b02f6d74f379"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a559eb9cea54364a35518b02f6d74f379">rapidjson::GenericValue::StringRefType</a></div><div class="ttdeci">GenericStringRef&lt; Ch &gt; StringRefType</div><div class="ttdoc">Reference to a constant string </div><div class="ttdef"><b>Definition:</b> document.h:579</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_member_iterator_html_a37091c3dd8470486ef5188f3c1108653"><div class="ttname"><a href="classrapidjson_1_1_generic_member_iterator.html#a37091c3dd8470486ef5188f3c1108653">rapidjson::GenericMemberIterator::Iterator</a></div><div class="ttdeci">GenericMemberIterator Iterator</div><div class="ttdoc">Iterator type itself </div><div class="ttdef"><b>Definition:</b> document.h:106</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_adca019775f68f012643781cd2c2515ac"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#adca019775f68f012643781cd2c2515ac">rapidjson::GenericValue::GenericValue</a></div><div class="ttdeci">GenericValue(const GenericValue&lt; Encoding, SourceAllocator &gt; &amp;rhs, Allocator &amp;allocator, bool copyConstStrings=false)</div><div class="ttdoc">Explicit copy constructor (with allocator) </div><div class="ttdef"><b>Definition:</b> document.h:646</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_ae8bcedd951f50b69786aaaa1828e9fac"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#ae8bcedd951f50b69786aaaa1828e9fac">rapidjson::GenericValue::operator=</a></div><div class="ttdeci">GenericValue &amp; operator=(GenericValue &amp;rhs) RAPIDJSON_NOEXCEPT</div><div class="ttdoc">Assignment with move semantics. </div><div class="ttdef"><b>Definition:</b> document.h:830</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_af03ef6020e188bbfceb018da5cd8becc"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#af03ef6020e188bbfceb018da5cd8becc">rapidjson::GenericValue::operator==</a></div><div class="ttdeci">bool operator==(const Ch *rhs) const</div><div class="ttdoc">Equal-to operator with const C-string pointer </div><div class="ttdef"><b>Definition:</b> document.h:971</div></div>
<div class="ttc" id="namespacerapidjson_html_a44eb33eaa523e36d466b1ced64b85c84"><div class="ttname"><a href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">rapidjson::SizeType</a></div><div class="ttdeci">unsigned SizeType</div><div class="ttdoc">Size type (for string lengths, array sizes, etc.) </div><div class="ttdef"><b>Definition:</b> rapidjson.h:384</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_member_iterator_html_a1a91868fa388664bb301061e3e24badb"><div class="ttname"><a href="classrapidjson_1_1_generic_member_iterator.html#a1a91868fa388664bb301061e3e24badb">rapidjson::GenericMemberIterator::NonConstIterator</a></div><div class="ttdeci">GenericMemberIterator&lt; false, Encoding, Allocator &gt; NonConstIterator</div><div class="ttdoc">Non-constant iterator type </div><div class="ttdef"><b>Definition:</b> document.h:113</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_array_html"><div class="ttname"><a href="classrapidjson_1_1_generic_array.html">rapidjson::GenericArray</a></div><div class="ttdoc">Helper class for accessing Value of array type. </div><div class="ttdef"><b>Definition:</b> document.h:558</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_a799a8a2503989f486f3fc7a660266555"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a799a8a2503989f486f3fc7a660266555">rapidjson::GenericValue::Size</a></div><div class="ttdeci">SizeType Size() const</div><div class="ttdoc">Get the number of elements in array. </div><div class="ttdef"><b>Definition:</b> document.h:1560</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_document_html_a4c85243a28c9dcf2d1357da00fcaa773"><div class="ttname"><a href="classrapidjson_1_1_generic_document.html#a4c85243a28c9dcf2d1357da00fcaa773">rapidjson::GenericDocument::AllocatorType</a></div><div class="ttdeci">Allocator AllocatorType</div><div class="ttdoc">Allocator type from template parameter. </div><div class="ttdef"><b>Definition:</b> document.h:2125</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_a8d75bf0c6c0fa4f8d340a4236e98539b"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a8d75bf0c6c0fa4f8d340a4236e98539b">rapidjson::GenericValue::FindMember</a></div><div class="ttdeci">MemberIterator FindMember(const GenericValue&lt; Encoding, SourceAllocator &gt; &amp;name)</div><div class="ttdoc">Find member by name. </div><div class="ttdef"><b>Definition:</b> document.h:1251</div></div>
-<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4a9f2e7047832dce1029551b5de0f05607"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a9f2e7047832dce1029551b5de0f05607">rapidjson::kFalseType</a></div><div class="ttdoc">false </div><div class="ttdef"><b>Definition:</b> rapidjson.h:633</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_member_iterator_html_a1a91868fa388664bb301061e3e24badb"><div class="ttname"><a href="classrapidjson_1_1_generic_member_iterator.html#a1a91868fa388664bb301061e3e24badb">rapidjson::GenericMemberIterator::NonConstIterator</a></div><div class="ttdeci">GenericMemberIterator&lt; false, Encoding, Allocator &gt; NonConstIterator</div><div class="ttdoc">Non-constant iterator type </div><div class="ttdef"><b>Definition:</b> document.h:110</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_array_html"><div class="ttname"><a href="classrapidjson_1_1_generic_array.html">rapidjson::GenericArray</a></div><div class="ttdoc">Helper class for accessing Value of array type. </div><div class="ttdef"><b>Definition:</b> document.h:555</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_a799a8a2503989f486f3fc7a660266555"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a799a8a2503989f486f3fc7a660266555">rapidjson::GenericValue::Size</a></div><div class="ttdeci">SizeType Size() const</div><div class="ttdoc">Get the number of elements in array. </div><div class="ttdef"><b>Definition:</b> document.h:1557</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_document_html_a4c85243a28c9dcf2d1357da00fcaa773"><div class="ttname"><a href="classrapidjson_1_1_generic_document.html#a4c85243a28c9dcf2d1357da00fcaa773">rapidjson::GenericDocument::AllocatorType</a></div><div class="ttdeci">Allocator AllocatorType</div><div class="ttdoc">Allocator type from template parameter. </div><div class="ttdef"><b>Definition:</b> document.h:2122</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_a8d75bf0c6c0fa4f8d340a4236e98539b"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a8d75bf0c6c0fa4f8d340a4236e98539b">rapidjson::GenericValue::FindMember</a></div><div class="ttdeci">MemberIterator FindMember(const GenericValue&lt; Encoding, SourceAllocator &gt; &amp;name)</div><div class="ttdoc">Find member by name. </div><div class="ttdef"><b>Definition:</b> document.h:1248</div></div>
+<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4a9f2e7047832dce1029551b5de0f05607"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a9f2e7047832dce1029551b5de0f05607">rapidjson::kFalseType</a></div><div class="ttdoc">false </div><div class="ttdef"><b>Definition:</b> rapidjson.h:644</div></div>
<div class="ttc" id="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s_html_ga7d3acf640886b1f2552dc8c4cd6dea60"><div class="ttname"><a href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#ga7d3acf640886b1f2552dc8c4cd6dea60">rapidjson::ParseErrorCode</a></div><div class="ttdeci">ParseErrorCode</div><div class="ttdoc">Error code of parsing. </div><div class="ttdef"><b>Definition:</b> error.h:64</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_a34ee3d75a7aa308043fb34b0743bfe7c"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a34ee3d75a7aa308043fb34b0743bfe7c">rapidjson::GenericValue::MemberEnd</a></div><div class="ttdeci">ConstMemberIterator MemberEnd() const</div><div class="ttdoc">Const past-the-end member iterator </div><div class="ttdef"><b>Definition:</b> document.h:1161</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_a34ee3d75a7aa308043fb34b0743bfe7c"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a34ee3d75a7aa308043fb34b0743bfe7c">rapidjson::GenericValue::MemberEnd</a></div><div class="ttdeci">ConstMemberIterator MemberEnd() const</div><div class="ttdoc">Const past-the-end member iterator </div><div class="ttdef"><b>Definition:</b> document.h:1158</div></div>
<div class="ttc" id="rapidjson_8h_html_af95188da1d8eb6d4b148fe9ce71cd7c4"><div class="ttname"><a href="rapidjson_8h.html#af95188da1d8eb6d4b148fe9ce71cd7c4">RAPIDJSON_STATIC_ASSERT</a></div><div class="ttdeci">#define RAPIDJSON_STATIC_ASSERT(x)</div><div class="ttdoc">(Internal) macro to check for conditions at compile-time </div><div class="ttdef"><b>Definition:</b> rapidjson.h:445</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_a83ba61e8a5170c2e172fd60ebc11016f"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a83ba61e8a5170c2e172fd60ebc11016f">rapidjson::GenericValue::GenericValue</a></div><div class="ttdeci">GenericValue(const Ch *s, Allocator &amp;allocator)</div><div class="ttdoc">Constructor for copy-string (i.e. do make a copy of string) </div><div class="ttdef"><b>Definition:</b> document.h:763</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_ae08898bef949f217f0e5d28e19f05992"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#ae08898bef949f217f0e5d28e19f05992">rapidjson::GenericValue::operator!=</a></div><div class="ttdeci">friend bool operator!=(const T &amp;lhs, const GenericValue &amp;rhs)</div><div class="ttdoc">Not-Equal-to operator with arbitrary types (symmetric version) </div><div class="ttdef"><b>Definition:</b> document.h:1010</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_member_iterator_html_aff2739a9265639a7a4be8c3e6216b31a"><div class="ttname"><a href="classrapidjson_1_1_generic_member_iterator.html#aff2739a9265639a7a4be8c3e6216b31a">rapidjson::GenericMemberIterator::DifferenceType</a></div><div class="ttdeci">difference_type DifferenceType</div><div class="ttdoc">Signed integer type (e.g. ptrdiff_t) </div><div class="ttdef"><b>Definition:</b> document.h:129</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_aa60074f72a6d1651828a104b0c6387b1"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#aa60074f72a6d1651828a104b0c6387b1">rapidjson::GenericValue::RemoveMember</a></div><div class="ttdeci">bool RemoveMember(const Ch *name)</div><div class="ttdoc">Remove a member in object by its name. </div><div class="ttdef"><b>Definition:</b> document.h:1441</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_a83ba61e8a5170c2e172fd60ebc11016f"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a83ba61e8a5170c2e172fd60ebc11016f">rapidjson::GenericValue::GenericValue</a></div><div class="ttdeci">GenericValue(const Ch *s, Allocator &amp;allocator)</div><div class="ttdoc">Constructor for copy-string (i.e. do make a copy of string) </div><div class="ttdef"><b>Definition:</b> document.h:760</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_ae08898bef949f217f0e5d28e19f05992"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#ae08898bef949f217f0e5d28e19f05992">rapidjson::GenericValue::operator!=</a></div><div class="ttdeci">friend bool operator!=(const T &amp;lhs, const GenericValue &amp;rhs)</div><div class="ttdoc">Not-Equal-to operator with arbitrary types (symmetric version) </div><div class="ttdef"><b>Definition:</b> document.h:1007</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_member_iterator_html_aff2739a9265639a7a4be8c3e6216b31a"><div class="ttname"><a href="classrapidjson_1_1_generic_member_iterator.html#aff2739a9265639a7a4be8c3e6216b31a">rapidjson::GenericMemberIterator::DifferenceType</a></div><div class="ttdeci">difference_type DifferenceType</div><div class="ttdoc">Signed integer type (e.g. ptrdiff_t) </div><div class="ttdef"><b>Definition:</b> document.h:126</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_aa60074f72a6d1651828a104b0c6387b1"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#aa60074f72a6d1651828a104b0c6387b1">rapidjson::GenericValue::RemoveMember</a></div><div class="ttdeci">bool RemoveMember(const Ch *name)</div><div class="ttdoc">Remove a member in object by its name. </div><div class="ttdef"><b>Definition:</b> document.h:1438</div></div>
<div class="ttc" id="structrapidjson_1_1_memory_stream_html"><div class="ttname"><a href="structrapidjson_1_1_memory_stream.html">rapidjson::MemoryStream</a></div><div class="ttdoc">Represents an in-memory input byte stream. </div><div class="ttdef"><b>Definition:</b> memorystream.h:40</div></div>
-<div class="ttc" id="namespacerapidjson_html_af94951529a5d51e8c4e6e770bb707c1f"><div class="ttname"><a href="namespacerapidjson.html#af94951529a5d51e8c4e6e770bb707c1f">rapidjson::StringRef</a></div><div class="ttdeci">GenericStringRef&lt; CharType &gt; StringRef(const std::basic_string&lt; CharType &gt; &amp;str)</div><div class="ttdoc">Mark a string object as constant string </div><div class="ttdef"><b>Definition:</b> document.h:399</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_member_iterator_html_abe27838f8dc71fdb38028ef27ae0b4f2"><div class="ttname"><a href="classrapidjson_1_1_generic_member_iterator.html#abe27838f8dc71fdb38028ef27ae0b4f2">rapidjson::GenericMemberIterator::Reference</a></div><div class="ttdeci">reference Reference</div><div class="ttdoc">Reference to (const) GenericMember </div><div class="ttdef"><b>Definition:</b> document.h:127</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_ae475f31fb851138ced40e2ff6cb43ca6"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#ae475f31fb851138ced40e2ff6cb43ca6">rapidjson::GenericValue::PopBack</a></div><div class="ttdeci">GenericValue &amp; PopBack()</div><div class="ttdoc">Remove the last element in the array. </div><div class="ttdef"><b>Definition:</b> document.h:1685</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_a17971ba2bcd4eb1716098fdfe9182386"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a17971ba2bcd4eb1716098fdfe9182386">rapidjson::GenericValue::Reserve</a></div><div class="ttdeci">GenericValue &amp; Reserve(SizeType newCapacity, Allocator &amp;allocator)</div><div class="ttdoc">Request the array to have enough capacity to store elements. </div><div class="ttdef"><b>Definition:</b> document.h:1611</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_aaf58b9337ccc0cdf16aa9634c4645109"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#aaf58b9337ccc0cdf16aa9634c4645109">rapidjson::GenericValue::End</a></div><div class="ttdeci">ValueIterator End()</div><div class="ttdoc">Past-the-end element iterator </div><div class="ttdef"><b>Definition:</b> document.h:1597</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_a6443cf5323fb46c4c51cd15a365da49b"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a6443cf5323fb46c4c51cd15a365da49b">rapidjson::GenericValue::operator!=</a></div><div class="ttdeci">bool operator!=(const Ch *rhs) const</div><div class="ttdoc">Not-equal-to operator with const C-string pointer </div><div class="ttdef"><b>Definition:</b> document.h:995</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_ac51a3b3046aaa12aa1d88ac876a28cec"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#ac51a3b3046aaa12aa1d88ac876a28cec">rapidjson::GenericValue::EraseMember</a></div><div class="ttdeci">bool EraseMember(const Ch *name)</div><div class="ttdoc">Erase a member in object by its name. </div><div class="ttdef"><b>Definition:</b> document.h:1527</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_document_html_ab031375318d133f83a114314b75703de"><div class="ttname"><a href="classrapidjson_1_1_generic_document.html#ab031375318d133f83a114314b75703de">rapidjson::GenericDocument::Parse</a></div><div class="ttdeci">GenericDocument &amp; Parse(const Ch *str)</div><div class="ttdoc">Parse JSON text from a read-only string (with kParseDefaultFlags) </div><div class="ttdef"><b>Definition:</b> document.h:2340</div></div>
+<div class="ttc" id="namespacerapidjson_html_af94951529a5d51e8c4e6e770bb707c1f"><div class="ttname"><a href="namespacerapidjson.html#af94951529a5d51e8c4e6e770bb707c1f">rapidjson::StringRef</a></div><div class="ttdeci">GenericStringRef&lt; CharType &gt; StringRef(const std::basic_string&lt; CharType &gt; &amp;str)</div><div class="ttdoc">Mark a string object as constant string </div><div class="ttdef"><b>Definition:</b> document.h:396</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_member_iterator_html_abe27838f8dc71fdb38028ef27ae0b4f2"><div class="ttname"><a href="classrapidjson_1_1_generic_member_iterator.html#abe27838f8dc71fdb38028ef27ae0b4f2">rapidjson::GenericMemberIterator::Reference</a></div><div class="ttdeci">reference Reference</div><div class="ttdoc">Reference to (const) GenericMember </div><div class="ttdef"><b>Definition:</b> document.h:124</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_ae475f31fb851138ced40e2ff6cb43ca6"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#ae475f31fb851138ced40e2ff6cb43ca6">rapidjson::GenericValue::PopBack</a></div><div class="ttdeci">GenericValue &amp; PopBack()</div><div class="ttdoc">Remove the last element in the array. </div><div class="ttdef"><b>Definition:</b> document.h:1682</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_a17971ba2bcd4eb1716098fdfe9182386"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a17971ba2bcd4eb1716098fdfe9182386">rapidjson::GenericValue::Reserve</a></div><div class="ttdeci">GenericValue &amp; Reserve(SizeType newCapacity, Allocator &amp;allocator)</div><div class="ttdoc">Request the array to have enough capacity to store elements. </div><div class="ttdef"><b>Definition:</b> document.h:1608</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_aaf58b9337ccc0cdf16aa9634c4645109"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#aaf58b9337ccc0cdf16aa9634c4645109">rapidjson::GenericValue::End</a></div><div class="ttdeci">ValueIterator End()</div><div class="ttdoc">Past-the-end element iterator </div><div class="ttdef"><b>Definition:</b> document.h:1594</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_a6443cf5323fb46c4c51cd15a365da49b"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a6443cf5323fb46c4c51cd15a365da49b">rapidjson::GenericValue::operator!=</a></div><div class="ttdeci">bool operator!=(const Ch *rhs) const</div><div class="ttdoc">Not-equal-to operator with const C-string pointer </div><div class="ttdef"><b>Definition:</b> document.h:992</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_ac51a3b3046aaa12aa1d88ac876a28cec"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#ac51a3b3046aaa12aa1d88ac876a28cec">rapidjson::GenericValue::EraseMember</a></div><div class="ttdeci">bool EraseMember(const Ch *name)</div><div class="ttdoc">Erase a member in object by its name. </div><div class="ttdef"><b>Definition:</b> document.h:1524</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_document_html_ab031375318d133f83a114314b75703de"><div class="ttname"><a href="classrapidjson_1_1_generic_document.html#ab031375318d133f83a114314b75703de">rapidjson::GenericDocument::Parse</a></div><div class="ttdeci">GenericDocument &amp; Parse(const Ch *str)</div><div class="ttdoc">Parse JSON text from a read-only string (with kParseDefaultFlags) </div><div class="ttdef"><b>Definition:</b> document.h:2337</div></div>
<div class="ttc" id="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g_html_ga5dc14176a9e71ace282404b0bcda57a1"><div class="ttname"><a href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga5dc14176a9e71ace282404b0bcda57a1">RAPIDJSON_LIKELY</a></div><div class="ttdeci">#define RAPIDJSON_LIKELY(x)</div><div class="ttdoc">Compiler branching hint for expression with high probability to be true. </div><div class="ttdef"><b>Definition:</b> rapidjson.h:463</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_af91573ce61d798f0bc5dc88b00742697"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#af91573ce61d798f0bc5dc88b00742697">rapidjson::GenericValue::RemoveMember</a></div><div class="ttdeci">MemberIterator RemoveMember(MemberIterator m)</div><div class="ttdoc">Remove a member in object by iterator. </div><div class="ttdef"><b>Definition:</b> document.h:1469</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_member_iterator_html_aa9d53504374c7c6bdf46775482c5b107"><div class="ttname"><a href="classrapidjson_1_1_generic_member_iterator.html#aa9d53504374c7c6bdf46775482c5b107">rapidjson::GenericMemberIterator::Pointer</a></div><div class="ttdeci">pointer Pointer</div><div class="ttdoc">Pointer to (const) GenericMember </div><div class="ttdef"><b>Definition:</b> document.h:125</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_a93f0f317f397c36a24a0f3c32648623a"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a93f0f317f397c36a24a0f3c32648623a">rapidjson::GenericValue::MemberBegin</a></div><div class="ttdeci">MemberIterator MemberBegin()</div><div class="ttdoc">Member iterator </div><div class="ttdef"><b>Definition:</b> document.h:1164</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_a58ecce8a34fc029039b8079de246bdaa"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a58ecce8a34fc029039b8079de246bdaa">rapidjson::GenericValue::swap</a></div><div class="ttdeci">friend void swap(GenericValue &amp;a, GenericValue &amp;b) RAPIDJSON_NOEXCEPT</div><div class="ttdoc">free-standing swap function helper </div><div class="ttdef"><b>Definition:</b> document.h:917</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_a5d47340c96346c5028fee4c9068d783d"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a5d47340c96346c5028fee4c9068d783d">rapidjson::GenericValue::AllocatorType</a></div><div class="ttdeci">Allocator AllocatorType</div><div class="ttdoc">Allocator type from template parameter. </div><div class="ttdef"><b>Definition:</b> document.h:580</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_ad08a62c65a793ab1d0abe7eac03776fd"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#ad08a62c65a793ab1d0abe7eac03776fd">rapidjson::GenericValue::Empty</a></div><div class="ttdeci">bool Empty() const</div><div class="ttdoc">Check whether the array is empty. </div><div class="ttdef"><b>Definition:</b> document.h:1566</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_a2ccb4736d0f2ec07f06f630d8fe54f8d"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a2ccb4736d0f2ec07f06f630d8fe54f8d">rapidjson::GenericValue::AddMember</a></div><div class="ttdeci">GenericValue &amp; AddMember(StringRefType name, StringRefType value, Allocator &amp;allocator)</div><div class="ttdoc">Add a constant string value as member (name-value pair) to the object. </div><div class="ttdef"><b>Definition:</b> document.h:1393</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_ae89a77887aa3eb1f1f913727cbff6786"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#ae89a77887aa3eb1f1f913727cbff6786">rapidjson::GenericValue::MemberBegin</a></div><div class="ttdeci">ConstMemberIterator MemberBegin() const</div><div class="ttdoc">Const member iterator </div><div class="ttdef"><b>Definition:</b> document.h:1158</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_a578e35f3350717db2aae534969b2346a"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a578e35f3350717db2aae534969b2346a">rapidjson::GenericValue::AddMember</a></div><div class="ttdeci">GenericValue &amp; AddMember(GenericValue &amp;name, std::basic_string&lt; Ch &gt; &amp;value, Allocator &amp;allocator)</div><div class="ttdoc">Add a string object as member (name-value pair) to the object. </div><div class="ttdef"><b>Definition:</b> document.h:1322</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_af2a406c67f2d6a7849f0c167025827b2"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#af2a406c67f2d6a7849f0c167025827b2">rapidjson::GenericValue::MemberCapacity</a></div><div class="ttdeci">SizeType MemberCapacity() const</div><div class="ttdoc">Get the capacity of object. </div><div class="ttdef"><b>Definition:</b> document.h:1099</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_a4d337239ee3e2096462f6a36b9ab0811"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a4d337239ee3e2096462f6a36b9ab0811">rapidjson::GenericValue::operator[]</a></div><div class="ttdeci">GenericValue &amp; operator[](const std::basic_string&lt; Ch &gt; &amp;name)</div><div class="ttdoc">Get a value from an object associated with name (string object). </div><div class="ttdef"><b>Definition:</b> document.h:1152</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_a51e93a4fb57f77a39767acb076bf43c1"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a51e93a4fb57f77a39767acb076bf43c1">rapidjson::GenericValue::GenericValue</a></div><div class="ttdeci">GenericValue(const Ch *s, SizeType length) RAPIDJSON_NOEXCEPT</div><div class="ttdoc">Constructor for constant string (i.e. do not make a copy of string) </div><div class="ttdef"><b>Definition:</b> document.h:754</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_aa62b57746c96ce3d264b2fe178196062"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#aa62b57746c96ce3d264b2fe178196062">rapidjson::GenericValue::operator[]</a></div><div class="ttdeci">GenericValue &amp; operator[](const GenericValue&lt; Encoding, SourceAllocator &gt; &amp;name)</div><div class="ttdoc">Get a value from an object associated with the name. </div><div class="ttdef"><b>Definition:</b> document.h:1131</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_ae6351043ec30d8a151b0a072cfbc46d5"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#ae6351043ec30d8a151b0a072cfbc46d5">rapidjson::GenericValue::SetString</a></div><div class="ttdeci">GenericValue &amp; SetString(const Ch *s, SizeType length, Allocator &amp;allocator)</div><div class="ttdoc">Set this value as a string by copying from source string. </div><div class="ttdef"><b>Definition:</b> document.h:1802</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_a163e60b101e5ae534597c050a6eba511"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a163e60b101e5ae534597c050a6eba511">rapidjson::GenericValue::EraseMember</a></div><div class="ttdeci">MemberIterator EraseMember(ConstMemberIterator pos)</div><div class="ttdoc">Remove a member from an object by iterator. </div><div class="ttdef"><b>Definition:</b> document.h:1493</div></div>
-<div class="ttc" id="structrapidjson_1_1_generic_string_ref_html_ad9eb120a58cee500ff3bd5706779c4e4"><div class="ttname"><a href="structrapidjson_1_1_generic_string_ref.html#ad9eb120a58cee500ff3bd5706779c4e4">rapidjson::GenericStringRef::GenericStringRef</a></div><div class="ttdeci">GenericStringRef(const CharType *str, SizeType len)</div><div class="ttdoc">Create constant string reference from pointer and length </div><div class="ttdef"><b>Definition:</b> document.h:318</div></div>
-<div class="ttc" id="structrapidjson_1_1_generic_member_html"><div class="ttname"><a href="structrapidjson_1_1_generic_member.html">rapidjson::GenericMember</a></div><div class="ttdoc">Name-value pair in a JSON object value. </div><div class="ttdef"><b>Definition:</b> document.h:69</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_afb91480cc6242ca96ffc603e649c319f"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#afb91480cc6242ca96ffc603e649c319f">rapidjson::GenericValue::SetString</a></div><div class="ttdeci">GenericValue &amp; SetString(const Ch *s, SizeType length)</div><div class="ttdoc">Set this value as a string without copying source string. </div><div class="ttdef"><b>Definition:</b> document.h:1785</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_acc6b1791cca8daef18521918136264b7"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#acc6b1791cca8daef18521918136264b7">rapidjson::GenericValue::Is</a></div><div class="ttdeci">bool Is() const</div><div class="ttdoc">Templated version for checking whether this value is type T. </div><div class="ttdef"><b>Definition:</b> document.h:1841</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_document_html_af061c039a990c2970dc31e5626149367"><div class="ttname"><a href="classrapidjson_1_1_generic_document.html#af061c039a990c2970dc31e5626149367">rapidjson::GenericDocument::ParseInsitu</a></div><div class="ttdeci">GenericDocument &amp; ParseInsitu(Ch *str)</div><div class="ttdoc">Parse JSON text from a mutable string (with kParseDefaultFlags) </div><div class="ttdef"><b>Definition:</b> document.h:2308</div></div>
-<div class="ttc" id="rapidjson_8h_html_abdc7cd7902748ffe6626d71c59a73c3b"><div class="ttname"><a href="rapidjson_8h.html#abdc7cd7902748ffe6626d71c59a73c3b">RAPIDJSON_NEW</a></div><div class="ttdeci">#define RAPIDJSON_NEW(TypeName)</div><div class="ttdoc">! customization point for global new </div><div class="ttdef"><b>Definition:</b> rapidjson.h:614</div></div>
-<div class="ttc" id="structrapidjson_1_1_generic_string_ref_html_ae223535ec20edf0c1db44a40b7735111"><div class="ttname"><a href="structrapidjson_1_1_generic_string_ref.html#ae223535ec20edf0c1db44a40b7735111">rapidjson::GenericStringRef::length</a></div><div class="ttdeci">const SizeType length</div><div class="ttdoc">length of the string (excluding the trailing NULL terminator) </div><div class="ttdef"><b>Definition:</b> document.h:327</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_document_html_af532179ca5ad5434a5e8af63f5da4c5f"><div class="ttname"><a href="classrapidjson_1_1_generic_document.html#af532179ca5ad5434a5e8af63f5da4c5f">rapidjson::GenericDocument::GetErrorOffset</a></div><div class="ttdeci">size_t GetErrorOffset() const</div><div class="ttdoc">Get the position of last parsing error in input, 0 otherwise. </div><div class="ttdef"><b>Definition:</b> document.h:2391</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_a89a6588121742fc3f154b10b8f15f45f"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a89a6588121742fc3f154b10b8f15f45f">rapidjson::GenericValue::ConstValueIterator</a></div><div class="ttdeci">const GenericValue * ConstValueIterator</div><div class="ttdoc">Constant value iterator for iterating in array. </div><div class="ttdef"><b>Definition:</b> document.h:586</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_a278b420ea75b0ec18d88d4c9e9199d62"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a278b420ea75b0ec18d88d4c9e9199d62">rapidjson::GenericValue::FindMember</a></div><div class="ttdeci">MemberIterator FindMember(const std::basic_string&lt; Ch &gt; &amp;name)</div><div class="ttdoc">Find member by string object name. </div><div class="ttdef"><b>Definition:</b> document.h:1270</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_ab018d734d189532b27943bc45776ba68"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#ab018d734d189532b27943bc45776ba68">rapidjson::GenericValue::AddMember</a></div><div class="ttdeci">GenericValue &amp; AddMember(GenericValue &amp;name, GenericValue &amp;value, Allocator &amp;allocator)</div><div class="ttdoc">Add a member (name-value pair) to the object. </div><div class="ttdef"><b>Definition:</b> document.h:1284</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_af91573ce61d798f0bc5dc88b00742697"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#af91573ce61d798f0bc5dc88b00742697">rapidjson::GenericValue::RemoveMember</a></div><div class="ttdeci">MemberIterator RemoveMember(MemberIterator m)</div><div class="ttdoc">Remove a member in object by iterator. </div><div class="ttdef"><b>Definition:</b> document.h:1466</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_member_iterator_html_aa9d53504374c7c6bdf46775482c5b107"><div class="ttname"><a href="classrapidjson_1_1_generic_member_iterator.html#aa9d53504374c7c6bdf46775482c5b107">rapidjson::GenericMemberIterator::Pointer</a></div><div class="ttdeci">pointer Pointer</div><div class="ttdoc">Pointer to (const) GenericMember </div><div class="ttdef"><b>Definition:</b> document.h:122</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_a93f0f317f397c36a24a0f3c32648623a"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a93f0f317f397c36a24a0f3c32648623a">rapidjson::GenericValue::MemberBegin</a></div><div class="ttdeci">MemberIterator MemberBegin()</div><div class="ttdoc">Member iterator </div><div class="ttdef"><b>Definition:</b> document.h:1161</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_a58ecce8a34fc029039b8079de246bdaa"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a58ecce8a34fc029039b8079de246bdaa">rapidjson::GenericValue::swap</a></div><div class="ttdeci">friend void swap(GenericValue &amp;a, GenericValue &amp;b) RAPIDJSON_NOEXCEPT</div><div class="ttdoc">free-standing swap function helper </div><div class="ttdef"><b>Definition:</b> document.h:914</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_a5d47340c96346c5028fee4c9068d783d"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a5d47340c96346c5028fee4c9068d783d">rapidjson::GenericValue::AllocatorType</a></div><div class="ttdeci">Allocator AllocatorType</div><div class="ttdoc">Allocator type from template parameter. </div><div class="ttdef"><b>Definition:</b> document.h:577</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_ad08a62c65a793ab1d0abe7eac03776fd"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#ad08a62c65a793ab1d0abe7eac03776fd">rapidjson::GenericValue::Empty</a></div><div class="ttdeci">bool Empty() const</div><div class="ttdoc">Check whether the array is empty. </div><div class="ttdef"><b>Definition:</b> document.h:1563</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_a2ccb4736d0f2ec07f06f630d8fe54f8d"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a2ccb4736d0f2ec07f06f630d8fe54f8d">rapidjson::GenericValue::AddMember</a></div><div class="ttdeci">GenericValue &amp; AddMember(StringRefType name, StringRefType value, Allocator &amp;allocator)</div><div class="ttdoc">Add a constant string value as member (name-value pair) to the object. </div><div class="ttdef"><b>Definition:</b> document.h:1390</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_ae89a77887aa3eb1f1f913727cbff6786"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#ae89a77887aa3eb1f1f913727cbff6786">rapidjson::GenericValue::MemberBegin</a></div><div class="ttdeci">ConstMemberIterator MemberBegin() const</div><div class="ttdoc">Const member iterator </div><div class="ttdef"><b>Definition:</b> document.h:1155</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_a578e35f3350717db2aae534969b2346a"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a578e35f3350717db2aae534969b2346a">rapidjson::GenericValue::AddMember</a></div><div class="ttdeci">GenericValue &amp; AddMember(GenericValue &amp;name, std::basic_string&lt; Ch &gt; &amp;value, Allocator &amp;allocator)</div><div class="ttdoc">Add a string object as member (name-value pair) to the object. </div><div class="ttdef"><b>Definition:</b> document.h:1319</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_af2a406c67f2d6a7849f0c167025827b2"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#af2a406c67f2d6a7849f0c167025827b2">rapidjson::GenericValue::MemberCapacity</a></div><div class="ttdeci">SizeType MemberCapacity() const</div><div class="ttdoc">Get the capacity of object. </div><div class="ttdef"><b>Definition:</b> document.h:1096</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_a4d337239ee3e2096462f6a36b9ab0811"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a4d337239ee3e2096462f6a36b9ab0811">rapidjson::GenericValue::operator[]</a></div><div class="ttdeci">GenericValue &amp; operator[](const std::basic_string&lt; Ch &gt; &amp;name)</div><div class="ttdoc">Get a value from an object associated with name (string object). </div><div class="ttdef"><b>Definition:</b> document.h:1149</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_a51e93a4fb57f77a39767acb076bf43c1"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a51e93a4fb57f77a39767acb076bf43c1">rapidjson::GenericValue::GenericValue</a></div><div class="ttdeci">GenericValue(const Ch *s, SizeType length) RAPIDJSON_NOEXCEPT</div><div class="ttdoc">Constructor for constant string (i.e. do not make a copy of string) </div><div class="ttdef"><b>Definition:</b> document.h:751</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_aa62b57746c96ce3d264b2fe178196062"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#aa62b57746c96ce3d264b2fe178196062">rapidjson::GenericValue::operator[]</a></div><div class="ttdeci">GenericValue &amp; operator[](const GenericValue&lt; Encoding, SourceAllocator &gt; &amp;name)</div><div class="ttdoc">Get a value from an object associated with the name. </div><div class="ttdef"><b>Definition:</b> document.h:1128</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_ae6351043ec30d8a151b0a072cfbc46d5"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#ae6351043ec30d8a151b0a072cfbc46d5">rapidjson::GenericValue::SetString</a></div><div class="ttdeci">GenericValue &amp; SetString(const Ch *s, SizeType length, Allocator &amp;allocator)</div><div class="ttdoc">Set this value as a string by copying from source string. </div><div class="ttdef"><b>Definition:</b> document.h:1799</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_a163e60b101e5ae534597c050a6eba511"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a163e60b101e5ae534597c050a6eba511">rapidjson::GenericValue::EraseMember</a></div><div class="ttdeci">MemberIterator EraseMember(ConstMemberIterator pos)</div><div class="ttdoc">Remove a member from an object by iterator. </div><div class="ttdef"><b>Definition:</b> document.h:1490</div></div>
+<div class="ttc" id="structrapidjson_1_1_generic_string_ref_html_ad9eb120a58cee500ff3bd5706779c4e4"><div class="ttname"><a href="structrapidjson_1_1_generic_string_ref.html#ad9eb120a58cee500ff3bd5706779c4e4">rapidjson::GenericStringRef::GenericStringRef</a></div><div class="ttdeci">GenericStringRef(const CharType *str, SizeType len)</div><div class="ttdoc">Create constant string reference from pointer and length </div><div class="ttdef"><b>Definition:</b> document.h:315</div></div>
+<div class="ttc" id="structrapidjson_1_1_generic_member_html"><div class="ttname"><a href="structrapidjson_1_1_generic_member.html">rapidjson::GenericMember</a></div><div class="ttdoc">Name-value pair in a JSON object value. </div><div class="ttdef"><b>Definition:</b> document.h:66</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_afb91480cc6242ca96ffc603e649c319f"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#afb91480cc6242ca96ffc603e649c319f">rapidjson::GenericValue::SetString</a></div><div class="ttdeci">GenericValue &amp; SetString(const Ch *s, SizeType length)</div><div class="ttdoc">Set this value as a string without copying source string. </div><div class="ttdef"><b>Definition:</b> document.h:1782</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_acc6b1791cca8daef18521918136264b7"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#acc6b1791cca8daef18521918136264b7">rapidjson::GenericValue::Is</a></div><div class="ttdeci">bool Is() const</div><div class="ttdoc">Templated version for checking whether this value is type T. </div><div class="ttdef"><b>Definition:</b> document.h:1838</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_document_html_af061c039a990c2970dc31e5626149367"><div class="ttname"><a href="classrapidjson_1_1_generic_document.html#af061c039a990c2970dc31e5626149367">rapidjson::GenericDocument::ParseInsitu</a></div><div class="ttdeci">GenericDocument &amp; ParseInsitu(Ch *str)</div><div class="ttdoc">Parse JSON text from a mutable string (with kParseDefaultFlags) </div><div class="ttdef"><b>Definition:</b> document.h:2305</div></div>
+<div class="ttc" id="rapidjson_8h_html_abdc7cd7902748ffe6626d71c59a73c3b"><div class="ttname"><a href="rapidjson_8h.html#abdc7cd7902748ffe6626d71c59a73c3b">RAPIDJSON_NEW</a></div><div class="ttdeci">#define RAPIDJSON_NEW(TypeName)</div><div class="ttdoc">! customization point for global new </div><div class="ttdef"><b>Definition:</b> rapidjson.h:625</div></div>
+<div class="ttc" id="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g_html_ga2b2a0d9143aa4fb31205a85b34c43952"><div class="ttname"><a href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga2b2a0d9143aa4fb31205a85b34c43952">RAPIDJSON_NOEXCEPT_ASSERT</a></div><div class="ttdeci">#define RAPIDJSON_NOEXCEPT_ASSERT(x)</div><div class="ttdoc">Assertion (in non-throwing contexts). </div><div class="ttdef"><b>Definition:</b> rapidjson.h:617</div></div>
+<div class="ttc" id="structrapidjson_1_1_generic_string_ref_html_ae223535ec20edf0c1db44a40b7735111"><div class="ttname"><a href="structrapidjson_1_1_generic_string_ref.html#ae223535ec20edf0c1db44a40b7735111">rapidjson::GenericStringRef::length</a></div><div class="ttdeci">const SizeType length</div><div class="ttdoc">length of the string (excluding the trailing NULL terminator) </div><div class="ttdef"><b>Definition:</b> document.h:324</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_document_html_af532179ca5ad5434a5e8af63f5da4c5f"><div class="ttname"><a href="classrapidjson_1_1_generic_document.html#af532179ca5ad5434a5e8af63f5da4c5f">rapidjson::GenericDocument::GetErrorOffset</a></div><div class="ttdeci">size_t GetErrorOffset() const</div><div class="ttdoc">Get the position of last parsing error in input, 0 otherwise. </div><div class="ttdef"><b>Definition:</b> document.h:2388</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_a89a6588121742fc3f154b10b8f15f45f"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a89a6588121742fc3f154b10b8f15f45f">rapidjson::GenericValue::ConstValueIterator</a></div><div class="ttdeci">const GenericValue * ConstValueIterator</div><div class="ttdoc">Constant value iterator for iterating in array. </div><div class="ttdef"><b>Definition:</b> document.h:583</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_a278b420ea75b0ec18d88d4c9e9199d62"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a278b420ea75b0ec18d88d4c9e9199d62">rapidjson::GenericValue::FindMember</a></div><div class="ttdeci">MemberIterator FindMember(const std::basic_string&lt; Ch &gt; &amp;name)</div><div class="ttdoc">Find member by string object name. </div><div class="ttdef"><b>Definition:</b> document.h:1267</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_ab018d734d189532b27943bc45776ba68"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#ab018d734d189532b27943bc45776ba68">rapidjson::GenericValue::AddMember</a></div><div class="ttdeci">GenericValue &amp; AddMember(GenericValue &amp;name, GenericValue &amp;value, Allocator &amp;allocator)</div><div class="ttdoc">Add a member (name-value pair) to the object. </div><div class="ttdef"><b>Definition:</b> document.h:1281</div></div>
<div class="ttc" id="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s_html_structrapidjson_1_1_parse_result"><div class="ttname"><a href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#structrapidjson_1_1_parse_result">rapidjson::ParseResult</a></div><div class="ttdoc">Result of parsing (wraps ParseErrorCode) </div><div class="ttdef"><b>Definition:</b> error.h:106</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_document_html_a3ae97682cf04685c7db9d89ebc399b85"><div class="ttname"><a href="classrapidjson_1_1_generic_document.html#a3ae97682cf04685c7db9d89ebc399b85">rapidjson::GenericDocument::ParseStream</a></div><div class="ttdeci">GenericDocument &amp; ParseStream(InputStream &amp;is)</div><div class="ttdoc">Parse JSON text from an input stream (with Encoding conversion) </div><div class="ttdef"><b>Definition:</b> document.h:2256</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_ad22fdeac87ec6c370dd43075d3586811"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#ad22fdeac87ec6c370dd43075d3586811">rapidjson::GenericValue::FindMember</a></div><div class="ttdeci">MemberIterator FindMember(const Ch *name)</div><div class="ttdoc">Find member by name. </div><div class="ttdef"><b>Definition:</b> document.h:1230</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_a77b0f41557b3c34b57a180698312c4a8"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a77b0f41557b3c34b57a180698312c4a8">rapidjson::GenericValue::GenericValue</a></div><div class="ttdeci">GenericValue(Array a) RAPIDJSON_NOEXCEPT</div><div class="ttdoc">Constructor for Array. </div><div class="ttdef"><b>Definition:</b> document.h:778</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_aa27d086d265f0ce447b15b15f0a2ed6e"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#aa27d086d265f0ce447b15b15f0a2ed6e">rapidjson::GenericValue::GetDouble</a></div><div class="ttdeci">double GetDouble() const</div><div class="ttdoc">Get the value as double type. </div><div class="ttdef"><b>Definition:</b> document.h:1742</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_a794129b8adffb97d123306a0c0ccaf71"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a794129b8adffb97d123306a0c0ccaf71">rapidjson::GenericValue::HasMember</a></div><div class="ttdeci">bool HasMember(const GenericValue&lt; Encoding, SourceAllocator &gt; &amp;name) const</div><div class="ttdoc">Check whether a member exists in the object with GenericValue name. </div><div class="ttdef"><b>Definition:</b> document.h:1216</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_aa56b69bac5423622eff6998ce4802106"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#aa56b69bac5423622eff6998ce4802106">rapidjson::GenericValue::Clear</a></div><div class="ttdeci">void Clear()</div><div class="ttdoc">Remove all elements in the array. </div><div class="ttdef"><b>Definition:</b> document.h:1572</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_document_html_a42c35e2f64c288f14b74fec2792500c8"><div class="ttname"><a href="classrapidjson_1_1_generic_document.html#a42c35e2f64c288f14b74fec2792500c8">rapidjson::GenericDocument::Parse</a></div><div class="ttdeci">GenericDocument &amp; Parse(const Ch *str)</div><div class="ttdoc">Parse JSON text from a read-only string </div><div class="ttdef"><b>Definition:</b> document.h:2333</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_aaa465706fda1e1ef4513ce877e0b4b69"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#aaa465706fda1e1ef4513ce877e0b4b69">rapidjson::GenericValue::operator==</a></div><div class="ttdeci">friend bool operator==(const T &amp;lhs, const GenericValue &amp;rhs)</div><div class="ttdoc">Equal-to operator with arbitrary types (symmetric version) </div><div class="ttdef"><b>Definition:</b> document.h:1005</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_a573712808dd5d8814c103cf55fd761b4"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a573712808dd5d8814c103cf55fd761b4">rapidjson::GenericValue::GetFloat</a></div><div class="ttdeci">float GetFloat() const</div><div class="ttdoc">Get the value as float type. </div><div class="ttdef"><b>Definition:</b> document.h:1754</div></div>
-<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">rapidjson::Type</a></div><div class="ttdeci">Type</div><div class="ttdoc">Type of JSON value </div><div class="ttdef"><b>Definition:</b> rapidjson.h:631</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_document_html_a8367a827588dd91d02e21ef945bec9f5"><div class="ttname"><a href="classrapidjson_1_1_generic_document.html#a8367a827588dd91d02e21ef945bec9f5">rapidjson::GenericDocument::Ch</a></div><div class="ttdeci">Encoding::Ch Ch</div><div class="ttdoc">Character type derived from Encoding. </div><div class="ttdef"><b>Definition:</b> document.h:2123</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_document_html_aa52c3016961f25ecd989d82839bce4e5"><div class="ttname"><a href="classrapidjson_1_1_generic_document.html#aa52c3016961f25ecd989d82839bce4e5">rapidjson::GenericDocument::GenericDocument</a></div><div class="ttdeci">GenericDocument(Type type, Allocator *allocator=0, size_t stackCapacity=kDefaultStackCapacity, StackAllocator *stackAllocator=0)</div><div class="ttdoc">Constructor </div><div class="ttdef"><b>Definition:</b> document.h:2134</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_adc312de070d03a63e6c692c9c61db156"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#adc312de070d03a63e6c692c9c61db156">rapidjson::GenericValue::operator[]</a></div><div class="ttdeci">GenericValue &amp; operator[](SizeType index)</div><div class="ttdoc">Get an element from array by index. </div><div class="ttdef"><b>Definition:</b> document.h:1585</div></div>
-<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4acf030b422a32c3647c7c5973bd4dd0a9"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4acf030b422a32c3647c7c5973bd4dd0a9">rapidjson::kObjectType</a></div><div class="ttdoc">object </div><div class="ttdef"><b>Definition:</b> rapidjson.h:635</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_a0ec9f34bef5890241d4bc882b73b1db4"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a0ec9f34bef5890241d4bc882b73b1db4">rapidjson::GenericValue::PushBack</a></div><div class="ttdeci">GenericValue &amp; PushBack(GenericValue &amp;value, Allocator &amp;allocator)</div><div class="ttdoc">Append a GenericValue at the end of the array. </div><div class="ttdef"><b>Definition:</b> document.h:1630</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_a8ec7fc7f221306925c7674dccbe02b07"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a8ec7fc7f221306925c7674dccbe02b07">rapidjson::GenericValue::operator[]</a></div><div class="ttdeci">GenericValue &amp; operator[](T *name)</div><div class="ttdoc">Get a value from an object associated with the name. </div><div class="ttdef"><b>Definition:</b> document.h:1114</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_a06f10ef54f5692ce08206c26624a21db"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a06f10ef54f5692ce08206c26624a21db">rapidjson::GenericValue::Swap</a></div><div class="ttdeci">GenericValue &amp; Swap(GenericValue &amp;other) RAPIDJSON_NOEXCEPT</div><div class="ttdoc">Exchange the contents of this value with those of other. </div><div class="ttdef"><b>Definition:</b> document.h:897</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_adb109ae9f12615efadf9277cb5e9c4ee"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#adb109ae9f12615efadf9277cb5e9c4ee">rapidjson::GenericValue::MemberEnd</a></div><div class="ttdeci">MemberIterator MemberEnd()</div><div class="ttdoc">Past-the-end member iterator </div><div class="ttdef"><b>Definition:</b> document.h:1167</div></div>
-<div class="ttc" id="structrapidjson_1_1_generic_string_ref_html_acd4d5ebac2b610ce647356aa52998002"><div class="ttname"><a href="structrapidjson_1_1_generic_string_ref.html#acd4d5ebac2b610ce647356aa52998002">rapidjson::GenericStringRef::GenericStringRef</a></div><div class="ttdeci">GenericStringRef(const CharType(&amp;str)[N]) RAPIDJSON_NOEXCEPT</div><div class="ttdoc">Create string reference from const character array </div><div class="ttdef"><b>Definition:</b> document.h:282</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_a852788b35257762cd8d6c4bf5c5d77bc"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a852788b35257762cd8d6c4bf5c5d77bc">rapidjson::GenericValue::GenericValue</a></div><div class="ttdeci">GenericValue(const std::basic_string&lt; Ch &gt; &amp;s, Allocator &amp;allocator)</div><div class="ttdoc">Constructor for copy-string from a string object (i.e. do make a copy of string) </div><div class="ttdef"><b>Definition:</b> document.h:769</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_document_html_a3ae97682cf04685c7db9d89ebc399b85"><div class="ttname"><a href="classrapidjson_1_1_generic_document.html#a3ae97682cf04685c7db9d89ebc399b85">rapidjson::GenericDocument::ParseStream</a></div><div class="ttdeci">GenericDocument &amp; ParseStream(InputStream &amp;is)</div><div class="ttdoc">Parse JSON text from an input stream (with Encoding conversion) </div><div class="ttdef"><b>Definition:</b> document.h:2253</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_ad22fdeac87ec6c370dd43075d3586811"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#ad22fdeac87ec6c370dd43075d3586811">rapidjson::GenericValue::FindMember</a></div><div class="ttdeci">MemberIterator FindMember(const Ch *name)</div><div class="ttdoc">Find member by name. </div><div class="ttdef"><b>Definition:</b> document.h:1227</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_a77b0f41557b3c34b57a180698312c4a8"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a77b0f41557b3c34b57a180698312c4a8">rapidjson::GenericValue::GenericValue</a></div><div class="ttdeci">GenericValue(Array a) RAPIDJSON_NOEXCEPT</div><div class="ttdoc">Constructor for Array. </div><div class="ttdef"><b>Definition:</b> document.h:775</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_aa27d086d265f0ce447b15b15f0a2ed6e"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#aa27d086d265f0ce447b15b15f0a2ed6e">rapidjson::GenericValue::GetDouble</a></div><div class="ttdeci">double GetDouble() const</div><div class="ttdoc">Get the value as double type. </div><div class="ttdef"><b>Definition:</b> document.h:1739</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_a794129b8adffb97d123306a0c0ccaf71"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a794129b8adffb97d123306a0c0ccaf71">rapidjson::GenericValue::HasMember</a></div><div class="ttdeci">bool HasMember(const GenericValue&lt; Encoding, SourceAllocator &gt; &amp;name) const</div><div class="ttdoc">Check whether a member exists in the object with GenericValue name. </div><div class="ttdef"><b>Definition:</b> document.h:1213</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_aa56b69bac5423622eff6998ce4802106"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#aa56b69bac5423622eff6998ce4802106">rapidjson::GenericValue::Clear</a></div><div class="ttdeci">void Clear()</div><div class="ttdoc">Remove all elements in the array. </div><div class="ttdef"><b>Definition:</b> document.h:1569</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_document_html_a42c35e2f64c288f14b74fec2792500c8"><div class="ttname"><a href="classrapidjson_1_1_generic_document.html#a42c35e2f64c288f14b74fec2792500c8">rapidjson::GenericDocument::Parse</a></div><div class="ttdeci">GenericDocument &amp; Parse(const Ch *str)</div><div class="ttdoc">Parse JSON text from a read-only string </div><div class="ttdef"><b>Definition:</b> document.h:2330</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_aaa465706fda1e1ef4513ce877e0b4b69"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#aaa465706fda1e1ef4513ce877e0b4b69">rapidjson::GenericValue::operator==</a></div><div class="ttdeci">friend bool operator==(const T &amp;lhs, const GenericValue &amp;rhs)</div><div class="ttdoc">Equal-to operator with arbitrary types (symmetric version) </div><div class="ttdef"><b>Definition:</b> document.h:1002</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_a573712808dd5d8814c103cf55fd761b4"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a573712808dd5d8814c103cf55fd761b4">rapidjson::GenericValue::GetFloat</a></div><div class="ttdeci">float GetFloat() const</div><div class="ttdoc">Get the value as float type. </div><div class="ttdef"><b>Definition:</b> document.h:1751</div></div>
+<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">rapidjson::Type</a></div><div class="ttdeci">Type</div><div class="ttdoc">Type of JSON value </div><div class="ttdef"><b>Definition:</b> rapidjson.h:642</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_document_html_a8367a827588dd91d02e21ef945bec9f5"><div class="ttname"><a href="classrapidjson_1_1_generic_document.html#a8367a827588dd91d02e21ef945bec9f5">rapidjson::GenericDocument::Ch</a></div><div class="ttdeci">Encoding::Ch Ch</div><div class="ttdoc">Character type derived from Encoding. </div><div class="ttdef"><b>Definition:</b> document.h:2120</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_document_html_aa52c3016961f25ecd989d82839bce4e5"><div class="ttname"><a href="classrapidjson_1_1_generic_document.html#aa52c3016961f25ecd989d82839bce4e5">rapidjson::GenericDocument::GenericDocument</a></div><div class="ttdeci">GenericDocument(Type type, Allocator *allocator=0, size_t stackCapacity=kDefaultStackCapacity, StackAllocator *stackAllocator=0)</div><div class="ttdoc">Constructor </div><div class="ttdef"><b>Definition:</b> document.h:2131</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_adc312de070d03a63e6c692c9c61db156"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#adc312de070d03a63e6c692c9c61db156">rapidjson::GenericValue::operator[]</a></div><div class="ttdeci">GenericValue &amp; operator[](SizeType index)</div><div class="ttdoc">Get an element from array by index. </div><div class="ttdef"><b>Definition:</b> document.h:1582</div></div>
+<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4acf030b422a32c3647c7c5973bd4dd0a9"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4acf030b422a32c3647c7c5973bd4dd0a9">rapidjson::kObjectType</a></div><div class="ttdoc">object </div><div class="ttdef"><b>Definition:</b> rapidjson.h:646</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_a0ec9f34bef5890241d4bc882b73b1db4"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a0ec9f34bef5890241d4bc882b73b1db4">rapidjson::GenericValue::PushBack</a></div><div class="ttdeci">GenericValue &amp; PushBack(GenericValue &amp;value, Allocator &amp;allocator)</div><div class="ttdoc">Append a GenericValue at the end of the array. </div><div class="ttdef"><b>Definition:</b> document.h:1627</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_a8ec7fc7f221306925c7674dccbe02b07"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a8ec7fc7f221306925c7674dccbe02b07">rapidjson::GenericValue::operator[]</a></div><div class="ttdeci">GenericValue &amp; operator[](T *name)</div><div class="ttdoc">Get a value from an object associated with the name. </div><div class="ttdef"><b>Definition:</b> document.h:1111</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_a06f10ef54f5692ce08206c26624a21db"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a06f10ef54f5692ce08206c26624a21db">rapidjson::GenericValue::Swap</a></div><div class="ttdeci">GenericValue &amp; Swap(GenericValue &amp;other) RAPIDJSON_NOEXCEPT</div><div class="ttdoc">Exchange the contents of this value with those of other. </div><div class="ttdef"><b>Definition:</b> document.h:894</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_adb109ae9f12615efadf9277cb5e9c4ee"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#adb109ae9f12615efadf9277cb5e9c4ee">rapidjson::GenericValue::MemberEnd</a></div><div class="ttdeci">MemberIterator MemberEnd()</div><div class="ttdoc">Past-the-end member iterator </div><div class="ttdef"><b>Definition:</b> document.h:1164</div></div>
+<div class="ttc" id="structrapidjson_1_1_generic_string_ref_html_acd4d5ebac2b610ce647356aa52998002"><div class="ttname"><a href="structrapidjson_1_1_generic_string_ref.html#acd4d5ebac2b610ce647356aa52998002">rapidjson::GenericStringRef::GenericStringRef</a></div><div class="ttdeci">GenericStringRef(const CharType(&amp;str)[N]) RAPIDJSON_NOEXCEPT</div><div class="ttdoc">Create string reference from const character array </div><div class="ttdef"><b>Definition:</b> document.h:279</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_a852788b35257762cd8d6c4bf5c5d77bc"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a852788b35257762cd8d6c4bf5c5d77bc">rapidjson::GenericValue::GenericValue</a></div><div class="ttdeci">GenericValue(const std::basic_string&lt; Ch &gt; &amp;s, Allocator &amp;allocator)</div><div class="ttdoc">Constructor for copy-string from a string object (i.e. do make a copy of string) </div><div class="ttdef"><b>Definition:</b> document.h:766</div></div>
<div class="ttc" id="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g_html_ga6a2b1695c13e77ae425e3cbac980ccb5"><div class="ttname"><a href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a></div><div class="ttdeci">#define RAPIDJSON_UNLIKELY(x)</div><div class="ttdoc">Compiler branching hint for expression with low probability to be true. </div><div class="ttdef"><b>Definition:</b> rapidjson.h:476</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_a646b6d4d3d98799a0926d96ffa127a58"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a646b6d4d3d98799a0926d96ffa127a58">rapidjson::GenericValue::GenericValue</a></div><div class="ttdeci">GenericValue(Type type) RAPIDJSON_NOEXCEPT</div><div class="ttdoc">Constructor with JSON value type. </div><div class="ttdef"><b>Definition:</b> document.h:627</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_document_html"><div class="ttname"><a href="classrapidjson_1_1_generic_document.html">rapidjson::GenericDocument</a></div><div class="ttdoc">A document for parsing JSON text as DOM. </div><div class="ttdef"><b>Definition:</b> document.h:60</div></div>
-<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4a058c622e1e7d59419ae58b895cbce468"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a058c622e1e7d59419ae58b895cbce468">rapidjson::kArrayType</a></div><div class="ttdoc">array </div><div class="ttdef"><b>Definition:</b> rapidjson.h:636</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_a06ce0e14ec83b53c83e1b1699b53a25e"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a06ce0e14ec83b53c83e1b1699b53a25e">rapidjson::GenericValue::ValueIterator</a></div><div class="ttdeci">GenericValue * ValueIterator</div><div class="ttdoc">Value iterator for iterating in array. </div><div class="ttdef"><b>Definition:</b> document.h:585</div></div>
-<div class="ttc" id="rapidjson_8h_html_a52c941c3fdd646527cdcd42aa846a28a"><div class="ttname"><a href="rapidjson_8h.html#a52c941c3fdd646527cdcd42aa846a28a">RAPIDJSON_DELETE</a></div><div class="ttdeci">#define RAPIDJSON_DELETE(x)</div><div class="ttdoc">! customization point for global delete </div><div class="ttdef"><b>Definition:</b> rapidjson.h:618</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_adcdbc7fa85a9a41b78966d7e0dcc2ac4"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#adcdbc7fa85a9a41b78966d7e0dcc2ac4">rapidjson::GenericValue::Ch</a></div><div class="ttdeci">Encoding::Ch Ch</div><div class="ttdoc">Character type derived from Encoding. </div><div class="ttdef"><b>Definition:</b> document.h:581</div></div>
-<div class="ttc" id="structrapidjson_1_1_generic_value_1_1_number_1_1_u_html"><div class="ttname"><a href="structrapidjson_1_1_generic_value_1_1_number_1_1_u.html">rapidjson::GenericValue::Number::U</a></div><div class="ttdef"><b>Definition:</b> document.h:1992</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_aca5596987335016c1a7c2a9467baf80b"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#aca5596987335016c1a7c2a9467baf80b">rapidjson::GenericValue::MemberIterator</a></div><div class="ttdeci">GenericMemberIterator&lt; false, Encoding, Allocator &gt;::Iterator MemberIterator</div><div class="ttdoc">Member iterator for iterating in object. </div><div class="ttdef"><b>Definition:</b> document.h:583</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_ab933ad7ff8c9d08f73cebaecb700dbe9"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#ab933ad7ff8c9d08f73cebaecb700dbe9">rapidjson::GenericValue::GenericValue</a></div><div class="ttdeci">GenericValue(bool b) RAPIDJSON_NOEXCEPT</div><div class="ttdoc">Constructor for boolean value. </div><div class="ttdef"><b>Definition:</b> document.h:700</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_abba0c9ccfd90726f916c36013a2e9e19"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#abba0c9ccfd90726f916c36013a2e9e19">rapidjson::GenericValue::GenericValue</a></div><div class="ttdeci">GenericValue(int i) RAPIDJSON_NOEXCEPT</div><div class="ttdoc">Constructor for int value. </div><div class="ttdef"><b>Definition:</b> document.h:709</div></div>
-<div class="ttc" id="structrapidjson_1_1_generic_member_html_a8ffff2076e62d988a070a136da6ffca6"><div class="ttname"><a href="structrapidjson_1_1_generic_member.html#a8ffff2076e62d988a070a136da6ffca6">rapidjson::GenericMember::value</a></div><div class="ttdeci">GenericValue&lt; Encoding, Allocator &gt; value</div><div class="ttdoc">value of member. </div><div class="ttdef"><b>Definition:</b> document.h:71</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_ad1f8199e65662e0d52a13a1577d4e4a5"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#ad1f8199e65662e0d52a13a1577d4e4a5">rapidjson::GenericValue::GenericValue</a></div><div class="ttdeci">GenericValue() RAPIDJSON_NOEXCEPT</div><div class="ttdoc">Default constructor creates a null value. </div><div class="ttdef"><b>Definition:</b> document.h:597</div></div>
-<div class="ttc" id="structrapidjson_1_1_generic_string_ref_html_a29cf407c6aa2313f13dff78d6ce02687"><div class="ttname"><a href="structrapidjson_1_1_generic_string_ref.html#a29cf407c6aa2313f13dff78d6ce02687">rapidjson::GenericStringRef::GenericStringRef</a></div><div class="ttdeci">GenericStringRef(const CharType *str)</div><div class="ttdoc">Explicitly create string reference from const character pointer </div><div class="ttdef"><b>Definition:</b> document.h:306</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_a8b7e47c57a20d0de0cd19eee799ebd88"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a8b7e47c57a20d0de0cd19eee799ebd88">rapidjson::GenericValue::MemberCount</a></div><div class="ttdeci">SizeType MemberCount() const</div><div class="ttdoc">Get the number of members in the object. </div><div class="ttdef"><b>Definition:</b> document.h:1096</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_document_html_a0d63efcc43758ac3aed77e868233369d"><div class="ttname"><a href="classrapidjson_1_1_generic_document.html#a0d63efcc43758ac3aed77e868233369d">rapidjson::GenericDocument::swap</a></div><div class="ttdeci">friend void swap(GenericDocument &amp;a, GenericDocument &amp;b) RAPIDJSON_NOEXCEPT</div><div class="ttdoc">free-standing swap function helper </div><div class="ttdef"><b>Definition:</b> document.h:2228</div></div>
-<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4a952871e4326b527154fc8aac1ac1f6ff"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a952871e4326b527154fc8aac1ac1f6ff">rapidjson::kNullType</a></div><div class="ttdoc">null </div><div class="ttdef"><b>Definition:</b> rapidjson.h:632</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_document_html_a82b27e7b228eb46a23f99720063ab4fb"><div class="ttname"><a href="classrapidjson_1_1_generic_document.html#a82b27e7b228eb46a23f99720063ab4fb">rapidjson::GenericDocument::GenericDocument</a></div><div class="ttdeci">GenericDocument(Allocator *allocator=0, size_t stackCapacity=kDefaultStackCapacity, StackAllocator *stackAllocator=0)</div><div class="ttdoc">Constructor </div><div class="ttdef"><b>Definition:</b> document.h:2147</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_document_html_ab94c280c079a6837a24951cb4d8f337b"><div class="ttname"><a href="classrapidjson_1_1_generic_document.html#ab94c280c079a6837a24951cb4d8f337b">rapidjson::GenericDocument::GetParseError</a></div><div class="ttdeci">ParseErrorCode GetParseError() const</div><div class="ttdoc">Get the ParseErrorCode of last parsing. </div><div class="ttdef"><b>Definition:</b> document.h:2388</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_member_iterator_html_abfad2c34a97f82178cbf9464e958e2c2"><div class="ttname"><a href="classrapidjson_1_1_generic_member_iterator.html#abfad2c34a97f82178cbf9464e958e2c2">rapidjson::GenericMemberIterator::operator-</a></div><div class="ttdeci">DifferenceType operator-(ConstIterator that) const</div><div class="ttdoc">Distance </div><div class="ttdef"><b>Definition:</b> document.h:191</div></div>
-<div class="ttc" id="structrapidjson_1_1_generic_member_html_ae820eaa74b415a9073f3f3855f6c6607"><div class="ttname"><a href="structrapidjson_1_1_generic_member.html#ae820eaa74b415a9073f3f3855f6c6607">rapidjson::GenericMember::name</a></div><div class="ttdeci">GenericValue&lt; Encoding, Allocator &gt; name</div><div class="ttdoc">name of member (must be a string) </div><div class="ttdef"><b>Definition:</b> document.h:70</div></div>
-<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4ad6379da3dc04b83a591992bfb9fabba7"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4ad6379da3dc04b83a591992bfb9fabba7">rapidjson::kStringType</a></div><div class="ttdoc">string </div><div class="ttdef"><b>Definition:</b> rapidjson.h:637</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_a646b6d4d3d98799a0926d96ffa127a58"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a646b6d4d3d98799a0926d96ffa127a58">rapidjson::GenericValue::GenericValue</a></div><div class="ttdeci">GenericValue(Type type) RAPIDJSON_NOEXCEPT</div><div class="ttdoc">Constructor with JSON value type. </div><div class="ttdef"><b>Definition:</b> document.h:624</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_document_html"><div class="ttname"><a href="classrapidjson_1_1_generic_document.html">rapidjson::GenericDocument</a></div><div class="ttdoc">A document for parsing JSON text as DOM. </div><div class="ttdef"><b>Definition:</b> document.h:57</div></div>
+<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4a058c622e1e7d59419ae58b895cbce468"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a058c622e1e7d59419ae58b895cbce468">rapidjson::kArrayType</a></div><div class="ttdoc">array </div><div class="ttdef"><b>Definition:</b> rapidjson.h:647</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_a06ce0e14ec83b53c83e1b1699b53a25e"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a06ce0e14ec83b53c83e1b1699b53a25e">rapidjson::GenericValue::ValueIterator</a></div><div class="ttdeci">GenericValue * ValueIterator</div><div class="ttdoc">Value iterator for iterating in array. </div><div class="ttdef"><b>Definition:</b> document.h:582</div></div>
+<div class="ttc" id="rapidjson_8h_html_a52c941c3fdd646527cdcd42aa846a28a"><div class="ttname"><a href="rapidjson_8h.html#a52c941c3fdd646527cdcd42aa846a28a">RAPIDJSON_DELETE</a></div><div class="ttdeci">#define RAPIDJSON_DELETE(x)</div><div class="ttdoc">! customization point for global delete </div><div class="ttdef"><b>Definition:</b> rapidjson.h:629</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_adcdbc7fa85a9a41b78966d7e0dcc2ac4"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#adcdbc7fa85a9a41b78966d7e0dcc2ac4">rapidjson::GenericValue::Ch</a></div><div class="ttdeci">Encoding::Ch Ch</div><div class="ttdoc">Character type derived from Encoding. </div><div class="ttdef"><b>Definition:</b> document.h:578</div></div>
+<div class="ttc" id="structrapidjson_1_1_generic_value_1_1_number_1_1_u_html"><div class="ttname"><a href="structrapidjson_1_1_generic_value_1_1_number_1_1_u.html">rapidjson::GenericValue::Number::U</a></div><div class="ttdef"><b>Definition:</b> document.h:1989</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_aca5596987335016c1a7c2a9467baf80b"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#aca5596987335016c1a7c2a9467baf80b">rapidjson::GenericValue::MemberIterator</a></div><div class="ttdeci">GenericMemberIterator&lt; false, Encoding, Allocator &gt;::Iterator MemberIterator</div><div class="ttdoc">Member iterator for iterating in object. </div><div class="ttdef"><b>Definition:</b> document.h:580</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_ab933ad7ff8c9d08f73cebaecb700dbe9"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#ab933ad7ff8c9d08f73cebaecb700dbe9">rapidjson::GenericValue::GenericValue</a></div><div class="ttdeci">GenericValue(bool b) RAPIDJSON_NOEXCEPT</div><div class="ttdoc">Constructor for boolean value. </div><div class="ttdef"><b>Definition:</b> document.h:697</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_abba0c9ccfd90726f916c36013a2e9e19"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#abba0c9ccfd90726f916c36013a2e9e19">rapidjson::GenericValue::GenericValue</a></div><div class="ttdeci">GenericValue(int i) RAPIDJSON_NOEXCEPT</div><div class="ttdoc">Constructor for int value. </div><div class="ttdef"><b>Definition:</b> document.h:706</div></div>
+<div class="ttc" id="structrapidjson_1_1_generic_member_html_a8ffff2076e62d988a070a136da6ffca6"><div class="ttname"><a href="structrapidjson_1_1_generic_member.html#a8ffff2076e62d988a070a136da6ffca6">rapidjson::GenericMember::value</a></div><div class="ttdeci">GenericValue&lt; Encoding, Allocator &gt; value</div><div class="ttdoc">value of member. </div><div class="ttdef"><b>Definition:</b> document.h:68</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_ad1f8199e65662e0d52a13a1577d4e4a5"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#ad1f8199e65662e0d52a13a1577d4e4a5">rapidjson::GenericValue::GenericValue</a></div><div class="ttdeci">GenericValue() RAPIDJSON_NOEXCEPT</div><div class="ttdoc">Default constructor creates a null value. </div><div class="ttdef"><b>Definition:</b> document.h:594</div></div>
+<div class="ttc" id="structrapidjson_1_1_generic_string_ref_html_a29cf407c6aa2313f13dff78d6ce02687"><div class="ttname"><a href="structrapidjson_1_1_generic_string_ref.html#a29cf407c6aa2313f13dff78d6ce02687">rapidjson::GenericStringRef::GenericStringRef</a></div><div class="ttdeci">GenericStringRef(const CharType *str)</div><div class="ttdoc">Explicitly create string reference from const character pointer </div><div class="ttdef"><b>Definition:</b> document.h:303</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_a8b7e47c57a20d0de0cd19eee799ebd88"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a8b7e47c57a20d0de0cd19eee799ebd88">rapidjson::GenericValue::MemberCount</a></div><div class="ttdeci">SizeType MemberCount() const</div><div class="ttdoc">Get the number of members in the object. </div><div class="ttdef"><b>Definition:</b> document.h:1093</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_document_html_a0d63efcc43758ac3aed77e868233369d"><div class="ttname"><a href="classrapidjson_1_1_generic_document.html#a0d63efcc43758ac3aed77e868233369d">rapidjson::GenericDocument::swap</a></div><div class="ttdeci">friend void swap(GenericDocument &amp;a, GenericDocument &amp;b) RAPIDJSON_NOEXCEPT</div><div class="ttdoc">free-standing swap function helper </div><div class="ttdef"><b>Definition:</b> document.h:2225</div></div>
+<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4a952871e4326b527154fc8aac1ac1f6ff"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a952871e4326b527154fc8aac1ac1f6ff">rapidjson::kNullType</a></div><div class="ttdoc">null </div><div class="ttdef"><b>Definition:</b> rapidjson.h:643</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_document_html_a82b27e7b228eb46a23f99720063ab4fb"><div class="ttname"><a href="classrapidjson_1_1_generic_document.html#a82b27e7b228eb46a23f99720063ab4fb">rapidjson::GenericDocument::GenericDocument</a></div><div class="ttdeci">GenericDocument(Allocator *allocator=0, size_t stackCapacity=kDefaultStackCapacity, StackAllocator *stackAllocator=0)</div><div class="ttdoc">Constructor </div><div class="ttdef"><b>Definition:</b> document.h:2144</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_document_html_ab94c280c079a6837a24951cb4d8f337b"><div class="ttname"><a href="classrapidjson_1_1_generic_document.html#ab94c280c079a6837a24951cb4d8f337b">rapidjson::GenericDocument::GetParseError</a></div><div class="ttdeci">ParseErrorCode GetParseError() const</div><div class="ttdoc">Get the ParseErrorCode of last parsing. </div><div class="ttdef"><b>Definition:</b> document.h:2385</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_member_iterator_html_abfad2c34a97f82178cbf9464e958e2c2"><div class="ttname"><a href="classrapidjson_1_1_generic_member_iterator.html#abfad2c34a97f82178cbf9464e958e2c2">rapidjson::GenericMemberIterator::operator-</a></div><div class="ttdeci">DifferenceType operator-(ConstIterator that) const</div><div class="ttdoc">Distance </div><div class="ttdef"><b>Definition:</b> document.h:188</div></div>
+<div class="ttc" id="structrapidjson_1_1_generic_member_html_ae820eaa74b415a9073f3f3855f6c6607"><div class="ttname"><a href="structrapidjson_1_1_generic_member.html#ae820eaa74b415a9073f3f3855f6c6607">rapidjson::GenericMember::name</a></div><div class="ttdeci">GenericValue&lt; Encoding, Allocator &gt; name</div><div class="ttdoc">name of member (must be a string) </div><div class="ttdef"><b>Definition:</b> document.h:67</div></div>
+<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4ad6379da3dc04b83a591992bfb9fabba7"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4ad6379da3dc04b83a591992bfb9fabba7">rapidjson::kStringType</a></div><div class="ttdoc">string </div><div class="ttdef"><b>Definition:</b> rapidjson.h:648</div></div>
<div class="ttc" id="classrapidjson_1_1_encoded_input_stream_html"><div class="ttname"><a href="classrapidjson_1_1_encoded_input_stream.html">rapidjson::EncodedInputStream</a></div><div class="ttdoc">Input byte stream wrapper with a statically bound encoding. </div><div class="ttdef"><b>Definition:</b> encodedstream.h:39</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_document_html_ad92c6cd025d411258d1f2ad890e2ee3f"><div class="ttname"><a href="classrapidjson_1_1_generic_document.html#ad92c6cd025d411258d1f2ad890e2ee3f">rapidjson::GenericDocument::GetAllocator</a></div><div class="ttdeci">Allocator &amp; GetAllocator()</div><div class="ttdoc">Get the allocator of this document. </div><div class="ttdef"><b>Definition:</b> document.h:2409</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_a0220ddebe2f023fa75b643a50e90e559"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a0220ddebe2f023fa75b643a50e90e559">rapidjson::GenericValue::Member</a></div><div class="ttdeci">GenericMember&lt; Encoding, Allocator &gt; Member</div><div class="ttdoc">Name-value pair in an object. </div><div class="ttdef"><b>Definition:</b> document.h:578</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_a9131d6e49ac5a6bf8000d851381e4a25"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a9131d6e49ac5a6bf8000d851381e4a25">rapidjson::GenericValue::MemberReserve</a></div><div class="ttdeci">GenericValue &amp; MemberReserve(SizeType newCapacity, Allocator &amp;allocator)</div><div class="ttdoc">Request the object to have enough capacity to store members. </div><div class="ttdef"><b>Definition:</b> document.h:1175</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_document_html_ae4ee7d86b8c906c83dbe15e57eb6ac6a"><div class="ttname"><a href="classrapidjson_1_1_generic_document.html#ae4ee7d86b8c906c83dbe15e57eb6ac6a">rapidjson::GenericDocument::ParseStream</a></div><div class="ttdeci">GenericDocument &amp; ParseStream(InputStream &amp;is)</div><div class="ttdoc">Parse JSON text from an input stream </div><div class="ttdef"><b>Definition:</b> document.h:2275</div></div>
-<div class="ttc" id="structrapidjson_1_1_generic_string_ref_html_aa2a8eccae3d7eb14c30bc21afb7d6fba"><div class="ttname"><a href="structrapidjson_1_1_generic_string_ref.html#aa2a8eccae3d7eb14c30bc21afb7d6fba">rapidjson::GenericStringRef::Ch</a></div><div class="ttdeci">CharType Ch</div><div class="ttdoc">character type of the string </div><div class="ttdef"><b>Definition:</b> document.h:254</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_a05906384808645a2e798d29a9b2d441d"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a05906384808645a2e798d29a9b2d441d">rapidjson::GenericValue::EncodingType</a></div><div class="ttdeci">Encoding EncodingType</div><div class="ttdoc">Encoding type from template parameter. </div><div class="ttdef"><b>Definition:</b> document.h:579</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_a1f4835373e05abae52b91e1c6b7ec92c"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a1f4835373e05abae52b91e1c6b7ec92c">rapidjson::GenericValue::ObjectEmpty</a></div><div class="ttdeci">bool ObjectEmpty() const</div><div class="ttdoc">Check whether the object is empty. </div><div class="ttdef"><b>Definition:</b> document.h:1102</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_a78d80b935babeedbfa71914a8fe5baa7"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a78d80b935babeedbfa71914a8fe5baa7">rapidjson::GenericValue::GetBool</a></div><div class="ttdeci">bool GetBool() const</div><div class="ttdoc">Set boolean value </div><div class="ttdef"><b>Definition:</b> document.h:1081</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_document_html_aea842b533a858c9a3861451ad9e8642c"><div class="ttname"><a href="classrapidjson_1_1_generic_document.html#aea842b533a858c9a3861451ad9e8642c">rapidjson::GenericDocument::Parse</a></div><div class="ttdeci">GenericDocument &amp; Parse(const typename SourceEncoding::Ch *str)</div><div class="ttdoc">Parse JSON text from a read-only string (with Encoding conversion) </div><div class="ttdef"><b>Definition:</b> document.h:2322</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_aabb538578a3c1e60c86cda32d062bc1c"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#aabb538578a3c1e60c86cda32d062bc1c">rapidjson::GenericValue::SetString</a></div><div class="ttdeci">GenericValue &amp; SetString(StringRefType s)</div><div class="ttdoc">Set this value as a string without copying source string. </div><div class="ttdef"><b>Definition:</b> document.h:1792</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_a68d8d197ae1fb83d4dc202f9812af4cc"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a68d8d197ae1fb83d4dc202f9812af4cc">rapidjson::GenericValue::RemoveAllMembers</a></div><div class="ttdeci">void RemoveAllMembers()</div><div class="ttdoc">Remove all members in the object. </div><div class="ttdef"><b>Definition:</b> document.h:1426</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_member_iterator_html_aa30ffef74b3f4978b403024d81b484e4"><div class="ttname"><a href="classrapidjson_1_1_generic_member_iterator.html#aa30ffef74b3f4978b403024d81b484e4">rapidjson::GenericMemberIterator::GenericMemberIterator</a></div><div class="ttdeci">GenericMemberIterator(const NonConstIterator &amp;it)</div><div class="ttdoc">Iterator conversions to more const </div><div class="ttdef"><b>Definition:</b> document.h:153</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_aecc9d0a6aafe31f4fdf9f6e75e5f089c"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#aecc9d0a6aafe31f4fdf9f6e75e5f089c">rapidjson::GenericValue::operator=</a></div><div class="ttdeci">GenericValue &amp; operator=(StringRefType str) RAPIDJSON_NOEXCEPT</div><div class="ttdoc">Assignment of constant string reference (no copy) </div><div class="ttdef"><b>Definition:</b> document.h:853</div></div>
-<div class="ttc" id="namespacerapidjson_html_ace11b5b575baf1cccd5ba5f8586dcdc8"><div class="ttname"><a href="namespacerapidjson.html#ace11b5b575baf1cccd5ba5f8586dcdc8">rapidjson::Document</a></div><div class="ttdeci">GenericDocument&lt; UTF8&lt;&gt; &gt; Document</div><div class="ttdoc">GenericDocument with UTF8 encoding </div><div class="ttdef"><b>Definition:</b> document.h:2503</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_document_html_abf1cbab989b856f9d260787b2575750b"><div class="ttname"><a href="classrapidjson_1_1_generic_document.html#abf1cbab989b856f9d260787b2575750b">rapidjson::GenericDocument::Swap</a></div><div class="ttdeci">GenericDocument &amp; Swap(GenericDocument &amp;rhs) RAPIDJSON_NOEXCEPT</div><div class="ttdoc">Exchange the contents of this document with those of another. </div><div class="ttdef"><b>Definition:</b> document.h:2203</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_document_html_ad92c6cd025d411258d1f2ad890e2ee3f"><div class="ttname"><a href="classrapidjson_1_1_generic_document.html#ad92c6cd025d411258d1f2ad890e2ee3f">rapidjson::GenericDocument::GetAllocator</a></div><div class="ttdeci">Allocator &amp; GetAllocator()</div><div class="ttdoc">Get the allocator of this document. </div><div class="ttdef"><b>Definition:</b> document.h:2406</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_a0220ddebe2f023fa75b643a50e90e559"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a0220ddebe2f023fa75b643a50e90e559">rapidjson::GenericValue::Member</a></div><div class="ttdeci">GenericMember&lt; Encoding, Allocator &gt; Member</div><div class="ttdoc">Name-value pair in an object. </div><div class="ttdef"><b>Definition:</b> document.h:575</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_a9131d6e49ac5a6bf8000d851381e4a25"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a9131d6e49ac5a6bf8000d851381e4a25">rapidjson::GenericValue::MemberReserve</a></div><div class="ttdeci">GenericValue &amp; MemberReserve(SizeType newCapacity, Allocator &amp;allocator)</div><div class="ttdoc">Request the object to have enough capacity to store members. </div><div class="ttdef"><b>Definition:</b> document.h:1172</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_document_html_ae4ee7d86b8c906c83dbe15e57eb6ac6a"><div class="ttname"><a href="classrapidjson_1_1_generic_document.html#ae4ee7d86b8c906c83dbe15e57eb6ac6a">rapidjson::GenericDocument::ParseStream</a></div><div class="ttdeci">GenericDocument &amp; ParseStream(InputStream &amp;is)</div><div class="ttdoc">Parse JSON text from an input stream </div><div class="ttdef"><b>Definition:</b> document.h:2272</div></div>
+<div class="ttc" id="structrapidjson_1_1_generic_string_ref_html_aa2a8eccae3d7eb14c30bc21afb7d6fba"><div class="ttname"><a href="structrapidjson_1_1_generic_string_ref.html#aa2a8eccae3d7eb14c30bc21afb7d6fba">rapidjson::GenericStringRef::Ch</a></div><div class="ttdeci">CharType Ch</div><div class="ttdoc">character type of the string </div><div class="ttdef"><b>Definition:</b> document.h:251</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_a05906384808645a2e798d29a9b2d441d"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a05906384808645a2e798d29a9b2d441d">rapidjson::GenericValue::EncodingType</a></div><div class="ttdeci">Encoding EncodingType</div><div class="ttdoc">Encoding type from template parameter. </div><div class="ttdef"><b>Definition:</b> document.h:576</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_a1f4835373e05abae52b91e1c6b7ec92c"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a1f4835373e05abae52b91e1c6b7ec92c">rapidjson::GenericValue::ObjectEmpty</a></div><div class="ttdeci">bool ObjectEmpty() const</div><div class="ttdoc">Check whether the object is empty. </div><div class="ttdef"><b>Definition:</b> document.h:1099</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_a78d80b935babeedbfa71914a8fe5baa7"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a78d80b935babeedbfa71914a8fe5baa7">rapidjson::GenericValue::GetBool</a></div><div class="ttdeci">bool GetBool() const</div><div class="ttdoc">Set boolean value </div><div class="ttdef"><b>Definition:</b> document.h:1078</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_document_html_aea842b533a858c9a3861451ad9e8642c"><div class="ttname"><a href="classrapidjson_1_1_generic_document.html#aea842b533a858c9a3861451ad9e8642c">rapidjson::GenericDocument::Parse</a></div><div class="ttdeci">GenericDocument &amp; Parse(const typename SourceEncoding::Ch *str)</div><div class="ttdoc">Parse JSON text from a read-only string (with Encoding conversion) </div><div class="ttdef"><b>Definition:</b> document.h:2319</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_aabb538578a3c1e60c86cda32d062bc1c"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#aabb538578a3c1e60c86cda32d062bc1c">rapidjson::GenericValue::SetString</a></div><div class="ttdeci">GenericValue &amp; SetString(StringRefType s)</div><div class="ttdoc">Set this value as a string without copying source string. </div><div class="ttdef"><b>Definition:</b> document.h:1789</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_a68d8d197ae1fb83d4dc202f9812af4cc"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a68d8d197ae1fb83d4dc202f9812af4cc">rapidjson::GenericValue::RemoveAllMembers</a></div><div class="ttdeci">void RemoveAllMembers()</div><div class="ttdoc">Remove all members in the object. </div><div class="ttdef"><b>Definition:</b> document.h:1423</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_member_iterator_html_aa30ffef74b3f4978b403024d81b484e4"><div class="ttname"><a href="classrapidjson_1_1_generic_member_iterator.html#aa30ffef74b3f4978b403024d81b484e4">rapidjson::GenericMemberIterator::GenericMemberIterator</a></div><div class="ttdeci">GenericMemberIterator(const NonConstIterator &amp;it)</div><div class="ttdoc">Iterator conversions to more const </div><div class="ttdef"><b>Definition:</b> document.h:150</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_aecc9d0a6aafe31f4fdf9f6e75e5f089c"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#aecc9d0a6aafe31f4fdf9f6e75e5f089c">rapidjson::GenericValue::operator=</a></div><div class="ttdeci">GenericValue &amp; operator=(StringRefType str) RAPIDJSON_NOEXCEPT</div><div class="ttdoc">Assignment of constant string reference (no copy) </div><div class="ttdef"><b>Definition:</b> document.h:850</div></div>
+<div class="ttc" id="namespacerapidjson_html_ace11b5b575baf1cccd5ba5f8586dcdc8"><div class="ttname"><a href="namespacerapidjson.html#ace11b5b575baf1cccd5ba5f8586dcdc8">rapidjson::Document</a></div><div class="ttdeci">GenericDocument&lt; UTF8&lt;&gt; &gt; Document</div><div class="ttdoc">GenericDocument with UTF8 encoding </div><div class="ttdef"><b>Definition:</b> document.h:2500</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_document_html_abf1cbab989b856f9d260787b2575750b"><div class="ttname"><a href="classrapidjson_1_1_generic_document.html#abf1cbab989b856f9d260787b2575750b">rapidjson::GenericDocument::Swap</a></div><div class="ttdeci">GenericDocument &amp; Swap(GenericDocument &amp;rhs) RAPIDJSON_NOEXCEPT</div><div class="ttdoc">Exchange the contents of this document with those of another. </div><div class="ttdef"><b>Definition:</b> document.h:2200</div></div>
<div class="ttc" id="namespacerapidjson_html_a81379eb4e94a0386d71d15fda882ebc9a02748971d6ea0c5e22c69b8aa7f344ea"><div class="ttname"><a href="namespacerapidjson.html#a81379eb4e94a0386d71d15fda882ebc9a02748971d6ea0c5e22c69b8aa7f344ea">rapidjson::kParseInsituFlag</a></div><div class="ttdoc">In-situ(destructive) parsing. </div><div class="ttdef"><b>Definition:</b> reader.h:147</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_document_html_a7607bb42b51547e44bfd4cab35d8f20e"><div class="ttname"><a href="classrapidjson_1_1_generic_document.html#a7607bb42b51547e44bfd4cab35d8f20e">rapidjson::GenericDocument::HasParseError</a></div><div class="ttdeci">bool HasParseError() const</div><div class="ttdoc">Whether a parse error has occurred in the last parsing. </div><div class="ttdef"><b>Definition:</b> document.h:2385</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_document_html_a63e18887979da500ece6f0bd10d29b64"><div class="ttname"><a href="classrapidjson_1_1_generic_document.html#a63e18887979da500ece6f0bd10d29b64">rapidjson::GenericDocument::Populate</a></div><div class="ttdeci">GenericDocument &amp; Populate(Generator &amp;g)</div><div class="ttdoc">Populate this document by a generator which produces SAX events. </div><div class="ttdef"><b>Definition:</b> document.h:2236</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_a812e5c07f74a90566e7636330740eb6a"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a812e5c07f74a90566e7636330740eb6a">rapidjson::GenericValue::Capacity</a></div><div class="ttdeci">SizeType Capacity() const</div><div class="ttdoc">Get the capacity of array. </div><div class="ttdef"><b>Definition:</b> document.h:1563</div></div>
-<div class="ttc" id="structrapidjson_1_1_generic_string_ref_html"><div class="ttname"><a href="structrapidjson_1_1_generic_string_ref.html">rapidjson::GenericStringRef</a></div><div class="ttdoc">Reference to a constant string (not taking a copy) </div><div class="ttdef"><b>Definition:</b> document.h:253</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_a71b9e2ec1f7bf9e2f034126ca7b4945a"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a71b9e2ec1f7bf9e2f034126ca7b4945a">rapidjson::GenericValue::GenericValue</a></div><div class="ttdeci">GenericValue(double d) RAPIDJSON_NOEXCEPT</div><div class="ttdoc">Constructor for double value. </div><div class="ttdef"><b>Definition:</b> document.h:748</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_a5623c9039977ca0daf394e5c12f10c2d"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a5623c9039977ca0daf394e5c12f10c2d">rapidjson::GenericValue::SetBool</a></div><div class="ttdeci">GenericValue &amp; SetBool(bool b)</div><div class="ttdef"><b>Definition:</b> document.h:1084</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_abdd6a3b703a03aada4c186a2365698e7"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#abdd6a3b703a03aada4c186a2365698e7">rapidjson::GenericValue::End</a></div><div class="ttdeci">ConstValueIterator End() const</div><div class="ttdoc">Constant past-the-end element iterator </div><div class="ttdef"><b>Definition:</b> document.h:1603</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_document_html_a7607bb42b51547e44bfd4cab35d8f20e"><div class="ttname"><a href="classrapidjson_1_1_generic_document.html#a7607bb42b51547e44bfd4cab35d8f20e">rapidjson::GenericDocument::HasParseError</a></div><div class="ttdeci">bool HasParseError() const</div><div class="ttdoc">Whether a parse error has occurred in the last parsing. </div><div class="ttdef"><b>Definition:</b> document.h:2382</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_document_html_a63e18887979da500ece6f0bd10d29b64"><div class="ttname"><a href="classrapidjson_1_1_generic_document.html#a63e18887979da500ece6f0bd10d29b64">rapidjson::GenericDocument::Populate</a></div><div class="ttdeci">GenericDocument &amp; Populate(Generator &amp;g)</div><div class="ttdoc">Populate this document by a generator which produces SAX events. </div><div class="ttdef"><b>Definition:</b> document.h:2233</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_a812e5c07f74a90566e7636330740eb6a"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a812e5c07f74a90566e7636330740eb6a">rapidjson::GenericValue::Capacity</a></div><div class="ttdeci">SizeType Capacity() const</div><div class="ttdoc">Get the capacity of array. </div><div class="ttdef"><b>Definition:</b> document.h:1560</div></div>
+<div class="ttc" id="structrapidjson_1_1_generic_string_ref_html"><div class="ttname"><a href="structrapidjson_1_1_generic_string_ref.html">rapidjson::GenericStringRef</a></div><div class="ttdoc">Reference to a constant string (not taking a copy) </div><div class="ttdef"><b>Definition:</b> document.h:250</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_a71b9e2ec1f7bf9e2f034126ca7b4945a"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a71b9e2ec1f7bf9e2f034126ca7b4945a">rapidjson::GenericValue::GenericValue</a></div><div class="ttdeci">GenericValue(double d) RAPIDJSON_NOEXCEPT</div><div class="ttdoc">Constructor for double value. </div><div class="ttdef"><b>Definition:</b> document.h:745</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_a5623c9039977ca0daf394e5c12f10c2d"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a5623c9039977ca0daf394e5c12f10c2d">rapidjson::GenericValue::SetBool</a></div><div class="ttdeci">GenericValue &amp; SetBool(bool b)</div><div class="ttdef"><b>Definition:</b> document.h:1081</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_abdd6a3b703a03aada4c186a2365698e7"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#abdd6a3b703a03aada4c186a2365698e7">rapidjson::GenericValue::End</a></div><div class="ttdeci">ConstValueIterator End() const</div><div class="ttdoc">Constant past-the-end element iterator </div><div class="ttdef"><b>Definition:</b> document.h:1600</div></div>
<div class="ttc" id="classrapidjson_1_1_allocator_html"><div class="ttname"><a href="classrapidjson_1_1_allocator.html">rapidjson::Allocator</a></div><div class="ttdoc">Concept for allocating, resizing and freeing memory block. </div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_aaddbbbb35cd783f209f889cf8dea9570"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#aaddbbbb35cd783f209f889cf8dea9570">rapidjson::GenericValue::operator==</a></div><div class="ttdeci">bool operator==(const T &amp;rhs) const</div><div class="ttdoc">Equal-to operator with primitive types </div><div class="ttdef"><b>Definition:</b> document.h:986</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html">rapidjson::GenericValue</a></div><div class="ttdoc">Represents a JSON value. Use Value for UTF8 encoding and default allocator. </div><div class="ttdef"><b>Definition:</b> document.h:57</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_ad9399a2a69444c44a9db2f63c3aa3eae"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#ad9399a2a69444c44a9db2f63c3aa3eae">rapidjson::GenericValue::CopyFrom</a></div><div class="ttdeci">GenericValue &amp; CopyFrom(const GenericValue&lt; Encoding, SourceAllocator &gt; &amp;rhs, Allocator &amp;allocator, bool copyConstStrings=false)</div><div class="ttdoc">Deep-copy assignment from Value </div><div class="ttdef"><b>Definition:</b> document.h:885</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_a25069c76d045b058e54835d8c467c789"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a25069c76d045b058e54835d8c467c789">rapidjson::GenericValue::SetArray</a></div><div class="ttdeci">GenericValue &amp; SetArray()</div><div class="ttdoc">Set this value as an empty array. </div><div class="ttdef"><b>Definition:</b> document.h:1557</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_member_iterator_html"><div class="ttname"><a href="classrapidjson_1_1_generic_member_iterator.html">rapidjson::GenericMemberIterator</a></div><div class="ttdoc">(Constant) member iterator for a JSON object value </div><div class="ttdef"><b>Definition:</b> document.h:99</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_ab4babf200cac2dacb412a3ea279ddf5b"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#ab4babf200cac2dacb412a3ea279ddf5b">rapidjson::GenericValue::SetString</a></div><div class="ttdeci">GenericValue &amp; SetString(const Ch *s, Allocator &amp;allocator)</div><div class="ttdoc">Set this value as a string by copying from source string. </div><div class="ttdef"><b>Definition:</b> document.h:1810</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_ad3ebfa73796f4db4836ec47c2261700c"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#ad3ebfa73796f4db4836ec47c2261700c">rapidjson::GenericValue::Accept</a></div><div class="ttdeci">bool Accept(Handler &amp;handler) const</div><div class="ttdoc">Generate events of this value to a Handler. </div><div class="ttdef"><b>Definition:</b> document.h:1865</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_afe94e5e86a5b1a3fb605a9f8422f048b"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#afe94e5e86a5b1a3fb605a9f8422f048b">rapidjson::GenericValue::GenericValue</a></div><div class="ttdeci">GenericValue(float f) RAPIDJSON_NOEXCEPT</div><div class="ttdoc">Constructor for float value. </div><div class="ttdef"><b>Definition:</b> document.h:751</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_a121e40b5944be337189eb63b98b7e6ce"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a121e40b5944be337189eb63b98b7e6ce">rapidjson::GenericValue::EraseMember</a></div><div class="ttdeci">MemberIterator EraseMember(ConstMemberIterator first, ConstMemberIterator last)</div><div class="ttdoc">Remove members in the range [first, last) from an object. </div><div class="ttdef"><b>Definition:</b> document.h:1506</div></div>
-<div class="ttc" id="structrapidjson_1_1_generic_string_ref_html_a001276ee57cbcbd3c14449045c71e994"><div class="ttname"><a href="structrapidjson_1_1_generic_string_ref.html#a001276ee57cbcbd3c14449045c71e994">rapidjson::GenericStringRef::s</a></div><div class="ttdeci">const Ch *const s</div><div class="ttdoc">plain CharType pointer </div><div class="ttdef"><b>Definition:</b> document.h:326</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_object_html"><div class="ttname"><a href="classrapidjson_1_1_generic_object.html">rapidjson::GenericObject</a></div><div class="ttdoc">Helper class for accessing Value of object type. </div><div class="ttdef"><b>Definition:</b> document.h:559</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_a07d947971c59c9ce884b3c5205c9238f"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a07d947971c59c9ce884b3c5205c9238f">rapidjson::GenericValue::Begin</a></div><div class="ttdeci">ConstValueIterator Begin() const</div><div class="ttdoc">Constant element iterator </div><div class="ttdef"><b>Definition:</b> document.h:1600</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_a6cd2b09795c48d2892bebc0ae350d51f"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a6cd2b09795c48d2892bebc0ae350d51f">rapidjson::GenericValue::ConstMemberIterator</a></div><div class="ttdeci">GenericMemberIterator&lt; true, Encoding, Allocator &gt;::Iterator ConstMemberIterator</div><div class="ttdoc">Constant member iterator for iterating in object. </div><div class="ttdef"><b>Definition:</b> document.h:584</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_member_iterator_html_ac920af483c9e31a6746c22acf0dffc50"><div class="ttname"><a href="classrapidjson_1_1_generic_member_iterator.html#ac920af483c9e31a6746c22acf0dffc50">rapidjson::GenericMemberIterator::GenericMemberIterator</a></div><div class="ttdeci">GenericMemberIterator()</div><div class="ttdoc">Default constructor (singular value) </div><div class="ttdef"><b>Definition:</b> document.h:135</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_ad290f179591025e871bedbbac89ac276"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#ad290f179591025e871bedbbac89ac276">rapidjson::GenericValue::AddMember</a></div><div class="ttdeci">GenericValue &amp; AddMember(GenericValue &amp;name, StringRefType value, Allocator &amp;allocator)</div><div class="ttdoc">Add a constant string value as member (name-value pair) to the object. </div><div class="ttdef"><b>Definition:</b> document.h:1307</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_ad2935191ab28c2c2e472b739a9d58202"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#ad2935191ab28c2c2e472b739a9d58202">rapidjson::GenericValue::ValueType</a></div><div class="ttdeci">GenericValue&lt; Encoding, Allocator &gt; ValueType</div><div class="ttdoc">Value type of itself. </div><div class="ttdef"><b>Definition:</b> document.h:587</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_a41946915cb219a684f6ffc9341efee22"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a41946915cb219a684f6ffc9341efee22">rapidjson::GenericValue::PushBack</a></div><div class="ttdeci">GenericValue &amp; PushBack(StringRefType value, Allocator &amp;allocator)</div><div class="ttdoc">Append a constant string reference at the end of the array. </div><div class="ttdef"><b>Definition:</b> document.h:1653</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_a85dc131bdad8077ce970d580d333d15a"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a85dc131bdad8077ce970d580d333d15a">rapidjson::GenericValue::AddMember</a></div><div class="ttdeci">GenericValue &amp; AddMember(StringRefType name, GenericValue &amp;value, Allocator &amp;allocator)</div><div class="ttdoc">Add a member (name-value pair) to the object. </div><div class="ttdef"><b>Definition:</b> document.h:1379</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_aaddbbbb35cd783f209f889cf8dea9570"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#aaddbbbb35cd783f209f889cf8dea9570">rapidjson::GenericValue::operator==</a></div><div class="ttdeci">bool operator==(const T &amp;rhs) const</div><div class="ttdoc">Equal-to operator with primitive types </div><div class="ttdef"><b>Definition:</b> document.h:983</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html">rapidjson::GenericValue</a></div><div class="ttdoc">Represents a JSON value. Use Value for UTF8 encoding and default allocator. </div><div class="ttdef"><b>Definition:</b> document.h:54</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_ad9399a2a69444c44a9db2f63c3aa3eae"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#ad9399a2a69444c44a9db2f63c3aa3eae">rapidjson::GenericValue::CopyFrom</a></div><div class="ttdeci">GenericValue &amp; CopyFrom(const GenericValue&lt; Encoding, SourceAllocator &gt; &amp;rhs, Allocator &amp;allocator, bool copyConstStrings=false)</div><div class="ttdoc">Deep-copy assignment from Value </div><div class="ttdef"><b>Definition:</b> document.h:882</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_a25069c76d045b058e54835d8c467c789"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a25069c76d045b058e54835d8c467c789">rapidjson::GenericValue::SetArray</a></div><div class="ttdeci">GenericValue &amp; SetArray()</div><div class="ttdoc">Set this value as an empty array. </div><div class="ttdef"><b>Definition:</b> document.h:1554</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_member_iterator_html"><div class="ttname"><a href="classrapidjson_1_1_generic_member_iterator.html">rapidjson::GenericMemberIterator</a></div><div class="ttdoc">(Constant) member iterator for a JSON object value </div><div class="ttdef"><b>Definition:</b> document.h:96</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_ab4babf200cac2dacb412a3ea279ddf5b"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#ab4babf200cac2dacb412a3ea279ddf5b">rapidjson::GenericValue::SetString</a></div><div class="ttdeci">GenericValue &amp; SetString(const Ch *s, Allocator &amp;allocator)</div><div class="ttdoc">Set this value as a string by copying from source string. </div><div class="ttdef"><b>Definition:</b> document.h:1807</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_ad3ebfa73796f4db4836ec47c2261700c"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#ad3ebfa73796f4db4836ec47c2261700c">rapidjson::GenericValue::Accept</a></div><div class="ttdeci">bool Accept(Handler &amp;handler) const</div><div class="ttdoc">Generate events of this value to a Handler. </div><div class="ttdef"><b>Definition:</b> document.h:1862</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_afe94e5e86a5b1a3fb605a9f8422f048b"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#afe94e5e86a5b1a3fb605a9f8422f048b">rapidjson::GenericValue::GenericValue</a></div><div class="ttdeci">GenericValue(float f) RAPIDJSON_NOEXCEPT</div><div class="ttdoc">Constructor for float value. </div><div class="ttdef"><b>Definition:</b> document.h:748</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_a121e40b5944be337189eb63b98b7e6ce"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a121e40b5944be337189eb63b98b7e6ce">rapidjson::GenericValue::EraseMember</a></div><div class="ttdeci">MemberIterator EraseMember(ConstMemberIterator first, ConstMemberIterator last)</div><div class="ttdoc">Remove members in the range [first, last) from an object. </div><div class="ttdef"><b>Definition:</b> document.h:1503</div></div>
+<div class="ttc" id="structrapidjson_1_1_generic_string_ref_html_a001276ee57cbcbd3c14449045c71e994"><div class="ttname"><a href="structrapidjson_1_1_generic_string_ref.html#a001276ee57cbcbd3c14449045c71e994">rapidjson::GenericStringRef::s</a></div><div class="ttdeci">const Ch *const s</div><div class="ttdoc">plain CharType pointer </div><div class="ttdef"><b>Definition:</b> document.h:323</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_object_html"><div class="ttname"><a href="classrapidjson_1_1_generic_object.html">rapidjson::GenericObject</a></div><div class="ttdoc">Helper class for accessing Value of object type. </div><div class="ttdef"><b>Definition:</b> document.h:556</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_a07d947971c59c9ce884b3c5205c9238f"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a07d947971c59c9ce884b3c5205c9238f">rapidjson::GenericValue::Begin</a></div><div class="ttdeci">ConstValueIterator Begin() const</div><div class="ttdoc">Constant element iterator </div><div class="ttdef"><b>Definition:</b> document.h:1597</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_a6cd2b09795c48d2892bebc0ae350d51f"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a6cd2b09795c48d2892bebc0ae350d51f">rapidjson::GenericValue::ConstMemberIterator</a></div><div class="ttdeci">GenericMemberIterator&lt; true, Encoding, Allocator &gt;::Iterator ConstMemberIterator</div><div class="ttdoc">Constant member iterator for iterating in object. </div><div class="ttdef"><b>Definition:</b> document.h:581</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_member_iterator_html_ac920af483c9e31a6746c22acf0dffc50"><div class="ttname"><a href="classrapidjson_1_1_generic_member_iterator.html#ac920af483c9e31a6746c22acf0dffc50">rapidjson::GenericMemberIterator::GenericMemberIterator</a></div><div class="ttdeci">GenericMemberIterator()</div><div class="ttdoc">Default constructor (singular value) </div><div class="ttdef"><b>Definition:</b> document.h:132</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_ad290f179591025e871bedbbac89ac276"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#ad290f179591025e871bedbbac89ac276">rapidjson::GenericValue::AddMember</a></div><div class="ttdeci">GenericValue &amp; AddMember(GenericValue &amp;name, StringRefType value, Allocator &amp;allocator)</div><div class="ttdoc">Add a constant string value as member (name-value pair) to the object. </div><div class="ttdef"><b>Definition:</b> document.h:1304</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_ad2935191ab28c2c2e472b739a9d58202"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#ad2935191ab28c2c2e472b739a9d58202">rapidjson::GenericValue::ValueType</a></div><div class="ttdeci">GenericValue&lt; Encoding, Allocator &gt; ValueType</div><div class="ttdoc">Value type of itself. </div><div class="ttdef"><b>Definition:</b> document.h:584</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_a41946915cb219a684f6ffc9341efee22"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a41946915cb219a684f6ffc9341efee22">rapidjson::GenericValue::PushBack</a></div><div class="ttdeci">GenericValue &amp; PushBack(StringRefType value, Allocator &amp;allocator)</div><div class="ttdoc">Append a constant string reference at the end of the array. </div><div class="ttdef"><b>Definition:</b> document.h:1650</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_a85dc131bdad8077ce970d580d333d15a"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a85dc131bdad8077ce970d580d333d15a">rapidjson::GenericValue::AddMember</a></div><div class="ttdeci">GenericValue &amp; AddMember(StringRefType name, GenericValue &amp;value, Allocator &amp;allocator)</div><div class="ttdoc">Add a member (name-value pair) to the object. </div><div class="ttdef"><b>Definition:</b> document.h:1376</div></div>
<div class="ttc" id="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g_html_gabeba18d612187bad2ac62aed9276d47c"><div class="ttname"><a href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a></div><div class="ttdeci">#define RAPIDJSON_ASSERT(x)</div><div class="ttdoc">Assertion. </div><div class="ttdef"><b>Definition:</b> rapidjson.h:406</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_aa78e2eb30c6b918826eccf03f04f166b"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#aa78e2eb30c6b918826eccf03f04f166b">rapidjson::GenericValue::HasMember</a></div><div class="ttdeci">bool HasMember(const Ch *name) const</div><div class="ttdoc">Check whether a member exists in the object. </div><div class="ttdef"><b>Definition:</b> document.h:1192</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_ae6fe0576ff0336f6e2b09fe32f3ff809"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#ae6fe0576ff0336f6e2b09fe32f3ff809">rapidjson::GenericValue::operator!=</a></div><div class="ttdeci">bool operator!=(const T &amp;rhs) const</div><div class="ttdoc">Not-equal-to operator with arbitrary types </div><div class="ttdef"><b>Definition:</b> document.h:1000</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_a1f125e735577aae64c0306345de45563"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a1f125e735577aae64c0306345de45563">rapidjson::GenericValue::GenericValue</a></div><div class="ttdeci">GenericValue(uint64_t u64) RAPIDJSON_NOEXCEPT</div><div class="ttdoc">Constructor for uint64_t value. </div><div class="ttdef"><b>Definition:</b> document.h:736</div></div>
-<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a">rapidjson::kNumberType</a></div><div class="ttdoc">number </div><div class="ttdef"><b>Definition:</b> rapidjson.h:638</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_a18599e0d1a7e70a11b35f5e219390fea"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a18599e0d1a7e70a11b35f5e219390fea">rapidjson::GenericValue::GetStringLength</a></div><div class="ttdeci">SizeType GetStringLength() const</div><div class="ttdoc">Get the length of string. </div><div class="ttdef"><b>Definition:</b> document.h:1775</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_ad5bf5afd53f21f370f917041b3be4bfc"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#ad5bf5afd53f21f370f917041b3be4bfc">rapidjson::GenericValue::operator!=</a></div><div class="ttdeci">bool operator!=(const GenericValue&lt; Encoding, SourceAllocator &gt; &amp;rhs) const</div><div class="ttdoc">Not-equal-to operator </div><div class="ttdef"><b>Definition:</b> document.h:992</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_document_html_a7ba626bf84eb45a9bca0b7723bf47f3f"><div class="ttname"><a href="classrapidjson_1_1_generic_document.html#a7ba626bf84eb45a9bca0b7723bf47f3f">rapidjson::GenericDocument::ParseInsitu</a></div><div class="ttdeci">GenericDocument &amp; ParseInsitu(Ch *str)</div><div class="ttdoc">Parse JSON text from a mutable string </div><div class="ttdef"><b>Definition:</b> document.h:2299</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_document_html_a153e5a065ca9660673974f9df203be4b"><div class="ttname"><a href="classrapidjson_1_1_generic_document.html#a153e5a065ca9660673974f9df203be4b">rapidjson::GenericDocument::GetStackCapacity</a></div><div class="ttdeci">size_t GetStackCapacity() const</div><div class="ttdoc">Get the capacity of stack in bytes. </div><div class="ttdef"><b>Definition:</b> document.h:2415</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_a68ba73eeda7b9429ca05267065d3cc99"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a68ba73eeda7b9429ca05267065d3cc99">rapidjson::GenericValue::Erase</a></div><div class="ttdeci">ValueIterator Erase(ConstValueIterator pos)</div><div class="ttdoc">Remove an element of array by iterator. </div><div class="ttdef"><b>Definition:</b> document.h:1699</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_aa78e2eb30c6b918826eccf03f04f166b"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#aa78e2eb30c6b918826eccf03f04f166b">rapidjson::GenericValue::HasMember</a></div><div class="ttdeci">bool HasMember(const Ch *name) const</div><div class="ttdoc">Check whether a member exists in the object. </div><div class="ttdef"><b>Definition:</b> document.h:1189</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_ae6fe0576ff0336f6e2b09fe32f3ff809"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#ae6fe0576ff0336f6e2b09fe32f3ff809">rapidjson::GenericValue::operator!=</a></div><div class="ttdeci">bool operator!=(const T &amp;rhs) const</div><div class="ttdoc">Not-equal-to operator with arbitrary types </div><div class="ttdef"><b>Definition:</b> document.h:997</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_a1f125e735577aae64c0306345de45563"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a1f125e735577aae64c0306345de45563">rapidjson::GenericValue::GenericValue</a></div><div class="ttdeci">GenericValue(uint64_t u64) RAPIDJSON_NOEXCEPT</div><div class="ttdoc">Constructor for uint64_t value. </div><div class="ttdef"><b>Definition:</b> document.h:733</div></div>
+<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a">rapidjson::kNumberType</a></div><div class="ttdoc">number </div><div class="ttdef"><b>Definition:</b> rapidjson.h:649</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_a18599e0d1a7e70a11b35f5e219390fea"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a18599e0d1a7e70a11b35f5e219390fea">rapidjson::GenericValue::GetStringLength</a></div><div class="ttdeci">SizeType GetStringLength() const</div><div class="ttdoc">Get the length of string. </div><div class="ttdef"><b>Definition:</b> document.h:1772</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_ad5bf5afd53f21f370f917041b3be4bfc"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#ad5bf5afd53f21f370f917041b3be4bfc">rapidjson::GenericValue::operator!=</a></div><div class="ttdeci">bool operator!=(const GenericValue&lt; Encoding, SourceAllocator &gt; &amp;rhs) const</div><div class="ttdoc">Not-equal-to operator </div><div class="ttdef"><b>Definition:</b> document.h:989</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_document_html_a7ba626bf84eb45a9bca0b7723bf47f3f"><div class="ttname"><a href="classrapidjson_1_1_generic_document.html#a7ba626bf84eb45a9bca0b7723bf47f3f">rapidjson::GenericDocument::ParseInsitu</a></div><div class="ttdeci">GenericDocument &amp; ParseInsitu(Ch *str)</div><div class="ttdoc">Parse JSON text from a mutable string </div><div class="ttdef"><b>Definition:</b> document.h:2296</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_document_html_a153e5a065ca9660673974f9df203be4b"><div class="ttname"><a href="classrapidjson_1_1_generic_document.html#a153e5a065ca9660673974f9df203be4b">rapidjson::GenericDocument::GetStackCapacity</a></div><div class="ttdeci">size_t GetStackCapacity() const</div><div class="ttdoc">Get the capacity of stack in bytes. </div><div class="ttdef"><b>Definition:</b> document.h:2412</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_a68ba73eeda7b9429ca05267065d3cc99"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a68ba73eeda7b9429ca05267065d3cc99">rapidjson::GenericValue::Erase</a></div><div class="ttdeci">ValueIterator Erase(ConstValueIterator pos)</div><div class="ttdoc">Remove an element of array by iterator. </div><div class="ttdef"><b>Definition:</b> document.h:1696</div></div>
<div class="ttc" id="structrapidjson_1_1_generic_insitu_string_stream_html"><div class="ttname"><a href="structrapidjson_1_1_generic_insitu_string_stream.html">rapidjson::GenericInsituStringStream</a></div><div class="ttdoc">A read-write string stream. </div><div class="ttdef"><b>Definition:</b> fwd.h:52</div></div>
</div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->
diff --git a/zh-cn/fwd_8h_source.html b/zh-cn/fwd_8h_source.html
index 8eb4e76e..7f7e783b 100644
--- a/zh-cn/fwd_8h_source.html
+++ b/zh-cn/fwd_8h_source.html
@@ -83,28 +83,28 @@ $(document).ready(function(){initNavTree('fwd_8h_source.html','');});
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">// Tencent is pleased to support the open source community by making RapidJSON available.</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">// </span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">// Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved.</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment">// Licensed under the MIT License (the &quot;License&quot;); you may not use this file except</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment">// in compliance with the License. You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment">// http://opensource.org/licenses/MIT</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment">// Unless required by applicable law or agreed to in writing, software distributed </span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment">// under the License is distributed on an &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR </span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment">// CONDITIONS OF ANY KIND, either express or implied. See the License for the </span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment">// specific language governing permissions and limitations under the License.</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;</div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#ifndef RAPIDJSON_FWD_H_</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#define RAPIDJSON_FWD_H_</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="rapidjson_8h.html">rapidjson.h</a>&quot;</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;RAPIDJSON_NAMESPACE_BEGIN</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="comment">// encodings.h</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> CharType&gt; <span class="keyword">struct </span>UTF8;</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> CharType&gt; <span class="keyword">struct </span>UTF16;</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> CharType&gt; <span class="keyword">struct </span>UTF16BE;</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> CharType&gt; <span class="keyword">struct </span>UTF16LE;</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> CharType&gt; <span class="keyword">struct </span>UTF32;</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> CharType&gt; <span class="keyword">struct </span>UTF32BE;</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> CharType&gt; <span class="keyword">struct </span>UTF32LE;</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> CharType&gt; <span class="keyword">struct </span>ASCII;</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> CharType&gt; <span class="keyword">struct </span>AutoUTF;</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> SourceEncoding, <span class="keyword">typename</span> TargetEncoding&gt;</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="keyword">struct </span>Transcoder;</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;<span class="comment">// allocators.h</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;<span class="keyword">class </span>CrtAllocator;</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> BaseAllocator&gt;</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;<span class="keyword">class </span>MemoryPoolAllocator;</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;<span class="comment">// stream.h</span></div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> Encoding&gt;</div><div class="line"><a name="l00047"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#a021f77051e9f85188fc2f71ff5a15ebc"> 47</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structrapidjson_1_1_generic_string_stream.html">GenericStringStream</a>;</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;<span class="keyword">typedef</span> <a class="code" href="structrapidjson_1_1_generic_string_stream.html">GenericStringStream&lt;UTF8&lt;char&gt;</a> &gt; <a class="code" href="structrapidjson_1_1_generic_string_stream.html">StringStream</a>;</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> Encoding&gt;</div><div class="line"><a name="l00052"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#a64e957c8d9d7cd15b193ffc31410038e"> 52</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structrapidjson_1_1_generic_insitu_string_stream.html">GenericInsituStringStream</a>;</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;<span class="keyword">typedef</span> <a class="code" href="structrapidjson_1_1_generic_insitu_string_stream.html">GenericInsituStringStream&lt;UTF8&lt;char&gt;</a> &gt; <a class="code" href="structrapidjson_1_1_generic_insitu_string_stream.html">InsituStringStream</a>;</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;<span class="comment">// stringbuffer.h</span></div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> Encoding, <span class="keyword">typename</span> Allocator&gt;</div><div class="line"><a name="l00059"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#ac0765ea91f41539645c4b78689d03f21"> 59</a></span>&#160;<span class="keyword">class </span><a class="code" href="classrapidjson_1_1_generic_string_buffer.html">GenericStringBuffer</a>;</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;<span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_string_buffer.html">GenericStringBuffer&lt;UTF8&lt;char&gt;</a>, <a class="code" href="classrapidjson_1_1_crt_allocator.html">CrtAllocator</a>&gt; <a class="code" href="classrapidjson_1_1_generic_string_buffer.html">StringBuffer</a>;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;<span class="comment">// filereadstream.h</span></div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;<span class="keyword">class </span><a class="code" href="classrapidjson_1_1_file_read_stream.html">FileReadStream</a>;</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;<span class="comment">// filewritestream.h</span></div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;<span class="keyword">class </span><a class="code" href="classrapidjson_1_1_file_write_stream.html">FileWriteStream</a>;</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;<span class="comment">// memorybuffer.h</span></div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> Allocator&gt;</div><div class="line"><a name="l00074"></a><span class="lineno"><a class="line" href="structrapidjson_1_1_generic_memory_buffer.html"> 74</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structrapidjson_1_1_generic_memory_buffer.html">GenericMemoryBuffer</a>;</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;<span class="keyword">typedef</span> <a class="code" href="structrapidjson_1_1_generic_memory_buffer.html">GenericMemoryBuffer&lt;CrtAllocator&gt;</a> <a class="code" href="structrapidjson_1_1_generic_memory_buffer.html">MemoryBuffer</a>;</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160;<span class="comment">// memorystream.h</span></div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;<span class="keyword">struct </span><a class="code" href="structrapidjson_1_1_memory_stream.html">MemoryStream</a>;</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;<span class="comment">// reader.h</span></div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> Encoding, <span class="keyword">typename</span> Derived&gt;</div><div class="line"><a name="l00085"></a><span class="lineno"><a class="line" href="structrapidjson_1_1_base_reader_handler.html"> 85</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structrapidjson_1_1_base_reader_handler.html">BaseReaderHandler</a>;</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160;</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> SourceEncoding, <span class="keyword">typename</span> TargetEncoding, <span class="keyword">typename</span> StackAllocator&gt;</div><div class="line"><a name="l00088"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#ad5310edd1226f5b3ea82dc0d4d3740c6"> 88</a></span>&#160;<span class="keyword">class </span><a class="code" href="classrapidjson_1_1_generic_reader.html">GenericReader</a>;</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160;<span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_reader.html">GenericReader&lt;UTF8&lt;char&gt;</a>, <a class="code" href="structrapidjson_1_1_u_t_f8.html">UTF8&lt;char&gt;</a>, <a class="code" href="classrapidjson_1_1_crt_allocator.html">CrtAllocator</a>&gt; <a class="code" href="classrapidjson_1_1_generic_reader.html">Reader</a>;</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160;<span class="comment">// writer.h</span></div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> OutputStream, <span class="keyword">typename</span> SourceEncoding, <span class="keyword">typename</span> TargetEncoding, <span class="keyword">typename</span> StackAllocator, <span class="keywordtype">unsigned</span> writeFlags&gt;</div><div class="line"><a name="l00095"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_writer.html"> 95</a></span>&#160;<span class="keyword">class </span><a class="code" href="classrapidjson_1_1_writer.html">Writer</a>;</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160;</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;<span class="comment">// prettywriter.h</span></div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> OutputStream, <span class="keyword">typename</span> SourceEncoding, <span class="keyword">typename</span> TargetEncoding, <span class="keyword">typename</span> StackAllocator, <span class="keywordtype">unsigned</span> writeFlags&gt;</div><div class="line"><a name="l00100"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_pretty_writer.html"> 100</a></span>&#160;<span class="keyword">class </span><a class="code" href="classrapidjson_1_1_pretty_writer.html">PrettyWriter</a>;</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160;</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160;<span class="comment">// document.h</span></div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160;</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> Encoding, <span class="keyword">typename</span> Allocator&gt; </div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160;<span class="keyword">struct </span><a class="code" href="structrapidjson_1_1_generic_member.html">GenericMember</a>;</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160;</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">bool</span> Const, <span class="keyword">typename</span> Encoding, <span class="keyword">typename</span> Allocator&gt;</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160;<span class="keyword">class </span><a class="code" href="classrapidjson_1_1_generic_member_iterator.html">GenericMemberIterator</a>;</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160;</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> CharType&gt;</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160;<span class="keyword">struct </span><a class="code" href="structrapidjson_1_1_generic_string_ref.html">GenericStringRef</a>;</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160;</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> Encoding, <span class="keyword">typename</span> Allocator&gt; </div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160;<span class="keyword">class </span><a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>;</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160;</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160;<span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue&lt;UTF8&lt;char&gt;</a>, <a class="code" href="classrapidjson_1_1_memory_pool_allocator.html">MemoryPoolAllocator&lt;CrtAllocator&gt;</a> &gt; <a class="code" href="namespacerapidjson.html#aa65fc9fb381b2cbc54f98673eadd6505">Value</a>;</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160;</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> Encoding, <span class="keyword">typename</span> Allocator, <span class="keyword">typename</span> StackAllocator&gt;</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160;<span class="keyword">class </span><a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>;</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160;</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160;<span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument&lt;UTF8&lt;char&gt;</a>, <a class="code" href="classrapidjson_1_1_memory_pool_allocator.html">MemoryPoolAllocator&lt;CrtAllocator&gt;</a>, <a class="code" href="classrapidjson_1_1_crt_allocator.html">CrtAllocator</a>&gt; <a class="code" href="namespacerapidjson.html#ace11b5b575baf1cccd5ba5f8586dcdc8">Document</a>;</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160;</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160;<span class="comment">// pointer.h</span></div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160;</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> ValueType, <span class="keyword">typename</span> Allocator&gt;</div><div class="line"><a name="l00126"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#a080910f74d2f5046e6724280159cf374"> 126</a></span>&#160;<span class="keyword">class </span><a class="code" href="classrapidjson_1_1_generic_pointer.html">GenericPointer</a>;</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160;</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160;<span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_pointer.html">GenericPointer&lt;Value, CrtAllocator&gt;</a> <a class="code" href="classrapidjson_1_1_generic_pointer.html">Pointer</a>;</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160;</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160;<span class="comment">// schema.h</span></div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160;</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> SchemaDocumentType&gt;</div><div class="line"><a name="l00133"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_i_generic_remote_schema_document_provider.html"> 133</a></span>&#160;<span class="keyword">class </span><a class="code" href="classrapidjson_1_1_i_generic_remote_schema_document_provider.html">IGenericRemoteSchemaDocumentProvider</a>;</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160;</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> ValueT, <span class="keyword">typename</span> Allocator&gt;</div><div class="line"><a name="l00136"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#a52bbb5d64d1319495089e1713a0653cf"> 136</a></span>&#160;<span class="keyword">class </span><a class="code" href="classrapidjson_1_1_generic_schema_document.html">GenericSchemaDocument</a>;</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160;</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160;<span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_schema_document.html">GenericSchemaDocument&lt;Value, CrtAllocator&gt;</a> <a class="code" href="classrapidjson_1_1_generic_schema_document.html">SchemaDocument</a>;</div><div class="line"><a name="l00139"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#af91eb8eea47b79d75b23e29fa9c0abb5"> 139</a></span>&#160;<span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_i_generic_remote_schema_document_provider.html">IGenericRemoteSchemaDocumentProvider&lt;SchemaDocument&gt;</a> <a class="code" href="classrapidjson_1_1_i_generic_remote_schema_document_provider.html">IRemoteSchemaDocumentProvider</a>;</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160;</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160;<span class="keyword">template</span> &lt;</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <span class="keyword">typename</span> SchemaDocumentType,</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <span class="keyword">typename</span> OutputHandler,</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; <span class="keyword">typename</span> StateAllocator&gt;</div><div class="line"><a name="l00145"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_schema_validator.html"> 145</a></span>&#160;<span class="keyword">class </span><a class="code" href="classrapidjson_1_1_generic_schema_validator.html">GenericSchemaValidator</a>;</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160;</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160;<span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_schema_validator.html">GenericSchemaValidator&lt;SchemaDocument, BaseReaderHandler&lt;UTF8&lt;char&gt;</a>, <span class="keywordtype">void</span>&gt;, <a class="code" href="classrapidjson_1_1_crt_allocator.html">CrtAllocator</a>&gt; <a class="code" href="classrapidjson_1_1_generic_schema_validator.html">SchemaValidator</a>;</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160;</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160;RAPIDJSON_NAMESPACE_END</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160;</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160;<span class="preprocessor">#endif // RAPIDJSON_RAPIDJSONFWD_H_</span></div><div class="ttc" id="structrapidjson_1_1_generic_string_stream_html"><div class="ttname"><a href="structrapidjson_1_1_generic_string_stream.html">rapidjson::GenericStringStream</a></div><div class="ttdoc">Read-only string stream. </div><div class="ttdef"><b>Definition:</b> fwd.h:47</div></div>
<div class="ttc" id="classrapidjson_1_1_file_read_stream_html"><div class="ttname"><a href="classrapidjson_1_1_file_read_stream.html">rapidjson::FileReadStream</a></div><div class="ttdoc">File byte stream for input using fread(). </div><div class="ttdef"><b>Definition:</b> filereadstream.h:34</div></div>
-<div class="ttc" id="namespacerapidjson_html_aa65fc9fb381b2cbc54f98673eadd6505"><div class="ttname"><a href="namespacerapidjson.html#aa65fc9fb381b2cbc54f98673eadd6505">rapidjson::Value</a></div><div class="ttdeci">GenericValue&lt; UTF8&lt;&gt; &gt; Value</div><div class="ttdoc">GenericValue with UTF8 encoding </div><div class="ttdef"><b>Definition:</b> document.h:2107</div></div>
+<div class="ttc" id="namespacerapidjson_html_aa65fc9fb381b2cbc54f98673eadd6505"><div class="ttname"><a href="namespacerapidjson.html#aa65fc9fb381b2cbc54f98673eadd6505">rapidjson::Value</a></div><div class="ttdeci">GenericValue&lt; UTF8&lt;&gt; &gt; Value</div><div class="ttdoc">GenericValue with UTF8 encoding </div><div class="ttdef"><b>Definition:</b> document.h:2104</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_reader_html"><div class="ttname"><a href="classrapidjson_1_1_generic_reader.html">rapidjson::GenericReader</a></div><div class="ttdoc">SAX-style JSON parser. Use Reader for UTF8 encoding and default allocator. </div><div class="ttdef"><b>Definition:</b> fwd.h:88</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_string_buffer_html"><div class="ttname"><a href="classrapidjson_1_1_generic_string_buffer.html">rapidjson::GenericStringBuffer</a></div><div class="ttdoc">Represents an in-memory output stream. </div><div class="ttdef"><b>Definition:</b> fwd.h:59</div></div>
<div class="ttc" id="classrapidjson_1_1_pretty_writer_html"><div class="ttname"><a href="classrapidjson_1_1_pretty_writer.html">rapidjson::PrettyWriter</a></div><div class="ttdoc">Writer with indentation and spacing. </div><div class="ttdef"><b>Definition:</b> fwd.h:100</div></div>
<div class="ttc" id="structrapidjson_1_1_memory_stream_html"><div class="ttname"><a href="structrapidjson_1_1_memory_stream.html">rapidjson::MemoryStream</a></div><div class="ttdoc">Represents an in-memory input byte stream. </div><div class="ttdef"><b>Definition:</b> memorystream.h:40</div></div>
<div class="ttc" id="structrapidjson_1_1_generic_memory_buffer_html"><div class="ttname"><a href="structrapidjson_1_1_generic_memory_buffer.html">rapidjson::GenericMemoryBuffer</a></div><div class="ttdoc">Represents an in-memory output byte stream. </div><div class="ttdef"><b>Definition:</b> fwd.h:74</div></div>
-<div class="ttc" id="structrapidjson_1_1_generic_member_html"><div class="ttname"><a href="structrapidjson_1_1_generic_member.html">rapidjson::GenericMember</a></div><div class="ttdoc">Name-value pair in a JSON object value. </div><div class="ttdef"><b>Definition:</b> document.h:69</div></div>
+<div class="ttc" id="structrapidjson_1_1_generic_member_html"><div class="ttname"><a href="structrapidjson_1_1_generic_member.html">rapidjson::GenericMember</a></div><div class="ttdoc">Name-value pair in a JSON object value. </div><div class="ttdef"><b>Definition:</b> document.h:66</div></div>
<div class="ttc" id="classrapidjson_1_1_crt_allocator_html"><div class="ttname"><a href="classrapidjson_1_1_crt_allocator.html">rapidjson::CrtAllocator</a></div><div class="ttdoc">C-runtime library allocator. </div><div class="ttdef"><b>Definition:</b> allocators.h:75</div></div>
<div class="ttc" id="classrapidjson_1_1_file_write_stream_html"><div class="ttname"><a href="classrapidjson_1_1_file_write_stream.html">rapidjson::FileWriteStream</a></div><div class="ttdoc">Wrapper of C file stream for output using fwrite(). </div><div class="ttdef"><b>Definition:</b> filewritestream.h:32</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_pointer_html"><div class="ttname"><a href="classrapidjson_1_1_generic_pointer.html">rapidjson::GenericPointer</a></div><div class="ttdoc">Represents a JSON Pointer. Use Pointer for UTF8 encoding and default allocator. </div><div class="ttdef"><b>Definition:</b> fwd.h:126</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_schema_document_html"><div class="ttname"><a href="classrapidjson_1_1_generic_schema_document.html">rapidjson::GenericSchemaDocument</a></div><div class="ttdoc">JSON schema document. </div><div class="ttdef"><b>Definition:</b> fwd.h:136</div></div>
<div class="ttc" id="classrapidjson_1_1_i_generic_remote_schema_document_provider_html"><div class="ttname"><a href="classrapidjson_1_1_i_generic_remote_schema_document_provider.html">rapidjson::IGenericRemoteSchemaDocumentProvider</a></div><div class="ttdef"><b>Definition:</b> fwd.h:133</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_document_html"><div class="ttname"><a href="classrapidjson_1_1_generic_document.html">rapidjson::GenericDocument</a></div><div class="ttdoc">A document for parsing JSON text as DOM. </div><div class="ttdef"><b>Definition:</b> document.h:60</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_document_html"><div class="ttname"><a href="classrapidjson_1_1_generic_document.html">rapidjson::GenericDocument</a></div><div class="ttdoc">A document for parsing JSON text as DOM. </div><div class="ttdef"><b>Definition:</b> document.h:57</div></div>
<div class="ttc" id="classrapidjson_1_1_writer_html"><div class="ttname"><a href="classrapidjson_1_1_writer.html">rapidjson::Writer</a></div><div class="ttdoc">JSON writer </div><div class="ttdef"><b>Definition:</b> fwd.h:95</div></div>
<div class="ttc" id="structrapidjson_1_1_base_reader_handler_html"><div class="ttname"><a href="structrapidjson_1_1_base_reader_handler.html">rapidjson::BaseReaderHandler</a></div><div class="ttdoc">Default implementation of Handler. </div><div class="ttdef"><b>Definition:</b> fwd.h:85</div></div>
<div class="ttc" id="rapidjson_8h_html"><div class="ttname"><a href="rapidjson_8h.html">rapidjson.h</a></div><div class="ttdoc">common definitions and configuration </div></div>
-<div class="ttc" id="namespacerapidjson_html_ace11b5b575baf1cccd5ba5f8586dcdc8"><div class="ttname"><a href="namespacerapidjson.html#ace11b5b575baf1cccd5ba5f8586dcdc8">rapidjson::Document</a></div><div class="ttdeci">GenericDocument&lt; UTF8&lt;&gt; &gt; Document</div><div class="ttdoc">GenericDocument with UTF8 encoding </div><div class="ttdef"><b>Definition:</b> document.h:2503</div></div>
+<div class="ttc" id="namespacerapidjson_html_ace11b5b575baf1cccd5ba5f8586dcdc8"><div class="ttname"><a href="namespacerapidjson.html#ace11b5b575baf1cccd5ba5f8586dcdc8">rapidjson::Document</a></div><div class="ttdeci">GenericDocument&lt; UTF8&lt;&gt; &gt; Document</div><div class="ttdoc">GenericDocument with UTF8 encoding </div><div class="ttdef"><b>Definition:</b> document.h:2500</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_schema_validator_html"><div class="ttname"><a href="classrapidjson_1_1_generic_schema_validator.html">rapidjson::GenericSchemaValidator</a></div><div class="ttdoc">JSON Schema Validator. </div><div class="ttdef"><b>Definition:</b> fwd.h:145</div></div>
<div class="ttc" id="structrapidjson_1_1_u_t_f8_html"><div class="ttname"><a href="structrapidjson_1_1_u_t_f8.html">rapidjson::UTF8</a></div><div class="ttdoc">UTF-8 encoding. </div><div class="ttdef"><b>Definition:</b> encodings.h:96</div></div>
-<div class="ttc" id="structrapidjson_1_1_generic_string_ref_html"><div class="ttname"><a href="structrapidjson_1_1_generic_string_ref.html">rapidjson::GenericStringRef</a></div><div class="ttdoc">Reference to a constant string (not taking a copy) </div><div class="ttdef"><b>Definition:</b> document.h:253</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html">rapidjson::GenericValue</a></div><div class="ttdoc">Represents a JSON value. Use Value for UTF8 encoding and default allocator. </div><div class="ttdef"><b>Definition:</b> document.h:57</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_member_iterator_html"><div class="ttname"><a href="classrapidjson_1_1_generic_member_iterator.html">rapidjson::GenericMemberIterator</a></div><div class="ttdoc">(Constant) member iterator for a JSON object value </div><div class="ttdef"><b>Definition:</b> document.h:99</div></div>
+<div class="ttc" id="structrapidjson_1_1_generic_string_ref_html"><div class="ttname"><a href="structrapidjson_1_1_generic_string_ref.html">rapidjson::GenericStringRef</a></div><div class="ttdoc">Reference to a constant string (not taking a copy) </div><div class="ttdef"><b>Definition:</b> document.h:250</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html">rapidjson::GenericValue</a></div><div class="ttdoc">Represents a JSON value. Use Value for UTF8 encoding and default allocator. </div><div class="ttdef"><b>Definition:</b> document.h:54</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_member_iterator_html"><div class="ttname"><a href="classrapidjson_1_1_generic_member_iterator.html">rapidjson::GenericMemberIterator</a></div><div class="ttdoc">(Constant) member iterator for a JSON object value </div><div class="ttdef"><b>Definition:</b> document.h:96</div></div>
<div class="ttc" id="classrapidjson_1_1_memory_pool_allocator_html"><div class="ttname"><a href="classrapidjson_1_1_memory_pool_allocator.html">rapidjson::MemoryPoolAllocator</a></div><div class="ttdoc">Default memory allocator used by the parser and DOM. </div><div class="ttdef"><b>Definition:</b> allocators.h:115</div></div>
<div class="ttc" id="structrapidjson_1_1_generic_insitu_string_stream_html"><div class="ttname"><a href="structrapidjson_1_1_generic_insitu_string_stream.html">rapidjson::GenericInsituStringStream</a></div><div class="ttdoc">A read-write string stream. </div><div class="ttdef"><b>Definition:</b> fwd.h:52</div></div>
</div><!-- fragment --></div><!-- contents -->
diff --git a/zh-cn/globals.html b/zh-cn/globals.html
index 7a0a400a..3ce929d3 100644
--- a/zh-cn/globals.html
+++ b/zh-cn/globals.html
@@ -132,6 +132,9 @@ $(document).ready(function(){initNavTree('globals.html','');});
<li>RAPIDJSON_NO_SIZETYPEDEFINE
: <a class="el" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga250603aa9e2a12429b25ba0c8108ad4f">rapidjson.h</a>
</li>
+<li>RAPIDJSON_NOEXCEPT_ASSERT
+: <a class="el" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga2b2a0d9143aa4fb31205a85b34c43952">rapidjson.h</a>
+</li>
<li>RAPIDJSON_PARSE_DEFAULT_FLAGS
: <a class="el" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga77005e892e6601599beaf421b0395c31">reader.h</a>
</li>
diff --git a/zh-cn/globals_defs.html b/zh-cn/globals_defs.html
index 23328246..ebb767f4 100644
--- a/zh-cn/globals_defs.html
+++ b/zh-cn/globals_defs.html
@@ -132,6 +132,9 @@ $(document).ready(function(){initNavTree('globals_defs.html','');});
<li>RAPIDJSON_NO_SIZETYPEDEFINE
: <a class="el" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga250603aa9e2a12429b25ba0c8108ad4f">rapidjson.h</a>
</li>
+<li>RAPIDJSON_NOEXCEPT_ASSERT
+: <a class="el" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga2b2a0d9143aa4fb31205a85b34c43952">rapidjson.h</a>
+</li>
<li>RAPIDJSON_PARSE_DEFAULT_FLAGS
: <a class="el" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga77005e892e6601599beaf421b0395c31">reader.h</a>
</li>
diff --git a/zh-cn/group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html b/zh-cn/group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html
index 33a0f4f0..3a71d619 100644
--- a/zh-cn/group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html
+++ b/zh-cn/group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html
@@ -138,6 +138,9 @@ $(document).ready(function(){initNavTree('group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_
<tr class="memitem:ga6a2b1695c13e77ae425e3cbac980ccb5"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(x)&#160;&#160;&#160;(x)</td></tr>
<tr class="memdesc:ga6a2b1695c13e77ae425e3cbac980ccb5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compiler branching hint for expression with low probability to be true. <a href="#ga6a2b1695c13e77ae425e3cbac980ccb5">更多...</a><br /></td></tr>
<tr class="separator:ga6a2b1695c13e77ae425e3cbac980ccb5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga2b2a0d9143aa4fb31205a85b34c43952"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga2b2a0d9143aa4fb31205a85b34c43952">RAPIDJSON_NOEXCEPT_ASSERT</a>(x)&#160;&#160;&#160;<a class="el" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(x)</td></tr>
+<tr class="memdesc:ga2b2a0d9143aa4fb31205a85b34c43952"><td class="mdescLeft">&#160;</td><td class="mdescRight">Assertion (in non-throwing contexts). <a href="#ga2b2a0d9143aa4fb31205a85b34c43952">更多...</a><br /></td></tr>
+<tr class="separator:ga2b2a0d9143aa4fb31205a85b34c43952"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga77005e892e6601599beaf421b0395c31"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga77005e892e6601599beaf421b0395c31">RAPIDJSON_PARSE_DEFAULT_FLAGS</a>&#160;&#160;&#160;kParseNoFlags</td></tr>
<tr class="memdesc:ga77005e892e6601599beaf421b0395c31"><td class="mdescLeft">&#160;</td><td class="mdescRight">User-defined kParseDefaultFlags definition. <a href="#ga77005e892e6601599beaf421b0395c31">更多...</a><br /></td></tr>
<tr class="separator:ga77005e892e6601599beaf421b0395c31"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -335,6 +338,28 @@ $(document).ready(function(){initNavTree('group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_
</div>
</div>
+<a id="ga2b2a0d9143aa4fb31205a85b34c43952"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga2b2a0d9143aa4fb31205a85b34c43952">&#9670;&nbsp;</a></span>RAPIDJSON_NOEXCEPT_ASSERT</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define RAPIDJSON_NOEXCEPT_ASSERT</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">x</td><td>)</td>
+ <td>&#160;&#160;&#160;<a class="el" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(x)</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Assertion (in non-throwing contexts). </p>
+<p>Some functions provide a <code>noexcept</code> guarantee, if the compiler supports it. In these cases, the <a class="el" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a> macro cannot be overridden to throw an exception. This macro adds a separate customization point for such cases.</p>
+<p>Defaults to C <code>assert()</code> (as <a class="el" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>), if <code>noexcept</code> is supported, and to <a class="el" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a> otherwise. </p>
+
+</div>
+</div>
<a id="ga77005e892e6601599beaf421b0395c31"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga77005e892e6601599beaf421b0395c31">&#9670;&nbsp;</a></span>RAPIDJSON_PARSE_DEFAULT_FLAGS</h2>
diff --git a/zh-cn/group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.js b/zh-cn/group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.js
index aacc9b3d..2170e3ba 100644
--- a/zh-cn/group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.js
+++ b/zh-cn/group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.js
@@ -11,6 +11,7 @@ var group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g =
[ "RAPIDJSON_NAMESPACE", "group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga743a79d3af927391fe3eb5c979136899", null ],
[ "RAPIDJSON_NO_INT64DEFINE", "group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga7f4e50c35dae3b015390daa6d48ce23c", null ],
[ "RAPIDJSON_NO_SIZETYPEDEFINE", "group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga250603aa9e2a12429b25ba0c8108ad4f", null ],
+ [ "RAPIDJSON_NOEXCEPT_ASSERT", "group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga2b2a0d9143aa4fb31205a85b34c43952", null ],
[ "RAPIDJSON_PARSE_DEFAULT_FLAGS", "group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga77005e892e6601599beaf421b0395c31", null ],
[ "RAPIDJSON_PATCH_VERSION", "group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gaf967d31be43666ce7f53756d73bd1cdf", null ],
[ "RAPIDJSON_SIMD", "group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga0ccf72f3ebc4b3306ab669f95ca5c64b", null ],
diff --git a/zh-cn/ieee754_8h_source.html b/zh-cn/ieee754_8h_source.html
index a3062dbc..8aeaa11f 100644
--- a/zh-cn/ieee754_8h_source.html
+++ b/zh-cn/ieee754_8h_source.html
@@ -81,7 +81,7 @@ $(document).ready(function(){initNavTree('ieee754_8h_source.html','');});
<div class="title">ieee754.h</div> </div>
</div><!--header-->
<div class="contents">
-<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">// Tencent is pleased to support the open source community by making RapidJSON available.</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">// </span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">// Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved.</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment">// Licensed under the MIT License (the &quot;License&quot;); you may not use this file except</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment">// in compliance with the License. You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment">// http://opensource.org/licenses/MIT</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment">// Unless required by applicable law or agreed to in writing, software distributed </span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment">// under the License is distributed on an &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR </span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment">// CONDITIONS OF ANY KIND, either express or implied. See the License for the </span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment">// specific language governing permissions and limitations under the License.</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;</div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#ifndef RAPIDJSON_IEEE754_</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#define RAPIDJSON_IEEE754_</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#include &quot;../rapidjson.h&quot;</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;RAPIDJSON_NAMESPACE_BEGIN</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="keyword">namespace </span>internal {</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="keyword">class </span>Double {</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; Double() {}</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; Double(<span class="keywordtype">double</span> d) : d_(d) {}</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; Double(uint64_t u) : u_(u) {}</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keywordtype">double</span> <a class="code" href="namespacerapidjson.html#aa65fc9fb381b2cbc54f98673eadd6505">Value</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> d_; }</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; uint64_t Uint64Value()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> u_; }</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keywordtype">double</span> NextPositiveDouble()<span class="keyword"> const </span>{</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(!Sign());</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keywordflow">return</span> Double(u_ + 1).Value();</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; }</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordtype">bool</span> Sign()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (u_ &amp; kSignMask) != 0; }</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; uint64_t Significand()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> u_ &amp; kSignificandMask; }</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keywordtype">int</span> Exponent()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(((u_ &amp; kExponentMask) &gt;&gt; kSignificandSize) - kExponentBias); }</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keywordtype">bool</span> IsNan()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (u_ &amp; kExponentMask) == kExponentMask &amp;&amp; Significand() != 0; }</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keywordtype">bool</span> IsInf()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (u_ &amp; kExponentMask) == kExponentMask &amp;&amp; Significand() == 0; }</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keywordtype">bool</span> IsNanOrInf()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (u_ &amp; kExponentMask) == kExponentMask; }</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keywordtype">bool</span> IsNormal()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (u_ &amp; kExponentMask) != 0 || Significand() == 0; }</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keywordtype">bool</span> IsZero()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (u_ &amp; (kExponentMask | kSignificandMask)) == 0; }</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; uint64_t IntegerSignificand()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> IsNormal() ? Significand() | kHiddenBit : Significand(); }</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keywordtype">int</span> IntegerExponent()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (IsNormal() ? Exponent() : kDenormalExponent) - kSignificandSize; }</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; uint64_t ToBias()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (u_ &amp; kSignMask) ? ~u_ + 1 : u_ | kSignMask; }</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keyword">static</span> <span class="keywordtype">int</span> EffectiveSignificandSize(<span class="keywordtype">int</span> order) {</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keywordflow">if</span> (order &gt;= -1021)</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="keywordflow">return</span> 53;</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (order &lt;= -1074)</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keywordflow">return</span> order + 1074;</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; }</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> kSignificandSize = 52;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> kExponentBias = 0x3FF;</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> kDenormalExponent = 1 - kExponentBias;</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> uint64_t kSignMask = <a class="code" href="rapidjson_8h.html#aaee1245f375a71be1ac9b8a07ba5fb8f">RAPIDJSON_UINT64_C2</a>(0x80000000, 0x00000000);</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> uint64_t kExponentMask = <a class="code" href="rapidjson_8h.html#aaee1245f375a71be1ac9b8a07ba5fb8f">RAPIDJSON_UINT64_C2</a>(0x7FF00000, 0x00000000);</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> uint64_t kSignificandMask = <a class="code" href="rapidjson_8h.html#aaee1245f375a71be1ac9b8a07ba5fb8f">RAPIDJSON_UINT64_C2</a>(0x000FFFFF, 0xFFFFFFFF);</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> uint64_t kHiddenBit = <a class="code" href="rapidjson_8h.html#aaee1245f375a71be1ac9b8a07ba5fb8f">RAPIDJSON_UINT64_C2</a>(0x00100000, 0x00000000);</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keyword">union </span>{</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keywordtype">double</span> d_;</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; uint64_t u_;</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; };</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;};</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;} <span class="comment">// namespace internal</span></div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;RAPIDJSON_NAMESPACE_END</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160;<span class="preprocessor">#endif // RAPIDJSON_IEEE754_</span></div><div class="ttc" id="namespacerapidjson_html_aa65fc9fb381b2cbc54f98673eadd6505"><div class="ttname"><a href="namespacerapidjson.html#aa65fc9fb381b2cbc54f98673eadd6505">rapidjson::Value</a></div><div class="ttdeci">GenericValue&lt; UTF8&lt;&gt; &gt; Value</div><div class="ttdoc">GenericValue with UTF8 encoding </div><div class="ttdef"><b>Definition:</b> document.h:2107</div></div>
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">// Tencent is pleased to support the open source community by making RapidJSON available.</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">// </span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">// Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved.</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment">// Licensed under the MIT License (the &quot;License&quot;); you may not use this file except</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment">// in compliance with the License. You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment">// http://opensource.org/licenses/MIT</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment">// Unless required by applicable law or agreed to in writing, software distributed </span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment">// under the License is distributed on an &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR </span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment">// CONDITIONS OF ANY KIND, either express or implied. See the License for the </span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment">// specific language governing permissions and limitations under the License.</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;</div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#ifndef RAPIDJSON_IEEE754_</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#define RAPIDJSON_IEEE754_</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#include &quot;../rapidjson.h&quot;</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;RAPIDJSON_NAMESPACE_BEGIN</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="keyword">namespace </span>internal {</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="keyword">class </span>Double {</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; Double() {}</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; Double(<span class="keywordtype">double</span> d) : d_(d) {}</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; Double(uint64_t u) : u_(u) {}</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keywordtype">double</span> <a class="code" href="namespacerapidjson.html#aa65fc9fb381b2cbc54f98673eadd6505">Value</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> d_; }</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; uint64_t Uint64Value()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> u_; }</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keywordtype">double</span> NextPositiveDouble()<span class="keyword"> const </span>{</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(!Sign());</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keywordflow">return</span> Double(u_ + 1).Value();</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; }</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordtype">bool</span> Sign()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (u_ &amp; kSignMask) != 0; }</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; uint64_t Significand()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> u_ &amp; kSignificandMask; }</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keywordtype">int</span> Exponent()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(((u_ &amp; kExponentMask) &gt;&gt; kSignificandSize) - kExponentBias); }</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keywordtype">bool</span> IsNan()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (u_ &amp; kExponentMask) == kExponentMask &amp;&amp; Significand() != 0; }</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keywordtype">bool</span> IsInf()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (u_ &amp; kExponentMask) == kExponentMask &amp;&amp; Significand() == 0; }</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keywordtype">bool</span> IsNanOrInf()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (u_ &amp; kExponentMask) == kExponentMask; }</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keywordtype">bool</span> IsNormal()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (u_ &amp; kExponentMask) != 0 || Significand() == 0; }</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keywordtype">bool</span> IsZero()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (u_ &amp; (kExponentMask | kSignificandMask)) == 0; }</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; uint64_t IntegerSignificand()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> IsNormal() ? Significand() | kHiddenBit : Significand(); }</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keywordtype">int</span> IntegerExponent()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (IsNormal() ? Exponent() : kDenormalExponent) - kSignificandSize; }</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; uint64_t ToBias()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (u_ &amp; kSignMask) ? ~u_ + 1 : u_ | kSignMask; }</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keyword">static</span> <span class="keywordtype">int</span> EffectiveSignificandSize(<span class="keywordtype">int</span> order) {</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keywordflow">if</span> (order &gt;= -1021)</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="keywordflow">return</span> 53;</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (order &lt;= -1074)</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keywordflow">return</span> order + 1074;</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; }</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> kSignificandSize = 52;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> kExponentBias = 0x3FF;</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> kDenormalExponent = 1 - kExponentBias;</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> uint64_t kSignMask = <a class="code" href="rapidjson_8h.html#aaee1245f375a71be1ac9b8a07ba5fb8f">RAPIDJSON_UINT64_C2</a>(0x80000000, 0x00000000);</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> uint64_t kExponentMask = <a class="code" href="rapidjson_8h.html#aaee1245f375a71be1ac9b8a07ba5fb8f">RAPIDJSON_UINT64_C2</a>(0x7FF00000, 0x00000000);</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> uint64_t kSignificandMask = <a class="code" href="rapidjson_8h.html#aaee1245f375a71be1ac9b8a07ba5fb8f">RAPIDJSON_UINT64_C2</a>(0x000FFFFF, 0xFFFFFFFF);</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> uint64_t kHiddenBit = <a class="code" href="rapidjson_8h.html#aaee1245f375a71be1ac9b8a07ba5fb8f">RAPIDJSON_UINT64_C2</a>(0x00100000, 0x00000000);</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keyword">union </span>{</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keywordtype">double</span> d_;</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; uint64_t u_;</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; };</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;};</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;} <span class="comment">// namespace internal</span></div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;RAPIDJSON_NAMESPACE_END</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160;<span class="preprocessor">#endif // RAPIDJSON_IEEE754_</span></div><div class="ttc" id="namespacerapidjson_html_aa65fc9fb381b2cbc54f98673eadd6505"><div class="ttname"><a href="namespacerapidjson.html#aa65fc9fb381b2cbc54f98673eadd6505">rapidjson::Value</a></div><div class="ttdeci">GenericValue&lt; UTF8&lt;&gt; &gt; Value</div><div class="ttdoc">GenericValue with UTF8 encoding </div><div class="ttdef"><b>Definition:</b> document.h:2104</div></div>
<div class="ttc" id="rapidjson_8h_html_aaee1245f375a71be1ac9b8a07ba5fb8f"><div class="ttname"><a href="rapidjson_8h.html#aaee1245f375a71be1ac9b8a07ba5fb8f">RAPIDJSON_UINT64_C2</a></div><div class="ttdeci">#define RAPIDJSON_UINT64_C2(high32, low32)</div><div class="ttdoc">Construct a 64-bit literal by a pair of 32-bit integer. </div><div class="ttdef"><b>Definition:</b> rapidjson.h:289</div></div>
<div class="ttc" id="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g_html_gabeba18d612187bad2ac62aed9276d47c"><div class="ttname"><a href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a></div><div class="ttdeci">#define RAPIDJSON_ASSERT(x)</div><div class="ttdoc">Assertion. </div><div class="ttdef"><b>Definition:</b> rapidjson.h:406</div></div>
</div><!-- fragment --></div><!-- contents -->
diff --git a/zh-cn/meta_8h_source.html b/zh-cn/meta_8h_source.html
index 6b2983c2..91dbaaa5 100644
--- a/zh-cn/meta_8h_source.html
+++ b/zh-cn/meta_8h_source.html
@@ -81,9 +81,9 @@ $(document).ready(function(){initNavTree('meta_8h_source.html','');});
<div class="title">meta.h</div> </div>
</div><!--header-->
<div class="contents">
-<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">// Tencent is pleased to support the open source community by making RapidJSON available.</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">// </span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">// Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved.</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment">// Licensed under the MIT License (the &quot;License&quot;); you may not use this file except</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment">// in compliance with the License. You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment">// http://opensource.org/licenses/MIT</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment">// Unless required by applicable law or agreed to in writing, software distributed </span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment">// under the License is distributed on an &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR </span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment">// CONDITIONS OF ANY KIND, either express or implied. See the License for the </span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment">// specific language governing permissions and limitations under the License.</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;</div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#ifndef RAPIDJSON_INTERNAL_META_H_</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#define RAPIDJSON_INTERNAL_META_H_</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#include &quot;../rapidjson.h&quot;</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#ifdef __GNUC__</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;RAPIDJSON_DIAG_PUSH</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;RAPIDJSON_DIAG_OFF(effc++)</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor">#if defined(_MSC_VER) &amp;&amp; !defined(__clang__)</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;RAPIDJSON_DIAG_PUSH</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;RAPIDJSON_DIAG_OFF(6334)</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_CXX11_TYPETRAITS</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="preprocessor">#include &lt;type_traits&gt;</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="comment">//@cond RAPIDJSON_INTERNAL</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;RAPIDJSON_NAMESPACE_BEGIN</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="keyword">namespace </span>internal {</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;<span class="comment">// Helper to wrap/convert arbitrary types to void, useful for arbitrary type matching</span></div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt; <span class="keyword">struct </span>Void { <span class="keyword">typedef</span> <span class="keywordtype">void</span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">Type</a>; };</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;<span class="comment"></span><span class="comment">// BoolType, TrueType, FalseType</span></div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">bool</span> Cond&gt; <span class="keyword">struct </span>BoolType {</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> <a class="code" href="namespacerapidjson.html#aa65fc9fb381b2cbc54f98673eadd6505">Value</a> = Cond;</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keyword">typedef</span> BoolType <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">Type</a>;</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;};</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;<span class="keyword">typedef</span> BoolType&lt;true&gt; TrueType;</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;<span class="keyword">typedef</span> BoolType&lt;false&gt; FalseType;</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;<span class="comment"></span><span class="comment">// SelectIf, BoolExpr, NotExpr, AndExpr, OrExpr</span></div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">bool</span> C&gt; <span class="keyword">struct </span>SelectIfImpl { <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2&gt; <span class="keyword">struct </span>Apply { <span class="keyword">typedef</span> T1 <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">Type</a>; }; };</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;<span class="keyword">template</span> &lt;&gt; <span class="keyword">struct </span>SelectIfImpl&lt;false&gt; { <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2&gt; <span class="keyword">struct </span>Apply { <span class="keyword">typedef</span> T2 <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">Type</a>; }; };</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">bool</span> C, <span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2&gt; <span class="keyword">struct </span>SelectIfCond : SelectIfImpl&lt;C&gt;::template Apply&lt;T1,T2&gt; {};</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> C, <span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2&gt; <span class="keyword">struct </span>SelectIf : SelectIfCond&lt;C::Value, T1, T2&gt; {};</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">bool</span> Cond1, <span class="keywordtype">bool</span> Cond2&gt; <span class="keyword">struct </span>AndExprCond : FalseType {};</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;<span class="keyword">template</span> &lt;&gt; <span class="keyword">struct </span>AndExprCond&lt;true, true&gt; : TrueType {};</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">bool</span> Cond1, <span class="keywordtype">bool</span> Cond2&gt; <span class="keyword">struct </span>OrExprCond : TrueType {};</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;<span class="keyword">template</span> &lt;&gt; <span class="keyword">struct </span>OrExprCond&lt;false, false&gt; : FalseType {};</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> C&gt; <span class="keyword">struct </span>BoolExpr : SelectIf&lt;C,TrueType,FalseType&gt;<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">::Type</a> {};</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> C&gt; <span class="keyword">struct </span>NotExpr : SelectIf&lt;C,FalseType,TrueType&gt;<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">::Type</a> {};</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> C1, <span class="keyword">typename</span> C2&gt; <span class="keyword">struct </span>AndExpr : AndExprCond&lt;C1::Value, C2::Value&gt;<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">::Type</a> {};</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> C1, <span class="keyword">typename</span> C2&gt; <span class="keyword">struct </span>OrExpr : OrExprCond&lt;C1::Value, C2::Value&gt;<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">::Type</a> {};</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;<span class="comment"></span><span class="comment">// AddConst, MaybeAddConst, RemoveConst</span></div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt; <span class="keyword">struct </span>AddConst { <span class="keyword">typedef</span> <span class="keyword">const</span> T <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">Type</a>; };</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">bool</span> Constify, <span class="keyword">typename</span> T&gt; <span class="keyword">struct </span>MaybeAddConst : SelectIfCond&lt;Constify, const T, T&gt; {};</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt; <span class="keyword">struct </span>RemoveConst { <span class="keyword">typedef</span> T <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">Type</a>; };</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt; <span class="keyword">struct </span>RemoveConst&lt;const T&gt; { <span class="keyword">typedef</span> T <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">Type</a>; };</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160;</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;<span class="comment"></span><span class="comment">// IsSame, IsConst, IsMoreConst, IsPointer</span></div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T, <span class="keyword">typename</span> U&gt; <span class="keyword">struct </span>IsSame : FalseType {};</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt; <span class="keyword">struct </span>IsSame&lt;T, T&gt; : TrueType {};</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160;</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt; <span class="keyword">struct </span>IsConst : FalseType {};</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt; <span class="keyword">struct </span>IsConst&lt;const T&gt; : TrueType {};</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160;</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> CT, <span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160;<span class="keyword">struct </span>IsMoreConst</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; : AndExpr&lt;IsSame&lt;typename RemoveConst&lt;CT&gt;::Type, typename RemoveConst&lt;T&gt;::Type&gt;,</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; BoolType&lt;IsConst&lt;CT&gt;::Value &gt;= IsConst&lt;T&gt;::Value&gt; &gt;<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">::Type</a> {};</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt; <span class="keyword">struct </span>IsPointer : FalseType {};</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt; <span class="keyword">struct </span>IsPointer&lt;T*&gt; : TrueType {};</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;<span class="comment"></span><span class="comment">// IsBaseOf</span></div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_CXX11_TYPETRAITS</span></div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160;</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> B, <span class="keyword">typename</span> D&gt; <span class="keyword">struct </span>IsBaseOf</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; : BoolType&lt; ::std::is_base_of&lt;B,D&gt;::value&gt; {};</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160;</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160;<span class="preprocessor">#else // simplified version adopted from Boost</span></div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160;</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> B, <span class="keyword">typename</span> D&gt; <span class="keyword">struct </span>IsBaseOfImpl {</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <a class="code" href="rapidjson_8h.html#af95188da1d8eb6d4b148fe9ce71cd7c4">RAPIDJSON_STATIC_ASSERT</a>(<span class="keyword">sizeof</span>(B) != 0);</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <a class="code" href="rapidjson_8h.html#af95188da1d8eb6d4b148fe9ce71cd7c4">RAPIDJSON_STATIC_ASSERT</a>(<span class="keyword">sizeof</span>(D) != 0);</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160;</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <span class="keyword">typedef</span> char (&amp;Yes)[1];</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="keyword">typedef</span> char (&amp;No) [2];</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160;</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <span class="keyword">static</span> Yes Check(<span class="keyword">const</span> D*, T);</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="keyword">static</span> No Check(<span class="keyword">const</span> B*, <span class="keywordtype">int</span>);</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160;</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <span class="keyword">struct </span>Host {</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="keyword">operator</span> <span class="keyword">const</span> B*() <span class="keyword">const</span>;</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <span class="keyword">operator</span> <span class="keyword">const</span> D*();</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; };</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160;</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <span class="keyword">enum</span> { <a class="code" href="namespacerapidjson.html#aa65fc9fb381b2cbc54f98673eadd6505">Value</a> = (<span class="keyword">sizeof</span>(Check(Host(), 0)) == <span class="keyword">sizeof</span>(Yes)) };</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160;};</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160;</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> B, <span class="keyword">typename</span> D&gt; <span class="keyword">struct </span>IsBaseOf</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; : OrExpr&lt;IsSame&lt;B, D&gt;, BoolExpr&lt;IsBaseOfImpl&lt;B, D&gt; &gt; &gt;<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">::Type</a> {};</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160;</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160;<span class="preprocessor">#endif // RAPIDJSON_HAS_CXX11_TYPETRAITS</span></div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160;</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160;<span class="comment">//////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160;<span class="comment"></span><span class="comment">// EnableIf / DisableIf</span></div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">bool</span> Condition, <span class="keyword">typename</span> T = <span class="keywordtype">void</span>&gt; <span class="keyword">struct </span>EnableIfCond { <span class="keyword">typedef</span> T <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">Type</a>; };</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt; <span class="keyword">struct </span>EnableIfCond&lt;false, T&gt; { <span class="comment">/* empty */</span> };</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160;</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">bool</span> Condition, <span class="keyword">typename</span> T = <span class="keywordtype">void</span>&gt; <span class="keyword">struct </span>DisableIfCond { <span class="keyword">typedef</span> T <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">Type</a>; };</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt; <span class="keyword">struct </span>DisableIfCond&lt;true, T&gt; { <span class="comment">/* empty */</span> };</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160;</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> Condition, <span class="keyword">typename</span> T = <span class="keywordtype">void</span>&gt;</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160;<span class="keyword">struct </span>EnableIf : EnableIfCond&lt;Condition::Value, T&gt; {};</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160;</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> Condition, <span class="keyword">typename</span> T = <span class="keywordtype">void</span>&gt;</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160;<span class="keyword">struct </span>DisableIf : DisableIfCond&lt;Condition::Value, T&gt; {};</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160;</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160;<span class="comment">// SFINAE helpers</span></div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160;<span class="keyword">struct </span>SfinaeTag {};</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt; <span class="keyword">struct </span>RemoveSfinaeTag;</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt; <span class="keyword">struct </span>RemoveSfinaeTag&lt;SfinaeTag&amp;(*)(T)&gt; { <span class="keyword">typedef</span> T <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">Type</a>; };</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160;</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160;<span class="preprocessor">#define RAPIDJSON_REMOVEFPTR_(type) \</span></div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160;<span class="preprocessor"> typename ::RAPIDJSON_NAMESPACE::internal::RemoveSfinaeTag \</span></div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160;<span class="preprocessor"> &lt; ::RAPIDJSON_NAMESPACE::internal::SfinaeTag&amp;(*) type&gt;::Type</span></div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160;</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160;<span class="preprocessor">#define RAPIDJSON_ENABLEIF(cond) \</span></div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160;<span class="preprocessor"> typename ::RAPIDJSON_NAMESPACE::internal::EnableIf \</span></div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160;<span class="preprocessor"> &lt;RAPIDJSON_REMOVEFPTR_(cond)&gt;::Type * = NULL</span></div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160;</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160;<span class="preprocessor">#define RAPIDJSON_DISABLEIF(cond) \</span></div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160;<span class="preprocessor"> typename ::RAPIDJSON_NAMESPACE::internal::DisableIf \</span></div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160;<span class="preprocessor"> &lt;RAPIDJSON_REMOVEFPTR_(cond)&gt;::Type * = NULL</span></div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160;</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160;<span class="preprocessor">#define RAPIDJSON_ENABLEIF_RETURN(cond,returntype) \</span></div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160;<span class="preprocessor"> typename ::RAPIDJSON_NAMESPACE::internal::EnableIf \</span></div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160;<span class="preprocessor"> &lt;RAPIDJSON_REMOVEFPTR_(cond), \</span></div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160;<span class="preprocessor"> RAPIDJSON_REMOVEFPTR_(returntype)&gt;::Type</span></div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160;</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160;<span class="preprocessor">#define RAPIDJSON_DISABLEIF_RETURN(cond,returntype) \</span></div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160;<span class="preprocessor"> typename ::RAPIDJSON_NAMESPACE::internal::DisableIf \</span></div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160;<span class="preprocessor"> &lt;RAPIDJSON_REMOVEFPTR_(cond), \</span></div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160;<span class="preprocessor"> RAPIDJSON_REMOVEFPTR_(returntype)&gt;::Type</span></div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160;</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160;} <span class="comment">// namespace internal</span></div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160;RAPIDJSON_NAMESPACE_END</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160;<span class="comment">//@endcond</span></div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160;</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160;<span class="preprocessor">#if defined(_MSC_VER) &amp;&amp; !defined(__clang__)</span></div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160;RAPIDJSON_DIAG_POP</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160;</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160;<span class="preprocessor">#ifdef __GNUC__</span></div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160;RAPIDJSON_DIAG_POP</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160;</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160;<span class="preprocessor">#endif // RAPIDJSON_INTERNAL_META_H_</span></div><div class="ttc" id="namespacerapidjson_html_aa65fc9fb381b2cbc54f98673eadd6505"><div class="ttname"><a href="namespacerapidjson.html#aa65fc9fb381b2cbc54f98673eadd6505">rapidjson::Value</a></div><div class="ttdeci">GenericValue&lt; UTF8&lt;&gt; &gt; Value</div><div class="ttdoc">GenericValue with UTF8 encoding </div><div class="ttdef"><b>Definition:</b> document.h:2107</div></div>
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">// Tencent is pleased to support the open source community by making RapidJSON available.</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">// </span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">// Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved.</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment">// Licensed under the MIT License (the &quot;License&quot;); you may not use this file except</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment">// in compliance with the License. You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment">// http://opensource.org/licenses/MIT</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment">// Unless required by applicable law or agreed to in writing, software distributed </span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment">// under the License is distributed on an &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR </span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment">// CONDITIONS OF ANY KIND, either express or implied. See the License for the </span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment">// specific language governing permissions and limitations under the License.</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;</div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#ifndef RAPIDJSON_INTERNAL_META_H_</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#define RAPIDJSON_INTERNAL_META_H_</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#include &quot;../rapidjson.h&quot;</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#ifdef __GNUC__</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;RAPIDJSON_DIAG_PUSH</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;RAPIDJSON_DIAG_OFF(effc++)</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor">#if defined(_MSC_VER) &amp;&amp; !defined(__clang__)</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;RAPIDJSON_DIAG_PUSH</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;RAPIDJSON_DIAG_OFF(6334)</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_CXX11_TYPETRAITS</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="preprocessor">#include &lt;type_traits&gt;</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="comment">//@cond RAPIDJSON_INTERNAL</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;RAPIDJSON_NAMESPACE_BEGIN</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="keyword">namespace </span>internal {</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;<span class="comment">// Helper to wrap/convert arbitrary types to void, useful for arbitrary type matching</span></div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt; <span class="keyword">struct </span>Void { <span class="keyword">typedef</span> <span class="keywordtype">void</span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">Type</a>; };</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;<span class="comment"></span><span class="comment">// BoolType, TrueType, FalseType</span></div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">bool</span> Cond&gt; <span class="keyword">struct </span>BoolType {</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> <a class="code" href="namespacerapidjson.html#aa65fc9fb381b2cbc54f98673eadd6505">Value</a> = Cond;</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keyword">typedef</span> BoolType <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">Type</a>;</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;};</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;<span class="keyword">typedef</span> BoolType&lt;true&gt; TrueType;</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;<span class="keyword">typedef</span> BoolType&lt;false&gt; FalseType;</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;<span class="comment"></span><span class="comment">// SelectIf, BoolExpr, NotExpr, AndExpr, OrExpr</span></div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">bool</span> C&gt; <span class="keyword">struct </span>SelectIfImpl { <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2&gt; <span class="keyword">struct </span>Apply { <span class="keyword">typedef</span> T1 <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">Type</a>; }; };</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;<span class="keyword">template</span> &lt;&gt; <span class="keyword">struct </span>SelectIfImpl&lt;false&gt; { <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2&gt; <span class="keyword">struct </span>Apply { <span class="keyword">typedef</span> T2 <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">Type</a>; }; };</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">bool</span> C, <span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2&gt; <span class="keyword">struct </span>SelectIfCond : SelectIfImpl&lt;C&gt;::template Apply&lt;T1,T2&gt; {};</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> C, <span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2&gt; <span class="keyword">struct </span>SelectIf : SelectIfCond&lt;C::Value, T1, T2&gt; {};</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">bool</span> Cond1, <span class="keywordtype">bool</span> Cond2&gt; <span class="keyword">struct </span>AndExprCond : FalseType {};</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;<span class="keyword">template</span> &lt;&gt; <span class="keyword">struct </span>AndExprCond&lt;true, true&gt; : TrueType {};</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">bool</span> Cond1, <span class="keywordtype">bool</span> Cond2&gt; <span class="keyword">struct </span>OrExprCond : TrueType {};</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;<span class="keyword">template</span> &lt;&gt; <span class="keyword">struct </span>OrExprCond&lt;false, false&gt; : FalseType {};</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> C&gt; <span class="keyword">struct </span>BoolExpr : SelectIf&lt;C,TrueType,FalseType&gt;<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">::Type</a> {};</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> C&gt; <span class="keyword">struct </span>NotExpr : SelectIf&lt;C,FalseType,TrueType&gt;<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">::Type</a> {};</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> C1, <span class="keyword">typename</span> C2&gt; <span class="keyword">struct </span>AndExpr : AndExprCond&lt;C1::Value, C2::Value&gt;<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">::Type</a> {};</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> C1, <span class="keyword">typename</span> C2&gt; <span class="keyword">struct </span>OrExpr : OrExprCond&lt;C1::Value, C2::Value&gt;<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">::Type</a> {};</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;<span class="comment"></span><span class="comment">// AddConst, MaybeAddConst, RemoveConst</span></div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt; <span class="keyword">struct </span>AddConst { <span class="keyword">typedef</span> <span class="keyword">const</span> T <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">Type</a>; };</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">bool</span> Constify, <span class="keyword">typename</span> T&gt; <span class="keyword">struct </span>MaybeAddConst : SelectIfCond&lt;Constify, const T, T&gt; {};</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt; <span class="keyword">struct </span>RemoveConst { <span class="keyword">typedef</span> T <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">Type</a>; };</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt; <span class="keyword">struct </span>RemoveConst&lt;const T&gt; { <span class="keyword">typedef</span> T <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">Type</a>; };</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160;</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;<span class="comment"></span><span class="comment">// IsSame, IsConst, IsMoreConst, IsPointer</span></div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T, <span class="keyword">typename</span> U&gt; <span class="keyword">struct </span>IsSame : FalseType {};</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt; <span class="keyword">struct </span>IsSame&lt;T, T&gt; : TrueType {};</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160;</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt; <span class="keyword">struct </span>IsConst : FalseType {};</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt; <span class="keyword">struct </span>IsConst&lt;const T&gt; : TrueType {};</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160;</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> CT, <span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160;<span class="keyword">struct </span>IsMoreConst</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; : AndExpr&lt;IsSame&lt;typename RemoveConst&lt;CT&gt;::Type, typename RemoveConst&lt;T&gt;::Type&gt;,</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; BoolType&lt;IsConst&lt;CT&gt;::Value &gt;= IsConst&lt;T&gt;::Value&gt; &gt;<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">::Type</a> {};</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt; <span class="keyword">struct </span>IsPointer : FalseType {};</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt; <span class="keyword">struct </span>IsPointer&lt;T*&gt; : TrueType {};</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;<span class="comment"></span><span class="comment">// IsBaseOf</span></div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_CXX11_TYPETRAITS</span></div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160;</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> B, <span class="keyword">typename</span> D&gt; <span class="keyword">struct </span>IsBaseOf</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; : BoolType&lt; ::std::is_base_of&lt;B,D&gt;::value&gt; {};</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160;</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160;<span class="preprocessor">#else // simplified version adopted from Boost</span></div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160;</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> B, <span class="keyword">typename</span> D&gt; <span class="keyword">struct </span>IsBaseOfImpl {</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <a class="code" href="rapidjson_8h.html#af95188da1d8eb6d4b148fe9ce71cd7c4">RAPIDJSON_STATIC_ASSERT</a>(<span class="keyword">sizeof</span>(B) != 0);</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <a class="code" href="rapidjson_8h.html#af95188da1d8eb6d4b148fe9ce71cd7c4">RAPIDJSON_STATIC_ASSERT</a>(<span class="keyword">sizeof</span>(D) != 0);</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160;</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <span class="keyword">typedef</span> char (&amp;Yes)[1];</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="keyword">typedef</span> char (&amp;No) [2];</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160;</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <span class="keyword">static</span> Yes Check(<span class="keyword">const</span> D*, T);</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="keyword">static</span> No Check(<span class="keyword">const</span> B*, <span class="keywordtype">int</span>);</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160;</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <span class="keyword">struct </span>Host {</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="keyword">operator</span> <span class="keyword">const</span> B*() <span class="keyword">const</span>;</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <span class="keyword">operator</span> <span class="keyword">const</span> D*();</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; };</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160;</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <span class="keyword">enum</span> { <a class="code" href="namespacerapidjson.html#aa65fc9fb381b2cbc54f98673eadd6505">Value</a> = (<span class="keyword">sizeof</span>(Check(Host(), 0)) == <span class="keyword">sizeof</span>(Yes)) };</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160;};</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160;</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> B, <span class="keyword">typename</span> D&gt; <span class="keyword">struct </span>IsBaseOf</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; : OrExpr&lt;IsSame&lt;B, D&gt;, BoolExpr&lt;IsBaseOfImpl&lt;B, D&gt; &gt; &gt;<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">::Type</a> {};</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160;</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160;<span class="preprocessor">#endif // RAPIDJSON_HAS_CXX11_TYPETRAITS</span></div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160;</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160;<span class="comment">//////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160;<span class="comment"></span><span class="comment">// EnableIf / DisableIf</span></div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">bool</span> Condition, <span class="keyword">typename</span> T = <span class="keywordtype">void</span>&gt; <span class="keyword">struct </span>EnableIfCond { <span class="keyword">typedef</span> T <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">Type</a>; };</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt; <span class="keyword">struct </span>EnableIfCond&lt;false, T&gt; { <span class="comment">/* empty */</span> };</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160;</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">bool</span> Condition, <span class="keyword">typename</span> T = <span class="keywordtype">void</span>&gt; <span class="keyword">struct </span>DisableIfCond { <span class="keyword">typedef</span> T <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">Type</a>; };</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt; <span class="keyword">struct </span>DisableIfCond&lt;true, T&gt; { <span class="comment">/* empty */</span> };</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160;</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> Condition, <span class="keyword">typename</span> T = <span class="keywordtype">void</span>&gt;</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160;<span class="keyword">struct </span>EnableIf : EnableIfCond&lt;Condition::Value, T&gt; {};</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160;</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> Condition, <span class="keyword">typename</span> T = <span class="keywordtype">void</span>&gt;</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160;<span class="keyword">struct </span>DisableIf : DisableIfCond&lt;Condition::Value, T&gt; {};</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160;</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160;<span class="comment">// SFINAE helpers</span></div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160;<span class="keyword">struct </span>SfinaeTag {};</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt; <span class="keyword">struct </span>RemoveSfinaeTag;</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt; <span class="keyword">struct </span>RemoveSfinaeTag&lt;SfinaeTag&amp;(*)(T)&gt; { <span class="keyword">typedef</span> T <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">Type</a>; };</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160;</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160;<span class="preprocessor">#define RAPIDJSON_REMOVEFPTR_(type) \</span></div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160;<span class="preprocessor"> typename ::RAPIDJSON_NAMESPACE::internal::RemoveSfinaeTag \</span></div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160;<span class="preprocessor"> &lt; ::RAPIDJSON_NAMESPACE::internal::SfinaeTag&amp;(*) type&gt;::Type</span></div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160;</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160;<span class="preprocessor">#define RAPIDJSON_ENABLEIF(cond) \</span></div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160;<span class="preprocessor"> typename ::RAPIDJSON_NAMESPACE::internal::EnableIf \</span></div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160;<span class="preprocessor"> &lt;RAPIDJSON_REMOVEFPTR_(cond)&gt;::Type * = NULL</span></div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160;</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160;<span class="preprocessor">#define RAPIDJSON_DISABLEIF(cond) \</span></div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160;<span class="preprocessor"> typename ::RAPIDJSON_NAMESPACE::internal::DisableIf \</span></div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160;<span class="preprocessor"> &lt;RAPIDJSON_REMOVEFPTR_(cond)&gt;::Type * = NULL</span></div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160;</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160;<span class="preprocessor">#define RAPIDJSON_ENABLEIF_RETURN(cond,returntype) \</span></div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160;<span class="preprocessor"> typename ::RAPIDJSON_NAMESPACE::internal::EnableIf \</span></div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160;<span class="preprocessor"> &lt;RAPIDJSON_REMOVEFPTR_(cond), \</span></div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160;<span class="preprocessor"> RAPIDJSON_REMOVEFPTR_(returntype)&gt;::Type</span></div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160;</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160;<span class="preprocessor">#define RAPIDJSON_DISABLEIF_RETURN(cond,returntype) \</span></div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160;<span class="preprocessor"> typename ::RAPIDJSON_NAMESPACE::internal::DisableIf \</span></div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160;<span class="preprocessor"> &lt;RAPIDJSON_REMOVEFPTR_(cond), \</span></div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160;<span class="preprocessor"> RAPIDJSON_REMOVEFPTR_(returntype)&gt;::Type</span></div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160;</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160;} <span class="comment">// namespace internal</span></div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160;RAPIDJSON_NAMESPACE_END</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160;<span class="comment">//@endcond</span></div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160;</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160;<span class="preprocessor">#if defined(_MSC_VER) &amp;&amp; !defined(__clang__)</span></div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160;RAPIDJSON_DIAG_POP</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160;</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160;<span class="preprocessor">#ifdef __GNUC__</span></div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160;RAPIDJSON_DIAG_POP</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160;</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160;<span class="preprocessor">#endif // RAPIDJSON_INTERNAL_META_H_</span></div><div class="ttc" id="namespacerapidjson_html_aa65fc9fb381b2cbc54f98673eadd6505"><div class="ttname"><a href="namespacerapidjson.html#aa65fc9fb381b2cbc54f98673eadd6505">rapidjson::Value</a></div><div class="ttdeci">GenericValue&lt; UTF8&lt;&gt; &gt; Value</div><div class="ttdoc">GenericValue with UTF8 encoding </div><div class="ttdef"><b>Definition:</b> document.h:2104</div></div>
<div class="ttc" id="rapidjson_8h_html_af95188da1d8eb6d4b148fe9ce71cd7c4"><div class="ttname"><a href="rapidjson_8h.html#af95188da1d8eb6d4b148fe9ce71cd7c4">RAPIDJSON_STATIC_ASSERT</a></div><div class="ttdeci">#define RAPIDJSON_STATIC_ASSERT(x)</div><div class="ttdoc">(Internal) macro to check for conditions at compile-time </div><div class="ttdef"><b>Definition:</b> rapidjson.h:445</div></div>
-<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">rapidjson::Type</a></div><div class="ttdeci">Type</div><div class="ttdoc">Type of JSON value </div><div class="ttdef"><b>Definition:</b> rapidjson.h:631</div></div>
+<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">rapidjson::Type</a></div><div class="ttdeci">Type</div><div class="ttdoc">Type of JSON value </div><div class="ttdef"><b>Definition:</b> rapidjson.h:642</div></div>
</div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->
<!-- HTML footer for doxygen 1.8.7-->
diff --git a/zh-cn/navtreedata.js b/zh-cn/navtreedata.js
index d94db4f7..d2547463 100644
--- a/zh-cn/navtreedata.js
+++ b/zh-cn/navtreedata.js
@@ -174,7 +174,7 @@ var NAVTREEINDEX =
"classrapidjson_1_1_generic_object.html#acd045fbc7ffebf7902244fb1034b8751",
"classrapidjson_1_1_generic_value.html#a5d47340c96346c5028fee4c9068d783d",
"error_8h.html#gga7d3acf640886b1f2552dc8c4cd6dea60a636209a2e516fbdb4db5ad0a83a6b386",
-"md_doc_tutorial_8zh-cn.html#QueryObject"
+"md_doc_tutorial_8zh-cn.html#QueryArray"
];
var SYNCONMSG = '点击 关闭 面板同步';
diff --git a/zh-cn/navtreeindex3.js b/zh-cn/navtreeindex3.js
index e0d3ad8e..490ea0d0 100644
--- a/zh-cn/navtreeindex3.js
+++ b/zh-cn/navtreeindex3.js
@@ -21,8 +21,8 @@ var NAVTREEINDEX3 =
"functions_d.html":[14,2,0,3],
"functions_e.html":[14,2,0,4],
"functions_f.html":[14,2,0,5],
-"functions_func.html":[14,2,1],
"functions_func.html":[14,2,1,0],
+"functions_func.html":[14,2,1],
"functions_func_0x7e.html":[14,2,1,17],
"functions_func_b.html":[14,2,1,1],
"functions_func_c.html":[14,2,1,2],
@@ -62,38 +62,40 @@ var NAVTREEINDEX3 =
"globals_defs.html":[15,1,1],
"group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html":[12,0],
"group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga0ccf72f3ebc4b3306ab669f95ca5c64b":[15,0,0,0,16,20],
-"group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga0ccf72f3ebc4b3306ab669f95ca5c64b":[12,0,13],
-"group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga1975595e2f1dc20a2d4859f340ac88c6":[12,0,16],
+"group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga0ccf72f3ebc4b3306ab669f95ca5c64b":[12,0,14],
+"group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga1975595e2f1dc20a2d4859f340ac88c6":[12,0,17],
"group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga250603aa9e2a12429b25ba0c8108ad4f":[15,0,0,0,16,16],
"group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga250603aa9e2a12429b25ba0c8108ad4f":[12,0,10],
-"group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga2f2eef0ee4477f3fe5874703a66e997f":[12,0,4],
+"group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga2b2a0d9143aa4fb31205a85b34c43952":[15,0,0,0,16,17],
+"group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga2b2a0d9143aa4fb31205a85b34c43952":[12,0,11],
"group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga2f2eef0ee4477f3fe5874703a66e997f":[15,0,0,0,16,8],
+"group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga2f2eef0ee4477f3fe5874703a66e997f":[12,0,4],
"group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga583915242504c7fdb36e826f02f76242":[15,0,0,0,16,2],
"group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga583915242504c7fdb36e826f02f76242":[12,0,1],
"group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga5dc14176a9e71ace282404b0bcda57a1":[15,0,0,0,16,9],
"group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga5dc14176a9e71ace282404b0bcda57a1":[12,0,5],
-"group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5":[12,0,14],
"group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5":[15,0,0,0,16,23],
+"group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5":[12,0,15],
"group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga743a79d3af927391fe3eb5c979136899":[12,0,8],
"group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga743a79d3af927391fe3eb5c979136899":[15,0,0,0,16,13],
+"group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga77005e892e6601599beaf421b0395c31":[12,0,12],
"group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga77005e892e6601599beaf421b0395c31":[15,0,0,0,17,2],
-"group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga77005e892e6601599beaf421b0395c31":[12,0,11],
-"group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga7f4e50c35dae3b015390daa6d48ce23c":[15,0,0,0,16,15],
"group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga7f4e50c35dae3b015390daa6d48ce23c":[12,0,9],
+"group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga7f4e50c35dae3b015390daa6d48ce23c":[15,0,0,0,16,15],
"group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga93fb983f78208d12c822376e1ea6d185":[15,0,0,0,16,0],
"group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga93fb983f78208d12c822376e1ea6d185":[12,0,0],
-"group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gaba2445f582142cf918e74c2d22d1aa07":[15,0,0,0,16,6],
"group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gaba2445f582142cf918e74c2d22d1aa07":[12,0,3],
-"group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c":[15,0,0,0,16,3],
+"group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gaba2445f582142cf918e74c2d22d1aa07":[15,0,0,0,16,6],
"group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c":[12,0,2],
+"group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c":[15,0,0,0,16,3],
+"group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gad283cfde97d9a32b7d8e8107b11f70a6":[12,0,16],
"group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gad283cfde97d9a32b7d8e8107b11f70a6":[15,0,0,0,16,24],
-"group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gad283cfde97d9a32b7d8e8107b11f70a6":[12,0,15],
"group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gaf1ff1685be6cbebb5d4b2ab997776f45":[15,0,0,0,16,11],
"group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gaf1ff1685be6cbebb5d4b2ab997776f45":[12,0,6],
-"group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gaf9125105c593a636a79f1c2d96835376":[12,0,7],
"group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gaf9125105c593a636a79f1c2d96835376":[15,0,0,0,16,12],
+"group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gaf9125105c593a636a79f1c2d96835376":[12,0,7],
+"group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gaf967d31be43666ce7f53756d73bd1cdf":[12,0,13],
"group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gaf967d31be43666ce7f53756d73bd1cdf":[15,0,0,0,16,18],
-"group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gaf967d31be43666ce7f53756d73bd1cdf":[12,0,12],
"group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html":[12,1],
"group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#a0498aebcfdd3d4a5dcb989ee29b93d4d":[12,1,0,13],
"group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#a0f03679d5fa2736d9e351541e767fac1":[12,1,0,1],
@@ -116,12 +118,12 @@ var NAVTREEINDEX3 =
"group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#ga7f8c4265b2edda78568ae3338aaf1461":[15,0,0,0,17,4],
"group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#ga7f8c4265b2edda78568ae3338aaf1461":[12,1,4],
"group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gabdaf1a7a4db30fb0e3d927fdf0fabe79":[12,1,8],
-"group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gabe2e1bd1349e5a7d6c1af78c05a98f0d":[15,0,0,0,0,1,1],
"group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gabe2e1bd1349e5a7d6c1af78c05a98f0d":[12,1,2],
+"group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gabe2e1bd1349e5a7d6c1af78c05a98f0d":[15,0,0,0,0,1,1],
"group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gac1bee7fdafeba5a85c27943fcde12882":[12,1,5],
"group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gade540ee4cc2a416c23b8ee2c12393c7b":[12,1,7],
-"group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gae3689840fa6e89a241313f33b602f865":[15,0,0,0,17,3],
"group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gae3689840fa6e89a241313f33b602f865":[12,1,3],
+"group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gae3689840fa6e89a241313f33b602f865":[15,0,0,0,17,3],
"group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gga7d3acf640886b1f2552dc8c4cd6dea60a06183076357ebd9eca228666f614c286":[12,1,6,1],
"group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gga7d3acf640886b1f2552dc8c4cd6dea60a1a4ac97731f997e9591b40f98ecd9f93":[12,1,6,7],
"group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gga7d3acf640886b1f2552dc8c4cd6dea60a2022599bcd4f64d58885a026f95751d5":[12,1,6,2],
@@ -247,7 +249,5 @@ var NAVTREEINDEX3 =
"md_doc_tutorial_8zh-cn.html#DeepCopyValue":[2,2,5],
"md_doc_tutorial_8zh-cn.html#ModifyArray":[2,2,3],
"md_doc_tutorial_8zh-cn.html#ModifyObject":[2,2,4],
-"md_doc_tutorial_8zh-cn.html#MoveSemantics":[2,2,1],
-"md_doc_tutorial_8zh-cn.html#QueryArray":[2,1,0],
-"md_doc_tutorial_8zh-cn.html#QueryNumber":[2,1,2]
+"md_doc_tutorial_8zh-cn.html#MoveSemantics":[2,2,1]
};
diff --git a/zh-cn/navtreeindex4.js b/zh-cn/navtreeindex4.js
index 6353a4f5..38c1eca2 100644
--- a/zh-cn/navtreeindex4.js
+++ b/zh-cn/navtreeindex4.js
@@ -1,5 +1,7 @@
var NAVTREEINDEX4 =
{
+"md_doc_tutorial_8zh-cn.html#QueryArray":[2,1,0],
+"md_doc_tutorial_8zh-cn.html#QueryNumber":[2,1,2],
"md_doc_tutorial_8zh-cn.html#QueryObject":[2,1,1],
"md_doc_tutorial_8zh-cn.html#QueryString":[2,1,3],
"md_doc_tutorial_8zh-cn.html#QueryValue":[2,1],
@@ -24,7 +26,6 @@ var NAVTREEINDEX4 =
"prettywriter_8h_source.html":[15,0,0,0,15],
"rapidjson_8h.html":[15,0,0,0,16],
"rapidjson_8h.html#a113598c4750b3aab4de2782ff1865ed4":[15,0,0,0,16,19],
-"rapidjson_8h.html#a2b2a0d9143aa4fb31205a85b34c43952":[15,0,0,0,16,17],
"rapidjson_8h.html#a44eb33eaa523e36d466b1ced64b85c84":[15,0,0,0,16,25],
"rapidjson_8h.html#a52c941c3fdd646527cdcd42aa846a28a":[15,0,0,0,16,5],
"rapidjson_8h.html#a93973847cb99354b6b5bb5605aa7fe52":[15,0,0,0,16,1],
diff --git a/zh-cn/pointer_8h_source.html b/zh-cn/pointer_8h_source.html
index 90928169..f626744c 100644
--- a/zh-cn/pointer_8h_source.html
+++ b/zh-cn/pointer_8h_source.html
@@ -111,29 +111,29 @@ $(document).ready(function(){initNavTree('pointer_8h_source.html','');});
<div class="ttc" id="classrapidjson_1_1_generic_pointer_html_a2ac51ee7af5b9d7628140ae8501edcf4"><div class="ttname"><a href="classrapidjson_1_1_generic_pointer.html#a2ac51ee7af5b9d7628140ae8501edcf4">rapidjson::GenericPointer::GetWithDefault</a></div><div class="ttdeci">ValueType &amp; GetWithDefault(ValueType &amp;root, const std::basic_string&lt; Ch &gt; &amp;defaultValue, typename ValueType::AllocatorType &amp;allocator) const</div><div class="ttdoc">Query a value in a subtree with default std::basic_string. </div><div class="ttdef"><b>Definition:</b> pointer.h:551</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_pointer_html_a0ae84f686e1af593b9445c2c502101b2"><div class="ttname"><a href="classrapidjson_1_1_generic_pointer.html#a0ae84f686e1af593b9445c2c502101b2">rapidjson::GenericPointer::Set</a></div><div class="ttdeci">ValueType &amp; Set(ValueType &amp;root, const std::basic_string&lt; Ch &gt; &amp;value, typename ValueType::AllocatorType &amp;allocator) const</div><div class="ttdoc">Set a std::basic_string in a subtree. </div><div class="ttdef"><b>Definition:</b> pointer.h:629</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_pointer_html_a399790c5fe8076d91a58c621c0c2a79e"><div class="ttname"><a href="classrapidjson_1_1_generic_pointer.html#a399790c5fe8076d91a58c621c0c2a79e">rapidjson::GenericPointer::EncodingType</a></div><div class="ttdeci">ValueType::EncodingType EncodingType</div><div class="ttdoc">Encoding type from Value </div><div class="ttdef"><b>Definition:</b> pointer.h:81</div></div>
-<div class="ttc" id="rapidjson_8h_html_abdc7cd7902748ffe6626d71c59a73c3b"><div class="ttname"><a href="rapidjson_8h.html#abdc7cd7902748ffe6626d71c59a73c3b">RAPIDJSON_NEW</a></div><div class="ttdeci">#define RAPIDJSON_NEW(TypeName)</div><div class="ttdoc">! customization point for global new </div><div class="ttdef"><b>Definition:</b> rapidjson.h:614</div></div>
+<div class="ttc" id="rapidjson_8h_html_abdc7cd7902748ffe6626d71c59a73c3b"><div class="ttname"><a href="rapidjson_8h.html#abdc7cd7902748ffe6626d71c59a73c3b">RAPIDJSON_NEW</a></div><div class="ttdeci">#define RAPIDJSON_NEW(TypeName)</div><div class="ttdoc">! customization point for global new </div><div class="ttdef"><b>Definition:</b> rapidjson.h:625</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_pointer_html_aaa4e92344cc07e98adb5b9f5b93927b8"><div class="ttname"><a href="classrapidjson_1_1_generic_pointer.html#aaa4e92344cc07e98adb5b9f5b93927b8">rapidjson::GenericPointer::GetWithDefault</a></div><div class="ttdeci">ValueType &amp; GetWithDefault(GenericDocument&lt; EncodingType, typename ValueType::AllocatorType, stackAllocator &gt; &amp;document, const Ch *defaultValue) const</div><div class="ttdoc">Query a value in a document with default null-terminated string. </div><div class="ttdef"><b>Definition:</b> pointer.h:576</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_pointer_html_ae985c27c1d061b93ba4f8875cfa5f7b5"><div class="ttname"><a href="classrapidjson_1_1_generic_pointer.html#ae985c27c1d061b93ba4f8875cfa5f7b5">rapidjson::GenericPointer::StringifyUriFragment</a></div><div class="ttdeci">bool StringifyUriFragment(OutputStream &amp;os) const</div><div class="ttdoc">Stringify the pointer into URI fragment representation. </div><div class="ttdef"><b>Definition:</b> pointer.h:380</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_pointer_html_adc4bf5a3892f5626a8517f90c88e4b7f"><div class="ttname"><a href="classrapidjson_1_1_generic_pointer.html#adc4bf5a3892f5626a8517f90c88e4b7f">rapidjson::GenericPointer::Create</a></div><div class="ttdeci">ValueType &amp; Create(GenericDocument&lt; EncodingType, typename ValueType::AllocatorType, stackAllocator &gt; &amp;document, bool *alreadyExist=0) const</div><div class="ttdoc">Creates a value in a document. </div><div class="ttdef"><b>Definition:</b> pointer.h:459</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_pointer_html_a8f831aae14afc493a82b5fb6aa9c3c43"><div class="ttname"><a href="classrapidjson_1_1_generic_pointer.html#a8f831aae14afc493a82b5fb6aa9c3c43">rapidjson::GenericPointer::GenericPointer</a></div><div class="ttdeci">GenericPointer(const Ch *source, Allocator *allocator=0)</div><div class="ttdoc">Constructor that parses a string or URI fragment representation. </div><div class="ttdef"><b>Definition:</b> pointer.h:114</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_pointer_html_a618808f066fb1104d36f012cced3b27a"><div class="ttname"><a href="classrapidjson_1_1_generic_pointer.html#a618808f066fb1104d36f012cced3b27a">rapidjson::GenericPointer::Append</a></div><div class="ttdeci">GenericPointer Append(const ValueType &amp;token, Allocator *allocator=0) const</div><div class="ttdoc">Append a token by value, and return a new Pointer </div><div class="ttdef"><b>Definition:</b> pointer.h:292</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_pointer_html"><div class="ttname"><a href="classrapidjson_1_1_generic_pointer.html">rapidjson::GenericPointer</a></div><div class="ttdoc">Represents a JSON Pointer. Use Pointer for UTF8 encoding and default allocator. </div><div class="ttdef"><b>Definition:</b> fwd.h:126</div></div>
-<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">rapidjson::Type</a></div><div class="ttdeci">Type</div><div class="ttdoc">Type of JSON value </div><div class="ttdef"><b>Definition:</b> rapidjson.h:631</div></div>
+<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">rapidjson::Type</a></div><div class="ttdeci">Type</div><div class="ttdoc">Type of JSON value </div><div class="ttdef"><b>Definition:</b> rapidjson.h:642</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_pointer_html_a23194bb6ce6c07c78981344fe80ac3a6"><div class="ttname"><a href="classrapidjson_1_1_generic_pointer.html#a23194bb6ce6c07c78981344fe80ac3a6">rapidjson::GenericPointer::operator=</a></div><div class="ttdeci">GenericPointer &amp; operator=(const GenericPointer &amp;rhs)</div><div class="ttdoc">Assignment operator. </div><div class="ttdef"><b>Definition:</b> pointer.h:183</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_pointer_html_a3a7ff4e0b700c2975cf455fef23226b4"><div class="ttname"><a href="classrapidjson_1_1_generic_pointer.html#a3a7ff4e0b700c2975cf455fef23226b4">rapidjson::GenericPointer::Set</a></div><div class="ttdeci">ValueType &amp; Set(GenericDocument&lt; EncodingType, typename ValueType::AllocatorType, stackAllocator &gt; &amp;document, const std::basic_string&lt; Ch &gt; &amp;value) const</div><div class="ttdoc">Sets a std::basic_string in a document. </div><div class="ttdef"><b>Definition:</b> pointer.h:665</div></div>
-<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4acf030b422a32c3647c7c5973bd4dd0a9"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4acf030b422a32c3647c7c5973bd4dd0a9">rapidjson::kObjectType</a></div><div class="ttdoc">object </div><div class="ttdef"><b>Definition:</b> rapidjson.h:635</div></div>
+<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4acf030b422a32c3647c7c5973bd4dd0a9"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4acf030b422a32c3647c7c5973bd4dd0a9">rapidjson::kObjectType</a></div><div class="ttdoc">object </div><div class="ttdef"><b>Definition:</b> rapidjson.h:646</div></div>
<div class="ttc" id="document_8h_html"><div class="ttname"><a href="document_8h.html">document.h</a></div></div>
<div class="ttc" id="classrapidjson_1_1_generic_pointer_html_aa077ce171ea25cf501c12f2d5df7f248"><div class="ttname"><a href="classrapidjson_1_1_generic_pointer.html#aa077ce171ea25cf501c12f2d5df7f248">rapidjson::GenericPointer::GenericPointer</a></div><div class="ttdeci">GenericPointer(Allocator *allocator=0)</div><div class="ttdoc">Default constructor. </div><div class="ttdef"><b>Definition:</b> pointer.h:107</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_pointer_html_a30f4eac82e9fded60dead3f7d1cb3941"><div class="ttname"><a href="classrapidjson_1_1_generic_pointer.html#a30f4eac82e9fded60dead3f7d1cb3941">rapidjson::GenericPointer::Append</a></div><div class="ttdeci">GenericPointer Append(const Ch *name, SizeType length, Allocator *allocator=0) const</div><div class="ttdoc">Append a name token with length, and return a new Pointer </div><div class="ttdef"><b>Definition:</b> pointer.h:232</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_pointer_html_abdc025b8391b271f1134a7ba7039c27f"><div class="ttname"><a href="classrapidjson_1_1_generic_pointer.html#abdc025b8391b271f1134a7ba7039c27f">rapidjson::GenericPointer::GetWithDefault</a></div><div class="ttdeci">ValueType &amp; GetWithDefault(ValueType &amp;root, const Ch *defaultValue, typename ValueType::AllocatorType &amp;allocator) const</div><div class="ttdoc">Query a value in a subtree with default null-terminated string. </div><div class="ttdef"><b>Definition:</b> pointer.h:543</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_pointer_html_a75caef2a047c56466f0b599bdda882c9"><div class="ttname"><a href="classrapidjson_1_1_generic_pointer.html#a75caef2a047c56466f0b599bdda882c9">rapidjson::GenericPointer::GetParseErrorOffset</a></div><div class="ttdeci">size_t GetParseErrorOffset() const</div><div class="ttdoc">Get the parsing error offset in code unit. </div><div class="ttdef"><b>Definition:</b> pointer.h:309</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_document_html"><div class="ttname"><a href="classrapidjson_1_1_generic_document.html">rapidjson::GenericDocument</a></div><div class="ttdoc">A document for parsing JSON text as DOM. </div><div class="ttdef"><b>Definition:</b> document.h:60</div></div>
-<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4a058c622e1e7d59419ae58b895cbce468"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a058c622e1e7d59419ae58b895cbce468">rapidjson::kArrayType</a></div><div class="ttdoc">array </div><div class="ttdef"><b>Definition:</b> rapidjson.h:636</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_document_html"><div class="ttname"><a href="classrapidjson_1_1_generic_document.html">rapidjson::GenericDocument</a></div><div class="ttdoc">A document for parsing JSON text as DOM. </div><div class="ttdef"><b>Definition:</b> document.h:57</div></div>
+<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4a058c622e1e7d59419ae58b895cbce468"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a058c622e1e7d59419ae58b895cbce468">rapidjson::kArrayType</a></div><div class="ttdoc">array </div><div class="ttdef"><b>Definition:</b> rapidjson.h:647</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_pointer_html_a18494d59f0317c037fa3bd037e436cec"><div class="ttname"><a href="classrapidjson_1_1_generic_pointer.html#a18494d59f0317c037fa3bd037e436cec">rapidjson::GenericPointer::Append</a></div><div class="ttdeci">GenericPointer Append(const std::basic_string&lt; Ch &gt; &amp;name, Allocator *allocator=0) const</div><div class="ttdoc">Append a name token, and return a new Pointer </div><div class="ttdef"><b>Definition:</b> pointer.h:256</div></div>
-<div class="ttc" id="rapidjson_8h_html_a52c941c3fdd646527cdcd42aa846a28a"><div class="ttname"><a href="rapidjson_8h.html#a52c941c3fdd646527cdcd42aa846a28a">RAPIDJSON_DELETE</a></div><div class="ttdeci">#define RAPIDJSON_DELETE(x)</div><div class="ttdoc">! customization point for global delete </div><div class="ttdef"><b>Definition:</b> rapidjson.h:618</div></div>
+<div class="ttc" id="rapidjson_8h_html_a52c941c3fdd646527cdcd42aa846a28a"><div class="ttname"><a href="rapidjson_8h.html#a52c941c3fdd646527cdcd42aa846a28a">RAPIDJSON_DELETE</a></div><div class="ttdeci">#define RAPIDJSON_DELETE(x)</div><div class="ttdoc">! customization point for global delete </div><div class="ttdef"><b>Definition:</b> rapidjson.h:629</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_pointer_html_a29d7ee42eb5646f829aeca6c6989555a"><div class="ttname"><a href="classrapidjson_1_1_generic_pointer.html#a29d7ee42eb5646f829aeca6c6989555a">rapidjson::GenericPointer::Swap</a></div><div class="ttdeci">ValueType &amp; Swap(GenericDocument&lt; EncodingType, typename ValueType::AllocatorType, stackAllocator &gt; &amp;document, ValueType &amp;value) const</div><div class="ttdoc">Swap a value with a value in a document. </div><div class="ttdef"><b>Definition:</b> pointer.h:701</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_pointer_html_ae071847ed3e7389f5b256d26fcc8fd62"><div class="ttname"><a href="classrapidjson_1_1_generic_pointer.html#ae071847ed3e7389f5b256d26fcc8fd62">rapidjson::GenericPointer::GenericPointer</a></div><div class="ttdeci">GenericPointer(const GenericPointer &amp;rhs)</div><div class="ttdoc">Copy constructor. </div><div class="ttdef"><b>Definition:</b> pointer.h:166</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_document_html_ad92c6cd025d411258d1f2ad890e2ee3f"><div class="ttname"><a href="classrapidjson_1_1_generic_document.html#ad92c6cd025d411258d1f2ad890e2ee3f">rapidjson::GenericDocument::GetAllocator</a></div><div class="ttdeci">Allocator &amp; GetAllocator()</div><div class="ttdoc">Get the allocator of this document. </div><div class="ttdef"><b>Definition:</b> document.h:2409</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_document_html_ad92c6cd025d411258d1f2ad890e2ee3f"><div class="ttname"><a href="classrapidjson_1_1_generic_document.html#ad92c6cd025d411258d1f2ad890e2ee3f">rapidjson::GenericDocument::GetAllocator</a></div><div class="ttdeci">Allocator &amp; GetAllocator()</div><div class="ttdoc">Get the allocator of this document. </div><div class="ttdef"><b>Definition:</b> document.h:2406</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_pointer_html_af2f51d68c82136086bed9593719abd1a"><div class="ttname"><a href="classrapidjson_1_1_generic_pointer.html#af2f51d68c82136086bed9593719abd1a">rapidjson::GenericPointer::Set</a></div><div class="ttdeci">ValueType &amp; Set(ValueType &amp;root, const ValueType &amp;value, typename ValueType::AllocatorType &amp;allocator) const</div><div class="ttdoc">Set a value in a subtree, with copy semantics. </div><div class="ttdef"><b>Definition:</b> pointer.h:618</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_pointer_html_a7cb5eda2af1722e52efa591c4103ebec"><div class="ttname"><a href="classrapidjson_1_1_generic_pointer.html#a7cb5eda2af1722e52efa591c4103ebec">rapidjson::GenericPointer::Append</a></div><div class="ttdeci">GenericPointer Append(const Token &amp;token, Allocator *allocator=0) const</div><div class="ttdoc">Append a token and return a new Pointer </div><div class="ttdef"><b>Definition:</b> pointer.h:214</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_pointer_html_aeefcd60e5ad37d80ec43f5315ae84809"><div class="ttname"><a href="classrapidjson_1_1_generic_pointer.html#aeefcd60e5ad37d80ec43f5315ae84809">rapidjson::GenericPointer::GenericPointer</a></div><div class="ttdeci">GenericPointer(const std::basic_string&lt; Ch &gt; &amp;source, Allocator *allocator=0)</div><div class="ttdoc">Constructor that parses a string or URI fragment representation. </div><div class="ttdef"><b>Definition:</b> pointer.h:125</div></div>
@@ -144,7 +144,7 @@ $(document).ready(function(){initNavTree('pointer_8h_source.html','');});
<div class="ttc" id="structrapidjson_1_1_u_t_f8_html"><div class="ttname"><a href="structrapidjson_1_1_u_t_f8.html">rapidjson::UTF8</a></div><div class="ttdoc">UTF-8 encoding. </div><div class="ttdef"><b>Definition:</b> encodings.h:96</div></div>
<div class="ttc" id="structrapidjson_1_1_generic_pointer_1_1_token_html_a50331c9e3dedc34d2c79745b2e58fb2d"><div class="ttname"><a href="structrapidjson_1_1_generic_pointer_1_1_token.html#a50331c9e3dedc34d2c79745b2e58fb2d">rapidjson::GenericPointer::Token::index</a></div><div class="ttdeci">SizeType index</div><div class="ttdoc">A valid array index, if it is not equal to kPointerInvalidIndex. </div><div class="ttdef"><b>Definition:</b> pointer.h:100</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_pointer_html_ac07c300d43f04dad9caa0cb209cb2853"><div class="ttname"><a href="classrapidjson_1_1_generic_pointer.html#ac07c300d43f04dad9caa0cb209cb2853">rapidjson::GenericPointer::GetTokens</a></div><div class="ttdeci">const Token * GetTokens() const</div><div class="ttdoc">Get the token array (const version only). </div><div class="ttdef"><b>Definition:</b> pointer.h:323</div></div>
-<div class="ttc" id="structrapidjson_1_1_generic_string_ref_html"><div class="ttname"><a href="structrapidjson_1_1_generic_string_ref.html">rapidjson::GenericStringRef</a></div><div class="ttdoc">Reference to a constant string (not taking a copy) </div><div class="ttdef"><b>Definition:</b> document.h:253</div></div>
+<div class="ttc" id="structrapidjson_1_1_generic_string_ref_html"><div class="ttname"><a href="structrapidjson_1_1_generic_string_ref.html">rapidjson::GenericStringRef</a></div><div class="ttdoc">Reference to a constant string (not taking a copy) </div><div class="ttdef"><b>Definition:</b> document.h:250</div></div>
<div class="ttc" id="classrapidjson_1_1_allocator_html"><div class="ttname"><a href="classrapidjson_1_1_allocator.html">rapidjson::Allocator</a></div><div class="ttdoc">Concept for allocating, resizing and freeing memory block. </div></div>
<div class="ttc" id="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s_html_ggade540ee4cc2a416c23b8ee2c12393c7ba29831a02b8ee23a05d552b47f4d64d28"><div class="ttname"><a href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#ggade540ee4cc2a416c23b8ee2c12393c7ba29831a02b8ee23a05d552b47f4d64d28">rapidjson::kPointerParseErrorInvalidPercentEncoding</a></div><div class="ttdoc">Invalid percent encoding in URI fragment </div><div class="ttdef"><b>Definition:</b> pointer.h:42</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_pointer_html_ad0b5b67c57572e81689762094ac8c856"><div class="ttname"><a href="classrapidjson_1_1_generic_pointer.html#ad0b5b67c57572e81689762094ac8c856">rapidjson::GenericPointer::Create</a></div><div class="ttdeci">ValueType &amp; Create(ValueType &amp;root, typename ValueType::AllocatorType &amp;allocator, bool *alreadyExist=0) const</div><div class="ttdoc">Create a value in a subtree. </div><div class="ttdef"><b>Definition:</b> pointer.h:404</div></div>
diff --git a/zh-cn/prettywriter_8h_source.html b/zh-cn/prettywriter_8h_source.html
index 1f4274f9..3a61b4e2 100644
--- a/zh-cn/prettywriter_8h_source.html
+++ b/zh-cn/prettywriter_8h_source.html
@@ -81,30 +81,30 @@ $(document).ready(function(){initNavTree('prettywriter_8h_source.html','');});
<div class="title">prettywriter.h</div> </div>
</div><!--header-->
<div class="contents">
-<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">// Tencent is pleased to support the open source community by making RapidJSON available.</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">// </span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">// Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved.</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment">// Licensed under the MIT License (the &quot;License&quot;); you may not use this file except</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment">// in compliance with the License. You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment">// http://opensource.org/licenses/MIT</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment">// Unless required by applicable law or agreed to in writing, software distributed </span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment">// under the License is distributed on an &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR </span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment">// CONDITIONS OF ANY KIND, either express or implied. See the License for the </span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment">// specific language governing permissions and limitations under the License.</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;</div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#ifndef RAPIDJSON_PRETTYWRITER_H_</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#define RAPIDJSON_PRETTYWRITER_H_</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#include &quot;writer.h&quot;</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#ifdef __GNUC__</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;RAPIDJSON_DIAG_PUSH</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;RAPIDJSON_DIAG_OFF(effc++)</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor">#if defined(__clang__)</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;RAPIDJSON_DIAG_PUSH</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;RAPIDJSON_DIAG_OFF(c++98-compat)</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;RAPIDJSON_NAMESPACE_BEGIN</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="comment">//! Combination of PrettyWriter format flags.</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="comment"></span><span class="comment">/*! \see PrettyWriter::SetFormatOptions</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00035"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#a084b31753ef2edefdeca8a5374eccc4b"> 35</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="namespacerapidjson.html#a084b31753ef2edefdeca8a5374eccc4b">PrettyFormatOptions</a> {</div><div class="line"><a name="l00036"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#a084b31753ef2edefdeca8a5374eccc4ba8164b0d4993439856171585b9cf3adc0"> 36</a></span>&#160; <a class="code" href="namespacerapidjson.html#a084b31753ef2edefdeca8a5374eccc4ba8164b0d4993439856171585b9cf3adc0">kFormatDefault</a> = 0, <span class="comment">//!&lt; Default pretty formatting.</span></div><div class="line"><a name="l00037"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#a084b31753ef2edefdeca8a5374eccc4ba64b0f8a37ab3125118682046ff06500f"> 37</a></span>&#160;<span class="comment"></span> <a class="code" href="namespacerapidjson.html#a084b31753ef2edefdeca8a5374eccc4ba64b0f8a37ab3125118682046ff06500f">kFormatSingleLineArray</a> = 1 <span class="comment">//!&lt; Format arrays on a single line.</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;<span class="comment"></span>};</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;<span class="comment">//! Writer with indentation and spacing.</span></div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;<span class="comment"></span><span class="comment">/*!</span></div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;<span class="comment"> \tparam OutputStream Type of output os.</span></div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;<span class="comment"> \tparam SourceEncoding Encoding of source string.</span></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;<span class="comment"> \tparam TargetEncoding Encoding of output stream.</span></div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;<span class="comment"> \tparam StackAllocator Type of allocator for allocating memory of stack.</span></div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> OutputStream, <span class="keyword">typename</span> SourceEncoding = UTF8&lt;&gt;, <span class="keyword">typename</span> TargetEncoding = UTF8&lt;&gt;, <span class="keyword">typename</span> StackAllocator = CrtAllocator, <span class="keywordtype">unsigned</span> writeFlags = kWriteDefaultFlags&gt;</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;<span class="keyword">class </span><a class="code" href="classrapidjson_1_1_pretty_writer.html">PrettyWriter</a> : <span class="keyword">public</span> <a class="code" href="classrapidjson_1_1_writer.html">Writer</a>&lt;OutputStream, SourceEncoding, TargetEncoding, StackAllocator, writeFlags&gt; {</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_writer.html">Writer&lt;OutputStream, SourceEncoding, TargetEncoding, StackAllocator, writeFlags&gt;</a> Base;</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keyword">typedef</span> <span class="keyword">typename</span> Base::Ch Ch;</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;<span class="comment"> //! Constructor</span></div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;<span class="comment"></span><span class="comment"> /*! \param os Output stream.</span></div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;<span class="comment"> \param allocator User supplied allocator. If it is null, it will create a private one.</span></div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;<span class="comment"> \param levelDepth Initial capacity of stack.</span></div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00058"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_pretty_writer.html#a688d7ebf5c8015e423b7a970afc8e0a0"> 58</a></span>&#160; <span class="keyword">explicit</span> <a class="code" href="classrapidjson_1_1_pretty_writer.html#a688d7ebf5c8015e423b7a970afc8e0a0">PrettyWriter</a>(OutputStream&amp; os, StackAllocator* allocator = 0, <span class="keywordtype">size_t</span> levelDepth = Base::kDefaultLevelDepth) : </div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; Base(os, allocator, levelDepth), indentChar_(<span class="stringliteral">&#39; &#39;</span>), indentCharCount_(4), formatOptions_(<a class="code" href="namespacerapidjson.html#a084b31753ef2edefdeca8a5374eccc4ba8164b0d4993439856171585b9cf3adc0">kFormatDefault</a>) {}</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keyword">explicit</span> <a class="code" href="classrapidjson_1_1_pretty_writer.html">PrettyWriter</a>(StackAllocator* allocator = 0, <span class="keywordtype">size_t</span> levelDepth = Base::kDefaultLevelDepth) : </div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; Base(allocator, levelDepth), indentChar_(<span class="charliteral">&#39; &#39;</span>), indentCharCount_(4) {}</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <a class="code" href="classrapidjson_1_1_pretty_writer.html">PrettyWriter</a>(<a class="code" href="classrapidjson_1_1_pretty_writer.html">PrettyWriter</a>&amp;&amp; rhs) :</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; Base(std::forward&lt;PrettyWriter&gt;(rhs)), indentChar_(rhs.indentChar_), indentCharCount_(rhs.indentCharCount_), formatOptions_(rhs.formatOptions_) {}</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;<span class="comment"> //! Set custom indentation.</span></div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;<span class="comment"></span><span class="comment"> /*! \param indentChar Character for indentation. Must be whitespace character (&#39; &#39;, &#39;\\t&#39;, &#39;\\n&#39;, &#39;\\r&#39;).</span></div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;<span class="comment"> \param indentCharCount Number of indent characters for each indentation level.</span></div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;<span class="comment"> \note The default indentation is 4 spaces.</span></div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00075"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_pretty_writer.html#a121686c29ca7fe071fa4108c46955ff0"> 75</a></span>&#160; <a class="code" href="classrapidjson_1_1_pretty_writer.html">PrettyWriter</a>&amp; <a class="code" href="classrapidjson_1_1_pretty_writer.html#a121686c29ca7fe071fa4108c46955ff0">SetIndent</a>(Ch indentChar, <span class="keywordtype">unsigned</span> indentCharCount) {</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(indentChar == <span class="charliteral">&#39; &#39;</span> || indentChar == <span class="charliteral">&#39;\t&#39;</span> || indentChar == <span class="charliteral">&#39;\n&#39;</span> || indentChar == <span class="charliteral">&#39;\r&#39;</span>);</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; indentChar_ = indentChar;</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; indentCharCount_ = indentCharCount;</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; }</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;<span class="comment"> //! Set pretty writer formatting options.</span></div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;<span class="comment"></span><span class="comment"> /*! \param options Formatting options.</span></div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00085"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_pretty_writer.html#acde6176577f29869e28a4f3c4a251090"> 85</a></span>&#160; <a class="code" href="classrapidjson_1_1_pretty_writer.html">PrettyWriter</a>&amp; <a class="code" href="classrapidjson_1_1_pretty_writer.html#acde6176577f29869e28a4f3c4a251090">SetFormatOptions</a>(<a class="code" href="namespacerapidjson.html#a084b31753ef2edefdeca8a5374eccc4b">PrettyFormatOptions</a> options) {</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; formatOptions_ = options;</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; }</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160;<span class="comment"> /*! @name Implementation of Handler</span></div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;<span class="comment"> \see Handler</span></div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160;<span class="comment"> */</span><span class="comment"></span></div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;<span class="comment"> //@{</span></div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="keywordtype">bool</span> Null() { PrettyPrefix(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a952871e4326b527154fc8aac1ac1f6ff">kNullType</a>); <span class="keywordflow">return</span> Base::EndValue(Base::WriteNull()); }</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="keywordtype">bool</span> Bool(<span class="keywordtype">bool</span> b) { PrettyPrefix(b ? <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a80d9f25b083abce45edbfdd3ba006c8e">kTrueType</a> : <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a9f2e7047832dce1029551b5de0f05607">kFalseType</a>); <span class="keywordflow">return</span> Base::EndValue(Base::WriteBool(b)); }</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="keywordtype">bool</span> Int(<span class="keywordtype">int</span> i) { PrettyPrefix(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a">kNumberType</a>); <span class="keywordflow">return</span> Base::EndValue(Base::WriteInt(i)); }</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="keywordtype">bool</span> Uint(<span class="keywordtype">unsigned</span> u) { PrettyPrefix(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a">kNumberType</a>); <span class="keywordflow">return</span> Base::EndValue(Base::WriteUint(u)); }</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="keywordtype">bool</span> Int64(int64_t i64) { PrettyPrefix(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a">kNumberType</a>); <span class="keywordflow">return</span> Base::EndValue(Base::WriteInt64(i64)); }</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <span class="keywordtype">bool</span> Uint64(uint64_t u64) { PrettyPrefix(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a">kNumberType</a>); <span class="keywordflow">return</span> Base::EndValue(Base::WriteUint64(u64)); }</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keywordtype">bool</span> Double(<span class="keywordtype">double</span> d) { PrettyPrefix(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a">kNumberType</a>); <span class="keywordflow">return</span> Base::EndValue(Base::WriteDouble(d)); }</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160;</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="keywordtype">bool</span> RawNumber(<span class="keyword">const</span> Ch* str, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> length, <span class="keywordtype">bool</span> copy = <span class="keyword">false</span>) {</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(str != 0);</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; (void)copy;</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; PrettyPrefix(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a">kNumberType</a>);</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <span class="keywordflow">return</span> Base::EndValue(Base::WriteString(str, length));</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; }</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160;</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <span class="keywordtype">bool</span> String(<span class="keyword">const</span> Ch* str, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> length, <span class="keywordtype">bool</span> copy = <span class="keyword">false</span>) {</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(str != 0);</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; (void)copy;</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; PrettyPrefix(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4ad6379da3dc04b83a591992bfb9fabba7">kStringType</a>);</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="keywordflow">return</span> Base::EndValue(Base::WriteString(str, length));</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; }</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160;</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <span class="keywordtype">bool</span> String(<span class="keyword">const</span> std::basic_string&lt;Ch&gt;&amp; str) {</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="keywordflow">return</span> String(str.data(), <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a>(str.size()));</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; }</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160;</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <span class="keywordtype">bool</span> StartObject() {</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; PrettyPrefix(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4acf030b422a32c3647c7c5973bd4dd0a9">kObjectType</a>);</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <span class="keyword">new</span> (Base::level_stack_.template Push&lt;typename Base::Level&gt;()) <span class="keyword">typename</span> <a class="code" href="structrapidjson_1_1_writer_1_1_level.html">Base::Level</a>(<span class="keyword">false</span>);</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <span class="keywordflow">return</span> Base::WriteStartObject();</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; }</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160;</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <span class="keywordtype">bool</span> Key(<span class="keyword">const</span> Ch* str, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> length, <span class="keywordtype">bool</span> copy = <span class="keyword">false</span>) { <span class="keywordflow">return</span> String(str, length, copy); }</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160;</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <span class="keywordtype">bool</span> Key(<span class="keyword">const</span> std::basic_string&lt;Ch&gt;&amp; str) {</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <span class="keywordflow">return</span> Key(str.data(), <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a>(str.size()));</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; }</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; </div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <span class="keywordtype">bool</span> EndObject(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> memberCount = 0) {</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; (void)memberCount;</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(Base::level_stack_.GetSize() &gt;= <span class="keyword">sizeof</span>(<span class="keyword">typename</span> <a class="code" href="structrapidjson_1_1_writer_1_1_level.html">Base::Level</a>)); <span class="comment">// not inside an Object</span></div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(!Base::level_stack_.<span class="keyword">template</span> Top&lt;typename Base::Level&gt;()-&gt;inArray); <span class="comment">// currently inside an Array, not Object</span></div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(0 == Base::level_stack_.<span class="keyword">template</span> Top&lt;typename Base::Level&gt;()-&gt;valueCount % 2); <span class="comment">// Object has a Key without a Value</span></div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; </div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <span class="keywordtype">bool</span> empty = Base::level_stack_.template Pop&lt;typename Base::Level&gt;(1)-&gt;valueCount == 0;</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160;</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <span class="keywordflow">if</span> (!empty) {</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; Base::os_-&gt;Put(<span class="charliteral">&#39;\n&#39;</span>);</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; WriteIndent();</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; }</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <span class="keywordtype">bool</span> ret = Base::EndValue(Base::WriteEndObject());</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; (void)ret;</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(ret == <span class="keyword">true</span>);</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <span class="keywordflow">if</span> (Base::level_stack_.Empty()) <span class="comment">// end of json text</span></div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; Base::Flush();</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; }</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160;</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; <span class="keywordtype">bool</span> StartArray() {</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; PrettyPrefix(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a058c622e1e7d59419ae58b895cbce468">kArrayType</a>);</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <span class="keyword">new</span> (Base::level_stack_.template Push&lt;typename Base::Level&gt;()) <span class="keyword">typename</span> <a class="code" href="structrapidjson_1_1_writer_1_1_level.html">Base::Level</a>(<span class="keyword">true</span>);</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; <span class="keywordflow">return</span> Base::WriteStartArray();</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; }</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160;</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <span class="keywordtype">bool</span> EndArray(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> memberCount = 0) {</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; (void)memberCount;</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(Base::level_stack_.GetSize() &gt;= <span class="keyword">sizeof</span>(<span class="keyword">typename</span> <a class="code" href="structrapidjson_1_1_writer_1_1_level.html">Base::Level</a>));</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(Base::level_stack_.<span class="keyword">template</span> Top&lt;typename Base::Level&gt;()-&gt;inArray);</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; <span class="keywordtype">bool</span> empty = Base::level_stack_.template Pop&lt;typename Base::Level&gt;(1)-&gt;valueCount == 0;</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160;</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <span class="keywordflow">if</span> (!empty &amp;&amp; !(formatOptions_ &amp; <a class="code" href="namespacerapidjson.html#a084b31753ef2edefdeca8a5374eccc4ba64b0f8a37ab3125118682046ff06500f">kFormatSingleLineArray</a>)) {</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; Base::os_-&gt;Put(<span class="charliteral">&#39;\n&#39;</span>);</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; WriteIndent();</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; }</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <span class="keywordtype">bool</span> ret = Base::EndValue(Base::WriteEndArray());</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; (void)ret;</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(ret == <span class="keyword">true</span>);</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; <span class="keywordflow">if</span> (Base::level_stack_.Empty()) <span class="comment">// end of json text</span></div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; Base::Flush();</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; }</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160;<span class="comment"> //@}</span></div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160;<span class="comment"> /*! @name Convenience extensions */</span><span class="comment"></span></div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160;<span class="comment"> //@{</span></div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160;<span class="comment"> //! Simpler but slower overload.</span></div><div class="line"><a name="l00187"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_pretty_writer.html#a363c2280393e27e19bceb8d015c2832c"> 187</a></span>&#160;<span class="comment"></span> <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_pretty_writer.html#a363c2280393e27e19bceb8d015c2832c">String</a>(<span class="keyword">const</span> Ch* str) { <span class="keywordflow">return</span> <a class="code" href="classrapidjson_1_1_pretty_writer.html#a363c2280393e27e19bceb8d015c2832c">String</a>(str, internal::StrLen(str)); }</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; <span class="keywordtype">bool</span> Key(<span class="keyword">const</span> Ch* str) { <span class="keywordflow">return</span> Key(str, internal::StrLen(str)); }</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160;<span class="comment"> //@}</span></div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160;<span class="comment"> //! Write a raw JSON value.</span></div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160;<span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160;<span class="comment"> For user to write a stringified JSON as a value.</span></div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160;<span class="comment"> \param json A well-formed JSON value. It should not contain null character within [0, length - 1] range.</span></div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160;<span class="comment"> \param length Length of the json.</span></div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160;<span class="comment"> \param type Type of the root of json.</span></div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160;<span class="comment"> \note When using PrettyWriter::RawValue(), the result json may not be indented correctly.</span></div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00201"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_pretty_writer.html#a3136e3426a5d06e5da50f6e6aab8a5be"> 201</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_pretty_writer.html#a3136e3426a5d06e5da50f6e6aab8a5be">RawValue</a>(<span class="keyword">const</span> Ch* json, <span class="keywordtype">size_t</span> length, <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">Type</a> type) {</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(json != 0);</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; PrettyPrefix(type);</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; <span class="keywordflow">return</span> Base::EndValue(Base::WriteRawValue(json, length));</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; }</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160;</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160;<span class="keyword">protected</span>:</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; <span class="keywordtype">void</span> PrettyPrefix(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">Type</a> type) {</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; (void)type;</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; <span class="keywordflow">if</span> (Base::level_stack_.GetSize() != 0) { <span class="comment">// this value is not at root</span></div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <span class="keyword">typename</span> <a class="code" href="structrapidjson_1_1_writer_1_1_level.html">Base::Level</a>* level = Base::level_stack_.template Top&lt;typename Base::Level&gt;();</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160;</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; <span class="keywordflow">if</span> (level-&gt;<a class="code" href="structrapidjson_1_1_writer_1_1_level.html#a59255e3b1d371161f7c894503cfd6bec">inArray</a>) {</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; <span class="keywordflow">if</span> (level-&gt;<a class="code" href="structrapidjson_1_1_writer_1_1_level.html#a5d17bdfa9ded5de72f5f91175cc3e36b">valueCount</a> &gt; 0) {</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; Base::os_-&gt;Put(<span class="charliteral">&#39;,&#39;</span>); <span class="comment">// add comma if it is not the first element in array</span></div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; <span class="keywordflow">if</span> (formatOptions_ &amp; <a class="code" href="namespacerapidjson.html#a084b31753ef2edefdeca8a5374eccc4ba64b0f8a37ab3125118682046ff06500f">kFormatSingleLineArray</a>)</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; Base::os_-&gt;Put(<span class="charliteral">&#39; &#39;</span>);</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; }</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160;</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; <span class="keywordflow">if</span> (!(formatOptions_ &amp; <a class="code" href="namespacerapidjson.html#a084b31753ef2edefdeca8a5374eccc4ba64b0f8a37ab3125118682046ff06500f">kFormatSingleLineArray</a>)) {</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; Base::os_-&gt;Put(<span class="charliteral">&#39;\n&#39;</span>);</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; WriteIndent();</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; }</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; }</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; <span class="keywordflow">else</span> { <span class="comment">// in object</span></div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <span class="keywordflow">if</span> (level-&gt;<a class="code" href="structrapidjson_1_1_writer_1_1_level.html#a5d17bdfa9ded5de72f5f91175cc3e36b">valueCount</a> &gt; 0) {</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <span class="keywordflow">if</span> (level-&gt;<a class="code" href="structrapidjson_1_1_writer_1_1_level.html#a5d17bdfa9ded5de72f5f91175cc3e36b">valueCount</a> % 2 == 0) {</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; Base::os_-&gt;Put(<span class="charliteral">&#39;,&#39;</span>);</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; Base::os_-&gt;Put(<span class="charliteral">&#39;\n&#39;</span>);</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; }</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; <span class="keywordflow">else</span> {</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; Base::os_-&gt;Put(<span class="charliteral">&#39;:&#39;</span>);</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; Base::os_-&gt;Put(<span class="charliteral">&#39; &#39;</span>);</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; }</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; }</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; Base::os_-&gt;Put(<span class="charliteral">&#39;\n&#39;</span>);</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160;</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; <span class="keywordflow">if</span> (level-&gt;<a class="code" href="structrapidjson_1_1_writer_1_1_level.html#a5d17bdfa9ded5de72f5f91175cc3e36b">valueCount</a> % 2 == 0)</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; WriteIndent();</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; }</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <span class="keywordflow">if</span> (!level-&gt;<a class="code" href="structrapidjson_1_1_writer_1_1_level.html#a59255e3b1d371161f7c894503cfd6bec">inArray</a> &amp;&amp; level-&gt;<a class="code" href="structrapidjson_1_1_writer_1_1_level.html#a5d17bdfa9ded5de72f5f91175cc3e36b">valueCount</a> % 2 == 0)</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(type == <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4ad6379da3dc04b83a591992bfb9fabba7">kStringType</a>); <span class="comment">// if it&#39;s in object, then even number should be a name</span></div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; level-&gt;<a class="code" href="structrapidjson_1_1_writer_1_1_level.html#a5d17bdfa9ded5de72f5f91175cc3e36b">valueCount</a>++;</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; }</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; <span class="keywordflow">else</span> {</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(!Base::hasRoot_); <span class="comment">// Should only has one and only one root.</span></div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; Base::hasRoot_ = <span class="keyword">true</span>;</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; }</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; }</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160;</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; <span class="keywordtype">void</span> WriteIndent() {</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; <span class="keywordtype">size_t</span> count = (Base::level_stack_.GetSize() / <span class="keyword">sizeof</span>(<span class="keyword">typename</span> <a class="code" href="structrapidjson_1_1_writer_1_1_level.html">Base::Level</a>)) * indentCharCount_;</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; <a class="code" href="namespacerapidjson.html#a1ac13bac5976fc06587e00fc0bcfb32a">PutN</a>(*Base::os_, static_cast&lt;typename OutputStream::Ch&gt;(indentChar_), count);</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; }</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160;</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; Ch indentChar_;</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; <span class="keywordtype">unsigned</span> indentCharCount_;</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; <a class="code" href="namespacerapidjson.html#a084b31753ef2edefdeca8a5374eccc4b">PrettyFormatOptions</a> formatOptions_;</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160;</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; <span class="comment">// Prohibit copy constructor &amp; assignment operator.</span></div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <a class="code" href="classrapidjson_1_1_pretty_writer.html">PrettyWriter</a>(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_pretty_writer.html">PrettyWriter</a>&amp;);</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; <a class="code" href="classrapidjson_1_1_pretty_writer.html">PrettyWriter</a>&amp; operator=(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_pretty_writer.html">PrettyWriter</a>&amp;);</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160;};</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160;</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160;RAPIDJSON_NAMESPACE_END</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160;</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160;<span class="preprocessor">#if defined(__clang__)</span></div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160;RAPIDJSON_DIAG_POP</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160;</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160;<span class="preprocessor">#ifdef __GNUC__</span></div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160;RAPIDJSON_DIAG_POP</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160;</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160;<span class="preprocessor">#endif // RAPIDJSON_RAPIDJSON_H_</span></div><div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4a80d9f25b083abce45edbfdd3ba006c8e"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a80d9f25b083abce45edbfdd3ba006c8e">rapidjson::kTrueType</a></div><div class="ttdoc">true </div><div class="ttdef"><b>Definition:</b> rapidjson.h:634</div></div>
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">// Tencent is pleased to support the open source community by making RapidJSON available.</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">// </span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">// Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved.</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment">// Licensed under the MIT License (the &quot;License&quot;); you may not use this file except</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment">// in compliance with the License. You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment">// http://opensource.org/licenses/MIT</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment">// Unless required by applicable law or agreed to in writing, software distributed </span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment">// under the License is distributed on an &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR </span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment">// CONDITIONS OF ANY KIND, either express or implied. See the License for the </span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment">// specific language governing permissions and limitations under the License.</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;</div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#ifndef RAPIDJSON_PRETTYWRITER_H_</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#define RAPIDJSON_PRETTYWRITER_H_</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#include &quot;writer.h&quot;</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#ifdef __GNUC__</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;RAPIDJSON_DIAG_PUSH</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;RAPIDJSON_DIAG_OFF(effc++)</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor">#if defined(__clang__)</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;RAPIDJSON_DIAG_PUSH</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;RAPIDJSON_DIAG_OFF(c++98-compat)</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;RAPIDJSON_NAMESPACE_BEGIN</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="comment">//! Combination of PrettyWriter format flags.</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="comment"></span><span class="comment">/*! \see PrettyWriter::SetFormatOptions</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00035"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#a084b31753ef2edefdeca8a5374eccc4b"> 35</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="namespacerapidjson.html#a084b31753ef2edefdeca8a5374eccc4b">PrettyFormatOptions</a> {</div><div class="line"><a name="l00036"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#a084b31753ef2edefdeca8a5374eccc4ba8164b0d4993439856171585b9cf3adc0"> 36</a></span>&#160; <a class="code" href="namespacerapidjson.html#a084b31753ef2edefdeca8a5374eccc4ba8164b0d4993439856171585b9cf3adc0">kFormatDefault</a> = 0, <span class="comment">//!&lt; Default pretty formatting.</span></div><div class="line"><a name="l00037"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#a084b31753ef2edefdeca8a5374eccc4ba64b0f8a37ab3125118682046ff06500f"> 37</a></span>&#160;<span class="comment"></span> <a class="code" href="namespacerapidjson.html#a084b31753ef2edefdeca8a5374eccc4ba64b0f8a37ab3125118682046ff06500f">kFormatSingleLineArray</a> = 1 <span class="comment">//!&lt; Format arrays on a single line.</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;<span class="comment"></span>};</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;<span class="comment">//! Writer with indentation and spacing.</span></div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;<span class="comment"></span><span class="comment">/*!</span></div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;<span class="comment"> \tparam OutputStream Type of output os.</span></div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;<span class="comment"> \tparam SourceEncoding Encoding of source string.</span></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;<span class="comment"> \tparam TargetEncoding Encoding of output stream.</span></div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;<span class="comment"> \tparam StackAllocator Type of allocator for allocating memory of stack.</span></div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> OutputStream, <span class="keyword">typename</span> SourceEncoding = UTF8&lt;&gt;, <span class="keyword">typename</span> TargetEncoding = UTF8&lt;&gt;, <span class="keyword">typename</span> StackAllocator = CrtAllocator, <span class="keywordtype">unsigned</span> writeFlags = kWriteDefaultFlags&gt;</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;<span class="keyword">class </span><a class="code" href="classrapidjson_1_1_pretty_writer.html">PrettyWriter</a> : <span class="keyword">public</span> <a class="code" href="classrapidjson_1_1_writer.html">Writer</a>&lt;OutputStream, SourceEncoding, TargetEncoding, StackAllocator, writeFlags&gt; {</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_writer.html">Writer&lt;OutputStream, SourceEncoding, TargetEncoding, StackAllocator, writeFlags&gt;</a> Base;</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keyword">typedef</span> <span class="keyword">typename</span> Base::Ch Ch;</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;<span class="comment"> //! Constructor</span></div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;<span class="comment"></span><span class="comment"> /*! \param os Output stream.</span></div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;<span class="comment"> \param allocator User supplied allocator. If it is null, it will create a private one.</span></div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;<span class="comment"> \param levelDepth Initial capacity of stack.</span></div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00058"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_pretty_writer.html#a688d7ebf5c8015e423b7a970afc8e0a0"> 58</a></span>&#160; <span class="keyword">explicit</span> <a class="code" href="classrapidjson_1_1_pretty_writer.html#a688d7ebf5c8015e423b7a970afc8e0a0">PrettyWriter</a>(OutputStream&amp; os, StackAllocator* allocator = 0, <span class="keywordtype">size_t</span> levelDepth = Base::kDefaultLevelDepth) : </div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; Base(os, allocator, levelDepth), indentChar_(<span class="stringliteral">&#39; &#39;</span>), indentCharCount_(4), formatOptions_(<a class="code" href="namespacerapidjson.html#a084b31753ef2edefdeca8a5374eccc4ba8164b0d4993439856171585b9cf3adc0">kFormatDefault</a>) {}</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keyword">explicit</span> <a class="code" href="classrapidjson_1_1_pretty_writer.html">PrettyWriter</a>(StackAllocator* allocator = 0, <span class="keywordtype">size_t</span> levelDepth = Base::kDefaultLevelDepth) : </div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; Base(allocator, levelDepth), indentChar_(<span class="charliteral">&#39; &#39;</span>), indentCharCount_(4) {}</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <a class="code" href="classrapidjson_1_1_pretty_writer.html">PrettyWriter</a>(<a class="code" href="classrapidjson_1_1_pretty_writer.html">PrettyWriter</a>&amp;&amp; rhs) :</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; Base(std::forward&lt;PrettyWriter&gt;(rhs)), indentChar_(rhs.indentChar_), indentCharCount_(rhs.indentCharCount_), formatOptions_(rhs.formatOptions_) {}</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;<span class="comment"> //! Set custom indentation.</span></div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;<span class="comment"></span><span class="comment"> /*! \param indentChar Character for indentation. Must be whitespace character (&#39; &#39;, &#39;\\t&#39;, &#39;\\n&#39;, &#39;\\r&#39;).</span></div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;<span class="comment"> \param indentCharCount Number of indent characters for each indentation level.</span></div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;<span class="comment"> \note The default indentation is 4 spaces.</span></div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00075"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_pretty_writer.html#a121686c29ca7fe071fa4108c46955ff0"> 75</a></span>&#160; <a class="code" href="classrapidjson_1_1_pretty_writer.html">PrettyWriter</a>&amp; <a class="code" href="classrapidjson_1_1_pretty_writer.html#a121686c29ca7fe071fa4108c46955ff0">SetIndent</a>(Ch indentChar, <span class="keywordtype">unsigned</span> indentCharCount) {</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(indentChar == <span class="charliteral">&#39; &#39;</span> || indentChar == <span class="charliteral">&#39;\t&#39;</span> || indentChar == <span class="charliteral">&#39;\n&#39;</span> || indentChar == <span class="charliteral">&#39;\r&#39;</span>);</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; indentChar_ = indentChar;</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; indentCharCount_ = indentCharCount;</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; }</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;<span class="comment"> //! Set pretty writer formatting options.</span></div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;<span class="comment"></span><span class="comment"> /*! \param options Formatting options.</span></div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00085"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_pretty_writer.html#acde6176577f29869e28a4f3c4a251090"> 85</a></span>&#160; <a class="code" href="classrapidjson_1_1_pretty_writer.html">PrettyWriter</a>&amp; <a class="code" href="classrapidjson_1_1_pretty_writer.html#acde6176577f29869e28a4f3c4a251090">SetFormatOptions</a>(<a class="code" href="namespacerapidjson.html#a084b31753ef2edefdeca8a5374eccc4b">PrettyFormatOptions</a> options) {</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; formatOptions_ = options;</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; }</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160;<span class="comment"> /*! @name Implementation of Handler</span></div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;<span class="comment"> \see Handler</span></div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160;<span class="comment"> */</span><span class="comment"></span></div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;<span class="comment"> //@{</span></div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="keywordtype">bool</span> Null() { PrettyPrefix(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a952871e4326b527154fc8aac1ac1f6ff">kNullType</a>); <span class="keywordflow">return</span> Base::EndValue(Base::WriteNull()); }</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="keywordtype">bool</span> Bool(<span class="keywordtype">bool</span> b) { PrettyPrefix(b ? <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a80d9f25b083abce45edbfdd3ba006c8e">kTrueType</a> : <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a9f2e7047832dce1029551b5de0f05607">kFalseType</a>); <span class="keywordflow">return</span> Base::EndValue(Base::WriteBool(b)); }</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="keywordtype">bool</span> Int(<span class="keywordtype">int</span> i) { PrettyPrefix(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a">kNumberType</a>); <span class="keywordflow">return</span> Base::EndValue(Base::WriteInt(i)); }</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="keywordtype">bool</span> Uint(<span class="keywordtype">unsigned</span> u) { PrettyPrefix(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a">kNumberType</a>); <span class="keywordflow">return</span> Base::EndValue(Base::WriteUint(u)); }</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="keywordtype">bool</span> Int64(int64_t i64) { PrettyPrefix(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a">kNumberType</a>); <span class="keywordflow">return</span> Base::EndValue(Base::WriteInt64(i64)); }</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <span class="keywordtype">bool</span> Uint64(uint64_t u64) { PrettyPrefix(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a">kNumberType</a>); <span class="keywordflow">return</span> Base::EndValue(Base::WriteUint64(u64)); }</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keywordtype">bool</span> Double(<span class="keywordtype">double</span> d) { PrettyPrefix(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a">kNumberType</a>); <span class="keywordflow">return</span> Base::EndValue(Base::WriteDouble(d)); }</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160;</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="keywordtype">bool</span> RawNumber(<span class="keyword">const</span> Ch* str, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> length, <span class="keywordtype">bool</span> copy = <span class="keyword">false</span>) {</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(str != 0);</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; (void)copy;</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; PrettyPrefix(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a">kNumberType</a>);</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <span class="keywordflow">return</span> Base::EndValue(Base::WriteString(str, length));</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; }</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160;</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <span class="keywordtype">bool</span> String(<span class="keyword">const</span> Ch* str, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> length, <span class="keywordtype">bool</span> copy = <span class="keyword">false</span>) {</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(str != 0);</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; (void)copy;</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; PrettyPrefix(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4ad6379da3dc04b83a591992bfb9fabba7">kStringType</a>);</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="keywordflow">return</span> Base::EndValue(Base::WriteString(str, length));</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; }</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160;</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <span class="keywordtype">bool</span> String(<span class="keyword">const</span> std::basic_string&lt;Ch&gt;&amp; str) {</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="keywordflow">return</span> String(str.data(), <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a>(str.size()));</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; }</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160;</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <span class="keywordtype">bool</span> StartObject() {</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; PrettyPrefix(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4acf030b422a32c3647c7c5973bd4dd0a9">kObjectType</a>);</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <span class="keyword">new</span> (Base::level_stack_.template Push&lt;typename Base::Level&gt;()) <span class="keyword">typename</span> <a class="code" href="structrapidjson_1_1_writer_1_1_level.html">Base::Level</a>(<span class="keyword">false</span>);</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <span class="keywordflow">return</span> Base::WriteStartObject();</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; }</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160;</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <span class="keywordtype">bool</span> Key(<span class="keyword">const</span> Ch* str, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> length, <span class="keywordtype">bool</span> copy = <span class="keyword">false</span>) { <span class="keywordflow">return</span> String(str, length, copy); }</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160;</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <span class="keywordtype">bool</span> Key(<span class="keyword">const</span> std::basic_string&lt;Ch&gt;&amp; str) {</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <span class="keywordflow">return</span> Key(str.data(), <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a>(str.size()));</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; }</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; </div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <span class="keywordtype">bool</span> EndObject(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> memberCount = 0) {</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; (void)memberCount;</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(Base::level_stack_.GetSize() &gt;= <span class="keyword">sizeof</span>(<span class="keyword">typename</span> <a class="code" href="structrapidjson_1_1_writer_1_1_level.html">Base::Level</a>)); <span class="comment">// not inside an Object</span></div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(!Base::level_stack_.<span class="keyword">template</span> Top&lt;typename Base::Level&gt;()-&gt;inArray); <span class="comment">// currently inside an Array, not Object</span></div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(0 == Base::level_stack_.<span class="keyword">template</span> Top&lt;typename Base::Level&gt;()-&gt;valueCount % 2); <span class="comment">// Object has a Key without a Value</span></div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; </div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <span class="keywordtype">bool</span> empty = Base::level_stack_.template Pop&lt;typename Base::Level&gt;(1)-&gt;valueCount == 0;</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160;</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <span class="keywordflow">if</span> (!empty) {</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; Base::os_-&gt;Put(<span class="charliteral">&#39;\n&#39;</span>);</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; WriteIndent();</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; }</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <span class="keywordtype">bool</span> ret = Base::EndValue(Base::WriteEndObject());</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; (void)ret;</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(ret == <span class="keyword">true</span>);</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <span class="keywordflow">if</span> (Base::level_stack_.Empty()) <span class="comment">// end of json text</span></div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; Base::Flush();</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; }</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160;</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; <span class="keywordtype">bool</span> StartArray() {</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; PrettyPrefix(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a058c622e1e7d59419ae58b895cbce468">kArrayType</a>);</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <span class="keyword">new</span> (Base::level_stack_.template Push&lt;typename Base::Level&gt;()) <span class="keyword">typename</span> <a class="code" href="structrapidjson_1_1_writer_1_1_level.html">Base::Level</a>(<span class="keyword">true</span>);</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; <span class="keywordflow">return</span> Base::WriteStartArray();</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; }</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160;</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <span class="keywordtype">bool</span> EndArray(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> memberCount = 0) {</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; (void)memberCount;</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(Base::level_stack_.GetSize() &gt;= <span class="keyword">sizeof</span>(<span class="keyword">typename</span> <a class="code" href="structrapidjson_1_1_writer_1_1_level.html">Base::Level</a>));</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(Base::level_stack_.<span class="keyword">template</span> Top&lt;typename Base::Level&gt;()-&gt;inArray);</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; <span class="keywordtype">bool</span> empty = Base::level_stack_.template Pop&lt;typename Base::Level&gt;(1)-&gt;valueCount == 0;</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160;</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <span class="keywordflow">if</span> (!empty &amp;&amp; !(formatOptions_ &amp; <a class="code" href="namespacerapidjson.html#a084b31753ef2edefdeca8a5374eccc4ba64b0f8a37ab3125118682046ff06500f">kFormatSingleLineArray</a>)) {</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; Base::os_-&gt;Put(<span class="charliteral">&#39;\n&#39;</span>);</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; WriteIndent();</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; }</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <span class="keywordtype">bool</span> ret = Base::EndValue(Base::WriteEndArray());</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; (void)ret;</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(ret == <span class="keyword">true</span>);</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; <span class="keywordflow">if</span> (Base::level_stack_.Empty()) <span class="comment">// end of json text</span></div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; Base::Flush();</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; }</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160;<span class="comment"> //@}</span></div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160;<span class="comment"> /*! @name Convenience extensions */</span><span class="comment"></span></div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160;<span class="comment"> //@{</span></div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160;<span class="comment"> //! Simpler but slower overload.</span></div><div class="line"><a name="l00187"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_pretty_writer.html#a363c2280393e27e19bceb8d015c2832c"> 187</a></span>&#160;<span class="comment"></span> <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_pretty_writer.html#a363c2280393e27e19bceb8d015c2832c">String</a>(<span class="keyword">const</span> Ch* str) { <span class="keywordflow">return</span> <a class="code" href="classrapidjson_1_1_pretty_writer.html#a363c2280393e27e19bceb8d015c2832c">String</a>(str, internal::StrLen(str)); }</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; <span class="keywordtype">bool</span> Key(<span class="keyword">const</span> Ch* str) { <span class="keywordflow">return</span> Key(str, internal::StrLen(str)); }</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160;<span class="comment"> //@}</span></div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160;<span class="comment"> //! Write a raw JSON value.</span></div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160;<span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160;<span class="comment"> For user to write a stringified JSON as a value.</span></div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160;<span class="comment"> \param json A well-formed JSON value. It should not contain null character within [0, length - 1] range.</span></div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160;<span class="comment"> \param length Length of the json.</span></div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160;<span class="comment"> \param type Type of the root of json.</span></div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160;<span class="comment"> \note When using PrettyWriter::RawValue(), the result json may not be indented correctly.</span></div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00201"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_pretty_writer.html#a3136e3426a5d06e5da50f6e6aab8a5be"> 201</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_pretty_writer.html#a3136e3426a5d06e5da50f6e6aab8a5be">RawValue</a>(<span class="keyword">const</span> Ch* json, <span class="keywordtype">size_t</span> length, <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">Type</a> type) {</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(json != 0);</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; PrettyPrefix(type);</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; <span class="keywordflow">return</span> Base::EndValue(Base::WriteRawValue(json, length));</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; }</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160;</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160;<span class="keyword">protected</span>:</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; <span class="keywordtype">void</span> PrettyPrefix(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">Type</a> type) {</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; (void)type;</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; <span class="keywordflow">if</span> (Base::level_stack_.GetSize() != 0) { <span class="comment">// this value is not at root</span></div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <span class="keyword">typename</span> <a class="code" href="structrapidjson_1_1_writer_1_1_level.html">Base::Level</a>* level = Base::level_stack_.template Top&lt;typename Base::Level&gt;();</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160;</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; <span class="keywordflow">if</span> (level-&gt;<a class="code" href="structrapidjson_1_1_writer_1_1_level.html#a59255e3b1d371161f7c894503cfd6bec">inArray</a>) {</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; <span class="keywordflow">if</span> (level-&gt;<a class="code" href="structrapidjson_1_1_writer_1_1_level.html#a5d17bdfa9ded5de72f5f91175cc3e36b">valueCount</a> &gt; 0) {</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; Base::os_-&gt;Put(<span class="charliteral">&#39;,&#39;</span>); <span class="comment">// add comma if it is not the first element in array</span></div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; <span class="keywordflow">if</span> (formatOptions_ &amp; <a class="code" href="namespacerapidjson.html#a084b31753ef2edefdeca8a5374eccc4ba64b0f8a37ab3125118682046ff06500f">kFormatSingleLineArray</a>)</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; Base::os_-&gt;Put(<span class="charliteral">&#39; &#39;</span>);</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; }</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160;</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; <span class="keywordflow">if</span> (!(formatOptions_ &amp; <a class="code" href="namespacerapidjson.html#a084b31753ef2edefdeca8a5374eccc4ba64b0f8a37ab3125118682046ff06500f">kFormatSingleLineArray</a>)) {</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; Base::os_-&gt;Put(<span class="charliteral">&#39;\n&#39;</span>);</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; WriteIndent();</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; }</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; }</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; <span class="keywordflow">else</span> { <span class="comment">// in object</span></div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <span class="keywordflow">if</span> (level-&gt;<a class="code" href="structrapidjson_1_1_writer_1_1_level.html#a5d17bdfa9ded5de72f5f91175cc3e36b">valueCount</a> &gt; 0) {</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <span class="keywordflow">if</span> (level-&gt;<a class="code" href="structrapidjson_1_1_writer_1_1_level.html#a5d17bdfa9ded5de72f5f91175cc3e36b">valueCount</a> % 2 == 0) {</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; Base::os_-&gt;Put(<span class="charliteral">&#39;,&#39;</span>);</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; Base::os_-&gt;Put(<span class="charliteral">&#39;\n&#39;</span>);</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; }</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; <span class="keywordflow">else</span> {</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; Base::os_-&gt;Put(<span class="charliteral">&#39;:&#39;</span>);</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; Base::os_-&gt;Put(<span class="charliteral">&#39; &#39;</span>);</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; }</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; }</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; Base::os_-&gt;Put(<span class="charliteral">&#39;\n&#39;</span>);</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160;</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; <span class="keywordflow">if</span> (level-&gt;<a class="code" href="structrapidjson_1_1_writer_1_1_level.html#a5d17bdfa9ded5de72f5f91175cc3e36b">valueCount</a> % 2 == 0)</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; WriteIndent();</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; }</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <span class="keywordflow">if</span> (!level-&gt;<a class="code" href="structrapidjson_1_1_writer_1_1_level.html#a59255e3b1d371161f7c894503cfd6bec">inArray</a> &amp;&amp; level-&gt;<a class="code" href="structrapidjson_1_1_writer_1_1_level.html#a5d17bdfa9ded5de72f5f91175cc3e36b">valueCount</a> % 2 == 0)</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(type == <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4ad6379da3dc04b83a591992bfb9fabba7">kStringType</a>); <span class="comment">// if it&#39;s in object, then even number should be a name</span></div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; level-&gt;<a class="code" href="structrapidjson_1_1_writer_1_1_level.html#a5d17bdfa9ded5de72f5f91175cc3e36b">valueCount</a>++;</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; }</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; <span class="keywordflow">else</span> {</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(!Base::hasRoot_); <span class="comment">// Should only has one and only one root.</span></div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; Base::hasRoot_ = <span class="keyword">true</span>;</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; }</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; }</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160;</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; <span class="keywordtype">void</span> WriteIndent() {</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; <span class="keywordtype">size_t</span> count = (Base::level_stack_.GetSize() / <span class="keyword">sizeof</span>(<span class="keyword">typename</span> <a class="code" href="structrapidjson_1_1_writer_1_1_level.html">Base::Level</a>)) * indentCharCount_;</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; <a class="code" href="namespacerapidjson.html#a1ac13bac5976fc06587e00fc0bcfb32a">PutN</a>(*Base::os_, static_cast&lt;typename OutputStream::Ch&gt;(indentChar_), count);</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; }</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160;</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; Ch indentChar_;</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; <span class="keywordtype">unsigned</span> indentCharCount_;</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; <a class="code" href="namespacerapidjson.html#a084b31753ef2edefdeca8a5374eccc4b">PrettyFormatOptions</a> formatOptions_;</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160;</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; <span class="comment">// Prohibit copy constructor &amp; assignment operator.</span></div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <a class="code" href="classrapidjson_1_1_pretty_writer.html">PrettyWriter</a>(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_pretty_writer.html">PrettyWriter</a>&amp;);</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; <a class="code" href="classrapidjson_1_1_pretty_writer.html">PrettyWriter</a>&amp; operator=(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_pretty_writer.html">PrettyWriter</a>&amp;);</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160;};</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160;</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160;RAPIDJSON_NAMESPACE_END</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160;</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160;<span class="preprocessor">#if defined(__clang__)</span></div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160;RAPIDJSON_DIAG_POP</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160;</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160;<span class="preprocessor">#ifdef __GNUC__</span></div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160;RAPIDJSON_DIAG_POP</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160;</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160;<span class="preprocessor">#endif // RAPIDJSON_RAPIDJSON_H_</span></div><div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4a80d9f25b083abce45edbfdd3ba006c8e"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a80d9f25b083abce45edbfdd3ba006c8e">rapidjson::kTrueType</a></div><div class="ttdoc">true </div><div class="ttdef"><b>Definition:</b> rapidjson.h:645</div></div>
<div class="ttc" id="structrapidjson_1_1_writer_1_1_level_html_a59255e3b1d371161f7c894503cfd6bec"><div class="ttname"><a href="structrapidjson_1_1_writer_1_1_level.html#a59255e3b1d371161f7c894503cfd6bec">rapidjson::Writer::Level::inArray</a></div><div class="ttdeci">bool inArray</div><div class="ttdoc">true if in array, otherwise in object </div><div class="ttdef"><b>Definition:</b> writer.h:290</div></div>
<div class="ttc" id="classrapidjson_1_1_pretty_writer_html_a363c2280393e27e19bceb8d015c2832c"><div class="ttname"><a href="classrapidjson_1_1_pretty_writer.html#a363c2280393e27e19bceb8d015c2832c">rapidjson::PrettyWriter::String</a></div><div class="ttdeci">bool String(const Ch *str)</div><div class="ttdoc">Simpler but slower overload. </div><div class="ttdef"><b>Definition:</b> prettywriter.h:187</div></div>
<div class="ttc" id="namespacerapidjson_html_a084b31753ef2edefdeca8a5374eccc4b"><div class="ttname"><a href="namespacerapidjson.html#a084b31753ef2edefdeca8a5374eccc4b">rapidjson::PrettyFormatOptions</a></div><div class="ttdeci">PrettyFormatOptions</div><div class="ttdoc">Combination of PrettyWriter format flags. </div><div class="ttdef"><b>Definition:</b> prettywriter.h:35</div></div>
<div class="ttc" id="namespacerapidjson_html_a084b31753ef2edefdeca8a5374eccc4ba64b0f8a37ab3125118682046ff06500f"><div class="ttname"><a href="namespacerapidjson.html#a084b31753ef2edefdeca8a5374eccc4ba64b0f8a37ab3125118682046ff06500f">rapidjson::kFormatSingleLineArray</a></div><div class="ttdoc">Format arrays on a single line. </div><div class="ttdef"><b>Definition:</b> prettywriter.h:37</div></div>
<div class="ttc" id="namespacerapidjson_html_a44eb33eaa523e36d466b1ced64b85c84"><div class="ttname"><a href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">rapidjson::SizeType</a></div><div class="ttdeci">unsigned SizeType</div><div class="ttdoc">Size type (for string lengths, array sizes, etc.) </div><div class="ttdef"><b>Definition:</b> rapidjson.h:384</div></div>
-<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4a9f2e7047832dce1029551b5de0f05607"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a9f2e7047832dce1029551b5de0f05607">rapidjson::kFalseType</a></div><div class="ttdoc">false </div><div class="ttdef"><b>Definition:</b> rapidjson.h:633</div></div>
+<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4a9f2e7047832dce1029551b5de0f05607"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a9f2e7047832dce1029551b5de0f05607">rapidjson::kFalseType</a></div><div class="ttdoc">false </div><div class="ttdef"><b>Definition:</b> rapidjson.h:644</div></div>
<div class="ttc" id="classrapidjson_1_1_pretty_writer_html"><div class="ttname"><a href="classrapidjson_1_1_pretty_writer.html">rapidjson::PrettyWriter</a></div><div class="ttdoc">Writer with indentation and spacing. </div><div class="ttdef"><b>Definition:</b> fwd.h:100</div></div>
<div class="ttc" id="structrapidjson_1_1_writer_1_1_level_html"><div class="ttname"><a href="structrapidjson_1_1_writer_1_1_level.html">rapidjson::Writer::Level</a></div><div class="ttdoc">Information for each nested level </div><div class="ttdef"><b>Definition:</b> writer.h:287</div></div>
<div class="ttc" id="structrapidjson_1_1_writer_1_1_level_html_a5d17bdfa9ded5de72f5f91175cc3e36b"><div class="ttname"><a href="structrapidjson_1_1_writer_1_1_level.html#a5d17bdfa9ded5de72f5f91175cc3e36b">rapidjson::Writer::Level::valueCount</a></div><div class="ttdeci">size_t valueCount</div><div class="ttdoc">number of values in this level </div><div class="ttdef"><b>Definition:</b> writer.h:289</div></div>
<div class="ttc" id="classrapidjson_1_1_pretty_writer_html_a3136e3426a5d06e5da50f6e6aab8a5be"><div class="ttname"><a href="classrapidjson_1_1_pretty_writer.html#a3136e3426a5d06e5da50f6e6aab8a5be">rapidjson::PrettyWriter::RawValue</a></div><div class="ttdeci">bool RawValue(const Ch *json, size_t length, Type type)</div><div class="ttdoc">Write a raw JSON value. </div><div class="ttdef"><b>Definition:</b> prettywriter.h:201</div></div>
-<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">rapidjson::Type</a></div><div class="ttdeci">Type</div><div class="ttdoc">Type of JSON value </div><div class="ttdef"><b>Definition:</b> rapidjson.h:631</div></div>
-<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4acf030b422a32c3647c7c5973bd4dd0a9"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4acf030b422a32c3647c7c5973bd4dd0a9">rapidjson::kObjectType</a></div><div class="ttdoc">object </div><div class="ttdef"><b>Definition:</b> rapidjson.h:635</div></div>
-<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4a058c622e1e7d59419ae58b895cbce468"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a058c622e1e7d59419ae58b895cbce468">rapidjson::kArrayType</a></div><div class="ttdoc">array </div><div class="ttdef"><b>Definition:</b> rapidjson.h:636</div></div>
+<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">rapidjson::Type</a></div><div class="ttdeci">Type</div><div class="ttdoc">Type of JSON value </div><div class="ttdef"><b>Definition:</b> rapidjson.h:642</div></div>
+<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4acf030b422a32c3647c7c5973bd4dd0a9"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4acf030b422a32c3647c7c5973bd4dd0a9">rapidjson::kObjectType</a></div><div class="ttdoc">object </div><div class="ttdef"><b>Definition:</b> rapidjson.h:646</div></div>
+<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4a058c622e1e7d59419ae58b895cbce468"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a058c622e1e7d59419ae58b895cbce468">rapidjson::kArrayType</a></div><div class="ttdoc">array </div><div class="ttdef"><b>Definition:</b> rapidjson.h:647</div></div>
<div class="ttc" id="namespacerapidjson_html_a1ac13bac5976fc06587e00fc0bcfb32a"><div class="ttname"><a href="namespacerapidjson.html#a1ac13bac5976fc06587e00fc0bcfb32a">rapidjson::PutN</a></div><div class="ttdeci">void PutN(FileWriteStream &amp;stream, char c, size_t n)</div><div class="ttdoc">Implement specialized version of PutN() with memset() for better performance. </div><div class="ttdef"><b>Definition:</b> filewritestream.h:94</div></div>
<div class="ttc" id="classrapidjson_1_1_writer_html"><div class="ttname"><a href="classrapidjson_1_1_writer.html">rapidjson::Writer</a></div><div class="ttdoc">JSON writer </div><div class="ttdef"><b>Definition:</b> fwd.h:95</div></div>
-<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4a952871e4326b527154fc8aac1ac1f6ff"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a952871e4326b527154fc8aac1ac1f6ff">rapidjson::kNullType</a></div><div class="ttdoc">null </div><div class="ttdef"><b>Definition:</b> rapidjson.h:632</div></div>
+<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4a952871e4326b527154fc8aac1ac1f6ff"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a952871e4326b527154fc8aac1ac1f6ff">rapidjson::kNullType</a></div><div class="ttdoc">null </div><div class="ttdef"><b>Definition:</b> rapidjson.h:643</div></div>
<div class="ttc" id="namespacerapidjson_html_a084b31753ef2edefdeca8a5374eccc4ba8164b0d4993439856171585b9cf3adc0"><div class="ttname"><a href="namespacerapidjson.html#a084b31753ef2edefdeca8a5374eccc4ba8164b0d4993439856171585b9cf3adc0">rapidjson::kFormatDefault</a></div><div class="ttdoc">Default pretty formatting. </div><div class="ttdef"><b>Definition:</b> prettywriter.h:36</div></div>
-<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4ad6379da3dc04b83a591992bfb9fabba7"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4ad6379da3dc04b83a591992bfb9fabba7">rapidjson::kStringType</a></div><div class="ttdoc">string </div><div class="ttdef"><b>Definition:</b> rapidjson.h:637</div></div>
+<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4ad6379da3dc04b83a591992bfb9fabba7"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4ad6379da3dc04b83a591992bfb9fabba7">rapidjson::kStringType</a></div><div class="ttdoc">string </div><div class="ttdef"><b>Definition:</b> rapidjson.h:648</div></div>
<div class="ttc" id="classrapidjson_1_1_pretty_writer_html_a121686c29ca7fe071fa4108c46955ff0"><div class="ttname"><a href="classrapidjson_1_1_pretty_writer.html#a121686c29ca7fe071fa4108c46955ff0">rapidjson::PrettyWriter::SetIndent</a></div><div class="ttdeci">PrettyWriter &amp; SetIndent(Ch indentChar, unsigned indentCharCount)</div><div class="ttdoc">Set custom indentation. </div><div class="ttdef"><b>Definition:</b> prettywriter.h:75</div></div>
<div class="ttc" id="classrapidjson_1_1_pretty_writer_html_a688d7ebf5c8015e423b7a970afc8e0a0"><div class="ttname"><a href="classrapidjson_1_1_pretty_writer.html#a688d7ebf5c8015e423b7a970afc8e0a0">rapidjson::PrettyWriter::PrettyWriter</a></div><div class="ttdeci">PrettyWriter(OutputStream &amp;os, StackAllocator *allocator=0, size_t levelDepth=Base::kDefaultLevelDepth)</div><div class="ttdoc">Constructor </div><div class="ttdef"><b>Definition:</b> prettywriter.h:58</div></div>
<div class="ttc" id="classrapidjson_1_1_pretty_writer_html_acde6176577f29869e28a4f3c4a251090"><div class="ttname"><a href="classrapidjson_1_1_pretty_writer.html#acde6176577f29869e28a4f3c4a251090">rapidjson::PrettyWriter::SetFormatOptions</a></div><div class="ttdeci">PrettyWriter &amp; SetFormatOptions(PrettyFormatOptions options)</div><div class="ttdoc">Set pretty writer formatting options. </div><div class="ttdef"><b>Definition:</b> prettywriter.h:85</div></div>
<div class="ttc" id="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g_html_gabeba18d612187bad2ac62aed9276d47c"><div class="ttname"><a href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a></div><div class="ttdeci">#define RAPIDJSON_ASSERT(x)</div><div class="ttdoc">Assertion. </div><div class="ttdef"><b>Definition:</b> rapidjson.h:406</div></div>
-<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a">rapidjson::kNumberType</a></div><div class="ttdoc">number </div><div class="ttdef"><b>Definition:</b> rapidjson.h:638</div></div>
+<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a">rapidjson::kNumberType</a></div><div class="ttdoc">number </div><div class="ttdef"><b>Definition:</b> rapidjson.h:649</div></div>
</div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->
<!-- HTML footer for doxygen 1.8.7-->
diff --git a/zh-cn/rapidjson_8h.html b/zh-cn/rapidjson_8h.html
index 150c1332..b1d4cde0 100644
--- a/zh-cn/rapidjson_8h.html
+++ b/zh-cn/rapidjson_8h.html
@@ -177,9 +177,9 @@ $(document).ready(function(){initNavTree('rapidjson_8h.html','');});
<tr class="memitem:ga6a2b1695c13e77ae425e3cbac980ccb5"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(x)&#160;&#160;&#160;(x)</td></tr>
<tr class="memdesc:ga6a2b1695c13e77ae425e3cbac980ccb5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compiler branching hint for expression with low probability to be true. <a href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">更多...</a><br /></td></tr>
<tr class="separator:ga6a2b1695c13e77ae425e3cbac980ccb5"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a2b2a0d9143aa4fb31205a85b34c43952"><td class="memItemLeft" align="right" valign="top"><a id="a2b2a0d9143aa4fb31205a85b34c43952"></a>
-#define&#160;</td><td class="memItemRight" valign="bottom"><b>RAPIDJSON_NOEXCEPT_ASSERT</b>(x)&#160;&#160;&#160;<a class="el" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(x)</td></tr>
-<tr class="separator:a2b2a0d9143aa4fb31205a85b34c43952"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga2b2a0d9143aa4fb31205a85b34c43952"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga2b2a0d9143aa4fb31205a85b34c43952">RAPIDJSON_NOEXCEPT_ASSERT</a>(x)&#160;&#160;&#160;<a class="el" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(x)</td></tr>
+<tr class="memdesc:ga2b2a0d9143aa4fb31205a85b34c43952"><td class="mdescLeft">&#160;</td><td class="mdescRight">Assertion (in non-throwing contexts). <a href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga2b2a0d9143aa4fb31205a85b34c43952">更多...</a><br /></td></tr>
+<tr class="separator:ga2b2a0d9143aa4fb31205a85b34c43952"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abdc7cd7902748ffe6626d71c59a73c3b"><td class="memItemLeft" align="right" valign="top"><a id="abdc7cd7902748ffe6626d71c59a73c3b"></a>
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="rapidjson_8h.html#abdc7cd7902748ffe6626d71c59a73c3b">RAPIDJSON_NEW</a>(TypeName)&#160;&#160;&#160;new TypeName</td></tr>
<tr class="memdesc:abdc7cd7902748ffe6626d71c59a73c3b"><td class="mdescLeft">&#160;</td><td class="mdescRight">! customization point for global <code>new</code> <br /></td></tr>
diff --git a/zh-cn/rapidjson_8h.js b/zh-cn/rapidjson_8h.js
index d9d939b6..f8955b3e 100644
--- a/zh-cn/rapidjson_8h.js
+++ b/zh-cn/rapidjson_8h.js
@@ -17,7 +17,7 @@ var rapidjson_8h =
[ "RAPIDJSON_NEW", "rapidjson_8h.html#abdc7cd7902748ffe6626d71c59a73c3b", null ],
[ "RAPIDJSON_NO_INT64DEFINE", "group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga7f4e50c35dae3b015390daa6d48ce23c", null ],
[ "RAPIDJSON_NO_SIZETYPEDEFINE", "group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga250603aa9e2a12429b25ba0c8108ad4f", null ],
- [ "RAPIDJSON_NOEXCEPT_ASSERT", "rapidjson_8h.html#a2b2a0d9143aa4fb31205a85b34c43952", null ],
+ [ "RAPIDJSON_NOEXCEPT_ASSERT", "group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga2b2a0d9143aa4fb31205a85b34c43952", null ],
[ "RAPIDJSON_PATCH_VERSION", "group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gaf967d31be43666ce7f53756d73bd1cdf", null ],
[ "RAPIDJSON_SETPOINTER", "rapidjson_8h.html#a113598c4750b3aab4de2782ff1865ed4", null ],
[ "RAPIDJSON_SIMD", "group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga0ccf72f3ebc4b3306ab669f95ca5c64b", null ],
diff --git a/zh-cn/rapidjson_8h_source.html b/zh-cn/rapidjson_8h_source.html
index 39d8e9c7..82228db6 100644
--- a/zh-cn/rapidjson_8h_source.html
+++ b/zh-cn/rapidjson_8h_source.html
@@ -81,15 +81,15 @@ $(document).ready(function(){initNavTree('rapidjson_8h_source.html','');});
<div class="title">rapidjson.h</div> </div>
</div><!--header-->
<div class="contents">
-<a href="rapidjson_8h.html">浏览该文件的文档.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">// Tencent is pleased to support the open source community by making RapidJSON available.</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">// </span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">// Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved.</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment">// Licensed under the MIT License (the &quot;License&quot;); you may not use this file except</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment">// in compliance with the License. You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment">// http://opensource.org/licenses/MIT</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment">// Unless required by applicable law or agreed to in writing, software distributed </span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment">// under the License is distributed on an &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR </span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment">// CONDITIONS OF ANY KIND, either express or implied. See the License for the </span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment">// specific language governing permissions and limitations under the License.</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;</div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#ifndef RAPIDJSON_RAPIDJSON_H_</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#define RAPIDJSON_RAPIDJSON_H_</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment">/*!\file rapidjson.h</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment"> \brief common definitions and configuration</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment"> </span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment"> \see RAPIDJSON_CONFIG</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="comment">/*! \defgroup RAPIDJSON_CONFIG RapidJSON configuration</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="comment"> \brief Configuration macros for library features</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="comment"> Some RapidJSON features are configurable to adapt the library to a wide</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="comment"> variety of platforms, environments and usage scenarios. Most of the</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="comment"> features can be configured in terms of overridden or predefined</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="comment"> preprocessor macros at compile-time.</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="comment"> Some additional customization is available in the \ref RAPIDJSON_ERRORS APIs.</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="comment"> \note These macros should be given on the compiler command-line</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="comment"> (where applicable) to avoid inconsistent values when compiling</span></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="comment"> different translation units of a single application.</span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;<span class="preprocessor">#include &lt;cstdlib&gt;</span> <span class="comment">// malloc(), realloc(), free(), size_t</span></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;<span class="preprocessor">#include &lt;cstring&gt;</span> <span class="comment">// memset(), memcpy(), memmove(), memcmp()</span></div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;<span class="comment"></span><span class="comment">// RAPIDJSON_VERSION_STRING</span></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;<span class="comment">// ALWAYS synchronize the following 3 macros with corresponding variables in /CMakeLists.txt.</span></div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;<span class="comment">//!@cond RAPIDJSON_HIDDEN_FROM_DOXYGEN</span></div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;<span class="comment"></span><span class="comment">// token stringification</span></div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;<span class="preprocessor">#define RAPIDJSON_STRINGIFY(x) RAPIDJSON_DO_STRINGIFY(x)</span></div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;<span class="preprocessor">#define RAPIDJSON_DO_STRINGIFY(x) #x</span></div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;<span class="comment">// token concatenation</span></div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;<span class="preprocessor">#define RAPIDJSON_JOIN(X, Y) RAPIDJSON_DO_JOIN(X, Y)</span></div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;<span class="preprocessor">#define RAPIDJSON_DO_JOIN(X, Y) RAPIDJSON_DO_JOIN2(X, Y)</span></div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;<span class="preprocessor">#define RAPIDJSON_DO_JOIN2(X, Y) X##Y</span></div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;<span class="comment">//!@endcond</span></div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;<span class="comment">/*! \def RAPIDJSON_MAJOR_VERSION</span></div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;<span class="comment"> \ingroup RAPIDJSON_CONFIG</span></div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;<span class="comment"> \brief Major version of RapidJSON in integer.</span></div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;<span class="comment">*/</span><span class="comment"></span></div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;<span class="comment">/*! \def RAPIDJSON_MINOR_VERSION</span></div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;<span class="comment"> \ingroup RAPIDJSON_CONFIG</span></div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;<span class="comment"> \brief Minor version of RapidJSON in integer.</span></div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;<span class="comment">*/</span><span class="comment"></span></div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;<span class="comment">/*! \def RAPIDJSON_PATCH_VERSION</span></div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;<span class="comment"> \ingroup RAPIDJSON_CONFIG</span></div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;<span class="comment"> \brief Patch version of RapidJSON in integer.</span></div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;<span class="comment">*/</span><span class="comment"></span></div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;<span class="comment">/*! \def RAPIDJSON_VERSION_STRING</span></div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;<span class="comment"> \ingroup RAPIDJSON_CONFIG</span></div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;<span class="comment"> \brief Version of RapidJSON in &quot;&lt;major&gt;.&lt;minor&gt;.&lt;patch&gt;&quot; string format.</span></div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00075"></a><span class="lineno"><a class="line" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gaf1ff1685be6cbebb5d4b2ab997776f45"> 75</a></span>&#160;<span class="preprocessor">#define RAPIDJSON_MAJOR_VERSION 1</span></div><div class="line"><a name="l00076"></a><span class="lineno"><a class="line" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gaf9125105c593a636a79f1c2d96835376"> 76</a></span>&#160;<span class="preprocessor">#define RAPIDJSON_MINOR_VERSION 1</span></div><div class="line"><a name="l00077"></a><span class="lineno"><a class="line" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gaf967d31be43666ce7f53756d73bd1cdf"> 77</a></span>&#160;<span class="preprocessor">#define RAPIDJSON_PATCH_VERSION 0</span></div><div class="line"><a name="l00078"></a><span class="lineno"><a class="line" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gad283cfde97d9a32b7d8e8107b11f70a6"> 78</a></span>&#160;<span class="preprocessor">#define RAPIDJSON_VERSION_STRING \</span></div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;<span class="preprocessor"> RAPIDJSON_STRINGIFY(RAPIDJSON_MAJOR_VERSION.RAPIDJSON_MINOR_VERSION.RAPIDJSON_PATCH_VERSION)</span></div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;<span class="comment"></span><span class="comment">// RAPIDJSON_NAMESPACE_(BEGIN|END)</span><span class="comment"></span></div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;<span class="comment">/*! \def RAPIDJSON_NAMESPACE</span></div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;<span class="comment"> \ingroup RAPIDJSON_CONFIG</span></div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160;<span class="comment"> \brief provide custom rapidjson namespace</span></div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;<span class="comment"> In order to avoid symbol clashes and/or &quot;One Definition Rule&quot; errors</span></div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160;<span class="comment"> between multiple inclusions of (different versions of) RapidJSON in</span></div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;<span class="comment"> a single binary, users can customize the name of the main RapidJSON</span></div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160;<span class="comment"> namespace.</span></div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160;<span class="comment"> In case of a single nesting level, defining \c RAPIDJSON_NAMESPACE</span></div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;<span class="comment"> to a custom name (e.g. \c MyRapidJSON) is sufficient. If multiple</span></div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;<span class="comment"> levels are needed, both \ref RAPIDJSON_NAMESPACE_BEGIN and \ref</span></div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;<span class="comment"> RAPIDJSON_NAMESPACE_END need to be defined as well:</span></div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;<span class="comment"> \code</span></div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;<span class="comment"> // in some .cpp file</span></div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160;<span class="comment"> #define RAPIDJSON_NAMESPACE my::rapidjson</span></div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160;<span class="comment"> #define RAPIDJSON_NAMESPACE_BEGIN namespace my { namespace rapidjson {</span></div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160;<span class="comment"> #define RAPIDJSON_NAMESPACE_END } }</span></div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160;<span class="comment"> #include &quot;rapidjson/...&quot;</span></div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160;<span class="comment"> \endcode</span></div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160;<span class="comment"> \see rapidjson</span></div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160;<span class="comment"> */</span><span class="comment"></span></div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160;<span class="comment">/*! \def RAPIDJSON_NAMESPACE_BEGIN</span></div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160;<span class="comment"> \ingroup RAPIDJSON_CONFIG</span></div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160;<span class="comment"> \brief provide custom rapidjson namespace (opening expression)</span></div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160;<span class="comment"> \see RAPIDJSON_NAMESPACE</span></div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160;<span class="comment">*/</span><span class="comment"></span></div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160;<span class="comment">/*! \def RAPIDJSON_NAMESPACE_END</span></div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160;<span class="comment"> \ingroup RAPIDJSON_CONFIG</span></div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160;<span class="comment"> \brief provide custom rapidjson namespace (closing expression)</span></div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160;<span class="comment"> \see RAPIDJSON_NAMESPACE</span></div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160;<span class="preprocessor">#ifndef RAPIDJSON_NAMESPACE</span></div><div class="line"><a name="l00118"></a><span class="lineno"><a class="line" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga743a79d3af927391fe3eb5c979136899"> 118</a></span>&#160;<span class="preprocessor">#define RAPIDJSON_NAMESPACE rapidjson</span></div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160;<span class="preprocessor">#ifndef RAPIDJSON_NAMESPACE_BEGIN</span></div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160;<span class="preprocessor">#define RAPIDJSON_NAMESPACE_BEGIN namespace RAPIDJSON_NAMESPACE {</span></div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160;<span class="preprocessor">#ifndef RAPIDJSON_NAMESPACE_END</span></div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160;<span class="preprocessor">#define RAPIDJSON_NAMESPACE_END }</span></div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160;<span class="comment"></span><span class="comment">// RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160;</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160;<span class="preprocessor">#ifndef RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160;<span class="preprocessor">#ifdef RAPIDJSON_DOXYGEN_RUNNING</span></div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160;<span class="preprocessor">#define RAPIDJSON_HAS_STDSTRING 1 // force generation of documentation</span></div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160;<span class="preprocessor">#define RAPIDJSON_HAS_STDSTRING 0 // no std::string support by default</span></div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160;<span class="comment">/*! \def RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160;<span class="comment"> \ingroup RAPIDJSON_CONFIG</span></div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160;<span class="comment"> \brief Enable RapidJSON support for \c std::string</span></div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160;<span class="comment"> By defining this preprocessor symbol to \c 1, several convenience functions for using</span></div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160;<span class="comment"> \ref rapidjson::GenericValue with \c std::string are enabled, especially</span></div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160;<span class="comment"> for construction and comparison.</span></div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160;<span class="comment"> \hideinitializer</span></div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160;<span class="preprocessor">#endif // !defined(RAPIDJSON_HAS_STDSTRING)</span></div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160;</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160;<span class="preprocessor">#endif // RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160;<span class="comment"></span><span class="comment">// RAPIDJSON_NO_INT64DEFINE</span></div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160;<span class="comment">/*! \def RAPIDJSON_NO_INT64DEFINE</span></div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160;<span class="comment"> \ingroup RAPIDJSON_CONFIG</span></div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160;<span class="comment"> \brief Use external 64-bit integer types.</span></div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160;<span class="comment"> RapidJSON requires the 64-bit integer types \c int64_t and \c uint64_t types</span></div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160;<span class="comment"> to be available at global scope.</span></div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160;<span class="comment"> If users have their own definition, define RAPIDJSON_NO_INT64DEFINE to</span></div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160;<span class="comment"> prevent RapidJSON from defining its own types.</span></div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160;<span class="preprocessor">#ifndef RAPIDJSON_NO_INT64DEFINE</span></div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160;<span class="comment">//!@cond RAPIDJSON_HIDDEN_FROM_DOXYGEN</span></div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160;<span class="comment"></span><span class="preprocessor">#if defined(_MSC_VER) &amp;&amp; (_MSC_VER &lt; 1800) // Visual Studio 2013</span></div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160;<span class="preprocessor">#include &quot;msinttypes/stdint.h&quot;</span></div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160;<span class="preprocessor">#include &quot;msinttypes/inttypes.h&quot;</span></div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160;<span class="comment">// Other compilers should have this.</span></div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160;<span class="preprocessor">#include &lt;stdint.h&gt;</span></div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160;<span class="preprocessor">#include &lt;inttypes.h&gt;</span></div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160;<span class="comment">//!@endcond</span></div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160;<span class="comment"></span><span class="preprocessor">#ifdef RAPIDJSON_DOXYGEN_RUNNING</span></div><div class="line"><a name="l00177"></a><span class="lineno"><a class="line" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga7f4e50c35dae3b015390daa6d48ce23c"> 177</a></span>&#160;<span class="preprocessor">#define RAPIDJSON_NO_INT64DEFINE</span></div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160;<span class="preprocessor">#endif // RAPIDJSON_NO_INT64TYPEDEF</span></div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160;<span class="comment"></span><span class="comment">// RAPIDJSON_FORCEINLINE</span></div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160;</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160;<span class="preprocessor">#ifndef RAPIDJSON_FORCEINLINE</span></div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160;<span class="comment">//!@cond RAPIDJSON_HIDDEN_FROM_DOXYGEN</span></div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160;<span class="comment"></span><span class="preprocessor">#if defined(_MSC_VER) &amp;&amp; defined(NDEBUG)</span></div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160;<span class="preprocessor">#define RAPIDJSON_FORCEINLINE __forceinline</span></div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160;<span class="preprocessor">#elif defined(__GNUC__) &amp;&amp; __GNUC__ &gt;= 4 &amp;&amp; defined(NDEBUG)</span></div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160;<span class="preprocessor">#define RAPIDJSON_FORCEINLINE __attribute__((always_inline))</span></div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160;<span class="preprocessor">#define RAPIDJSON_FORCEINLINE</span></div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160;<span class="comment">//!@endcond</span></div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160;<span class="comment"></span><span class="preprocessor">#endif // RAPIDJSON_FORCEINLINE</span></div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160;<span class="comment"></span><span class="comment">// RAPIDJSON_ENDIAN</span></div><div class="line"><a name="l00198"></a><span class="lineno"><a class="line" href="rapidjson_8h.html#addcc0c3607c5790f35cc4c15885ff97c"> 198</a></span>&#160;<span class="preprocessor">#define RAPIDJSON_LITTLEENDIAN 0 </span><span class="comment">//!&lt; Little endian machine</span></div><div class="line"><a name="l00199"></a><span class="lineno"><a class="line" href="rapidjson_8h.html#ac7951ebf8a2624ab85d2dcd3ec7af974"> 199</a></span>&#160;<span class="comment"></span>#define RAPIDJSON_BIGENDIAN 1 <span class="comment">//!&lt; Big endian machine</span></div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160;<span class="comment">//! Endianness of the machine.</span></div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160;<span class="comment"></span><span class="comment">/*!</span></div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160;<span class="comment"> \def RAPIDJSON_ENDIAN</span></div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160;<span class="comment"> \ingroup RAPIDJSON_CONFIG</span></div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160;<span class="comment"> GCC 4.6 provided macro for detecting endianness of the target machine. But other</span></div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160;<span class="comment"> compilers may not have this. User can define RAPIDJSON_ENDIAN to either</span></div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160;<span class="comment"> \ref RAPIDJSON_LITTLEENDIAN or \ref RAPIDJSON_BIGENDIAN.</span></div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160;<span class="comment"> Default detection implemented with reference to</span></div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160;<span class="comment"> \li https://gcc.gnu.org/onlinedocs/gcc-4.6.0/cpp/Common-Predefined-Macros.html</span></div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160;<span class="comment"> \li http://www.boost.org/doc/libs/1_42_0/boost/detail/endian.hpp</span></div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160;<span class="preprocessor">#ifndef RAPIDJSON_ENDIAN</span></div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160;<span class="comment">// Detect with GCC 4.6&#39;s macro</span></div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160;<span class="preprocessor"># ifdef __BYTE_ORDER__</span></div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160;<span class="preprocessor"># if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__</span></div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160;<span class="preprocessor"># define RAPIDJSON_ENDIAN RAPIDJSON_LITTLEENDIAN</span></div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160;<span class="preprocessor"># elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__</span></div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160;<span class="preprocessor"># define RAPIDJSON_ENDIAN RAPIDJSON_BIGENDIAN</span></div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160;<span class="preprocessor"># else</span></div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160;<span class="preprocessor"># error Unknown machine endianness detected. User needs to define RAPIDJSON_ENDIAN.</span></div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160;<span class="preprocessor"># endif // __BYTE_ORDER__</span></div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160;<span class="comment">// Detect with GLIBC&#39;s endian.h</span></div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160;<span class="preprocessor"># elif defined(__GLIBC__)</span></div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160;<span class="preprocessor"># include &lt;endian.h&gt;</span></div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160;<span class="preprocessor"># if (__BYTE_ORDER == __LITTLE_ENDIAN)</span></div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160;<span class="preprocessor"># define RAPIDJSON_ENDIAN RAPIDJSON_LITTLEENDIAN</span></div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160;<span class="preprocessor"># elif (__BYTE_ORDER == __BIG_ENDIAN)</span></div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160;<span class="preprocessor"># define RAPIDJSON_ENDIAN RAPIDJSON_BIGENDIAN</span></div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160;<span class="preprocessor"># else</span></div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160;<span class="preprocessor"># error Unknown machine endianness detected. User needs to define RAPIDJSON_ENDIAN.</span></div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160;<span class="preprocessor"># endif // __GLIBC__</span></div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160;<span class="comment">// Detect with _LITTLE_ENDIAN and _BIG_ENDIAN macro</span></div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160;<span class="preprocessor"># elif defined(_LITTLE_ENDIAN) &amp;&amp; !defined(_BIG_ENDIAN)</span></div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160;<span class="preprocessor"># define RAPIDJSON_ENDIAN RAPIDJSON_LITTLEENDIAN</span></div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160;<span class="preprocessor"># elif defined(_BIG_ENDIAN) &amp;&amp; !defined(_LITTLE_ENDIAN)</span></div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160;<span class="preprocessor"># define RAPIDJSON_ENDIAN RAPIDJSON_BIGENDIAN</span></div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160;<span class="comment">// Detect with architecture macros</span></div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160;<span class="preprocessor"># elif defined(__sparc) || defined(__sparc__) || defined(_POWER) || defined(__powerpc__) || defined(__ppc__) || defined(__hpux) || defined(__hppa) || defined(_MIPSEB) || defined(_POWER) || defined(__s390__)</span></div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160;<span class="preprocessor"># define RAPIDJSON_ENDIAN RAPIDJSON_BIGENDIAN</span></div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160;<span class="preprocessor"># elif defined(__i386__) || defined(__alpha__) || defined(__ia64) || defined(__ia64__) || defined(_M_IX86) || defined(_M_IA64) || defined(_M_ALPHA) || defined(__amd64) || defined(__amd64__) || defined(_M_AMD64) || defined(__x86_64) || defined(__x86_64__) || defined(_M_X64) || defined(__bfin__)</span></div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160;<span class="preprocessor"># define RAPIDJSON_ENDIAN RAPIDJSON_LITTLEENDIAN</span></div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160;<span class="preprocessor"># elif defined(_MSC_VER) &amp;&amp; (defined(_M_ARM) || defined(_M_ARM64))</span></div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160;<span class="preprocessor"># define RAPIDJSON_ENDIAN RAPIDJSON_LITTLEENDIAN</span></div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160;<span class="preprocessor"># elif defined(RAPIDJSON_DOXYGEN_RUNNING)</span></div><div class="line"><a name="l00247"></a><span class="lineno"><a class="line" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gaba2445f582142cf918e74c2d22d1aa07"> 247</a></span>&#160;<span class="preprocessor"># define RAPIDJSON_ENDIAN</span></div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160;<span class="preprocessor"># else</span></div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160;<span class="preprocessor"># error Unknown machine endianness detected. User needs to define RAPIDJSON_ENDIAN. </span></div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160;<span class="preprocessor"># endif</span></div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160;<span class="preprocessor">#endif // RAPIDJSON_ENDIAN</span></div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160;<span class="comment"></span><span class="comment">// RAPIDJSON_64BIT</span></div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160;<span class="comment">//! Whether using 64-bit architecture</span></div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160;<span class="comment"></span><span class="preprocessor">#ifndef RAPIDJSON_64BIT</span></div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160;<span class="preprocessor">#if defined(__LP64__) || (defined(__x86_64__) &amp;&amp; defined(__ILP32__)) || defined(_WIN64) || defined(__EMSCRIPTEN__)</span></div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160;<span class="preprocessor">#define RAPIDJSON_64BIT 1</span></div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00261"></a><span class="lineno"><a class="line" href="rapidjson_8h.html#a93973847cb99354b6b5bb5605aa7fe52"> 261</a></span>&#160;<span class="preprocessor">#define RAPIDJSON_64BIT 0</span></div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160;<span class="preprocessor">#endif // RAPIDJSON_64BIT</span></div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160;<span class="comment"></span><span class="comment">// RAPIDJSON_ALIGN</span></div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160;<span class="comment">//! Data alignment of the machine.</span></div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160;<span class="comment"></span><span class="comment">/*! \ingroup RAPIDJSON_CONFIG</span></div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160;<span class="comment"> \param x pointer to align</span></div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160;<span class="comment"> Some machines require strict data alignment. The default is 8 bytes.</span></div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160;<span class="comment"> User can customize by defining the RAPIDJSON_ALIGN function macro.</span></div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160;<span class="preprocessor">#ifndef RAPIDJSON_ALIGN</span></div><div class="line"><a name="l00276"></a><span class="lineno"><a class="line" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga583915242504c7fdb36e826f02f76242"> 276</a></span>&#160;<span class="preprocessor">#define RAPIDJSON_ALIGN(x) (((x) + static_cast&lt;size_t&gt;(7u)) &amp; ~static_cast&lt;size_t&gt;(7u))</span></div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160;<span class="comment"></span><span class="comment">// RAPIDJSON_UINT64_C2</span></div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160;<span class="comment">//! Construct a 64-bit literal by a pair of 32-bit integer.</span></div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160;<span class="comment"></span><span class="comment">/*!</span></div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160;<span class="comment"> 64-bit literal with or without ULL suffix is prone to compiler warnings.</span></div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160;<span class="comment"> UINT64_C() is C macro which cause compilation problems.</span></div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160;<span class="comment"> Use this macro to define 64-bit constants by a pair of 32-bit integer.</span></div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160;<span class="preprocessor">#ifndef RAPIDJSON_UINT64_C2</span></div><div class="line"><a name="l00289"></a><span class="lineno"><a class="line" href="rapidjson_8h.html#aaee1245f375a71be1ac9b8a07ba5fb8f"> 289</a></span>&#160;<span class="preprocessor">#define RAPIDJSON_UINT64_C2(high32, low32) ((static_cast&lt;uint64_t&gt;(high32) &lt;&lt; 32) | static_cast&lt;uint64_t&gt;(low32))</span></div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160;<span class="comment"></span><span class="comment">// RAPIDJSON_48BITPOINTER_OPTIMIZATION</span></div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160;<span class="comment">//! Use only lower 48-bit address for some pointers.</span></div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160;<span class="comment"></span><span class="comment">/*!</span></div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160;<span class="comment"> \ingroup RAPIDJSON_CONFIG</span></div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160;<span class="comment"> This optimization uses the fact that current X86-64 architecture only implement lower 48-bit virtual address.</span></div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160;<span class="comment"> The higher 16-bit can be used for storing other data.</span></div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160;<span class="comment"> \c GenericValue uses this optimization to reduce its size form 24 bytes to 16 bytes in 64-bit architecture.</span></div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160;<span class="preprocessor">#ifndef RAPIDJSON_48BITPOINTER_OPTIMIZATION</span></div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160;<span class="preprocessor">#if defined(__amd64__) || defined(__amd64) || defined(__x86_64__) || defined(__x86_64) || defined(_M_X64) || defined(_M_AMD64)</span></div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160;<span class="preprocessor">#define RAPIDJSON_48BITPOINTER_OPTIMIZATION 1</span></div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00307"></a><span class="lineno"><a class="line" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga93fb983f78208d12c822376e1ea6d185"> 307</a></span>&#160;<span class="preprocessor">#define RAPIDJSON_48BITPOINTER_OPTIMIZATION 0</span></div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160;<span class="preprocessor">#endif // RAPIDJSON_48BITPOINTER_OPTIMIZATION</span></div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160;</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160;<span class="preprocessor">#if RAPIDJSON_48BITPOINTER_OPTIMIZATION == 1</span></div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160;<span class="preprocessor">#if RAPIDJSON_64BIT != 1</span></div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160;<span class="preprocessor">#error RAPIDJSON_48BITPOINTER_OPTIMIZATION can only be set to 1 when RAPIDJSON_64BIT=1</span></div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160;<span class="preprocessor">#define RAPIDJSON_SETPOINTER(type, p, x) (p = reinterpret_cast&lt;type *&gt;((reinterpret_cast&lt;uintptr_t&gt;(p) &amp; static_cast&lt;uintptr_t&gt;(RAPIDJSON_UINT64_C2(0xFFFF0000, 0x00000000))) | reinterpret_cast&lt;uintptr_t&gt;(reinterpret_cast&lt;const void*&gt;(x))))</span></div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160;<span class="preprocessor">#define RAPIDJSON_GETPOINTER(type, p) (reinterpret_cast&lt;type *&gt;(reinterpret_cast&lt;uintptr_t&gt;(p) &amp; static_cast&lt;uintptr_t&gt;(RAPIDJSON_UINT64_C2(0x0000FFFF, 0xFFFFFFFF))))</span></div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160;<span class="preprocessor">#define RAPIDJSON_SETPOINTER(type, p, x) (p = (x))</span></div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160;<span class="preprocessor">#define RAPIDJSON_GETPOINTER(type, p) (p)</span></div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160;<span class="comment"></span><span class="comment">// RAPIDJSON_SSE2/RAPIDJSON_SSE42/RAPIDJSON_NEON/RAPIDJSON_SIMD</span></div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160;<span class="comment">/*! \def RAPIDJSON_SIMD</span></div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160;<span class="comment"> \ingroup RAPIDJSON_CONFIG</span></div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160;<span class="comment"> \brief Enable SSE2/SSE4.2/Neon optimization.</span></div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160;<span class="comment"> RapidJSON supports optimized implementations for some parsing operations</span></div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160;<span class="comment"> based on the SSE2, SSE4.2 or NEon SIMD extensions on modern Intel</span></div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160;<span class="comment"> or ARM compatible processors.</span></div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160;<span class="comment"> To enable these optimizations, three different symbols can be defined;</span></div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160;<span class="comment"> \code</span></div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160;<span class="comment"> // Enable SSE2 optimization.</span></div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160;<span class="comment"> #define RAPIDJSON_SSE2</span></div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160;<span class="comment"> // Enable SSE4.2 optimization.</span></div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160;<span class="comment"> #define RAPIDJSON_SSE42</span></div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160;<span class="comment"> \endcode</span></div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160;<span class="comment"> // Enable ARM Neon optimization.</span></div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160;<span class="comment"> #define RAPIDJSON_NEON</span></div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160;<span class="comment"> \endcode</span></div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160;<span class="comment"> \c RAPIDJSON_SSE42 takes precedence over SSE2, if both are defined.</span></div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160;<span class="comment"> If any of these symbols is defined, RapidJSON defines the macro</span></div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160;<span class="comment"> \c RAPIDJSON_SIMD to indicate the availability of the optimized code.</span></div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160;<span class="preprocessor">#if defined(RAPIDJSON_SSE2) || defined(RAPIDJSON_SSE42) \</span></div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160;<span class="preprocessor"> || defined(RAPIDJSON_NEON) || defined(RAPIDJSON_DOXYGEN_RUNNING)</span></div><div class="line"><a name="l00353"></a><span class="lineno"><a class="line" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga0ccf72f3ebc4b3306ab669f95ca5c64b"> 353</a></span>&#160;<span class="preprocessor">#define RAPIDJSON_SIMD</span></div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160;<span class="comment"></span><span class="comment">// RAPIDJSON_NO_SIZETYPEDEFINE</span></div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160;</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160;<span class="preprocessor">#ifndef RAPIDJSON_NO_SIZETYPEDEFINE</span></div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160;<span class="comment">/*! \def RAPIDJSON_NO_SIZETYPEDEFINE</span></div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160;<span class="comment"> \ingroup RAPIDJSON_CONFIG</span></div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160;<span class="comment"> \brief User-provided \c SizeType definition.</span></div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160;<span class="comment"> In order to avoid using 32-bit size types for indexing strings and arrays,</span></div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160;<span class="comment"> define this preprocessor symbol and provide the type rapidjson::SizeType</span></div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160;<span class="comment"> before including RapidJSON:</span></div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160;<span class="comment"> \code</span></div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160;<span class="comment"> #define RAPIDJSON_NO_SIZETYPEDEFINE</span></div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160;<span class="comment"> namespace rapidjson { typedef ::std::size_t SizeType; }</span></div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160;<span class="comment"> #include &quot;rapidjson/...&quot;</span></div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160;<span class="comment"> \endcode</span></div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160;<span class="comment"> \see rapidjson::SizeType</span></div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160;<span class="preprocessor">#ifdef RAPIDJSON_DOXYGEN_RUNNING</span></div><div class="line"><a name="l00376"></a><span class="lineno"><a class="line" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga250603aa9e2a12429b25ba0c8108ad4f"> 376</a></span>&#160;<span class="preprocessor">#define RAPIDJSON_NO_SIZETYPEDEFINE</span></div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00378"></a><span class="lineno"><a class="line" href="namespacerapidjson.html"> 378</a></span>&#160;RAPIDJSON_NAMESPACE_BEGIN<span class="comment"></span></div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160;<span class="comment">//! Size type (for string lengths, array sizes, etc.)</span></div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160;<span class="comment"></span><span class="comment">/*! RapidJSON uses 32-bit array/string indices even on 64-bit platforms,</span></div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160;<span class="comment"> instead of using \c size_t. Users may override the SizeType by defining</span></div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160;<span class="comment"> \ref RAPIDJSON_NO_SIZETYPEDEFINE.</span></div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00384"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84"> 384</a></span>&#160;<span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a>;</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160;RAPIDJSON_NAMESPACE_END</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160;</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160;<span class="comment">// always import std::size_t to rapidjson namespace</span></div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160;RAPIDJSON_NAMESPACE_BEGIN</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160;<span class="keyword">using</span> std::size_t;</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160;RAPIDJSON_NAMESPACE_END</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160;<span class="comment"></span><span class="comment">// RAPIDJSON_ASSERT</span></div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160;<span class="comment">//! Assertion.</span></div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160;<span class="comment"></span><span class="comment">/*! \ingroup RAPIDJSON_CONFIG</span></div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160;<span class="comment"> By default, rapidjson uses C \c assert() for internal assertions.</span></div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160;<span class="comment"> User can override it by defining RAPIDJSON_ASSERT(x) macro.</span></div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160;<span class="comment"> \note Parsing errors are handled and can be customized by the</span></div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160;<span class="comment"> \ref RAPIDJSON_ERRORS APIs.</span></div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160;<span class="preprocessor">#ifndef RAPIDJSON_ASSERT</span></div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160;<span class="preprocessor">#include &lt;cassert&gt;</span></div><div class="line"><a name="l00406"></a><span class="lineno"><a class="line" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c"> 406</a></span>&#160;<span class="preprocessor">#define RAPIDJSON_ASSERT(x) assert(x)</span></div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160;<span class="preprocessor">#endif // RAPIDJSON_ASSERT</span></div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160;<span class="comment"></span><span class="comment">// RAPIDJSON_STATIC_ASSERT</span></div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160;</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160;<span class="comment">// Prefer C++11 static_assert, if available</span></div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160;<span class="preprocessor">#ifndef RAPIDJSON_STATIC_ASSERT</span></div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160;<span class="preprocessor">#if __cplusplus &gt;= 201103L || ( defined(_MSC_VER) &amp;&amp; _MSC_VER &gt;= 1800 )</span></div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160;<span class="preprocessor">#define RAPIDJSON_STATIC_ASSERT(x) \</span></div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160;<span class="preprocessor"> static_assert(x, RAPIDJSON_STRINGIFY(x))</span></div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160;<span class="preprocessor">#endif // C++11</span></div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160;<span class="preprocessor">#endif // RAPIDJSON_STATIC_ASSERT</span></div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160;</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160;<span class="comment">// Adopt C++03 implementation from boost</span></div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160;<span class="preprocessor">#ifndef RAPIDJSON_STATIC_ASSERT</span></div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160;<span class="preprocessor">#ifndef __clang__</span></div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160;<span class="comment">//!@cond RAPIDJSON_HIDDEN_FROM_DOXYGEN</span></div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160;<span class="comment"></span><span class="preprocessor">#endif</span></div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160;RAPIDJSON_NAMESPACE_BEGIN</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">bool</span> x&gt; <span class="keyword">struct </span>STATIC_ASSERTION_FAILURE;</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160;<span class="keyword">template</span> &lt;&gt; <span class="keyword">struct </span>STATIC_ASSERTION_FAILURE&lt;true&gt; { <span class="keyword">enum</span> { value = 1 }; };</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">size_t</span> x&gt; <span class="keyword">struct </span>StaticAssertTest {};</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160;RAPIDJSON_NAMESPACE_END</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160;</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160;<span class="preprocessor">#if defined(__GNUC__) || defined(__clang__)</span></div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160;<span class="preprocessor">#define RAPIDJSON_STATIC_ASSERT_UNUSED_ATTRIBUTE __attribute__((unused))</span></div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160;<span class="preprocessor">#define RAPIDJSON_STATIC_ASSERT_UNUSED_ATTRIBUTE </span></div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160;<span class="preprocessor">#ifndef __clang__</span></div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160;<span class="comment">//!@endcond</span></div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160;<span class="comment"></span><span class="preprocessor">#endif</span></div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160;<span class="comment">/*! \def RAPIDJSON_STATIC_ASSERT</span></div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160;<span class="comment"> \brief (Internal) macro to check for conditions at compile-time</span></div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160;<span class="comment"> \param x compile-time condition</span></div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160;<span class="comment"> \hideinitializer</span></div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00445"></a><span class="lineno"><a class="line" href="rapidjson_8h.html#af95188da1d8eb6d4b148fe9ce71cd7c4"> 445</a></span>&#160;<span class="preprocessor">#define RAPIDJSON_STATIC_ASSERT(x) \</span></div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160;<span class="preprocessor"> typedef ::RAPIDJSON_NAMESPACE::StaticAssertTest&lt; \</span></div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160;<span class="preprocessor"> sizeof(::RAPIDJSON_NAMESPACE::STATIC_ASSERTION_FAILURE&lt;bool(x) &gt;)&gt; \</span></div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160;<span class="preprocessor"> RAPIDJSON_JOIN(StaticAssertTypedef, __LINE__) RAPIDJSON_STATIC_ASSERT_UNUSED_ATTRIBUTE</span></div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160;<span class="preprocessor">#endif // RAPIDJSON_STATIC_ASSERT</span></div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160;<span class="comment"></span><span class="comment">// RAPIDJSON_LIKELY, RAPIDJSON_UNLIKELY</span></div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160;<span class="comment">//! Compiler branching hint for expression with high probability to be true.</span></div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160;<span class="comment"></span><span class="comment">/*!</span></div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160;<span class="comment"> \ingroup RAPIDJSON_CONFIG</span></div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160;<span class="comment"> \param x Boolean expression likely to be true.</span></div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160;<span class="preprocessor">#ifndef RAPIDJSON_LIKELY</span></div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160;<span class="preprocessor">#if defined(__GNUC__) || defined(__clang__)</span></div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160;<span class="preprocessor">#define RAPIDJSON_LIKELY(x) __builtin_expect(!!(x), 1)</span></div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00463"></a><span class="lineno"><a class="line" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga5dc14176a9e71ace282404b0bcda57a1"> 463</a></span>&#160;<span class="preprocessor">#define RAPIDJSON_LIKELY(x) (x)</span></div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160;<span class="comment">//! Compiler branching hint for expression with low probability to be true.</span></div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160;<span class="comment"></span><span class="comment">/*!</span></div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160;<span class="comment"> \ingroup RAPIDJSON_CONFIG</span></div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160;<span class="comment"> \param x Boolean expression unlikely to be true.</span></div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160;<span class="preprocessor">#ifndef RAPIDJSON_UNLIKELY</span></div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160;<span class="preprocessor">#if defined(__GNUC__) || defined(__clang__)</span></div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160;<span class="preprocessor">#define RAPIDJSON_UNLIKELY(x) __builtin_expect(!!(x), 0)</span></div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00476"></a><span class="lineno"><a class="line" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5"> 476</a></span>&#160;<span class="preprocessor">#define RAPIDJSON_UNLIKELY(x) (x)</span></div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160;<span class="comment"></span><span class="comment">// Helpers</span></div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160;<span class="comment">//!@cond RAPIDJSON_HIDDEN_FROM_DOXYGEN</span></div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160;<span class="preprocessor">#define RAPIDJSON_MULTILINEMACRO_BEGIN do { </span></div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160;<span class="preprocessor">#define RAPIDJSON_MULTILINEMACRO_END \</span></div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160;<span class="preprocessor">} while((void)0, 0)</span></div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160;</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160;<span class="comment">// adopted from Boost</span></div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160;<span class="preprocessor">#define RAPIDJSON_VERSION_CODE(x,y,z) \</span></div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160;<span class="preprocessor"> (((x)*100000) + ((y)*100) + (z))</span></div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160;<span class="comment"></span><span class="comment">// RAPIDJSON_DIAG_PUSH/POP, RAPIDJSON_DIAG_OFF</span></div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160;</div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160;<span class="preprocessor">#if defined(__GNUC__)</span></div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160;<span class="preprocessor">#define RAPIDJSON_GNUC \</span></div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160;<span class="preprocessor"> RAPIDJSON_VERSION_CODE(__GNUC__,__GNUC_MINOR__,__GNUC_PATCHLEVEL__)</span></div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160;</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160;<span class="preprocessor">#if defined(__clang__) || (defined(RAPIDJSON_GNUC) &amp;&amp; RAPIDJSON_GNUC &gt;= RAPIDJSON_VERSION_CODE(4,2,0))</span></div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160;</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160;<span class="preprocessor">#define RAPIDJSON_PRAGMA(x) _Pragma(RAPIDJSON_STRINGIFY(x))</span></div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160;<span class="preprocessor">#define RAPIDJSON_DIAG_PRAGMA(x) RAPIDJSON_PRAGMA(GCC diagnostic x)</span></div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160;<span class="preprocessor">#define RAPIDJSON_DIAG_OFF(x) \</span></div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160;<span class="preprocessor"> RAPIDJSON_DIAG_PRAGMA(ignored RAPIDJSON_STRINGIFY(RAPIDJSON_JOIN(-W,x)))</span></div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160;</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160;<span class="comment">// push/pop support in Clang and GCC&gt;=4.6</span></div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160;<span class="preprocessor">#if defined(__clang__) || (defined(RAPIDJSON_GNUC) &amp;&amp; RAPIDJSON_GNUC &gt;= RAPIDJSON_VERSION_CODE(4,6,0))</span></div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160;<span class="preprocessor">#define RAPIDJSON_DIAG_PUSH RAPIDJSON_DIAG_PRAGMA(push)</span></div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160;<span class="preprocessor">#define RAPIDJSON_DIAG_POP RAPIDJSON_DIAG_PRAGMA(pop)</span></div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160;<span class="preprocessor">#else // GCC &gt;= 4.2, &lt; 4.6</span></div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160;<span class="preprocessor">#define RAPIDJSON_DIAG_PUSH </span><span class="comment">/* ignored */</span><span class="preprocessor"></span></div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160;<span class="preprocessor">#define RAPIDJSON_DIAG_POP </span><span class="comment">/* ignored */</span><span class="preprocessor"></span></div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160;</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160;<span class="preprocessor">#elif defined(_MSC_VER)</span></div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160;</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160;<span class="comment">// pragma (MSVC specific)</span></div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160;<span class="preprocessor">#define RAPIDJSON_PRAGMA(x) __pragma(x)</span></div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160;<span class="preprocessor">#define RAPIDJSON_DIAG_PRAGMA(x) RAPIDJSON_PRAGMA(warning(x))</span></div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160;</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160;<span class="preprocessor">#define RAPIDJSON_DIAG_OFF(x) RAPIDJSON_DIAG_PRAGMA(disable: x)</span></div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160;<span class="preprocessor">#define RAPIDJSON_DIAG_PUSH RAPIDJSON_DIAG_PRAGMA(push)</span></div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160;<span class="preprocessor">#define RAPIDJSON_DIAG_POP RAPIDJSON_DIAG_PRAGMA(pop)</span></div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160;</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160;</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160;<span class="preprocessor">#define RAPIDJSON_DIAG_OFF(x) </span><span class="comment">/* ignored */</span><span class="preprocessor"></span></div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160;<span class="preprocessor">#define RAPIDJSON_DIAG_PUSH </span><span class="comment">/* ignored */</span><span class="preprocessor"></span></div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160;<span class="preprocessor">#define RAPIDJSON_DIAG_POP </span><span class="comment">/* ignored */</span><span class="preprocessor"></span></div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160;</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160;<span class="preprocessor">#endif // RAPIDJSON_DIAG_*</span></div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160;<span class="comment"></span><span class="comment">// C++11 features</span></div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160;</div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160;<span class="preprocessor">#ifndef RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160;<span class="preprocessor">#if defined(__clang__)</span></div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160;<span class="preprocessor">#if __has_feature(cxx_rvalue_references) &amp;&amp; \</span></div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160;<span class="preprocessor"> (defined(_MSC_VER) || defined(_LIBCPP_VERSION) || defined(__GLIBCXX__) &amp;&amp; __GLIBCXX__ &gt;= 20080306)</span></div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160;<span class="preprocessor">#define RAPIDJSON_HAS_CXX11_RVALUE_REFS 1</span></div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160;<span class="preprocessor">#define RAPIDJSON_HAS_CXX11_RVALUE_REFS 0</span></div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160;<span class="preprocessor">#elif (defined(RAPIDJSON_GNUC) &amp;&amp; (RAPIDJSON_GNUC &gt;= RAPIDJSON_VERSION_CODE(4,3,0)) &amp;&amp; defined(__GXX_EXPERIMENTAL_CXX0X__)) || \</span></div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160;<span class="preprocessor"> (defined(_MSC_VER) &amp;&amp; _MSC_VER &gt;= 1600) || \</span></div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160;<span class="preprocessor"> (defined(__SUNPRO_CC) &amp;&amp; __SUNPRO_CC &gt;= 0x5140 &amp;&amp; defined(__GXX_EXPERIMENTAL_CXX0X__))</span></div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160;</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160;<span class="preprocessor">#define RAPIDJSON_HAS_CXX11_RVALUE_REFS 1</span></div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160;<span class="preprocessor">#define RAPIDJSON_HAS_CXX11_RVALUE_REFS 0</span></div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160;<span class="preprocessor">#endif // RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160;</div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160;<span class="preprocessor">#ifndef RAPIDJSON_HAS_CXX11_NOEXCEPT</span></div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160;<span class="preprocessor">#if defined(__clang__)</span></div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160;<span class="preprocessor">#define RAPIDJSON_HAS_CXX11_NOEXCEPT __has_feature(cxx_noexcept)</span></div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160;<span class="preprocessor">#elif (defined(RAPIDJSON_GNUC) &amp;&amp; (RAPIDJSON_GNUC &gt;= RAPIDJSON_VERSION_CODE(4,6,0)) &amp;&amp; defined(__GXX_EXPERIMENTAL_CXX0X__)) || \</span></div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160;<span class="preprocessor"> (defined(_MSC_VER) &amp;&amp; _MSC_VER &gt;= 1900) || \</span></div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160;<span class="preprocessor"> (defined(__SUNPRO_CC) &amp;&amp; __SUNPRO_CC &gt;= 0x5140 &amp;&amp; defined(__GXX_EXPERIMENTAL_CXX0X__))</span></div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160;<span class="preprocessor">#define RAPIDJSON_HAS_CXX11_NOEXCEPT 1</span></div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160;<span class="preprocessor">#define RAPIDJSON_HAS_CXX11_NOEXCEPT 0</span></div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_CXX11_NOEXCEPT</span></div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160;<span class="preprocessor">#define RAPIDJSON_NOEXCEPT noexcept</span></div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160;<span class="preprocessor">#define RAPIDJSON_NOEXCEPT </span><span class="comment">/* noexcept */</span><span class="preprocessor"></span></div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160;<span class="preprocessor">#endif // RAPIDJSON_HAS_CXX11_NOEXCEPT</span></div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160;</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160;<span class="comment">// no automatic detection, yet</span></div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160;<span class="preprocessor">#ifndef RAPIDJSON_HAS_CXX11_TYPETRAITS</span></div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160;<span class="preprocessor">#if (defined(_MSC_VER) &amp;&amp; _MSC_VER &gt;= 1700)</span></div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160;<span class="preprocessor">#define RAPIDJSON_HAS_CXX11_TYPETRAITS 1</span></div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160;<span class="preprocessor">#define RAPIDJSON_HAS_CXX11_TYPETRAITS 0</span></div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160;</div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160;<span class="preprocessor">#ifndef RAPIDJSON_HAS_CXX11_RANGE_FOR</span></div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160;<span class="preprocessor">#if defined(__clang__)</span></div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160;<span class="preprocessor">#define RAPIDJSON_HAS_CXX11_RANGE_FOR __has_feature(cxx_range_for)</span></div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160;<span class="preprocessor">#elif (defined(RAPIDJSON_GNUC) &amp;&amp; (RAPIDJSON_GNUC &gt;= RAPIDJSON_VERSION_CODE(4,6,0)) &amp;&amp; defined(__GXX_EXPERIMENTAL_CXX0X__)) || \</span></div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160;<span class="preprocessor"> (defined(_MSC_VER) &amp;&amp; _MSC_VER &gt;= 1700) || \</span></div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160;<span class="preprocessor"> (defined(__SUNPRO_CC) &amp;&amp; __SUNPRO_CC &gt;= 0x5140 &amp;&amp; defined(__GXX_EXPERIMENTAL_CXX0X__))</span></div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160;<span class="preprocessor">#define RAPIDJSON_HAS_CXX11_RANGE_FOR 1</span></div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160;<span class="preprocessor">#define RAPIDJSON_HAS_CXX11_RANGE_FOR 0</span></div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160;<span class="preprocessor">#endif // RAPIDJSON_HAS_CXX11_RANGE_FOR</span></div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160;<span class="comment">//!@endcond</span></div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160;<span class="comment"></span><span class="comment">// RAPIDJSON_NOEXCEPT_ASSERT</span></div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160;</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160;<span class="preprocessor">#ifdef RAPIDJSON_ASSERT_THROWS</span></div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_CXX11_NOEXCEPT</span></div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160;<span class="preprocessor">#define RAPIDJSON_NOEXCEPT_ASSERT(x)</span></div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160;<span class="preprocessor">#define RAPIDJSON_NOEXCEPT_ASSERT(x) RAPIDJSON_ASSERT(x)</span></div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160;<span class="preprocessor">#endif // RAPIDJSON_HAS_CXX11_NOEXCEPT</span></div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160;<span class="preprocessor">#define RAPIDJSON_NOEXCEPT_ASSERT(x) RAPIDJSON_ASSERT(x)</span></div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160;<span class="preprocessor">#endif // RAPIDJSON_ASSERT_THROWS</span></div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160;<span class="comment"></span><span class="comment">// new/delete</span></div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160;</div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160;<span class="preprocessor">#ifndef RAPIDJSON_NEW</span></div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160;<span class="comment">///! customization point for global \c new</span></div><div class="line"><a name="l00614"></a><span class="lineno"><a class="line" href="rapidjson_8h.html#abdc7cd7902748ffe6626d71c59a73c3b"> 614</a></span>&#160;<span class="comment"></span><span class="preprocessor">#define RAPIDJSON_NEW(TypeName) new TypeName</span></div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160;<span class="preprocessor">#ifndef RAPIDJSON_DELETE</span></div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160;<span class="comment">///! customization point for global \c delete</span></div><div class="line"><a name="l00618"></a><span class="lineno"><a class="line" href="rapidjson_8h.html#a52c941c3fdd646527cdcd42aa846a28a"> 618</a></span>&#160;<span class="comment"></span><span class="preprocessor">#define RAPIDJSON_DELETE(x) delete x</span></div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160;<span class="comment"></span><span class="comment">// Type</span></div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160;<span class="comment">/*! \namespace rapidjson</span></div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160;<span class="comment"> \brief main RapidJSON namespace</span></div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160;<span class="comment"> \see RAPIDJSON_NAMESPACE</span></div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160;RAPIDJSON_NAMESPACE_BEGIN</div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160;<span class="comment">//! Type of JSON value</span></div><div class="line"><a name="l00631"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4"> 631</a></span>&#160;<span class="comment"></span><span class="keyword">enum</span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">Type</a> {</div><div class="line"><a name="l00632"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a952871e4326b527154fc8aac1ac1f6ff"> 632</a></span>&#160; <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a952871e4326b527154fc8aac1ac1f6ff">kNullType</a> = 0, <span class="comment">//!&lt; null</span></div><div class="line"><a name="l00633"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a9f2e7047832dce1029551b5de0f05607"> 633</a></span>&#160;<span class="comment"></span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a9f2e7047832dce1029551b5de0f05607">kFalseType</a> = 1, <span class="comment">//!&lt; false</span></div><div class="line"><a name="l00634"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a80d9f25b083abce45edbfdd3ba006c8e"> 634</a></span>&#160;<span class="comment"></span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a80d9f25b083abce45edbfdd3ba006c8e">kTrueType</a> = 2, <span class="comment">//!&lt; true</span></div><div class="line"><a name="l00635"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4acf030b422a32c3647c7c5973bd4dd0a9"> 635</a></span>&#160;<span class="comment"></span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4acf030b422a32c3647c7c5973bd4dd0a9">kObjectType</a> = 3, <span class="comment">//!&lt; object</span></div><div class="line"><a name="l00636"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a058c622e1e7d59419ae58b895cbce468"> 636</a></span>&#160;<span class="comment"></span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a058c622e1e7d59419ae58b895cbce468">kArrayType</a> = 4, <span class="comment">//!&lt; array </span></div><div class="line"><a name="l00637"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4ad6379da3dc04b83a591992bfb9fabba7"> 637</a></span>&#160;<span class="comment"></span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4ad6379da3dc04b83a591992bfb9fabba7">kStringType</a> = 5, <span class="comment">//!&lt; string</span></div><div class="line"><a name="l00638"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a"> 638</a></span>&#160;<span class="comment"></span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a">kNumberType</a> = 6 <span class="comment">//!&lt; number</span></div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160;<span class="comment"></span>};</div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160;</div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160;RAPIDJSON_NAMESPACE_END</div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160;</div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160;<span class="preprocessor">#endif // RAPIDJSON_RAPIDJSON_H_</span></div><div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4a80d9f25b083abce45edbfdd3ba006c8e"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a80d9f25b083abce45edbfdd3ba006c8e">rapidjson::kTrueType</a></div><div class="ttdoc">true </div><div class="ttdef"><b>Definition:</b> rapidjson.h:634</div></div>
+<a href="rapidjson_8h.html">浏览该文件的文档.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">// Tencent is pleased to support the open source community by making RapidJSON available.</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">// </span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">// Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved.</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment">// Licensed under the MIT License (the &quot;License&quot;); you may not use this file except</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment">// in compliance with the License. You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment">// http://opensource.org/licenses/MIT</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment">// Unless required by applicable law or agreed to in writing, software distributed </span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment">// under the License is distributed on an &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR </span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment">// CONDITIONS OF ANY KIND, either express or implied. See the License for the </span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment">// specific language governing permissions and limitations under the License.</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;</div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#ifndef RAPIDJSON_RAPIDJSON_H_</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#define RAPIDJSON_RAPIDJSON_H_</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment">/*!\file rapidjson.h</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment"> \brief common definitions and configuration</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment"> </span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment"> \see RAPIDJSON_CONFIG</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="comment">/*! \defgroup RAPIDJSON_CONFIG RapidJSON configuration</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="comment"> \brief Configuration macros for library features</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="comment"> Some RapidJSON features are configurable to adapt the library to a wide</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="comment"> variety of platforms, environments and usage scenarios. Most of the</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="comment"> features can be configured in terms of overridden or predefined</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="comment"> preprocessor macros at compile-time.</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="comment"> Some additional customization is available in the \ref RAPIDJSON_ERRORS APIs.</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="comment"> \note These macros should be given on the compiler command-line</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="comment"> (where applicable) to avoid inconsistent values when compiling</span></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="comment"> different translation units of a single application.</span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;<span class="preprocessor">#include &lt;cstdlib&gt;</span> <span class="comment">// malloc(), realloc(), free(), size_t</span></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;<span class="preprocessor">#include &lt;cstring&gt;</span> <span class="comment">// memset(), memcpy(), memmove(), memcmp()</span></div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;<span class="comment"></span><span class="comment">// RAPIDJSON_VERSION_STRING</span></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;<span class="comment">// ALWAYS synchronize the following 3 macros with corresponding variables in /CMakeLists.txt.</span></div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;<span class="comment">//!@cond RAPIDJSON_HIDDEN_FROM_DOXYGEN</span></div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;<span class="comment"></span><span class="comment">// token stringification</span></div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;<span class="preprocessor">#define RAPIDJSON_STRINGIFY(x) RAPIDJSON_DO_STRINGIFY(x)</span></div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;<span class="preprocessor">#define RAPIDJSON_DO_STRINGIFY(x) #x</span></div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;<span class="comment">// token concatenation</span></div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;<span class="preprocessor">#define RAPIDJSON_JOIN(X, Y) RAPIDJSON_DO_JOIN(X, Y)</span></div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;<span class="preprocessor">#define RAPIDJSON_DO_JOIN(X, Y) RAPIDJSON_DO_JOIN2(X, Y)</span></div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;<span class="preprocessor">#define RAPIDJSON_DO_JOIN2(X, Y) X##Y</span></div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;<span class="comment">//!@endcond</span></div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;<span class="comment">/*! \def RAPIDJSON_MAJOR_VERSION</span></div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;<span class="comment"> \ingroup RAPIDJSON_CONFIG</span></div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;<span class="comment"> \brief Major version of RapidJSON in integer.</span></div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;<span class="comment">*/</span><span class="comment"></span></div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;<span class="comment">/*! \def RAPIDJSON_MINOR_VERSION</span></div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;<span class="comment"> \ingroup RAPIDJSON_CONFIG</span></div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;<span class="comment"> \brief Minor version of RapidJSON in integer.</span></div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;<span class="comment">*/</span><span class="comment"></span></div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;<span class="comment">/*! \def RAPIDJSON_PATCH_VERSION</span></div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;<span class="comment"> \ingroup RAPIDJSON_CONFIG</span></div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;<span class="comment"> \brief Patch version of RapidJSON in integer.</span></div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;<span class="comment">*/</span><span class="comment"></span></div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;<span class="comment">/*! \def RAPIDJSON_VERSION_STRING</span></div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;<span class="comment"> \ingroup RAPIDJSON_CONFIG</span></div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;<span class="comment"> \brief Version of RapidJSON in &quot;&lt;major&gt;.&lt;minor&gt;.&lt;patch&gt;&quot; string format.</span></div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00075"></a><span class="lineno"><a class="line" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gaf1ff1685be6cbebb5d4b2ab997776f45"> 75</a></span>&#160;<span class="preprocessor">#define RAPIDJSON_MAJOR_VERSION 1</span></div><div class="line"><a name="l00076"></a><span class="lineno"><a class="line" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gaf9125105c593a636a79f1c2d96835376"> 76</a></span>&#160;<span class="preprocessor">#define RAPIDJSON_MINOR_VERSION 1</span></div><div class="line"><a name="l00077"></a><span class="lineno"><a class="line" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gaf967d31be43666ce7f53756d73bd1cdf"> 77</a></span>&#160;<span class="preprocessor">#define RAPIDJSON_PATCH_VERSION 0</span></div><div class="line"><a name="l00078"></a><span class="lineno"><a class="line" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gad283cfde97d9a32b7d8e8107b11f70a6"> 78</a></span>&#160;<span class="preprocessor">#define RAPIDJSON_VERSION_STRING \</span></div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;<span class="preprocessor"> RAPIDJSON_STRINGIFY(RAPIDJSON_MAJOR_VERSION.RAPIDJSON_MINOR_VERSION.RAPIDJSON_PATCH_VERSION)</span></div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;<span class="comment"></span><span class="comment">// RAPIDJSON_NAMESPACE_(BEGIN|END)</span><span class="comment"></span></div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;<span class="comment">/*! \def RAPIDJSON_NAMESPACE</span></div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;<span class="comment"> \ingroup RAPIDJSON_CONFIG</span></div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160;<span class="comment"> \brief provide custom rapidjson namespace</span></div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;<span class="comment"> In order to avoid symbol clashes and/or &quot;One Definition Rule&quot; errors</span></div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160;<span class="comment"> between multiple inclusions of (different versions of) RapidJSON in</span></div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;<span class="comment"> a single binary, users can customize the name of the main RapidJSON</span></div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160;<span class="comment"> namespace.</span></div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160;<span class="comment"> In case of a single nesting level, defining \c RAPIDJSON_NAMESPACE</span></div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;<span class="comment"> to a custom name (e.g. \c MyRapidJSON) is sufficient. If multiple</span></div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;<span class="comment"> levels are needed, both \ref RAPIDJSON_NAMESPACE_BEGIN and \ref</span></div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;<span class="comment"> RAPIDJSON_NAMESPACE_END need to be defined as well:</span></div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;<span class="comment"> \code</span></div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;<span class="comment"> // in some .cpp file</span></div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160;<span class="comment"> #define RAPIDJSON_NAMESPACE my::rapidjson</span></div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160;<span class="comment"> #define RAPIDJSON_NAMESPACE_BEGIN namespace my { namespace rapidjson {</span></div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160;<span class="comment"> #define RAPIDJSON_NAMESPACE_END } }</span></div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160;<span class="comment"> #include &quot;rapidjson/...&quot;</span></div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160;<span class="comment"> \endcode</span></div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160;<span class="comment"> \see rapidjson</span></div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160;<span class="comment"> */</span><span class="comment"></span></div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160;<span class="comment">/*! \def RAPIDJSON_NAMESPACE_BEGIN</span></div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160;<span class="comment"> \ingroup RAPIDJSON_CONFIG</span></div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160;<span class="comment"> \brief provide custom rapidjson namespace (opening expression)</span></div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160;<span class="comment"> \see RAPIDJSON_NAMESPACE</span></div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160;<span class="comment">*/</span><span class="comment"></span></div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160;<span class="comment">/*! \def RAPIDJSON_NAMESPACE_END</span></div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160;<span class="comment"> \ingroup RAPIDJSON_CONFIG</span></div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160;<span class="comment"> \brief provide custom rapidjson namespace (closing expression)</span></div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160;<span class="comment"> \see RAPIDJSON_NAMESPACE</span></div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160;<span class="preprocessor">#ifndef RAPIDJSON_NAMESPACE</span></div><div class="line"><a name="l00118"></a><span class="lineno"><a class="line" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga743a79d3af927391fe3eb5c979136899"> 118</a></span>&#160;<span class="preprocessor">#define RAPIDJSON_NAMESPACE rapidjson</span></div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160;<span class="preprocessor">#ifndef RAPIDJSON_NAMESPACE_BEGIN</span></div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160;<span class="preprocessor">#define RAPIDJSON_NAMESPACE_BEGIN namespace RAPIDJSON_NAMESPACE {</span></div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160;<span class="preprocessor">#ifndef RAPIDJSON_NAMESPACE_END</span></div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160;<span class="preprocessor">#define RAPIDJSON_NAMESPACE_END }</span></div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160;<span class="comment"></span><span class="comment">// RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160;</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160;<span class="preprocessor">#ifndef RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160;<span class="preprocessor">#ifdef RAPIDJSON_DOXYGEN_RUNNING</span></div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160;<span class="preprocessor">#define RAPIDJSON_HAS_STDSTRING 1 // force generation of documentation</span></div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160;<span class="preprocessor">#define RAPIDJSON_HAS_STDSTRING 0 // no std::string support by default</span></div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160;<span class="comment">/*! \def RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160;<span class="comment"> \ingroup RAPIDJSON_CONFIG</span></div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160;<span class="comment"> \brief Enable RapidJSON support for \c std::string</span></div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160;<span class="comment"> By defining this preprocessor symbol to \c 1, several convenience functions for using</span></div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160;<span class="comment"> \ref rapidjson::GenericValue with \c std::string are enabled, especially</span></div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160;<span class="comment"> for construction and comparison.</span></div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160;<span class="comment"> \hideinitializer</span></div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160;<span class="preprocessor">#endif // !defined(RAPIDJSON_HAS_STDSTRING)</span></div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160;</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160;<span class="preprocessor">#endif // RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160;<span class="comment"></span><span class="comment">// RAPIDJSON_NO_INT64DEFINE</span></div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160;<span class="comment">/*! \def RAPIDJSON_NO_INT64DEFINE</span></div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160;<span class="comment"> \ingroup RAPIDJSON_CONFIG</span></div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160;<span class="comment"> \brief Use external 64-bit integer types.</span></div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160;<span class="comment"> RapidJSON requires the 64-bit integer types \c int64_t and \c uint64_t types</span></div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160;<span class="comment"> to be available at global scope.</span></div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160;<span class="comment"> If users have their own definition, define RAPIDJSON_NO_INT64DEFINE to</span></div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160;<span class="comment"> prevent RapidJSON from defining its own types.</span></div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160;<span class="preprocessor">#ifndef RAPIDJSON_NO_INT64DEFINE</span></div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160;<span class="comment">//!@cond RAPIDJSON_HIDDEN_FROM_DOXYGEN</span></div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160;<span class="comment"></span><span class="preprocessor">#if defined(_MSC_VER) &amp;&amp; (_MSC_VER &lt; 1800) // Visual Studio 2013</span></div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160;<span class="preprocessor">#include &quot;msinttypes/stdint.h&quot;</span></div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160;<span class="preprocessor">#include &quot;msinttypes/inttypes.h&quot;</span></div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160;<span class="comment">// Other compilers should have this.</span></div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160;<span class="preprocessor">#include &lt;stdint.h&gt;</span></div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160;<span class="preprocessor">#include &lt;inttypes.h&gt;</span></div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160;<span class="comment">//!@endcond</span></div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160;<span class="comment"></span><span class="preprocessor">#ifdef RAPIDJSON_DOXYGEN_RUNNING</span></div><div class="line"><a name="l00177"></a><span class="lineno"><a class="line" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga7f4e50c35dae3b015390daa6d48ce23c"> 177</a></span>&#160;<span class="preprocessor">#define RAPIDJSON_NO_INT64DEFINE</span></div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160;<span class="preprocessor">#endif // RAPIDJSON_NO_INT64TYPEDEF</span></div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160;<span class="comment"></span><span class="comment">// RAPIDJSON_FORCEINLINE</span></div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160;</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160;<span class="preprocessor">#ifndef RAPIDJSON_FORCEINLINE</span></div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160;<span class="comment">//!@cond RAPIDJSON_HIDDEN_FROM_DOXYGEN</span></div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160;<span class="comment"></span><span class="preprocessor">#if defined(_MSC_VER) &amp;&amp; defined(NDEBUG)</span></div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160;<span class="preprocessor">#define RAPIDJSON_FORCEINLINE __forceinline</span></div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160;<span class="preprocessor">#elif defined(__GNUC__) &amp;&amp; __GNUC__ &gt;= 4 &amp;&amp; defined(NDEBUG)</span></div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160;<span class="preprocessor">#define RAPIDJSON_FORCEINLINE __attribute__((always_inline))</span></div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160;<span class="preprocessor">#define RAPIDJSON_FORCEINLINE</span></div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160;<span class="comment">//!@endcond</span></div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160;<span class="comment"></span><span class="preprocessor">#endif // RAPIDJSON_FORCEINLINE</span></div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160;<span class="comment"></span><span class="comment">// RAPIDJSON_ENDIAN</span></div><div class="line"><a name="l00198"></a><span class="lineno"><a class="line" href="rapidjson_8h.html#addcc0c3607c5790f35cc4c15885ff97c"> 198</a></span>&#160;<span class="preprocessor">#define RAPIDJSON_LITTLEENDIAN 0 </span><span class="comment">//!&lt; Little endian machine</span></div><div class="line"><a name="l00199"></a><span class="lineno"><a class="line" href="rapidjson_8h.html#ac7951ebf8a2624ab85d2dcd3ec7af974"> 199</a></span>&#160;<span class="comment"></span>#define RAPIDJSON_BIGENDIAN 1 <span class="comment">//!&lt; Big endian machine</span></div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160;<span class="comment">//! Endianness of the machine.</span></div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160;<span class="comment"></span><span class="comment">/*!</span></div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160;<span class="comment"> \def RAPIDJSON_ENDIAN</span></div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160;<span class="comment"> \ingroup RAPIDJSON_CONFIG</span></div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160;<span class="comment"> GCC 4.6 provided macro for detecting endianness of the target machine. But other</span></div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160;<span class="comment"> compilers may not have this. User can define RAPIDJSON_ENDIAN to either</span></div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160;<span class="comment"> \ref RAPIDJSON_LITTLEENDIAN or \ref RAPIDJSON_BIGENDIAN.</span></div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160;<span class="comment"> Default detection implemented with reference to</span></div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160;<span class="comment"> \li https://gcc.gnu.org/onlinedocs/gcc-4.6.0/cpp/Common-Predefined-Macros.html</span></div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160;<span class="comment"> \li http://www.boost.org/doc/libs/1_42_0/boost/detail/endian.hpp</span></div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160;<span class="preprocessor">#ifndef RAPIDJSON_ENDIAN</span></div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160;<span class="comment">// Detect with GCC 4.6&#39;s macro</span></div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160;<span class="preprocessor"># ifdef __BYTE_ORDER__</span></div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160;<span class="preprocessor"># if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__</span></div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160;<span class="preprocessor"># define RAPIDJSON_ENDIAN RAPIDJSON_LITTLEENDIAN</span></div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160;<span class="preprocessor"># elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__</span></div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160;<span class="preprocessor"># define RAPIDJSON_ENDIAN RAPIDJSON_BIGENDIAN</span></div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160;<span class="preprocessor"># else</span></div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160;<span class="preprocessor"># error Unknown machine endianness detected. User needs to define RAPIDJSON_ENDIAN.</span></div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160;<span class="preprocessor"># endif // __BYTE_ORDER__</span></div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160;<span class="comment">// Detect with GLIBC&#39;s endian.h</span></div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160;<span class="preprocessor"># elif defined(__GLIBC__)</span></div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160;<span class="preprocessor"># include &lt;endian.h&gt;</span></div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160;<span class="preprocessor"># if (__BYTE_ORDER == __LITTLE_ENDIAN)</span></div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160;<span class="preprocessor"># define RAPIDJSON_ENDIAN RAPIDJSON_LITTLEENDIAN</span></div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160;<span class="preprocessor"># elif (__BYTE_ORDER == __BIG_ENDIAN)</span></div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160;<span class="preprocessor"># define RAPIDJSON_ENDIAN RAPIDJSON_BIGENDIAN</span></div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160;<span class="preprocessor"># else</span></div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160;<span class="preprocessor"># error Unknown machine endianness detected. User needs to define RAPIDJSON_ENDIAN.</span></div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160;<span class="preprocessor"># endif // __GLIBC__</span></div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160;<span class="comment">// Detect with _LITTLE_ENDIAN and _BIG_ENDIAN macro</span></div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160;<span class="preprocessor"># elif defined(_LITTLE_ENDIAN) &amp;&amp; !defined(_BIG_ENDIAN)</span></div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160;<span class="preprocessor"># define RAPIDJSON_ENDIAN RAPIDJSON_LITTLEENDIAN</span></div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160;<span class="preprocessor"># elif defined(_BIG_ENDIAN) &amp;&amp; !defined(_LITTLE_ENDIAN)</span></div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160;<span class="preprocessor"># define RAPIDJSON_ENDIAN RAPIDJSON_BIGENDIAN</span></div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160;<span class="comment">// Detect with architecture macros</span></div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160;<span class="preprocessor"># elif defined(__sparc) || defined(__sparc__) || defined(_POWER) || defined(__powerpc__) || defined(__ppc__) || defined(__hpux) || defined(__hppa) || defined(_MIPSEB) || defined(_POWER) || defined(__s390__)</span></div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160;<span class="preprocessor"># define RAPIDJSON_ENDIAN RAPIDJSON_BIGENDIAN</span></div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160;<span class="preprocessor"># elif defined(__i386__) || defined(__alpha__) || defined(__ia64) || defined(__ia64__) || defined(_M_IX86) || defined(_M_IA64) || defined(_M_ALPHA) || defined(__amd64) || defined(__amd64__) || defined(_M_AMD64) || defined(__x86_64) || defined(__x86_64__) || defined(_M_X64) || defined(__bfin__)</span></div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160;<span class="preprocessor"># define RAPIDJSON_ENDIAN RAPIDJSON_LITTLEENDIAN</span></div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160;<span class="preprocessor"># elif defined(_MSC_VER) &amp;&amp; (defined(_M_ARM) || defined(_M_ARM64))</span></div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160;<span class="preprocessor"># define RAPIDJSON_ENDIAN RAPIDJSON_LITTLEENDIAN</span></div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160;<span class="preprocessor"># elif defined(RAPIDJSON_DOXYGEN_RUNNING)</span></div><div class="line"><a name="l00247"></a><span class="lineno"><a class="line" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gaba2445f582142cf918e74c2d22d1aa07"> 247</a></span>&#160;<span class="preprocessor"># define RAPIDJSON_ENDIAN</span></div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160;<span class="preprocessor"># else</span></div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160;<span class="preprocessor"># error Unknown machine endianness detected. User needs to define RAPIDJSON_ENDIAN. </span></div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160;<span class="preprocessor"># endif</span></div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160;<span class="preprocessor">#endif // RAPIDJSON_ENDIAN</span></div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160;<span class="comment"></span><span class="comment">// RAPIDJSON_64BIT</span></div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160;<span class="comment">//! Whether using 64-bit architecture</span></div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160;<span class="comment"></span><span class="preprocessor">#ifndef RAPIDJSON_64BIT</span></div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160;<span class="preprocessor">#if defined(__LP64__) || (defined(__x86_64__) &amp;&amp; defined(__ILP32__)) || defined(_WIN64) || defined(__EMSCRIPTEN__)</span></div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160;<span class="preprocessor">#define RAPIDJSON_64BIT 1</span></div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00261"></a><span class="lineno"><a class="line" href="rapidjson_8h.html#a93973847cb99354b6b5bb5605aa7fe52"> 261</a></span>&#160;<span class="preprocessor">#define RAPIDJSON_64BIT 0</span></div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160;<span class="preprocessor">#endif // RAPIDJSON_64BIT</span></div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160;<span class="comment"></span><span class="comment">// RAPIDJSON_ALIGN</span></div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160;<span class="comment">//! Data alignment of the machine.</span></div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160;<span class="comment"></span><span class="comment">/*! \ingroup RAPIDJSON_CONFIG</span></div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160;<span class="comment"> \param x pointer to align</span></div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160;<span class="comment"> Some machines require strict data alignment. The default is 8 bytes.</span></div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160;<span class="comment"> User can customize by defining the RAPIDJSON_ALIGN function macro.</span></div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160;<span class="preprocessor">#ifndef RAPIDJSON_ALIGN</span></div><div class="line"><a name="l00276"></a><span class="lineno"><a class="line" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga583915242504c7fdb36e826f02f76242"> 276</a></span>&#160;<span class="preprocessor">#define RAPIDJSON_ALIGN(x) (((x) + static_cast&lt;size_t&gt;(7u)) &amp; ~static_cast&lt;size_t&gt;(7u))</span></div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160;<span class="comment"></span><span class="comment">// RAPIDJSON_UINT64_C2</span></div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160;<span class="comment">//! Construct a 64-bit literal by a pair of 32-bit integer.</span></div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160;<span class="comment"></span><span class="comment">/*!</span></div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160;<span class="comment"> 64-bit literal with or without ULL suffix is prone to compiler warnings.</span></div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160;<span class="comment"> UINT64_C() is C macro which cause compilation problems.</span></div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160;<span class="comment"> Use this macro to define 64-bit constants by a pair of 32-bit integer.</span></div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160;<span class="preprocessor">#ifndef RAPIDJSON_UINT64_C2</span></div><div class="line"><a name="l00289"></a><span class="lineno"><a class="line" href="rapidjson_8h.html#aaee1245f375a71be1ac9b8a07ba5fb8f"> 289</a></span>&#160;<span class="preprocessor">#define RAPIDJSON_UINT64_C2(high32, low32) ((static_cast&lt;uint64_t&gt;(high32) &lt;&lt; 32) | static_cast&lt;uint64_t&gt;(low32))</span></div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160;<span class="comment"></span><span class="comment">// RAPIDJSON_48BITPOINTER_OPTIMIZATION</span></div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160;<span class="comment">//! Use only lower 48-bit address for some pointers.</span></div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160;<span class="comment"></span><span class="comment">/*!</span></div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160;<span class="comment"> \ingroup RAPIDJSON_CONFIG</span></div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160;<span class="comment"> This optimization uses the fact that current X86-64 architecture only implement lower 48-bit virtual address.</span></div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160;<span class="comment"> The higher 16-bit can be used for storing other data.</span></div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160;<span class="comment"> \c GenericValue uses this optimization to reduce its size form 24 bytes to 16 bytes in 64-bit architecture.</span></div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160;<span class="preprocessor">#ifndef RAPIDJSON_48BITPOINTER_OPTIMIZATION</span></div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160;<span class="preprocessor">#if defined(__amd64__) || defined(__amd64) || defined(__x86_64__) || defined(__x86_64) || defined(_M_X64) || defined(_M_AMD64)</span></div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160;<span class="preprocessor">#define RAPIDJSON_48BITPOINTER_OPTIMIZATION 1</span></div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00307"></a><span class="lineno"><a class="line" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga93fb983f78208d12c822376e1ea6d185"> 307</a></span>&#160;<span class="preprocessor">#define RAPIDJSON_48BITPOINTER_OPTIMIZATION 0</span></div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160;<span class="preprocessor">#endif // RAPIDJSON_48BITPOINTER_OPTIMIZATION</span></div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160;</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160;<span class="preprocessor">#if RAPIDJSON_48BITPOINTER_OPTIMIZATION == 1</span></div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160;<span class="preprocessor">#if RAPIDJSON_64BIT != 1</span></div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160;<span class="preprocessor">#error RAPIDJSON_48BITPOINTER_OPTIMIZATION can only be set to 1 when RAPIDJSON_64BIT=1</span></div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160;<span class="preprocessor">#define RAPIDJSON_SETPOINTER(type, p, x) (p = reinterpret_cast&lt;type *&gt;((reinterpret_cast&lt;uintptr_t&gt;(p) &amp; static_cast&lt;uintptr_t&gt;(RAPIDJSON_UINT64_C2(0xFFFF0000, 0x00000000))) | reinterpret_cast&lt;uintptr_t&gt;(reinterpret_cast&lt;const void*&gt;(x))))</span></div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160;<span class="preprocessor">#define RAPIDJSON_GETPOINTER(type, p) (reinterpret_cast&lt;type *&gt;(reinterpret_cast&lt;uintptr_t&gt;(p) &amp; static_cast&lt;uintptr_t&gt;(RAPIDJSON_UINT64_C2(0x0000FFFF, 0xFFFFFFFF))))</span></div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160;<span class="preprocessor">#define RAPIDJSON_SETPOINTER(type, p, x) (p = (x))</span></div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160;<span class="preprocessor">#define RAPIDJSON_GETPOINTER(type, p) (p)</span></div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160;<span class="comment"></span><span class="comment">// RAPIDJSON_SSE2/RAPIDJSON_SSE42/RAPIDJSON_NEON/RAPIDJSON_SIMD</span></div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160;<span class="comment">/*! \def RAPIDJSON_SIMD</span></div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160;<span class="comment"> \ingroup RAPIDJSON_CONFIG</span></div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160;<span class="comment"> \brief Enable SSE2/SSE4.2/Neon optimization.</span></div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160;<span class="comment"> RapidJSON supports optimized implementations for some parsing operations</span></div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160;<span class="comment"> based on the SSE2, SSE4.2 or NEon SIMD extensions on modern Intel</span></div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160;<span class="comment"> or ARM compatible processors.</span></div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160;<span class="comment"> To enable these optimizations, three different symbols can be defined;</span></div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160;<span class="comment"> \code</span></div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160;<span class="comment"> // Enable SSE2 optimization.</span></div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160;<span class="comment"> #define RAPIDJSON_SSE2</span></div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160;<span class="comment"> // Enable SSE4.2 optimization.</span></div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160;<span class="comment"> #define RAPIDJSON_SSE42</span></div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160;<span class="comment"> \endcode</span></div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160;<span class="comment"> // Enable ARM Neon optimization.</span></div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160;<span class="comment"> #define RAPIDJSON_NEON</span></div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160;<span class="comment"> \endcode</span></div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160;<span class="comment"> \c RAPIDJSON_SSE42 takes precedence over SSE2, if both are defined.</span></div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160;<span class="comment"> If any of these symbols is defined, RapidJSON defines the macro</span></div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160;<span class="comment"> \c RAPIDJSON_SIMD to indicate the availability of the optimized code.</span></div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160;<span class="preprocessor">#if defined(RAPIDJSON_SSE2) || defined(RAPIDJSON_SSE42) \</span></div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160;<span class="preprocessor"> || defined(RAPIDJSON_NEON) || defined(RAPIDJSON_DOXYGEN_RUNNING)</span></div><div class="line"><a name="l00353"></a><span class="lineno"><a class="line" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga0ccf72f3ebc4b3306ab669f95ca5c64b"> 353</a></span>&#160;<span class="preprocessor">#define RAPIDJSON_SIMD</span></div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160;<span class="comment"></span><span class="comment">// RAPIDJSON_NO_SIZETYPEDEFINE</span></div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160;</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160;<span class="preprocessor">#ifndef RAPIDJSON_NO_SIZETYPEDEFINE</span></div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160;<span class="comment">/*! \def RAPIDJSON_NO_SIZETYPEDEFINE</span></div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160;<span class="comment"> \ingroup RAPIDJSON_CONFIG</span></div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160;<span class="comment"> \brief User-provided \c SizeType definition.</span></div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160;<span class="comment"> In order to avoid using 32-bit size types for indexing strings and arrays,</span></div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160;<span class="comment"> define this preprocessor symbol and provide the type rapidjson::SizeType</span></div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160;<span class="comment"> before including RapidJSON:</span></div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160;<span class="comment"> \code</span></div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160;<span class="comment"> #define RAPIDJSON_NO_SIZETYPEDEFINE</span></div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160;<span class="comment"> namespace rapidjson { typedef ::std::size_t SizeType; }</span></div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160;<span class="comment"> #include &quot;rapidjson/...&quot;</span></div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160;<span class="comment"> \endcode</span></div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160;<span class="comment"> \see rapidjson::SizeType</span></div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160;<span class="preprocessor">#ifdef RAPIDJSON_DOXYGEN_RUNNING</span></div><div class="line"><a name="l00376"></a><span class="lineno"><a class="line" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga250603aa9e2a12429b25ba0c8108ad4f"> 376</a></span>&#160;<span class="preprocessor">#define RAPIDJSON_NO_SIZETYPEDEFINE</span></div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00378"></a><span class="lineno"><a class="line" href="namespacerapidjson.html"> 378</a></span>&#160;RAPIDJSON_NAMESPACE_BEGIN<span class="comment"></span></div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160;<span class="comment">//! Size type (for string lengths, array sizes, etc.)</span></div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160;<span class="comment"></span><span class="comment">/*! RapidJSON uses 32-bit array/string indices even on 64-bit platforms,</span></div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160;<span class="comment"> instead of using \c size_t. Users may override the SizeType by defining</span></div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160;<span class="comment"> \ref RAPIDJSON_NO_SIZETYPEDEFINE.</span></div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00384"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84"> 384</a></span>&#160;<span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a>;</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160;RAPIDJSON_NAMESPACE_END</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160;</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160;<span class="comment">// always import std::size_t to rapidjson namespace</span></div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160;RAPIDJSON_NAMESPACE_BEGIN</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160;<span class="keyword">using</span> std::size_t;</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160;RAPIDJSON_NAMESPACE_END</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160;<span class="comment"></span><span class="comment">// RAPIDJSON_ASSERT</span></div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160;<span class="comment">//! Assertion.</span></div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160;<span class="comment"></span><span class="comment">/*! \ingroup RAPIDJSON_CONFIG</span></div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160;<span class="comment"> By default, rapidjson uses C \c assert() for internal assertions.</span></div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160;<span class="comment"> User can override it by defining RAPIDJSON_ASSERT(x) macro.</span></div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160;<span class="comment"> \note Parsing errors are handled and can be customized by the</span></div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160;<span class="comment"> \ref RAPIDJSON_ERRORS APIs.</span></div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160;<span class="preprocessor">#ifndef RAPIDJSON_ASSERT</span></div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160;<span class="preprocessor">#include &lt;cassert&gt;</span></div><div class="line"><a name="l00406"></a><span class="lineno"><a class="line" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c"> 406</a></span>&#160;<span class="preprocessor">#define RAPIDJSON_ASSERT(x) assert(x)</span></div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160;<span class="preprocessor">#endif // RAPIDJSON_ASSERT</span></div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160;<span class="comment"></span><span class="comment">// RAPIDJSON_STATIC_ASSERT</span></div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160;</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160;<span class="comment">// Prefer C++11 static_assert, if available</span></div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160;<span class="preprocessor">#ifndef RAPIDJSON_STATIC_ASSERT</span></div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160;<span class="preprocessor">#if __cplusplus &gt;= 201103L || ( defined(_MSC_VER) &amp;&amp; _MSC_VER &gt;= 1800 )</span></div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160;<span class="preprocessor">#define RAPIDJSON_STATIC_ASSERT(x) \</span></div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160;<span class="preprocessor"> static_assert(x, RAPIDJSON_STRINGIFY(x))</span></div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160;<span class="preprocessor">#endif // C++11</span></div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160;<span class="preprocessor">#endif // RAPIDJSON_STATIC_ASSERT</span></div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160;</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160;<span class="comment">// Adopt C++03 implementation from boost</span></div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160;<span class="preprocessor">#ifndef RAPIDJSON_STATIC_ASSERT</span></div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160;<span class="preprocessor">#ifndef __clang__</span></div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160;<span class="comment">//!@cond RAPIDJSON_HIDDEN_FROM_DOXYGEN</span></div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160;<span class="comment"></span><span class="preprocessor">#endif</span></div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160;RAPIDJSON_NAMESPACE_BEGIN</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">bool</span> x&gt; <span class="keyword">struct </span>STATIC_ASSERTION_FAILURE;</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160;<span class="keyword">template</span> &lt;&gt; <span class="keyword">struct </span>STATIC_ASSERTION_FAILURE&lt;true&gt; { <span class="keyword">enum</span> { value = 1 }; };</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">size_t</span> x&gt; <span class="keyword">struct </span>StaticAssertTest {};</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160;RAPIDJSON_NAMESPACE_END</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160;</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160;<span class="preprocessor">#if defined(__GNUC__) || defined(__clang__)</span></div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160;<span class="preprocessor">#define RAPIDJSON_STATIC_ASSERT_UNUSED_ATTRIBUTE __attribute__((unused))</span></div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160;<span class="preprocessor">#define RAPIDJSON_STATIC_ASSERT_UNUSED_ATTRIBUTE </span></div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160;<span class="preprocessor">#ifndef __clang__</span></div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160;<span class="comment">//!@endcond</span></div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160;<span class="comment"></span><span class="preprocessor">#endif</span></div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160;<span class="comment">/*! \def RAPIDJSON_STATIC_ASSERT</span></div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160;<span class="comment"> \brief (Internal) macro to check for conditions at compile-time</span></div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160;<span class="comment"> \param x compile-time condition</span></div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160;<span class="comment"> \hideinitializer</span></div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00445"></a><span class="lineno"><a class="line" href="rapidjson_8h.html#af95188da1d8eb6d4b148fe9ce71cd7c4"> 445</a></span>&#160;<span class="preprocessor">#define RAPIDJSON_STATIC_ASSERT(x) \</span></div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160;<span class="preprocessor"> typedef ::RAPIDJSON_NAMESPACE::StaticAssertTest&lt; \</span></div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160;<span class="preprocessor"> sizeof(::RAPIDJSON_NAMESPACE::STATIC_ASSERTION_FAILURE&lt;bool(x) &gt;)&gt; \</span></div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160;<span class="preprocessor"> RAPIDJSON_JOIN(StaticAssertTypedef, __LINE__) RAPIDJSON_STATIC_ASSERT_UNUSED_ATTRIBUTE</span></div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160;<span class="preprocessor">#endif // RAPIDJSON_STATIC_ASSERT</span></div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160;<span class="comment"></span><span class="comment">// RAPIDJSON_LIKELY, RAPIDJSON_UNLIKELY</span></div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160;<span class="comment">//! Compiler branching hint for expression with high probability to be true.</span></div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160;<span class="comment"></span><span class="comment">/*!</span></div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160;<span class="comment"> \ingroup RAPIDJSON_CONFIG</span></div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160;<span class="comment"> \param x Boolean expression likely to be true.</span></div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160;<span class="preprocessor">#ifndef RAPIDJSON_LIKELY</span></div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160;<span class="preprocessor">#if defined(__GNUC__) || defined(__clang__)</span></div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160;<span class="preprocessor">#define RAPIDJSON_LIKELY(x) __builtin_expect(!!(x), 1)</span></div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00463"></a><span class="lineno"><a class="line" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga5dc14176a9e71ace282404b0bcda57a1"> 463</a></span>&#160;<span class="preprocessor">#define RAPIDJSON_LIKELY(x) (x)</span></div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160;<span class="comment">//! Compiler branching hint for expression with low probability to be true.</span></div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160;<span class="comment"></span><span class="comment">/*!</span></div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160;<span class="comment"> \ingroup RAPIDJSON_CONFIG</span></div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160;<span class="comment"> \param x Boolean expression unlikely to be true.</span></div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160;<span class="preprocessor">#ifndef RAPIDJSON_UNLIKELY</span></div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160;<span class="preprocessor">#if defined(__GNUC__) || defined(__clang__)</span></div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160;<span class="preprocessor">#define RAPIDJSON_UNLIKELY(x) __builtin_expect(!!(x), 0)</span></div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00476"></a><span class="lineno"><a class="line" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5"> 476</a></span>&#160;<span class="preprocessor">#define RAPIDJSON_UNLIKELY(x) (x)</span></div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160;<span class="comment"></span><span class="comment">// Helpers</span></div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160;<span class="comment">//!@cond RAPIDJSON_HIDDEN_FROM_DOXYGEN</span></div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160;<span class="preprocessor">#define RAPIDJSON_MULTILINEMACRO_BEGIN do { </span></div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160;<span class="preprocessor">#define RAPIDJSON_MULTILINEMACRO_END \</span></div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160;<span class="preprocessor">} while((void)0, 0)</span></div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160;</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160;<span class="comment">// adopted from Boost</span></div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160;<span class="preprocessor">#define RAPIDJSON_VERSION_CODE(x,y,z) \</span></div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160;<span class="preprocessor"> (((x)*100000) + ((y)*100) + (z))</span></div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160;<span class="comment"></span><span class="comment">// RAPIDJSON_DIAG_PUSH/POP, RAPIDJSON_DIAG_OFF</span></div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160;</div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160;<span class="preprocessor">#if defined(__GNUC__)</span></div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160;<span class="preprocessor">#define RAPIDJSON_GNUC \</span></div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160;<span class="preprocessor"> RAPIDJSON_VERSION_CODE(__GNUC__,__GNUC_MINOR__,__GNUC_PATCHLEVEL__)</span></div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160;</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160;<span class="preprocessor">#if defined(__clang__) || (defined(RAPIDJSON_GNUC) &amp;&amp; RAPIDJSON_GNUC &gt;= RAPIDJSON_VERSION_CODE(4,2,0))</span></div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160;</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160;<span class="preprocessor">#define RAPIDJSON_PRAGMA(x) _Pragma(RAPIDJSON_STRINGIFY(x))</span></div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160;<span class="preprocessor">#define RAPIDJSON_DIAG_PRAGMA(x) RAPIDJSON_PRAGMA(GCC diagnostic x)</span></div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160;<span class="preprocessor">#define RAPIDJSON_DIAG_OFF(x) \</span></div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160;<span class="preprocessor"> RAPIDJSON_DIAG_PRAGMA(ignored RAPIDJSON_STRINGIFY(RAPIDJSON_JOIN(-W,x)))</span></div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160;</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160;<span class="comment">// push/pop support in Clang and GCC&gt;=4.6</span></div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160;<span class="preprocessor">#if defined(__clang__) || (defined(RAPIDJSON_GNUC) &amp;&amp; RAPIDJSON_GNUC &gt;= RAPIDJSON_VERSION_CODE(4,6,0))</span></div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160;<span class="preprocessor">#define RAPIDJSON_DIAG_PUSH RAPIDJSON_DIAG_PRAGMA(push)</span></div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160;<span class="preprocessor">#define RAPIDJSON_DIAG_POP RAPIDJSON_DIAG_PRAGMA(pop)</span></div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160;<span class="preprocessor">#else // GCC &gt;= 4.2, &lt; 4.6</span></div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160;<span class="preprocessor">#define RAPIDJSON_DIAG_PUSH </span><span class="comment">/* ignored */</span><span class="preprocessor"></span></div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160;<span class="preprocessor">#define RAPIDJSON_DIAG_POP </span><span class="comment">/* ignored */</span><span class="preprocessor"></span></div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160;</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160;<span class="preprocessor">#elif defined(_MSC_VER)</span></div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160;</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160;<span class="comment">// pragma (MSVC specific)</span></div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160;<span class="preprocessor">#define RAPIDJSON_PRAGMA(x) __pragma(x)</span></div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160;<span class="preprocessor">#define RAPIDJSON_DIAG_PRAGMA(x) RAPIDJSON_PRAGMA(warning(x))</span></div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160;</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160;<span class="preprocessor">#define RAPIDJSON_DIAG_OFF(x) RAPIDJSON_DIAG_PRAGMA(disable: x)</span></div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160;<span class="preprocessor">#define RAPIDJSON_DIAG_PUSH RAPIDJSON_DIAG_PRAGMA(push)</span></div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160;<span class="preprocessor">#define RAPIDJSON_DIAG_POP RAPIDJSON_DIAG_PRAGMA(pop)</span></div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160;</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160;</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160;<span class="preprocessor">#define RAPIDJSON_DIAG_OFF(x) </span><span class="comment">/* ignored */</span><span class="preprocessor"></span></div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160;<span class="preprocessor">#define RAPIDJSON_DIAG_PUSH </span><span class="comment">/* ignored */</span><span class="preprocessor"></span></div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160;<span class="preprocessor">#define RAPIDJSON_DIAG_POP </span><span class="comment">/* ignored */</span><span class="preprocessor"></span></div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160;</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160;<span class="preprocessor">#endif // RAPIDJSON_DIAG_*</span></div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160;<span class="comment"></span><span class="comment">// C++11 features</span></div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160;</div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160;<span class="preprocessor">#ifndef RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160;<span class="preprocessor">#if defined(__clang__)</span></div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160;<span class="preprocessor">#if __has_feature(cxx_rvalue_references) &amp;&amp; \</span></div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160;<span class="preprocessor"> (defined(_MSC_VER) || defined(_LIBCPP_VERSION) || defined(__GLIBCXX__) &amp;&amp; __GLIBCXX__ &gt;= 20080306)</span></div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160;<span class="preprocessor">#define RAPIDJSON_HAS_CXX11_RVALUE_REFS 1</span></div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160;<span class="preprocessor">#define RAPIDJSON_HAS_CXX11_RVALUE_REFS 0</span></div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160;<span class="preprocessor">#elif (defined(RAPIDJSON_GNUC) &amp;&amp; (RAPIDJSON_GNUC &gt;= RAPIDJSON_VERSION_CODE(4,3,0)) &amp;&amp; defined(__GXX_EXPERIMENTAL_CXX0X__)) || \</span></div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160;<span class="preprocessor"> (defined(_MSC_VER) &amp;&amp; _MSC_VER &gt;= 1600) || \</span></div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160;<span class="preprocessor"> (defined(__SUNPRO_CC) &amp;&amp; __SUNPRO_CC &gt;= 0x5140 &amp;&amp; defined(__GXX_EXPERIMENTAL_CXX0X__))</span></div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160;</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160;<span class="preprocessor">#define RAPIDJSON_HAS_CXX11_RVALUE_REFS 1</span></div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160;<span class="preprocessor">#define RAPIDJSON_HAS_CXX11_RVALUE_REFS 0</span></div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160;<span class="preprocessor">#endif // RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160;</div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160;<span class="preprocessor">#ifndef RAPIDJSON_HAS_CXX11_NOEXCEPT</span></div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160;<span class="preprocessor">#if defined(__clang__)</span></div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160;<span class="preprocessor">#define RAPIDJSON_HAS_CXX11_NOEXCEPT __has_feature(cxx_noexcept)</span></div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160;<span class="preprocessor">#elif (defined(RAPIDJSON_GNUC) &amp;&amp; (RAPIDJSON_GNUC &gt;= RAPIDJSON_VERSION_CODE(4,6,0)) &amp;&amp; defined(__GXX_EXPERIMENTAL_CXX0X__)) || \</span></div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160;<span class="preprocessor"> (defined(_MSC_VER) &amp;&amp; _MSC_VER &gt;= 1900) || \</span></div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160;<span class="preprocessor"> (defined(__SUNPRO_CC) &amp;&amp; __SUNPRO_CC &gt;= 0x5140 &amp;&amp; defined(__GXX_EXPERIMENTAL_CXX0X__))</span></div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160;<span class="preprocessor">#define RAPIDJSON_HAS_CXX11_NOEXCEPT 1</span></div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160;<span class="preprocessor">#define RAPIDJSON_HAS_CXX11_NOEXCEPT 0</span></div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_CXX11_NOEXCEPT</span></div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160;<span class="preprocessor">#define RAPIDJSON_NOEXCEPT noexcept</span></div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160;<span class="preprocessor">#define RAPIDJSON_NOEXCEPT </span><span class="comment">/* noexcept */</span><span class="preprocessor"></span></div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160;<span class="preprocessor">#endif // RAPIDJSON_HAS_CXX11_NOEXCEPT</span></div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160;</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160;<span class="comment">// no automatic detection, yet</span></div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160;<span class="preprocessor">#ifndef RAPIDJSON_HAS_CXX11_TYPETRAITS</span></div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160;<span class="preprocessor">#if (defined(_MSC_VER) &amp;&amp; _MSC_VER &gt;= 1700)</span></div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160;<span class="preprocessor">#define RAPIDJSON_HAS_CXX11_TYPETRAITS 1</span></div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160;<span class="preprocessor">#define RAPIDJSON_HAS_CXX11_TYPETRAITS 0</span></div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160;</div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160;<span class="preprocessor">#ifndef RAPIDJSON_HAS_CXX11_RANGE_FOR</span></div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160;<span class="preprocessor">#if defined(__clang__)</span></div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160;<span class="preprocessor">#define RAPIDJSON_HAS_CXX11_RANGE_FOR __has_feature(cxx_range_for)</span></div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160;<span class="preprocessor">#elif (defined(RAPIDJSON_GNUC) &amp;&amp; (RAPIDJSON_GNUC &gt;= RAPIDJSON_VERSION_CODE(4,6,0)) &amp;&amp; defined(__GXX_EXPERIMENTAL_CXX0X__)) || \</span></div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160;<span class="preprocessor"> (defined(_MSC_VER) &amp;&amp; _MSC_VER &gt;= 1700) || \</span></div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160;<span class="preprocessor"> (defined(__SUNPRO_CC) &amp;&amp; __SUNPRO_CC &gt;= 0x5140 &amp;&amp; defined(__GXX_EXPERIMENTAL_CXX0X__))</span></div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160;<span class="preprocessor">#define RAPIDJSON_HAS_CXX11_RANGE_FOR 1</span></div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160;<span class="preprocessor">#define RAPIDJSON_HAS_CXX11_RANGE_FOR 0</span></div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160;<span class="preprocessor">#endif // RAPIDJSON_HAS_CXX11_RANGE_FOR</span></div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160;<span class="comment">//!@endcond</span></div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160;<span class="comment">//! Assertion (in non-throwing contexts).</span></div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160;<span class="comment"></span><span class="comment"> /*! \ingroup RAPIDJSON_CONFIG</span></div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160;<span class="comment"> Some functions provide a \c noexcept guarantee, if the compiler supports it.</span></div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160;<span class="comment"> In these cases, the \ref RAPIDJSON_ASSERT macro cannot be overridden to</span></div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160;<span class="comment"> throw an exception. This macro adds a separate customization point for</span></div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160;<span class="comment"> such cases.</span></div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160;<span class="comment"> Defaults to C \c assert() (as \ref RAPIDJSON_ASSERT), if \c noexcept is</span></div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160;<span class="comment"> supported, and to \ref RAPIDJSON_ASSERT otherwise.</span></div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160;<span class="comment"></span><span class="comment">// RAPIDJSON_NOEXCEPT_ASSERT</span></div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160;</div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160;<span class="preprocessor">#ifdef RAPIDJSON_ASSERT_THROWS</span></div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_CXX11_NOEXCEPT</span></div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160;<span class="preprocessor">#define RAPIDJSON_NOEXCEPT_ASSERT(x)</span></div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160;<span class="preprocessor">#define RAPIDJSON_NOEXCEPT_ASSERT(x) RAPIDJSON_ASSERT(x)</span></div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160;<span class="preprocessor">#endif // RAPIDJSON_HAS_CXX11_NOEXCEPT</span></div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00617"></a><span class="lineno"><a class="line" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga2b2a0d9143aa4fb31205a85b34c43952"> 617</a></span>&#160;<span class="preprocessor">#define RAPIDJSON_NOEXCEPT_ASSERT(x) RAPIDJSON_ASSERT(x)</span></div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160;<span class="preprocessor">#endif // RAPIDJSON_ASSERT_THROWS</span></div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160;<span class="comment"></span><span class="comment">// new/delete</span></div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160;</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160;<span class="preprocessor">#ifndef RAPIDJSON_NEW</span></div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160;<span class="comment">///! customization point for global \c new</span></div><div class="line"><a name="l00625"></a><span class="lineno"><a class="line" href="rapidjson_8h.html#abdc7cd7902748ffe6626d71c59a73c3b"> 625</a></span>&#160;<span class="comment"></span><span class="preprocessor">#define RAPIDJSON_NEW(TypeName) new TypeName</span></div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160;<span class="preprocessor">#ifndef RAPIDJSON_DELETE</span></div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160;<span class="comment">///! customization point for global \c delete</span></div><div class="line"><a name="l00629"></a><span class="lineno"><a class="line" href="rapidjson_8h.html#a52c941c3fdd646527cdcd42aa846a28a"> 629</a></span>&#160;<span class="comment"></span><span class="preprocessor">#define RAPIDJSON_DELETE(x) delete x</span></div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160;<span class="comment"></span><span class="comment">// Type</span></div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160;<span class="comment">/*! \namespace rapidjson</span></div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160;<span class="comment"> \brief main RapidJSON namespace</span></div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160;<span class="comment"> \see RAPIDJSON_NAMESPACE</span></div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160;RAPIDJSON_NAMESPACE_BEGIN</div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160;<span class="comment">//! Type of JSON value</span></div><div class="line"><a name="l00642"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4"> 642</a></span>&#160;<span class="comment"></span><span class="keyword">enum</span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">Type</a> {</div><div class="line"><a name="l00643"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a952871e4326b527154fc8aac1ac1f6ff"> 643</a></span>&#160; <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a952871e4326b527154fc8aac1ac1f6ff">kNullType</a> = 0, <span class="comment">//!&lt; null</span></div><div class="line"><a name="l00644"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a9f2e7047832dce1029551b5de0f05607"> 644</a></span>&#160;<span class="comment"></span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a9f2e7047832dce1029551b5de0f05607">kFalseType</a> = 1, <span class="comment">//!&lt; false</span></div><div class="line"><a name="l00645"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a80d9f25b083abce45edbfdd3ba006c8e"> 645</a></span>&#160;<span class="comment"></span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a80d9f25b083abce45edbfdd3ba006c8e">kTrueType</a> = 2, <span class="comment">//!&lt; true</span></div><div class="line"><a name="l00646"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4acf030b422a32c3647c7c5973bd4dd0a9"> 646</a></span>&#160;<span class="comment"></span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4acf030b422a32c3647c7c5973bd4dd0a9">kObjectType</a> = 3, <span class="comment">//!&lt; object</span></div><div class="line"><a name="l00647"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a058c622e1e7d59419ae58b895cbce468"> 647</a></span>&#160;<span class="comment"></span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a058c622e1e7d59419ae58b895cbce468">kArrayType</a> = 4, <span class="comment">//!&lt; array </span></div><div class="line"><a name="l00648"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4ad6379da3dc04b83a591992bfb9fabba7"> 648</a></span>&#160;<span class="comment"></span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4ad6379da3dc04b83a591992bfb9fabba7">kStringType</a> = 5, <span class="comment">//!&lt; string</span></div><div class="line"><a name="l00649"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a"> 649</a></span>&#160;<span class="comment"></span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a">kNumberType</a> = 6 <span class="comment">//!&lt; number</span></div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160;<span class="comment"></span>};</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160;</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160;RAPIDJSON_NAMESPACE_END</div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160;</div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160;<span class="preprocessor">#endif // RAPIDJSON_RAPIDJSON_H_</span></div><div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4a80d9f25b083abce45edbfdd3ba006c8e"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a80d9f25b083abce45edbfdd3ba006c8e">rapidjson::kTrueType</a></div><div class="ttdoc">true </div><div class="ttdef"><b>Definition:</b> rapidjson.h:645</div></div>
<div class="ttc" id="namespacerapidjson_html_a44eb33eaa523e36d466b1ced64b85c84"><div class="ttname"><a href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">rapidjson::SizeType</a></div><div class="ttdeci">unsigned SizeType</div><div class="ttdoc">Size type (for string lengths, array sizes, etc.) </div><div class="ttdef"><b>Definition:</b> rapidjson.h:384</div></div>
-<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4a9f2e7047832dce1029551b5de0f05607"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a9f2e7047832dce1029551b5de0f05607">rapidjson::kFalseType</a></div><div class="ttdoc">false </div><div class="ttdef"><b>Definition:</b> rapidjson.h:633</div></div>
-<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">rapidjson::Type</a></div><div class="ttdeci">Type</div><div class="ttdoc">Type of JSON value </div><div class="ttdef"><b>Definition:</b> rapidjson.h:631</div></div>
-<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4acf030b422a32c3647c7c5973bd4dd0a9"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4acf030b422a32c3647c7c5973bd4dd0a9">rapidjson::kObjectType</a></div><div class="ttdoc">object </div><div class="ttdef"><b>Definition:</b> rapidjson.h:635</div></div>
-<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4a058c622e1e7d59419ae58b895cbce468"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a058c622e1e7d59419ae58b895cbce468">rapidjson::kArrayType</a></div><div class="ttdoc">array </div><div class="ttdef"><b>Definition:</b> rapidjson.h:636</div></div>
-<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4a952871e4326b527154fc8aac1ac1f6ff"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a952871e4326b527154fc8aac1ac1f6ff">rapidjson::kNullType</a></div><div class="ttdoc">null </div><div class="ttdef"><b>Definition:</b> rapidjson.h:632</div></div>
-<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4ad6379da3dc04b83a591992bfb9fabba7"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4ad6379da3dc04b83a591992bfb9fabba7">rapidjson::kStringType</a></div><div class="ttdoc">string </div><div class="ttdef"><b>Definition:</b> rapidjson.h:637</div></div>
-<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a">rapidjson::kNumberType</a></div><div class="ttdoc">number </div><div class="ttdef"><b>Definition:</b> rapidjson.h:638</div></div>
+<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4a9f2e7047832dce1029551b5de0f05607"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a9f2e7047832dce1029551b5de0f05607">rapidjson::kFalseType</a></div><div class="ttdoc">false </div><div class="ttdef"><b>Definition:</b> rapidjson.h:644</div></div>
+<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">rapidjson::Type</a></div><div class="ttdeci">Type</div><div class="ttdoc">Type of JSON value </div><div class="ttdef"><b>Definition:</b> rapidjson.h:642</div></div>
+<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4acf030b422a32c3647c7c5973bd4dd0a9"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4acf030b422a32c3647c7c5973bd4dd0a9">rapidjson::kObjectType</a></div><div class="ttdoc">object </div><div class="ttdef"><b>Definition:</b> rapidjson.h:646</div></div>
+<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4a058c622e1e7d59419ae58b895cbce468"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a058c622e1e7d59419ae58b895cbce468">rapidjson::kArrayType</a></div><div class="ttdoc">array </div><div class="ttdef"><b>Definition:</b> rapidjson.h:647</div></div>
+<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4a952871e4326b527154fc8aac1ac1f6ff"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a952871e4326b527154fc8aac1ac1f6ff">rapidjson::kNullType</a></div><div class="ttdoc">null </div><div class="ttdef"><b>Definition:</b> rapidjson.h:643</div></div>
+<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4ad6379da3dc04b83a591992bfb9fabba7"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4ad6379da3dc04b83a591992bfb9fabba7">rapidjson::kStringType</a></div><div class="ttdoc">string </div><div class="ttdef"><b>Definition:</b> rapidjson.h:648</div></div>
+<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a">rapidjson::kNumberType</a></div><div class="ttdoc">number </div><div class="ttdef"><b>Definition:</b> rapidjson.h:649</div></div>
</div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->
<!-- HTML footer for doxygen 1.8.7-->
diff --git a/zh-cn/reader_8h_source.html b/zh-cn/reader_8h_source.html
index 4c950c50..43cdcbf0 100644
--- a/zh-cn/reader_8h_source.html
+++ b/zh-cn/reader_8h_source.html
@@ -121,7 +121,7 @@ $(document).ready(function(){initNavTree('reader_8h_source.html','');});
<div class="ttc" id="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s_html_gga7d3acf640886b1f2552dc8c4cd6dea60a8dd0af5e6103a6503c61c38cb2b0bab9"><div class="ttname"><a href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gga7d3acf640886b1f2552dc8c4cd6dea60a8dd0af5e6103a6503c61c38cb2b0bab9">rapidjson::kParseErrorStringEscapeInvalid</a></div><div class="ttdoc">Invalid escape character in string. </div><div class="ttdef"><b>Definition:</b> error.h:80</div></div>
<div class="ttc" id="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s_html_structrapidjson_1_1_parse_result"><div class="ttname"><a href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#structrapidjson_1_1_parse_result">rapidjson::ParseResult</a></div><div class="ttdoc">Result of parsing (wraps ParseErrorCode) </div><div class="ttdef"><b>Definition:</b> error.h:106</div></div>
<div class="ttc" id="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s_html_gga7d3acf640886b1f2552dc8c4cd6dea60ab707b848425668e765def25554735242"><div class="ttname"><a href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gga7d3acf640886b1f2552dc8c4cd6dea60ab707b848425668e765def25554735242">rapidjson::kParseErrorObjectMissName</a></div><div class="ttdoc">Missing a name for object member. </div><div class="ttdef"><b>Definition:</b> error.h:72</div></div>
-<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">rapidjson::Type</a></div><div class="ttdeci">Type</div><div class="ttdoc">Type of JSON value </div><div class="ttdef"><b>Definition:</b> rapidjson.h:631</div></div>
+<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">rapidjson::Type</a></div><div class="ttdeci">Type</div><div class="ttdoc">Type of JSON value </div><div class="ttdef"><b>Definition:</b> rapidjson.h:642</div></div>
<div class="ttc" id="namespacerapidjson_html_a81379eb4e94a0386d71d15fda882ebc9af84c60868704433b80aa51a62e042bb1"><div class="ttname"><a href="namespacerapidjson.html#a81379eb4e94a0386d71d15fda882ebc9af84c60868704433b80aa51a62e042bb1">rapidjson::kParseStopWhenDoneFlag</a></div><div class="ttdoc">After parsing a complete JSON root from stream, stop further processing the rest of stream...</div><div class="ttdef"><b>Definition:</b> reader.h:150</div></div>
<div class="ttc" id="namespacerapidjson_html_a6efb0f4d2a6f81477a59718d42e9464a"><div class="ttname"><a href="namespacerapidjson.html#a6efb0f4d2a6f81477a59718d42e9464a">rapidjson::SkipWhitespace</a></div><div class="ttdeci">void SkipWhitespace(InputStream &amp;is)</div><div class="ttdoc">Skip the JSON white spaces in a stream. </div><div class="ttdef"><b>Definition:</b> reader.h:264</div></div>
<div class="ttc" id="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g_html_ga6a2b1695c13e77ae425e3cbac980ccb5"><div class="ttname"><a href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a></div><div class="ttdeci">#define RAPIDJSON_UNLIKELY(x)</div><div class="ttdoc">Compiler branching hint for expression with low probability to be true. </div><div class="ttdef"><b>Definition:</b> rapidjson.h:476</div></div>
diff --git a/zh-cn/regex_8h_source.html b/zh-cn/regex_8h_source.html
index e4ff0c55..af5ecb00 100644
--- a/zh-cn/regex_8h_source.html
+++ b/zh-cn/regex_8h_source.html
@@ -82,8 +82,8 @@ $(document).ready(function(){initNavTree('regex_8h_source.html','');});
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">// Tencent is pleased to support the open source community by making RapidJSON available.</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">// </span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">// Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved.</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment">// Licensed under the MIT License (the &quot;License&quot;); you may not use this file except</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment">// in compliance with the License. You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment">// http://opensource.org/licenses/MIT</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment">// Unless required by applicable law or agreed to in writing, software distributed </span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment">// under the License is distributed on an &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR </span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment">// CONDITIONS OF ANY KIND, either express or implied. See the License for the </span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment">// specific language governing permissions and limitations under the License.</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;</div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#ifndef RAPIDJSON_INTERNAL_REGEX_H_</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#define RAPIDJSON_INTERNAL_REGEX_H_</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#include &quot;../allocators.h&quot;</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="preprocessor">#include &quot;../stream.h&quot;</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#include &quot;stack.h&quot;</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="preprocessor">#ifdef __clang__</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;RAPIDJSON_DIAG_PUSH</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;RAPIDJSON_DIAG_OFF(padded)</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;RAPIDJSON_DIAG_OFF(<span class="keywordflow">switch</span>-<span class="keyword">enum</span>)</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;RAPIDJSON_DIAG_OFF(implicit-fallthrough)</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="preprocessor">#elif defined(_MSC_VER)</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;RAPIDJSON_DIAG_PUSH</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;RAPIDJSON_DIAG_OFF(4512) <span class="comment">// assignment operator could not be generated</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="preprocessor">#ifdef __GNUC__</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;RAPIDJSON_DIAG_PUSH</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;RAPIDJSON_DIAG_OFF(effc++)</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="preprocessor">#if __GNUC__ &gt;= 7</span></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;RAPIDJSON_DIAG_OFF(implicit-fallthrough)</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;<span class="preprocessor">#ifndef RAPIDJSON_REGEX_VERBOSE</span></div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;<span class="preprocessor">#define RAPIDJSON_REGEX_VERBOSE 0</span></div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;RAPIDJSON_NAMESPACE_BEGIN</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;<span class="keyword">namespace </span>internal {</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;<span class="comment"></span><span class="comment">// DecodedStream</span></div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> SourceStream, <span class="keyword">typename</span> Encoding&gt;</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;<span class="keyword">class </span>DecodedStream {</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; DecodedStream(SourceStream&amp; ss) : ss_(ss), codepoint_() { Decode(); }</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="keywordtype">unsigned</span> Peek() { <span class="keywordflow">return</span> codepoint_; }</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keywordtype">unsigned</span> Take() {</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keywordtype">unsigned</span> c = codepoint_;</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keywordflow">if</span> (c) <span class="comment">// No further decoding when &#39;\0&#39;</span></div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; Decode();</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keywordflow">return</span> c;</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; }</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keywordtype">void</span> Decode() {</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keywordflow">if</span> (!Encoding::Decode(ss_, &amp;codepoint_))</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; codepoint_ = 0;</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; }</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; SourceStream&amp; ss_;</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keywordtype">unsigned</span> codepoint_;</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;};</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;<span class="comment"></span><span class="comment">// GenericRegex</span></div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> kRegexInvalidState = ~<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a>(0); <span class="comment">//!&lt; Represents an invalid index in GenericRegex::State::out, out1</span></div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;<span class="comment"></span><span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> kRegexInvalidRange = ~<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a>(0);</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> Encoding, <span class="keyword">typename</span> Allocator&gt;</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;<span class="keyword">class </span>GenericRegexSearch;</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;<span class="comment">//! Regular expression engine with subset of ECMAscript grammar.</span></div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;<span class="comment"></span><span class="comment">/*!</span></div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;<span class="comment"> Supported regular expression syntax:</span></div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;<span class="comment"> - \c ab Concatenation</span></div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160;<span class="comment"> - \c a|b Alternation</span></div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160;<span class="comment"> - \c a? Zero or one</span></div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;<span class="comment"> - \c a* Zero or more</span></div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160;<span class="comment"> - \c a+ One or more</span></div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;<span class="comment"> - \c a{3} Exactly 3 times</span></div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160;<span class="comment"> - \c a{3,} At least 3 times</span></div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;<span class="comment"> - \c a{3,5} 3 to 5 times</span></div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160;<span class="comment"> - \c (ab) Grouping</span></div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;<span class="comment"> - \c ^a At the beginning</span></div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;<span class="comment"> - \c a$ At the end</span></div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;<span class="comment"> - \c . Any character</span></div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160;<span class="comment"> - \c [abc] Character classes</span></div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;<span class="comment"> - \c [a-c] Character class range</span></div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;<span class="comment"> - \c [a-z0-9_] Character class combination</span></div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160;<span class="comment"> - \c [^abc] Negated character classes</span></div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160;<span class="comment"> - \c [^a-c] Negated character class range</span></div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160;<span class="comment"> - \c [\b] Backspace (U+0008)</span></div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160;<span class="comment"> - \c \\| \\\\ ... Escape characters</span></div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160;<span class="comment"> - \c \\f Form feed (U+000C)</span></div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160;<span class="comment"> - \c \\n Line feed (U+000A)</span></div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160;<span class="comment"> - \c \\r Carriage return (U+000D)</span></div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160;<span class="comment"> - \c \\t Tab (U+0009)</span></div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160;<span class="comment"> - \c \\v Vertical tab (U+000B)</span></div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160;<span class="comment"> \note This is a Thompson NFA engine, implemented with reference to </span></div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160;<span class="comment"> Cox, Russ. &quot;Regular Expression Matching Can Be Simple And Fast (but is slow in Java, Perl, PHP, Python, Ruby,...).&quot;, </span></div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160;<span class="comment"> https://swtch.com/~rsc/regexp/regexp1.html </span></div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> Encoding, <span class="keyword">typename</span> Allocator = CrtAllocator&gt;</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160;<span class="keyword">class </span>GenericRegex {</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="keyword">typedef</span> Encoding EncodingType;</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <span class="keyword">typedef</span> <span class="keyword">typename</span> Encoding::Ch Ch;</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span>, <span class="keyword">typename</span>&gt; <span class="keyword">friend</span> <span class="keyword">class </span>GenericRegexSearch;</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160;</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; GenericRegex(<span class="keyword">const</span> Ch* source, Allocator* allocator = 0) : </div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; states_(allocator, 256), ranges_(allocator, 256), root_(kRegexInvalidState), stateCount_(), rangeCount_(), </div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; anchorBegin_(), anchorEnd_()</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; {</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; GenericStringStream&lt;Encoding&gt; ss(source);</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; DecodedStream&lt;GenericStringStream&lt;Encoding&gt;, Encoding&gt; ds(ss);</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; Parse(ds);</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; }</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160;</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; ~GenericRegex() {}</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160;</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="keywordtype">bool</span> IsValid()<span class="keyword"> const </span>{</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <span class="keywordflow">return</span> root_ != kRegexInvalidState;</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; }</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160;</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="keyword">enum</span> Operator {</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; kZeroOrOne,</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; kZeroOrMore,</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; kOneOrMore,</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; kConcatenation,</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; kAlternation,</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; kLeftParenthesis</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; };</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160;</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> kAnyCharacterClass = 0xFFFFFFFF; <span class="comment">//!&lt; For &#39;.&#39;</span></div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160;<span class="comment"></span> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> kRangeCharacterClass = 0xFFFFFFFE;</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> kRangeNegationFlag = 0x80000000;</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160;</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <span class="keyword">struct </span>Range {</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="keywordtype">unsigned</span> start; <span class="comment">// </span></div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <span class="keywordtype">unsigned</span> end;</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> next;</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; };</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160;</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <span class="keyword">struct </span>State {</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> out; <span class="comment">//!&lt; Equals to kInvalid for matching state</span></div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160;<span class="comment"></span> <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> out1; <span class="comment">//!&lt; Equals to non-kInvalid for split</span></div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160;<span class="comment"></span> <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> rangeStart;</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <span class="keywordtype">unsigned</span> codepoint;</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; };</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160;</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <span class="keyword">struct </span>Frag {</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; Frag(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> s, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> o, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> m) : start(s), out(o), minIndex(m) {}</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> start;</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> out; <span class="comment">//!&lt; link-list of all output states</span></div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160;<span class="comment"></span> <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> minIndex;</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; };</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160;</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; State&amp; GetState(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> index) {</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(index &lt; stateCount_);</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; <span class="keywordflow">return</span> states_.template Bottom&lt;State&gt;()[index];</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; }</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160;</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; <span class="keyword">const</span> State&amp; GetState(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> index)<span class="keyword"> const </span>{</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(index &lt; stateCount_);</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; <span class="keywordflow">return</span> states_.template Bottom&lt;State&gt;()[index];</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; }</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160;</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; Range&amp; GetRange(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> index) {</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(index &lt; rangeCount_);</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; <span class="keywordflow">return</span> ranges_.template Bottom&lt;Range&gt;()[index];</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; }</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160;</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; <span class="keyword">const</span> Range&amp; GetRange(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> index)<span class="keyword"> const </span>{</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(index &lt; rangeCount_);</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; <span class="keywordflow">return</span> ranges_.template Bottom&lt;Range&gt;()[index];</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; }</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160;</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> InputStream&gt;</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <span class="keywordtype">void</span> Parse(DecodedStream&lt;InputStream, Encoding&gt;&amp; ds) {</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; Allocator allocator;</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; Stack&lt;Allocator&gt; operandStack(&amp;allocator, 256); <span class="comment">// Frag</span></div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; Stack&lt;Allocator&gt; operatorStack(&amp;allocator, 256); <span class="comment">// Operator</span></div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; Stack&lt;Allocator&gt; atomCountStack(&amp;allocator, 256); <span class="comment">// unsigned (Atom per parenthesis)</span></div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160;</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; *atomCountStack.template Push&lt;unsigned&gt;() = 0;</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160;</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; <span class="keywordtype">unsigned</span> codepoint;</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; <span class="keywordflow">while</span> (ds.Peek() != 0) {</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; <span class="keywordflow">switch</span> (codepoint = ds.Take()) {</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; <span class="keywordflow">case</span> <span class="charliteral">&#39;^&#39;</span>:</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; anchorBegin_ = <span class="keyword">true</span>;</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160;</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; <span class="keywordflow">case</span> <span class="charliteral">&#39;$&#39;</span>:</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; anchorEnd_ = <span class="keyword">true</span>;</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160;</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <span class="keywordflow">case</span> <span class="charliteral">&#39;|&#39;</span>:</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; <span class="keywordflow">while</span> (!operatorStack.Empty() &amp;&amp; *operatorStack.template Top&lt;Operator&gt;() &lt; kAlternation)</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <span class="keywordflow">if</span> (!Eval(operandStack, *operatorStack.template Pop&lt;Operator&gt;(1)))</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; *operatorStack.template Push&lt;Operator&gt;() = kAlternation;</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; *atomCountStack.template Top&lt;unsigned&gt;() = 0;</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160;</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; <span class="keywordflow">case</span> <span class="charliteral">&#39;(&#39;</span>:</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; *operatorStack.template Push&lt;Operator&gt;() = kLeftParenthesis;</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; *atomCountStack.template Push&lt;unsigned&gt;() = 0;</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160;</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <span class="keywordflow">case</span> <span class="charliteral">&#39;)&#39;</span>:</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; <span class="keywordflow">while</span> (!operatorStack.Empty() &amp;&amp; *operatorStack.template Top&lt;Operator&gt;() != kLeftParenthesis)</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <span class="keywordflow">if</span> (!Eval(operandStack, *operatorStack.template Pop&lt;Operator&gt;(1)))</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <span class="keywordflow">if</span> (operatorStack.Empty())</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; operatorStack.template Pop&lt;Operator&gt;(1);</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; atomCountStack.template Pop&lt;unsigned&gt;(1);</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; ImplicitConcatenation(atomCountStack, operatorStack);</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160;</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; <span class="keywordflow">case</span> <span class="charliteral">&#39;?&#39;</span>:</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <span class="keywordflow">if</span> (!Eval(operandStack, kZeroOrOne))</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160;</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; <span class="keywordflow">case</span> <span class="charliteral">&#39;*&#39;</span>:</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; <span class="keywordflow">if</span> (!Eval(operandStack, kZeroOrMore))</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160;</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <span class="keywordflow">case</span> <span class="charliteral">&#39;+&#39;</span>:</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; <span class="keywordflow">if</span> (!Eval(operandStack, kOneOrMore))</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160;</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <span class="keywordflow">case</span> <span class="charliteral">&#39;{&#39;</span>:</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; {</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; <span class="keywordtype">unsigned</span> n, m;</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; <span class="keywordflow">if</span> (!ParseUnsigned(ds, &amp;n))</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160;</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; <span class="keywordflow">if</span> (ds.Peek() == <span class="charliteral">&#39;,&#39;</span>) {</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; ds.Take();</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; <span class="keywordflow">if</span> (ds.Peek() == <span class="charliteral">&#39;}&#39;</span>)</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; m = kInfinityQuantifier;</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!ParseUnsigned(ds, &amp;m) || m &lt; n)</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; }</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; m = n;</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160;</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; <span class="keywordflow">if</span> (!EvalQuantifier(operandStack, n, m) || ds.Peek() != <span class="charliteral">&#39;}&#39;</span>)</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; ds.Take();</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; }</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160;</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; <span class="keywordflow">case</span> <span class="charliteral">&#39;.&#39;</span>:</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; PushOperand(operandStack, kAnyCharacterClass);</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; ImplicitConcatenation(atomCountStack, operatorStack);</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160;</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; <span class="keywordflow">case</span> <span class="charliteral">&#39;[&#39;</span>:</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; {</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> range;</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; <span class="keywordflow">if</span> (!ParseRange(ds, &amp;range))</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> s = NewState(kRegexInvalidState, kRegexInvalidState, kRangeCharacterClass);</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; GetState(s).rangeStart = range;</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; *operandStack.template Push&lt;Frag&gt;() = Frag(s, s, s);</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; }</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; ImplicitConcatenation(atomCountStack, operatorStack);</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160;</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; <span class="keywordflow">case</span> <span class="charliteral">&#39;\\&#39;</span>: <span class="comment">// Escape character</span></div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; <span class="keywordflow">if</span> (!CharacterEscape(ds, &amp;codepoint))</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; <span class="keywordflow">return</span>; <span class="comment">// Unsupported escape character</span></div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; <span class="comment">// fall through to default</span></div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160;</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; <span class="keywordflow">default</span>: <span class="comment">// Pattern character</span></div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; PushOperand(operandStack, codepoint);</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; ImplicitConcatenation(atomCountStack, operatorStack);</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; }</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; }</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160;</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; <span class="keywordflow">while</span> (!operatorStack.Empty())</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; <span class="keywordflow">if</span> (!Eval(operandStack, *operatorStack.template Pop&lt;Operator&gt;(1)))</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160;</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; <span class="comment">// Link the operand to matching state.</span></div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; <span class="keywordflow">if</span> (operandStack.GetSize() == <span class="keyword">sizeof</span>(Frag)) {</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; Frag* e = operandStack.template Pop&lt;Frag&gt;(1);</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; Patch(e-&gt;out, NewState(kRegexInvalidState, kRegexInvalidState, 0));</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; root_ = e-&gt;start;</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160;</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160;<span class="preprocessor">#if RAPIDJSON_REGEX_VERBOSE</span></div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; printf(<span class="stringliteral">&quot;root: %d\n&quot;</span>, root_);</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> i = 0; i &lt; stateCount_ ; i++) {</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; State&amp; s = GetState(i);</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; printf(<span class="stringliteral">&quot;[%2d] out: %2d out1: %2d c: &#39;%c&#39;\n&quot;</span>, i, s.out, s.out1, (<span class="keywordtype">char</span>)s.codepoint);</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; }</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; printf(<span class="stringliteral">&quot;\n&quot;</span>);</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; }</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; }</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160;</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> NewState(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> out, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> out1, <span class="keywordtype">unsigned</span> codepoint) {</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; State* s = states_.template Push&lt;State&gt;();</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; s-&gt;out = out;</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; s-&gt;out1 = out1;</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; s-&gt;codepoint = codepoint;</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; s-&gt;rangeStart = kRegexInvalidRange;</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; <span class="keywordflow">return</span> stateCount_++;</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; }</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160;</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; <span class="keywordtype">void</span> PushOperand(Stack&lt;Allocator&gt;&amp; operandStack, <span class="keywordtype">unsigned</span> codepoint) {</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> s = NewState(kRegexInvalidState, kRegexInvalidState, codepoint);</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; *operandStack.template Push&lt;Frag&gt;() = Frag(s, s, s);</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; }</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160;</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; <span class="keywordtype">void</span> ImplicitConcatenation(Stack&lt;Allocator&gt;&amp; atomCountStack, Stack&lt;Allocator&gt;&amp; operatorStack) {</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; <span class="keywordflow">if</span> (*atomCountStack.template Top&lt;unsigned&gt;())</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; *operatorStack.template Push&lt;Operator&gt;() = kConcatenation;</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; (*atomCountStack.template Top&lt;unsigned&gt;())++;</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; }</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160;</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> Append(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> l1, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> l2) {</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> old = l1;</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; <span class="keywordflow">while</span> (GetState(l1).out != kRegexInvalidState)</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; l1 = GetState(l1).out;</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; GetState(l1).out = l2;</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; <span class="keywordflow">return</span> old;</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; }</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160;</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; <span class="keywordtype">void</span> Patch(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> l, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> s) {</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> next; l != kRegexInvalidState; l = next) {</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; next = GetState(l).out;</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; GetState(l).out = s;</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; }</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; }</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160;</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; <span class="keywordtype">bool</span> Eval(Stack&lt;Allocator&gt;&amp; operandStack, Operator op) {</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; <span class="keywordflow">switch</span> (op) {</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; <span class="keywordflow">case</span> kConcatenation:</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(operandStack.GetSize() &gt;= <span class="keyword">sizeof</span>(Frag) * 2);</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; {</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; Frag e2 = *operandStack.template Pop&lt;Frag&gt;(1);</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; Frag e1 = *operandStack.template Pop&lt;Frag&gt;(1);</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; Patch(e1.out, e2.start);</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; *operandStack.template Push&lt;Frag&gt;() = Frag(e1.start, e2.out, Min(e1.minIndex, e2.minIndex));</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; }</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160;</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; <span class="keywordflow">case</span> kAlternation:</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; <span class="keywordflow">if</span> (operandStack.GetSize() &gt;= <span class="keyword">sizeof</span>(Frag) * 2) {</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; Frag e2 = *operandStack.template Pop&lt;Frag&gt;(1);</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; Frag e1 = *operandStack.template Pop&lt;Frag&gt;(1);</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> s = NewState(e1.start, e2.start, 0);</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; *operandStack.template Push&lt;Frag&gt;() = Frag(s, Append(e1.out, e2.out), Min(e1.minIndex, e2.minIndex));</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; }</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160;</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; <span class="keywordflow">case</span> kZeroOrOne:</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; <span class="keywordflow">if</span> (operandStack.GetSize() &gt;= <span class="keyword">sizeof</span>(Frag)) {</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; Frag e = *operandStack.template Pop&lt;Frag&gt;(1);</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> s = NewState(kRegexInvalidState, e.start, 0);</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; *operandStack.template Push&lt;Frag&gt;() = Frag(s, Append(e.out, s), e.minIndex);</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; }</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160;</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; <span class="keywordflow">case</span> kZeroOrMore:</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; <span class="keywordflow">if</span> (operandStack.GetSize() &gt;= <span class="keyword">sizeof</span>(Frag)) {</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; Frag e = *operandStack.template Pop&lt;Frag&gt;(1);</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> s = NewState(kRegexInvalidState, e.start, 0);</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; Patch(e.out, s);</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; *operandStack.template Push&lt;Frag&gt;() = Frag(s, s, e.minIndex);</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; }</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160;</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; <span class="keywordflow">default</span>: </div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(op == kOneOrMore);</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; <span class="keywordflow">if</span> (operandStack.GetSize() &gt;= <span class="keyword">sizeof</span>(Frag)) {</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; Frag e = *operandStack.template Pop&lt;Frag&gt;(1);</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> s = NewState(kRegexInvalidState, e.start, 0);</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; Patch(e.out, s);</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; *operandStack.template Push&lt;Frag&gt;() = Frag(e.start, s, e.minIndex);</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; }</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; }</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; }</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160;</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; <span class="keywordtype">bool</span> EvalQuantifier(Stack&lt;Allocator&gt;&amp; operandStack, <span class="keywordtype">unsigned</span> n, <span class="keywordtype">unsigned</span> m) {</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(n &lt;= m);</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(operandStack.GetSize() &gt;= <span class="keyword">sizeof</span>(Frag));</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160;</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; <span class="keywordflow">if</span> (n == 0) {</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; <span class="keywordflow">if</span> (m == 0) <span class="comment">// a{0} not support</span></div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (m == kInfinityQuantifier)</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; Eval(operandStack, kZeroOrMore); <span class="comment">// a{0,} -&gt; a*</span></div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; <span class="keywordflow">else</span> {</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; Eval(operandStack, kZeroOrOne); <span class="comment">// a{0,5} -&gt; a?</span></div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i &lt; m - 1; i++)</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; CloneTopOperand(operandStack); <span class="comment">// a{0,5} -&gt; a? a? a? a? a?</span></div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i &lt; m - 1; i++)</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; Eval(operandStack, kConcatenation); <span class="comment">// a{0,5} -&gt; a?a?a?a?a?</span></div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; }</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; }</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160;</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i &lt; n - 1; i++) <span class="comment">// a{3} -&gt; a a a</span></div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; CloneTopOperand(operandStack);</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160;</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; <span class="keywordflow">if</span> (m == kInfinityQuantifier)</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; Eval(operandStack, kOneOrMore); <span class="comment">// a{3,} -&gt; a a a+</span></div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (m &gt; n) {</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; CloneTopOperand(operandStack); <span class="comment">// a{3,5} -&gt; a a a a</span></div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; Eval(operandStack, kZeroOrOne); <span class="comment">// a{3,5} -&gt; a a a a?</span></div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = n; i &lt; m - 1; i++)</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; CloneTopOperand(operandStack); <span class="comment">// a{3,5} -&gt; a a a a? a?</span></div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = n; i &lt; m; i++)</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; Eval(operandStack, kConcatenation); <span class="comment">// a{3,5} -&gt; a a aa?a?</span></div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; }</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160;</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i &lt; n - 1; i++)</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; Eval(operandStack, kConcatenation); <span class="comment">// a{3} -&gt; aaa, a{3,} -&gt; aaa+, a{3.5} -&gt; aaaa?a?</span></div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160;</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; }</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160;</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; <span class="keyword">static</span> <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> Min(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> a, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> b) { <span class="keywordflow">return</span> a &lt; b ? a : b; }</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160;</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; <span class="keywordtype">void</span> CloneTopOperand(Stack&lt;Allocator&gt;&amp; operandStack) {</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; <span class="keyword">const</span> Frag src = *operandStack.template Top&lt;Frag&gt;(); <span class="comment">// Copy constructor to prevent invalidation</span></div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> count = stateCount_ - src.minIndex; <span class="comment">// Assumes top operand contains states in [src-&gt;minIndex, stateCount_)</span></div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; State* s = states_.template Push&lt;State&gt;(count);</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; memcpy(s, &amp;GetState(src.minIndex), count * <span class="keyword">sizeof</span>(State));</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> j = 0; j &lt; count; j++) {</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; <span class="keywordflow">if</span> (s[j].out != kRegexInvalidState)</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160; s[j].out += count;</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160; <span class="keywordflow">if</span> (s[j].out1 != kRegexInvalidState)</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; s[j].out1 += count;</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; }</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; *operandStack.template Push&lt;Frag&gt;() = Frag(src.start + count, src.out + count, src.minIndex + count);</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; stateCount_ += count;</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; }</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160;</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> InputStream&gt;</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; <span class="keywordtype">bool</span> ParseUnsigned(DecodedStream&lt;InputStream, Encoding&gt;&amp; ds, <span class="keywordtype">unsigned</span>* u) {</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; <span class="keywordtype">unsigned</span> r = 0;</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; <span class="keywordflow">if</span> (ds.Peek() &lt; <span class="charliteral">&#39;0&#39;</span> || ds.Peek() &gt; <span class="charliteral">&#39;9&#39;</span>)</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; <span class="keywordflow">while</span> (ds.Peek() &gt;= <span class="charliteral">&#39;0&#39;</span> &amp;&amp; ds.Peek() &lt;= <span class="charliteral">&#39;9&#39;</span>) {</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; <span class="keywordflow">if</span> (r &gt;= 429496729 &amp;&amp; ds.Peek() &gt; <span class="charliteral">&#39;5&#39;</span>) <span class="comment">// 2^32 - 1 = 4294967295</span></div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>; <span class="comment">// overflow</span></div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; r = r * 10 + (ds.Take() - <span class="charliteral">&#39;0&#39;</span>);</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; }</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; *u = r;</div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; }</div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160;</div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> InputStream&gt;</div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160; <span class="keywordtype">bool</span> ParseRange(DecodedStream&lt;InputStream, Encoding&gt;&amp; ds, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a>* range) {</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160; <span class="keywordtype">bool</span> isBegin = <span class="keyword">true</span>;</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; <span class="keywordtype">bool</span> negate = <span class="keyword">false</span>;</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; <span class="keywordtype">int</span> step = 0;</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> start = kRegexInvalidRange;</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> current = kRegexInvalidRange;</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; <span class="keywordtype">unsigned</span> codepoint;</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; <span class="keywordflow">while</span> ((codepoint = ds.Take()) != 0) {</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; <span class="keywordflow">if</span> (isBegin) {</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; isBegin = <span class="keyword">false</span>;</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; <span class="keywordflow">if</span> (codepoint == <span class="charliteral">&#39;^&#39;</span>) {</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; negate = <span class="keyword">true</span>;</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; }</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; }</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160;</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; <span class="keywordflow">switch</span> (codepoint) {</div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160; <span class="keywordflow">case</span> <span class="charliteral">&#39;]&#39;</span>:</div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; <span class="keywordflow">if</span> (start == kRegexInvalidRange)</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>; <span class="comment">// Error: nothing inside []</span></div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; <span class="keywordflow">if</span> (step == 2) { <span class="comment">// Add trailing &#39;-&#39;</span></div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> r = NewRange(<span class="charliteral">&#39;-&#39;</span>);</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(current != kRegexInvalidRange);</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; GetRange(current).next = r;</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; }</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; <span class="keywordflow">if</span> (negate)</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; GetRange(start).start |= kRangeNegationFlag;</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; *range = start;</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160;</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160; <span class="keywordflow">case</span> <span class="charliteral">&#39;\\&#39;</span>:</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; <span class="keywordflow">if</span> (ds.Peek() == <span class="charliteral">&#39;b&#39;</span>) {</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; ds.Take();</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; codepoint = 0x0008; <span class="comment">// Escape backspace character</span></div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; }</div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!CharacterEscape(ds, &amp;codepoint))</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; <span class="comment">// fall through to default</span></div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160;</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; <span class="keywordflow">switch</span> (step) {</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; <span class="keywordflow">case</span> 1:</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; <span class="keywordflow">if</span> (codepoint == <span class="charliteral">&#39;-&#39;</span>) {</div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160; step++;</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; }</div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; <span class="comment">// fall through to step 0 for other characters</span></div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160;</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; <span class="keywordflow">case</span> 0:</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; {</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> r = NewRange(codepoint);</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; <span class="keywordflow">if</span> (current != kRegexInvalidRange)</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; GetRange(current).next = r;</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; <span class="keywordflow">if</span> (start == kRegexInvalidRange)</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; start = r;</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; current = r;</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; }</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; step = 1;</div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160;</div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(step == 2);</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; GetRange(current).end = codepoint;</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; step = 0;</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160; }</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160; }</div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160; }</div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160; }</div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; </div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> NewRange(<span class="keywordtype">unsigned</span> codepoint) {</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160; Range* r = ranges_.template Push&lt;Range&gt;();</div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160; r-&gt;start = r-&gt;end = codepoint;</div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160; r-&gt;next = kRegexInvalidRange;</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; <span class="keywordflow">return</span> rangeCount_++;</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; }</div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160;</div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> InputStream&gt;</div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160; <span class="keywordtype">bool</span> CharacterEscape(DecodedStream&lt;InputStream, Encoding&gt;&amp; ds, <span class="keywordtype">unsigned</span>* escapedCodepoint) {</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160; <span class="keywordtype">unsigned</span> codepoint;</div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; <span class="keywordflow">switch</span> (codepoint = ds.Take()) {</div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; <span class="keywordflow">case</span> <span class="charliteral">&#39;^&#39;</span>:</div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160; <span class="keywordflow">case</span> <span class="charliteral">&#39;$&#39;</span>:</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160; <span class="keywordflow">case</span> <span class="charliteral">&#39;|&#39;</span>:</div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; <span class="keywordflow">case</span> <span class="charliteral">&#39;(&#39;</span>:</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; <span class="keywordflow">case</span> <span class="charliteral">&#39;)&#39;</span>:</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; <span class="keywordflow">case</span> <span class="charliteral">&#39;?&#39;</span>:</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; <span class="keywordflow">case</span> <span class="charliteral">&#39;*&#39;</span>:</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; <span class="keywordflow">case</span> <span class="charliteral">&#39;+&#39;</span>:</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; <span class="keywordflow">case</span> <span class="charliteral">&#39;.&#39;</span>:</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160; <span class="keywordflow">case</span> <span class="charliteral">&#39;[&#39;</span>:</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; <span class="keywordflow">case</span> <span class="charliteral">&#39;]&#39;</span>:</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; <span class="keywordflow">case</span> <span class="charliteral">&#39;{&#39;</span>:</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; <span class="keywordflow">case</span> <span class="charliteral">&#39;}&#39;</span>:</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160; <span class="keywordflow">case</span> <span class="charliteral">&#39;\\&#39;</span>:</div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160; *escapedCodepoint = codepoint; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160; <span class="keywordflow">case</span> <span class="charliteral">&#39;f&#39;</span>: *escapedCodepoint = 0x000C; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160; <span class="keywordflow">case</span> <span class="charliteral">&#39;n&#39;</span>: *escapedCodepoint = 0x000A; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; <span class="keywordflow">case</span> <span class="charliteral">&#39;r&#39;</span>: *escapedCodepoint = 0x000D; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; <span class="keywordflow">case</span> <span class="charliteral">&#39;t&#39;</span>: *escapedCodepoint = 0x0009; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; <span class="keywordflow">case</span> <span class="charliteral">&#39;v&#39;</span>: *escapedCodepoint = 0x000B; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>; <span class="comment">// Unsupported escape character</span></div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160; }</div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; }</div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160;</div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160; Stack&lt;Allocator&gt; states_;</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160; Stack&lt;Allocator&gt; ranges_;</div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160; <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> root_;</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> stateCount_;</div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> rangeCount_;</div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160;</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> kInfinityQuantifier = ~0u;</div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160;</div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; <span class="comment">// For SearchWithAnchoring()</span></div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; <span class="keywordtype">bool</span> anchorBegin_;</div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; <span class="keywordtype">bool</span> anchorEnd_;</div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160;};</div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160;</div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> RegexType, <span class="keyword">typename</span> Allocator = CrtAllocator&gt;</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160;<span class="keyword">class </span>GenericRegexSearch {</div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160; <span class="keyword">typedef</span> <span class="keyword">typename</span> RegexType::EncodingType Encoding;</div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; <span class="keyword">typedef</span> <span class="keyword">typename</span> Encoding::Ch Ch;</div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160;</div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160; GenericRegexSearch(<span class="keyword">const</span> RegexType&amp; regex, Allocator* allocator = 0) : </div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; regex_(regex), allocator_(allocator), ownAllocator_(0),</div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; state0_(allocator, 0), state1_(allocator, 0), stateSet_()</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; {</div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(regex_.IsValid());</div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160; <span class="keywordflow">if</span> (!allocator_)</div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160; ownAllocator_ = allocator_ = <a class="code" href="rapidjson_8h.html#abdc7cd7902748ffe6626d71c59a73c3b">RAPIDJSON_NEW</a>(Allocator)();</div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160; stateSet_ = <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span>*<span class="keyword">&gt;</span>(allocator_-&gt;Malloc(GetStateSetSize()));</div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160; state0_.template Reserve&lt;SizeType&gt;(regex_.stateCount_);</div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160; state1_.template Reserve&lt;SizeType&gt;(regex_.stateCount_);</div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160; }</div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160;</div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160; ~GenericRegexSearch() {</div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160; Allocator::Free(stateSet_);</div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160; <a class="code" href="rapidjson_8h.html#a52c941c3fdd646527cdcd42aa846a28a">RAPIDJSON_DELETE</a>(ownAllocator_);</div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160; }</div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160;</div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> InputStream&gt;</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160; <span class="keywordtype">bool</span> Match(InputStream&amp; is) {</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160; <span class="keywordflow">return</span> SearchWithAnchoring(is, <span class="keyword">true</span>, <span class="keyword">true</span>);</div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160; }</div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160;</div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160; <span class="keywordtype">bool</span> Match(<span class="keyword">const</span> Ch* s) {</div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160; GenericStringStream&lt;Encoding&gt; is(s);</div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160; <span class="keywordflow">return</span> Match(is);</div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160; }</div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160;</div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> InputStream&gt;</div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160; <span class="keywordtype">bool</span> Search(InputStream&amp; is) {</div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160; <span class="keywordflow">return</span> SearchWithAnchoring(is, regex_.anchorBegin_, regex_.anchorEnd_);</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160; }</div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160;</div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160; <span class="keywordtype">bool</span> Search(<span class="keyword">const</span> Ch* s) {</div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160; GenericStringStream&lt;Encoding&gt; is(s);</div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160; <span class="keywordflow">return</span> Search(is);</div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160; }</div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160;</div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160; <span class="keyword">typedef</span> <span class="keyword">typename</span> RegexType::State State;</div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160; <span class="keyword">typedef</span> <span class="keyword">typename</span> RegexType::Range Range;</div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160;</div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> InputStream&gt;</div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160; <span class="keywordtype">bool</span> SearchWithAnchoring(InputStream&amp; is, <span class="keywordtype">bool</span> anchorBegin, <span class="keywordtype">bool</span> anchorEnd) {</div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; DecodedStream&lt;InputStream, Encoding&gt; ds(is);</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160;</div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160; state0_.Clear();</div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; Stack&lt;Allocator&gt; *current = &amp;state0_, *next = &amp;state1_;</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160; <span class="keyword">const</span> <span class="keywordtype">size_t</span> stateSetSize = GetStateSetSize();</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160; std::memset(stateSet_, 0, stateSetSize);</div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160;</div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160; <span class="keywordtype">bool</span> matched = AddState(*current, regex_.root_);</div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; <span class="keywordtype">unsigned</span> codepoint;</div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; <span class="keywordflow">while</span> (!current-&gt;Empty() &amp;&amp; (codepoint = ds.Take()) != 0) {</div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160; std::memset(stateSet_, 0, stateSetSize);</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160; next-&gt;Clear();</div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; matched = <span class="keyword">false</span>;</div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a>* s = current-&gt;template Bottom&lt;SizeType&gt;(); s != current-&gt;template End&lt;SizeType&gt;(); ++s) {</div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160; <span class="keyword">const</span> State&amp; sr = regex_.GetState(*s);</div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160; <span class="keywordflow">if</span> (sr.codepoint == codepoint ||</div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160; sr.codepoint == RegexType::kAnyCharacterClass || </div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160; (sr.codepoint == RegexType::kRangeCharacterClass &amp;&amp; MatchRange(sr.rangeStart, codepoint)))</div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160; {</div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160; matched = AddState(*next, sr.out) || matched;</div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160; <span class="keywordflow">if</span> (!anchorEnd &amp;&amp; matched)</div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160; }</div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160; <span class="keywordflow">if</span> (!anchorBegin)</div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160; AddState(*next, regex_.root_);</div><div class="line"><a name="l00672"></a><span class="lineno"> 672</span>&#160; }</div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160; internal::Swap(current, next);</div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160; }</div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160;</div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160; <span class="keywordflow">return</span> matched;</div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160; }</div><div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160;</div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160; <span class="keywordtype">size_t</span> GetStateSetSize()<span class="keyword"> const </span>{</div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160; <span class="keywordflow">return</span> (regex_.stateCount_ + 31) / 32 * 4;</div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160; }</div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160;</div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160; <span class="comment">// Return whether the added states is a match state</span></div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160; <span class="keywordtype">bool</span> AddState(Stack&lt;Allocator&gt;&amp; l, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> index) {</div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(index != kRegexInvalidState);</div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160;</div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160; <span class="keyword">const</span> State&amp; s = regex_.GetState(index);</div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160; <span class="keywordflow">if</span> (s.out1 != kRegexInvalidState) { <span class="comment">// Split</span></div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160; <span class="keywordtype">bool</span> matched = AddState(l, s.out);</div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160; <span class="keywordflow">return</span> AddState(l, s.out1) || matched;</div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160; }</div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!(stateSet_[index &gt;&gt; 5] &amp; (1u &lt;&lt; (index &amp; 31)))) {</div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160; stateSet_[index &gt;&gt; 5] |= (1u &lt;&lt; (index &amp; 31));</div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160; *l.template PushUnsafe&lt;SizeType&gt;() = index;</div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160; }</div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160; <span class="keywordflow">return</span> s.out == kRegexInvalidState; <span class="comment">// by using PushUnsafe() above, we can ensure s is not validated due to reallocation.</span></div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160; }</div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160;</div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160; <span class="keywordtype">bool</span> MatchRange(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> rangeIndex, <span class="keywordtype">unsigned</span> codepoint)<span class="keyword"> const </span>{</div><div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160; <span class="keywordtype">bool</span> yes = (regex_.GetRange(rangeIndex).start &amp; RegexType::kRangeNegationFlag) == 0;</div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span>&#160; <span class="keywordflow">while</span> (rangeIndex != kRegexInvalidRange) {</div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160; <span class="keyword">const</span> Range&amp; r = regex_.GetRange(rangeIndex);</div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160; <span class="keywordflow">if</span> (codepoint &gt;= (r.start &amp; ~RegexType::kRangeNegationFlag) &amp;&amp; codepoint &lt;= r.end)</div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160; <span class="keywordflow">return</span> yes;</div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160; rangeIndex = r.next;</div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160; }</div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160; <span class="keywordflow">return</span> !yes;</div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160; }</div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160;</div><div class="line"><a name="l00710"></a><span class="lineno"> 710</span>&#160; <span class="keyword">const</span> RegexType&amp; regex_;</div><div class="line"><a name="l00711"></a><span class="lineno"> 711</span>&#160; Allocator* allocator_;</div><div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160; Allocator* ownAllocator_;</div><div class="line"><a name="l00713"></a><span class="lineno"> 713</span>&#160; Stack&lt;Allocator&gt; state0_;</div><div class="line"><a name="l00714"></a><span class="lineno"> 714</span>&#160; Stack&lt;Allocator&gt; state1_;</div><div class="line"><a name="l00715"></a><span class="lineno"> 715</span>&#160; uint32_t* stateSet_;</div><div class="line"><a name="l00716"></a><span class="lineno"> 716</span>&#160;};</div><div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160;</div><div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160;<span class="keyword">typedef</span> GenericRegex&lt;UTF8&lt;&gt; &gt; Regex;</div><div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160;<span class="keyword">typedef</span> GenericRegexSearch&lt;Regex&gt; RegexSearch;</div><div class="line"><a name="l00720"></a><span class="lineno"> 720</span>&#160;</div><div class="line"><a name="l00721"></a><span class="lineno"> 721</span>&#160;} <span class="comment">// namespace internal</span></div><div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160;RAPIDJSON_NAMESPACE_END</div><div class="line"><a name="l00723"></a><span class="lineno"> 723</span>&#160;</div><div class="line"><a name="l00724"></a><span class="lineno"> 724</span>&#160;<span class="preprocessor">#ifdef __GNUC__</span></div><div class="line"><a name="l00725"></a><span class="lineno"> 725</span>&#160;RAPIDJSON_DIAG_POP</div><div class="line"><a name="l00726"></a><span class="lineno"> 726</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00727"></a><span class="lineno"> 727</span>&#160;</div><div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160;<span class="preprocessor">#if defined(__clang__) || defined(_MSC_VER)</span></div><div class="line"><a name="l00729"></a><span class="lineno"> 729</span>&#160;RAPIDJSON_DIAG_POP</div><div class="line"><a name="l00730"></a><span class="lineno"> 730</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00731"></a><span class="lineno"> 731</span>&#160;</div><div class="line"><a name="l00732"></a><span class="lineno"> 732</span>&#160;<span class="preprocessor">#endif // RAPIDJSON_INTERNAL_REGEX_H_</span></div><div class="ttc" id="namespacerapidjson_html_a44eb33eaa523e36d466b1ced64b85c84"><div class="ttname"><a href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">rapidjson::SizeType</a></div><div class="ttdeci">unsigned SizeType</div><div class="ttdoc">Size type (for string lengths, array sizes, etc.) </div><div class="ttdef"><b>Definition:</b> rapidjson.h:384</div></div>
-<div class="ttc" id="rapidjson_8h_html_abdc7cd7902748ffe6626d71c59a73c3b"><div class="ttname"><a href="rapidjson_8h.html#abdc7cd7902748ffe6626d71c59a73c3b">RAPIDJSON_NEW</a></div><div class="ttdeci">#define RAPIDJSON_NEW(TypeName)</div><div class="ttdoc">! customization point for global new </div><div class="ttdef"><b>Definition:</b> rapidjson.h:614</div></div>
-<div class="ttc" id="rapidjson_8h_html_a52c941c3fdd646527cdcd42aa846a28a"><div class="ttname"><a href="rapidjson_8h.html#a52c941c3fdd646527cdcd42aa846a28a">RAPIDJSON_DELETE</a></div><div class="ttdeci">#define RAPIDJSON_DELETE(x)</div><div class="ttdoc">! customization point for global delete </div><div class="ttdef"><b>Definition:</b> rapidjson.h:618</div></div>
+<div class="ttc" id="rapidjson_8h_html_abdc7cd7902748ffe6626d71c59a73c3b"><div class="ttname"><a href="rapidjson_8h.html#abdc7cd7902748ffe6626d71c59a73c3b">RAPIDJSON_NEW</a></div><div class="ttdeci">#define RAPIDJSON_NEW(TypeName)</div><div class="ttdoc">! customization point for global new </div><div class="ttdef"><b>Definition:</b> rapidjson.h:625</div></div>
+<div class="ttc" id="rapidjson_8h_html_a52c941c3fdd646527cdcd42aa846a28a"><div class="ttname"><a href="rapidjson_8h.html#a52c941c3fdd646527cdcd42aa846a28a">RAPIDJSON_DELETE</a></div><div class="ttdeci">#define RAPIDJSON_DELETE(x)</div><div class="ttdoc">! customization point for global delete </div><div class="ttdef"><b>Definition:</b> rapidjson.h:629</div></div>
<div class="ttc" id="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g_html_gabeba18d612187bad2ac62aed9276d47c"><div class="ttname"><a href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a></div><div class="ttdeci">#define RAPIDJSON_ASSERT(x)</div><div class="ttdoc">Assertion. </div><div class="ttdef"><b>Definition:</b> rapidjson.h:406</div></div>
</div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->
diff --git a/zh-cn/schema_8h_source.html b/zh-cn/schema_8h_source.html
index 03f8151b..6488d644 100644
--- a/zh-cn/schema_8h_source.html
+++ b/zh-cn/schema_8h_source.html
@@ -82,58 +82,58 @@ $(document).ready(function(){initNavTree('schema_8h_source.html','');});
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">// Tencent is pleased to support the open source community by making RapidJSON available-&gt;</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">// </span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">// Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip-&gt; All rights reserved-&gt;</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment">// Licensed under the MIT License (the &quot;License&quot;); you may not use this file except</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment">// in compliance with the License-&gt; You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment">// http://opensource-&gt;org/licenses/MIT</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment">// Unless required by applicable law or agreed to in writing, software distributed </span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment">// under the License is distributed on an &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR </span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment">// CONDITIONS OF ANY KIND, either express or implied-&gt; See the License for the </span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment">// specific language governing permissions and limitations under the License-&gt;</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;</div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#ifndef RAPIDJSON_SCHEMA_H_</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#define RAPIDJSON_SCHEMA_H_</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="document_8h.html">document.h</a>&quot;</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="preprocessor">#include &quot;pointer.h&quot;</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#include &quot;stringbuffer.h&quot;</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="preprocessor">#include &lt;cmath&gt;</span> <span class="comment">// abs, floor</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#if !defined(RAPIDJSON_SCHEMA_USE_INTERNALREGEX)</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#define RAPIDJSON_SCHEMA_USE_INTERNALREGEX 1</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#define RAPIDJSON_SCHEMA_USE_INTERNALREGEX 0</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="preprocessor">#if !RAPIDJSON_SCHEMA_USE_INTERNALREGEX &amp;&amp; defined(RAPIDJSON_SCHEMA_USE_STDREGEX) &amp;&amp; (__cplusplus &gt;=201103L || (defined(_MSC_VER) &amp;&amp; _MSC_VER &gt;= 1800))</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="preprocessor">#define RAPIDJSON_SCHEMA_USE_STDREGEX 1</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="preprocessor">#define RAPIDJSON_SCHEMA_USE_STDREGEX 0</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="preprocessor">#if RAPIDJSON_SCHEMA_USE_INTERNALREGEX</span></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="preprocessor">#include &quot;internal/regex.h&quot;</span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;<span class="preprocessor">#elif RAPIDJSON_SCHEMA_USE_STDREGEX</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;<span class="preprocessor">#include &lt;regex&gt;</span></div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;<span class="preprocessor">#if RAPIDJSON_SCHEMA_USE_INTERNALREGEX || RAPIDJSON_SCHEMA_USE_STDREGEX</span></div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;<span class="preprocessor">#define RAPIDJSON_SCHEMA_HAS_REGEX 1</span></div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;<span class="preprocessor">#define RAPIDJSON_SCHEMA_HAS_REGEX 0</span></div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;<span class="preprocessor">#ifndef RAPIDJSON_SCHEMA_VERBOSE</span></div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;<span class="preprocessor">#define RAPIDJSON_SCHEMA_VERBOSE 0</span></div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;<span class="preprocessor">#if RAPIDJSON_SCHEMA_VERBOSE</span></div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;<span class="preprocessor">#include &quot;stringbuffer.h&quot;</span></div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;RAPIDJSON_DIAG_PUSH</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;<span class="preprocessor">#if defined(__GNUC__)</span></div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;RAPIDJSON_DIAG_OFF(effc++)</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;<span class="preprocessor">#ifdef __clang__</span></div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;RAPIDJSON_DIAG_OFF(weak-vtables)</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;RAPIDJSON_DIAG_OFF(exit-time-destructors)</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;RAPIDJSON_DIAG_OFF(c++98-compat-pedantic)</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;RAPIDJSON_DIAG_OFF(variadic-macros)</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;<span class="preprocessor">#elif defined(_MSC_VER)</span></div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;RAPIDJSON_DIAG_OFF(4512) <span class="comment">// assignment operator could not be generated</span></div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;RAPIDJSON_NAMESPACE_BEGIN</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;<span class="comment"></span><span class="comment">// Verbose Utilities</span></div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;<span class="preprocessor">#if RAPIDJSON_SCHEMA_VERBOSE</span></div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;<span class="keyword">namespace </span>internal {</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160;</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;<span class="keyword">inline</span> <span class="keywordtype">void</span> PrintInvalidKeyword(<span class="keyword">const</span> <span class="keywordtype">char</span>* keyword) {</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; printf(<span class="stringliteral">&quot;Fail keyword: %s\n&quot;</span>, keyword);</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;}</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;<span class="keyword">inline</span> <span class="keywordtype">void</span> PrintInvalidKeyword(<span class="keyword">const</span> <span class="keywordtype">wchar_t</span>* keyword) {</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; wprintf(L<span class="stringliteral">&quot;Fail keyword: %ls\n&quot;</span>, keyword);</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160;}</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160;</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;<span class="keyword">inline</span> <span class="keywordtype">void</span> PrintInvalidDocument(<span class="keyword">const</span> <span class="keywordtype">char</span>* document) {</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; printf(<span class="stringliteral">&quot;Fail document: %s\n\n&quot;</span>, document);</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;}</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160;</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;<span class="keyword">inline</span> <span class="keywordtype">void</span> PrintInvalidDocument(<span class="keyword">const</span> <span class="keywordtype">wchar_t</span>* document) {</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; wprintf(L<span class="stringliteral">&quot;Fail document: %ls\n\n&quot;</span>, document);</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;}</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;<span class="keyword">inline</span> <span class="keywordtype">void</span> PrintValidatorPointers(<span class="keywordtype">unsigned</span> depth, <span class="keyword">const</span> <span class="keywordtype">char</span>* s, <span class="keyword">const</span> <span class="keywordtype">char</span>* d) {</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; printf(<span class="stringliteral">&quot;S: %*s%s\nD: %*s%s\n\n&quot;</span>, depth * 4, <span class="stringliteral">&quot; &quot;</span>, s, depth * 4, <span class="stringliteral">&quot; &quot;</span>, d);</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;}</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160;<span class="keyword">inline</span> <span class="keywordtype">void</span> PrintValidatorPointers(<span class="keywordtype">unsigned</span> depth, <span class="keyword">const</span> <span class="keywordtype">wchar_t</span>* s, <span class="keyword">const</span> <span class="keywordtype">wchar_t</span>* d) {</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; wprintf(L<span class="stringliteral">&quot;S: %*ls%ls\nD: %*ls%ls\n\n&quot;</span>, depth * 4, L<span class="stringliteral">&quot; &quot;</span>, s, depth * 4, L<span class="stringliteral">&quot; &quot;</span>, d);</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160;}</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160;</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160;} <span class="comment">// namespace internal</span></div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160;</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160;<span class="preprocessor">#endif // RAPIDJSON_SCHEMA_VERBOSE</span></div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160;<span class="comment"></span><span class="comment">// RAPIDJSON_INVALID_KEYWORD_RETURN</span></div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160;</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160;<span class="preprocessor">#if RAPIDJSON_SCHEMA_VERBOSE</span></div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160;<span class="preprocessor">#define RAPIDJSON_INVALID_KEYWORD_VERBOSE(keyword) internal::PrintInvalidKeyword(keyword)</span></div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160;<span class="preprocessor">#define RAPIDJSON_INVALID_KEYWORD_VERBOSE(keyword)</span></div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160;</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160;<span class="preprocessor">#define RAPIDJSON_INVALID_KEYWORD_RETURN(keyword)\</span></div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160;<span class="preprocessor">RAPIDJSON_MULTILINEMACRO_BEGIN\</span></div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160;<span class="preprocessor"> context.invalidKeyword = keyword.GetString();\</span></div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160;<span class="preprocessor"> RAPIDJSON_INVALID_KEYWORD_VERBOSE(keyword.GetString());\</span></div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160;<span class="preprocessor"> return false;\</span></div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160;<span class="preprocessor">RAPIDJSON_MULTILINEMACRO_END</span></div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160;<span class="comment"></span><span class="comment">// Forward declarations</span></div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160;</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> ValueType, <span class="keyword">typename</span> Allocator&gt;</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160;<span class="keyword">class </span>GenericSchemaDocument;</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160;</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160;<span class="keyword">namespace </span>internal {</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160;</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> SchemaDocumentType&gt;</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160;<span class="keyword">class </span>Schema;</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160;<span class="comment"></span><span class="comment">// ISchemaValidator</span></div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160;</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160;<span class="keyword">class </span>ISchemaValidator {</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <span class="keyword">virtual</span> ~ISchemaValidator() {}</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> IsValid() <span class="keyword">const</span> = 0;</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160;};</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160;<span class="comment"></span><span class="comment">// ISchemaStateFactory</span></div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160;</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> SchemaType&gt;</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160;<span class="keyword">class </span>ISchemaStateFactory {</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <span class="keyword">virtual</span> ~ISchemaStateFactory() {}</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="keyword">virtual</span> ISchemaValidator* CreateSchemaValidator(<span class="keyword">const</span> SchemaType&amp;) = 0;</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> DestroySchemaValidator(ISchemaValidator* validator) = 0;</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span>* CreateHasher() = 0;</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <span class="keyword">virtual</span> uint64_t GetHashCode(<span class="keywordtype">void</span>* hasher) = 0;</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> DestroryHasher(<span class="keywordtype">void</span>* hasher) = 0;</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span>* MallocState(<span class="keywordtype">size_t</span> size) = 0;</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> FreeState(<span class="keywordtype">void</span>* p) = 0;</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160;};</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160;<span class="comment"></span><span class="comment">// IValidationErrorHandler</span></div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160;</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> SchemaType&gt;</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160;<span class="keyword">class </span>IValidationErrorHandler {</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; <span class="keyword">typedef</span> <span class="keyword">typename</span> SchemaType::Ch Ch;</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; <span class="keyword">typedef</span> <span class="keyword">typename</span> SchemaType::SValue SValue;</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160;</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <span class="keyword">virtual</span> ~IValidationErrorHandler() {}</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160;</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> NotMultipleOf(int64_t actual, <span class="keyword">const</span> SValue&amp; expected) = 0;</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> NotMultipleOf(uint64_t actual, <span class="keyword">const</span> SValue&amp; expected) = 0;</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> NotMultipleOf(<span class="keywordtype">double</span> actual, <span class="keyword">const</span> SValue&amp; expected) = 0;</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> AboveMaximum(int64_t actual, <span class="keyword">const</span> SValue&amp; expected, <span class="keywordtype">bool</span> exclusive) = 0;</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> AboveMaximum(uint64_t actual, <span class="keyword">const</span> SValue&amp; expected, <span class="keywordtype">bool</span> exclusive) = 0;</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> AboveMaximum(<span class="keywordtype">double</span> actual, <span class="keyword">const</span> SValue&amp; expected, <span class="keywordtype">bool</span> exclusive) = 0;</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> BelowMinimum(int64_t actual, <span class="keyword">const</span> SValue&amp; expected, <span class="keywordtype">bool</span> exclusive) = 0;</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> BelowMinimum(uint64_t actual, <span class="keyword">const</span> SValue&amp; expected, <span class="keywordtype">bool</span> exclusive) = 0;</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> BelowMinimum(<span class="keywordtype">double</span> actual, <span class="keyword">const</span> SValue&amp; expected, <span class="keywordtype">bool</span> exclusive) = 0;</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160;</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> TooLong(<span class="keyword">const</span> Ch* str, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> length, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> expected) = 0;</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> TooShort(<span class="keyword">const</span> Ch* str, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> length, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> expected) = 0;</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> DoesNotMatch(<span class="keyword">const</span> Ch* str, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> length) = 0;</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160;</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> DisallowedItem(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> index) = 0;</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> TooFewItems(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> actualCount, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> expectedCount) = 0;</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> TooManyItems(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> actualCount, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> expectedCount) = 0;</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> DuplicateItems(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> index1, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> index2) = 0;</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160;</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> TooManyProperties(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> actualCount, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> expectedCount) = 0;</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> TooFewProperties(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> actualCount, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> expectedCount) = 0;</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> StartMissingProperties() = 0;</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> AddMissingProperty(<span class="keyword">const</span> SValue&amp; name) = 0;</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> EndMissingProperties() = 0;</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> PropertyViolations(ISchemaValidator** subvalidators, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> count) = 0;</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> DisallowedProperty(<span class="keyword">const</span> Ch* name, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> length) = 0;</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160;</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> StartDependencyErrors() = 0;</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> StartMissingDependentProperties() = 0;</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> AddMissingDependentProperty(<span class="keyword">const</span> SValue&amp; targetName) = 0;</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> EndMissingDependentProperties(<span class="keyword">const</span> SValue&amp; sourceName) = 0;</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> AddDependencySchemaError(<span class="keyword">const</span> SValue&amp; souceName, ISchemaValidator* subvalidator) = 0;</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> EndDependencyErrors() = 0;</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160;</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> DisallowedValue() = 0;</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> StartDisallowedType() = 0;</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> AddExpectedType(<span class="keyword">const</span> <span class="keyword">typename</span> SchemaType::ValueType&amp; expectedType) = 0;</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> EndDisallowedType(<span class="keyword">const</span> <span class="keyword">typename</span> SchemaType::ValueType&amp; actualType) = 0;</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> NotAllOf(ISchemaValidator** subvalidators, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> count) = 0;</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> NoneOf(ISchemaValidator** subvalidators, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> count) = 0;</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> NotOneOf(ISchemaValidator** subvalidators, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> count) = 0;</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> Disallowed() = 0;</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160;};</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160;</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160;<span class="comment"></span><span class="comment">// Hasher</span></div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160;</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160;<span class="comment">// For comparison of compound value</span></div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> Encoding, <span class="keyword">typename</span> Allocator&gt;</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160;<span class="keyword">class </span>Hasher {</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <span class="keyword">typedef</span> <span class="keyword">typename</span> Encoding::Ch Ch;</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160;</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; Hasher(Allocator* allocator = 0, <span class="keywordtype">size_t</span> stackCapacity = kDefaultSize) : stack_(allocator, stackCapacity) {}</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160;</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <span class="keywordtype">bool</span> Null() { <span class="keywordflow">return</span> WriteType(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a952871e4326b527154fc8aac1ac1f6ff">kNullType</a>); }</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <span class="keywordtype">bool</span> Bool(<span class="keywordtype">bool</span> b) { <span class="keywordflow">return</span> WriteType(b ? <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a80d9f25b083abce45edbfdd3ba006c8e">kTrueType</a> : <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a9f2e7047832dce1029551b5de0f05607">kFalseType</a>); }</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; <span class="keywordtype">bool</span> Int(<span class="keywordtype">int</span> i) { Number n; n.u.i = i; n.d = <span class="keyword">static_cast&lt;</span><span class="keywordtype">double</span><span class="keyword">&gt;</span>(i); <span class="keywordflow">return</span> WriteNumber(n); }</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; <span class="keywordtype">bool</span> Uint(<span class="keywordtype">unsigned</span> u) { Number n; n.u.u = u; n.d = <span class="keyword">static_cast&lt;</span><span class="keywordtype">double</span><span class="keyword">&gt;</span>(u); <span class="keywordflow">return</span> WriteNumber(n); }</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; <span class="keywordtype">bool</span> Int64(int64_t i) { Number n; n.u.i = i; n.d = <span class="keyword">static_cast&lt;</span><span class="keywordtype">double</span><span class="keyword">&gt;</span>(i); <span class="keywordflow">return</span> WriteNumber(n); }</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; <span class="keywordtype">bool</span> Uint64(uint64_t u) { Number n; n.u.u = u; n.d = <span class="keyword">static_cast&lt;</span><span class="keywordtype">double</span><span class="keyword">&gt;</span>(u); <span class="keywordflow">return</span> WriteNumber(n); }</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; <span class="keywordtype">bool</span> Double(<span class="keywordtype">double</span> d) { </div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; Number n; </div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <span class="keywordflow">if</span> (d &lt; 0) n.u.i = <span class="keyword">static_cast&lt;</span>int64_t<span class="keyword">&gt;</span>(d);</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; <span class="keywordflow">else</span> n.u.u = <span class="keyword">static_cast&lt;</span>uint64_t<span class="keyword">&gt;</span>(d); </div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; n.d = d;</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <span class="keywordflow">return</span> WriteNumber(n);</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; }</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160;</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; <span class="keywordtype">bool</span> RawNumber(<span class="keyword">const</span> Ch* str, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> len, <span class="keywordtype">bool</span>) {</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; WriteBuffer(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a">kNumberType</a>, str, len * <span class="keyword">sizeof</span>(Ch));</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; }</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160;</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; <span class="keywordtype">bool</span> String(<span class="keyword">const</span> Ch* str, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> len, <span class="keywordtype">bool</span>) {</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; WriteBuffer(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4ad6379da3dc04b83a591992bfb9fabba7">kStringType</a>, str, len * <span class="keyword">sizeof</span>(Ch));</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; }</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160;</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; <span class="keywordtype">bool</span> StartObject() { <span class="keywordflow">return</span> <span class="keyword">true</span>; }</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; <span class="keywordtype">bool</span> Key(<span class="keyword">const</span> Ch* str, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> len, <span class="keywordtype">bool</span> copy) { <span class="keywordflow">return</span> String(str, len, copy); }</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; <span class="keywordtype">bool</span> EndObject(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> memberCount) { </div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; uint64_t h = Hash(0, <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4acf030b422a32c3647c7c5973bd4dd0a9">kObjectType</a>);</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; uint64_t* kv = stack_.template Pop&lt;uint64_t&gt;(memberCount * 2);</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> i = 0; i &lt; memberCount; i++)</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; h ^= Hash(kv[i * 2], kv[i * 2 + 1]); <span class="comment">// Use xor to achieve member order insensitive</span></div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; *stack_.template Push&lt;uint64_t&gt;() = h;</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; }</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; </div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; <span class="keywordtype">bool</span> StartArray() { <span class="keywordflow">return</span> <span class="keyword">true</span>; }</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; <span class="keywordtype">bool</span> EndArray(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> elementCount) { </div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; uint64_t h = Hash(0, <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a058c622e1e7d59419ae58b895cbce468">kArrayType</a>);</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; uint64_t* e = stack_.template Pop&lt;uint64_t&gt;(elementCount);</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> i = 0; i &lt; elementCount; i++)</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; h = Hash(h, e[i]); <span class="comment">// Use hash to achieve element order sensitive</span></div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; *stack_.template Push&lt;uint64_t&gt;() = h;</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; }</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160;</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; <span class="keywordtype">bool</span> IsValid()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> stack_.GetSize() == <span class="keyword">sizeof</span>(uint64_t); }</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160;</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; uint64_t GetHashCode()<span class="keyword"> const </span>{</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsValid());</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; <span class="keywordflow">return</span> *stack_.template Top&lt;uint64_t&gt;();</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; }</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160;</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">size_t</span> kDefaultSize = 256;</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; <span class="keyword">struct </span>Number {</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; <span class="keyword">union </span>U {</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; uint64_t u;</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; int64_t i;</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; }u;</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; <span class="keywordtype">double</span> d;</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; };</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160;</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; <span class="keywordtype">bool</span> WriteType(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">Type</a> type) { <span class="keywordflow">return</span> WriteBuffer(type, 0, 0); }</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; </div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; <span class="keywordtype">bool</span> WriteNumber(<span class="keyword">const</span> Number&amp; n) { <span class="keywordflow">return</span> WriteBuffer(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a">kNumberType</a>, &amp;n, <span class="keyword">sizeof</span>(n)); }</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; </div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; <span class="keywordtype">bool</span> WriteBuffer(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">Type</a> type, <span class="keyword">const</span> <span class="keywordtype">void</span>* data, <span class="keywordtype">size_t</span> len) {</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; <span class="comment">// FNV-1a from http://isthe.com/chongo/tech/comp/fnv/</span></div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; uint64_t h = Hash(<a class="code" href="rapidjson_8h.html#aaee1245f375a71be1ac9b8a07ba5fb8f">RAPIDJSON_UINT64_C2</a>(0x84222325, 0xcbf29ce4), type);</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>* d = <span class="keyword">static_cast&lt;</span><span class="keyword">const </span><span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>*<span class="keyword">&gt;</span>(data);</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; len; i++)</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; h = Hash(h, d[i]);</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; *stack_.template Push&lt;uint64_t&gt;() = h;</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; }</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160;</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; <span class="keyword">static</span> uint64_t Hash(uint64_t h, uint64_t d) {</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> uint64_t kPrime = <a class="code" href="rapidjson_8h.html#aaee1245f375a71be1ac9b8a07ba5fb8f">RAPIDJSON_UINT64_C2</a>(0x00000100, 0x000001b3);</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; h ^= d;</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; h *= kPrime;</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; <span class="keywordflow">return</span> h;</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; }</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160;</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; Stack&lt;Allocator&gt; stack_;</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160;};</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160;<span class="comment"></span><span class="comment">// SchemaValidationContext</span></div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160;</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> SchemaDocumentType&gt;</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160;<span class="keyword">struct </span>SchemaValidationContext {</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; <span class="keyword">typedef</span> Schema&lt;SchemaDocumentType&gt; SchemaType;</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; <span class="keyword">typedef</span> ISchemaStateFactory&lt;SchemaType&gt; SchemaValidatorFactoryType;</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; <span class="keyword">typedef</span> IValidationErrorHandler&lt;SchemaType&gt; ErrorHandlerType;</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; <span class="keyword">typedef</span> <span class="keyword">typename</span> SchemaType::ValueType ValueType;</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; <span class="keyword">typedef</span> <span class="keyword">typename</span> ValueType::Ch Ch;</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160;</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; <span class="keyword">enum</span> PatternValidatorType {</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; kPatternValidatorOnly,</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; kPatternValidatorWithProperty,</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; kPatternValidatorWithAdditionalProperty</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; };</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160;</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; SchemaValidationContext(SchemaValidatorFactoryType&amp; f, ErrorHandlerType&amp; eh, <span class="keyword">const</span> SchemaType* s) :</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; factory(f),</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; error_handler(eh),</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; schema(s),</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; valueSchema(),</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; invalidKeyword(),</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; hasher(),</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; arrayElementHashCodes(),</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; validators(),</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; validatorCount(),</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; patternPropertiesValidators(),</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; patternPropertiesValidatorCount(),</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; patternPropertiesSchemas(),</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; patternPropertiesSchemaCount(),</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; valuePatternValidatorType(kPatternValidatorOnly),</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; propertyExist(),</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; inArray(false),</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; valueUniqueness(false),</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; arrayUniqueness(false)</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; {</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; }</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160;</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; ~SchemaValidationContext() {</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; <span class="keywordflow">if</span> (hasher)</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; factory.DestroryHasher(hasher);</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; <span class="keywordflow">if</span> (validators) {</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> i = 0; i &lt; validatorCount; i++)</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; factory.DestroySchemaValidator(validators[i]);</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; factory.FreeState(validators);</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; }</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; <span class="keywordflow">if</span> (patternPropertiesValidators) {</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> i = 0; i &lt; patternPropertiesValidatorCount; i++)</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; factory.DestroySchemaValidator(patternPropertiesValidators[i]);</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; factory.FreeState(patternPropertiesValidators);</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; }</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; <span class="keywordflow">if</span> (patternPropertiesSchemas)</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; factory.FreeState(patternPropertiesSchemas);</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; <span class="keywordflow">if</span> (propertyExist)</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; factory.FreeState(propertyExist);</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; }</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160;</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; SchemaValidatorFactoryType&amp; factory;</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; ErrorHandlerType&amp; error_handler;</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; <span class="keyword">const</span> SchemaType* schema;</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; <span class="keyword">const</span> SchemaType* valueSchema;</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; <span class="keyword">const</span> Ch* invalidKeyword;</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; <span class="keywordtype">void</span>* hasher; <span class="comment">// Only validator access</span></div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; <span class="keywordtype">void</span>* arrayElementHashCodes; <span class="comment">// Only validator access this</span></div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; ISchemaValidator** validators;</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> validatorCount;</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; ISchemaValidator** patternPropertiesValidators;</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> patternPropertiesValidatorCount;</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; <span class="keyword">const</span> SchemaType** patternPropertiesSchemas;</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> patternPropertiesSchemaCount;</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; PatternValidatorType valuePatternValidatorType;</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; PatternValidatorType objectPatternValidatorType;</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> arrayElementIndex;</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; <span class="keywordtype">bool</span>* propertyExist;</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; <span class="keywordtype">bool</span> inArray;</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; <span class="keywordtype">bool</span> valueUniqueness;</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; <span class="keywordtype">bool</span> arrayUniqueness;</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160;};</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160;<span class="comment"></span><span class="comment">// Schema</span></div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160;</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> SchemaDocumentType&gt;</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160;<span class="keyword">class </span>Schema {</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; <span class="keyword">typedef</span> <span class="keyword">typename</span> SchemaDocumentType::ValueType ValueType;</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; <span class="keyword">typedef</span> <span class="keyword">typename</span> SchemaDocumentType::AllocatorType AllocatorType;</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; <span class="keyword">typedef</span> <span class="keyword">typename</span> SchemaDocumentType::PointerType PointerType;</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; <span class="keyword">typedef</span> <span class="keyword">typename</span> ValueType::EncodingType EncodingType;</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; <span class="keyword">typedef</span> <span class="keyword">typename</span> EncodingType::Ch Ch;</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; <span class="keyword">typedef</span> SchemaValidationContext&lt;SchemaDocumentType&gt; Context;</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; <span class="keyword">typedef</span> Schema&lt;SchemaDocumentType&gt; SchemaType;</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; <span class="keyword">typedef</span> GenericValue&lt;EncodingType, AllocatorType&gt; SValue;</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; <span class="keyword">typedef</span> IValidationErrorHandler&lt;Schema&gt; ErrorHandler;</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; <span class="keyword">friend</span> <span class="keyword">class </span>GenericSchemaDocument&lt;ValueType, AllocatorType&gt;;</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160;</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; Schema(SchemaDocumentType* schemaDocument, <span class="keyword">const</span> PointerType&amp; p, <span class="keyword">const</span> ValueType&amp; value, <span class="keyword">const</span> ValueType&amp; document, AllocatorType* allocator) :</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; allocator_(allocator),</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; uri_(schemaDocument-&gt;GetURI(), *allocator),</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; pointer_(p),</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; typeless_(schemaDocument-&gt;GetTypeless()),</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; enum_(),</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; enumCount_(),</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; not_(),</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; type_((1 &lt;&lt; kTotalSchemaType) - 1), <span class="comment">// typeless</span></div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; validatorCount_(),</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; notValidatorIndex_(),</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; properties_(),</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; additionalPropertiesSchema_(),</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; patternProperties_(),</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; patternPropertyCount_(),</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; propertyCount_(),</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; minProperties_(),</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; maxProperties_(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a>(~0)),</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; additionalProperties_(true),</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; hasDependencies_(),</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; hasRequired_(),</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; hasSchemaDependencies_(),</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; additionalItemsSchema_(),</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; itemsList_(),</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; itemsTuple_(),</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; itemsTupleCount_(),</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; minItems_(),</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; maxItems_(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a>(~0)),</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; additionalItems_(true),</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; uniqueItems_(false),</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; pattern_(),</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; minLength_(0),</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; maxLength_(~<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a>(0)),</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; exclusiveMinimum_(false),</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; exclusiveMaximum_(false),</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; defaultValueLength_(0)</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; {</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; <span class="keyword">typedef</span> <span class="keyword">typename</span> SchemaDocumentType::ValueType ValueType;</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; <span class="keyword">typedef</span> <span class="keyword">typename</span> ValueType::ConstValueIterator ConstValueIterator;</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; <span class="keyword">typedef</span> <span class="keyword">typename</span> ValueType::ConstMemberIterator ConstMemberIterator;</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160;</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; <span class="keywordflow">if</span> (!value.IsObject())</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160;</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> ValueType* v = GetMember(value, GetTypeString())) {</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; type_ = 0;</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; <span class="keywordflow">if</span> (v-&gt;IsString())</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160; AddType(*v);</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (v-&gt;IsArray())</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; <span class="keywordflow">for</span> (ConstValueIterator itr = v-&gt;Begin(); itr != v-&gt;End(); ++itr)</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; AddType(*itr);</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; }</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160;</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> ValueType* v = GetMember(value, GetEnumString()))</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160; <span class="keywordflow">if</span> (v-&gt;IsArray() &amp;&amp; v-&gt;Size() &gt; 0) {</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; enum_ = <span class="keyword">static_cast&lt;</span>uint64_t*<span class="keyword">&gt;</span>(allocator_-&gt;Malloc(<span class="keyword">sizeof</span>(uint64_t) * v-&gt;Size()));</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; <span class="keywordflow">for</span> (ConstValueIterator itr = v-&gt;Begin(); itr != v-&gt;End(); ++itr) {</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; <span class="keyword">typedef</span> Hasher&lt;EncodingType, MemoryPoolAllocator&lt;&gt; &gt; EnumHasherType;</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; <span class="keywordtype">char</span> buffer[256u + 24];</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; MemoryPoolAllocator&lt;&gt; hasherAllocator(buffer, <span class="keyword">sizeof</span>(buffer));</div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; EnumHasherType h(&amp;hasherAllocator, 256);</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; itr-&gt;Accept(h);</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; enum_[enumCount_++] = h.GetHashCode();</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; }</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; }</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160;</div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; <span class="keywordflow">if</span> (schemaDocument) {</div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; AssignIfExist(allOf_, *schemaDocument, p, value, GetAllOfString(), document);</div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; AssignIfExist(anyOf_, *schemaDocument, p, value, GetAnyOfString(), document);</div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160; AssignIfExist(oneOf_, *schemaDocument, p, value, GetOneOfString(), document);</div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160; }</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160;</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> ValueType* v = GetMember(value, GetNotString())) {</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; schemaDocument-&gt;CreateSchema(&amp;not_, p.Append(GetNotString(), allocator_), *v, document);</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; notValidatorIndex_ = validatorCount_;</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; validatorCount_++;</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; }</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160;</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; <span class="comment">// Object</span></div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160;</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; <span class="keyword">const</span> ValueType* properties = GetMember(value, GetPropertiesString());</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; <span class="keyword">const</span> ValueType* required = GetMember(value, GetRequiredString());</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; <span class="keyword">const</span> ValueType* dependencies = GetMember(value, GetDependenciesString());</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; {</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; <span class="comment">// Gather properties from properties/required/dependencies</span></div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; SValue allProperties(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a058c622e1e7d59419ae58b895cbce468">kArrayType</a>);</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160;</div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160; <span class="keywordflow">if</span> (properties &amp;&amp; properties-&gt;IsObject())</div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; <span class="keywordflow">for</span> (ConstMemberIterator itr = properties-&gt;MemberBegin(); itr != properties-&gt;MemberEnd(); ++itr)</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; AddUniqueElement(allProperties, itr-&gt;name);</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; </div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; <span class="keywordflow">if</span> (required &amp;&amp; required-&gt;IsArray())</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; <span class="keywordflow">for</span> (ConstValueIterator itr = required-&gt;Begin(); itr != required-&gt;End(); ++itr)</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; <span class="keywordflow">if</span> (itr-&gt;IsString())</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; AddUniqueElement(allProperties, *itr);</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160;</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; <span class="keywordflow">if</span> (dependencies &amp;&amp; dependencies-&gt;IsObject())</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; <span class="keywordflow">for</span> (ConstMemberIterator itr = dependencies-&gt;MemberBegin(); itr != dependencies-&gt;MemberEnd(); ++itr) {</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; AddUniqueElement(allProperties, itr-&gt;name);</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; <span class="keywordflow">if</span> (itr-&gt;value.IsArray())</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160; <span class="keywordflow">for</span> (ConstValueIterator i = itr-&gt;value.Begin(); i != itr-&gt;value.End(); ++i)</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; <span class="keywordflow">if</span> (i-&gt;IsString())</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; AddUniqueElement(allProperties, *i);</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; }</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160;</div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; <span class="keywordflow">if</span> (allProperties.Size() &gt; 0) {</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; propertyCount_ = allProperties.Size();</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; properties_ = <span class="keyword">static_cast&lt;</span>Property*<span class="keyword">&gt;</span>(allocator_-&gt;Malloc(<span class="keyword">sizeof</span>(Property) * propertyCount_));</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> i = 0; i &lt; propertyCount_; i++) {</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; <span class="keyword">new</span> (&amp;properties_[i]) Property();</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; properties_[i].name = allProperties[i];</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; properties_[i].schema = typeless_;</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; }</div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160; }</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; }</div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160;</div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; <span class="keywordflow">if</span> (properties &amp;&amp; properties-&gt;IsObject()) {</div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; PointerType q = p.Append(GetPropertiesString(), allocator_);</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; <span class="keywordflow">for</span> (ConstMemberIterator itr = properties-&gt;MemberBegin(); itr != properties-&gt;MemberEnd(); ++itr) {</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> index;</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; <span class="keywordflow">if</span> (FindPropertyIndex(itr-&gt;name, &amp;index))</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; schemaDocument-&gt;CreateSchema(&amp;properties_[index].schema, q.Append(itr-&gt;name, allocator_), itr-&gt;value, document);</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; }</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; }</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160;</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> ValueType* v = GetMember(value, GetPatternPropertiesString())) {</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; PointerType q = p.Append(GetPatternPropertiesString(), allocator_);</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; patternProperties_ = <span class="keyword">static_cast&lt;</span>PatternProperty*<span class="keyword">&gt;</span>(allocator_-&gt;Malloc(<span class="keyword">sizeof</span>(PatternProperty) * v-&gt;MemberCount()));</div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; patternPropertyCount_ = 0;</div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160;</div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; <span class="keywordflow">for</span> (ConstMemberIterator itr = v-&gt;MemberBegin(); itr != v-&gt;MemberEnd(); ++itr) {</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; <span class="keyword">new</span> (&amp;patternProperties_[patternPropertyCount_]) PatternProperty();</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; patternProperties_[patternPropertyCount_].pattern = CreatePattern(itr-&gt;name);</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; schemaDocument-&gt;CreateSchema(&amp;patternProperties_[patternPropertyCount_].schema, q.Append(itr-&gt;name, allocator_), itr-&gt;value, document);</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160; patternPropertyCount_++;</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160; }</div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160; }</div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160;</div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160; <span class="keywordflow">if</span> (required &amp;&amp; required-&gt;IsArray())</div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; <span class="keywordflow">for</span> (ConstValueIterator itr = required-&gt;Begin(); itr != required-&gt;End(); ++itr)</div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; <span class="keywordflow">if</span> (itr-&gt;IsString()) {</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160; <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> index;</div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160; <span class="keywordflow">if</span> (FindPropertyIndex(*itr, &amp;index)) {</div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160; properties_[index].required = <span class="keyword">true</span>;</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; hasRequired_ = <span class="keyword">true</span>;</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; }</div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160; }</div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160;</div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160; <span class="keywordflow">if</span> (dependencies &amp;&amp; dependencies-&gt;IsObject()) {</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160; PointerType q = p.Append(GetDependenciesString(), allocator_);</div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; hasDependencies_ = <span class="keyword">true</span>;</div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; <span class="keywordflow">for</span> (ConstMemberIterator itr = dependencies-&gt;MemberBegin(); itr != dependencies-&gt;MemberEnd(); ++itr) {</div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160; <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> sourceIndex;</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160; <span class="keywordflow">if</span> (FindPropertyIndex(itr-&gt;name, &amp;sourceIndex)) {</div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; <span class="keywordflow">if</span> (itr-&gt;value.IsArray()) {</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; properties_[sourceIndex].dependencies = <span class="keyword">static_cast&lt;</span><span class="keywordtype">bool</span>*<span class="keyword">&gt;</span>(allocator_-&gt;Malloc(<span class="keyword">sizeof</span>(<span class="keywordtype">bool</span>) * propertyCount_));</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; std::memset(properties_[sourceIndex].dependencies, 0, <span class="keyword">sizeof</span>(<span class="keywordtype">bool</span>)* propertyCount_);</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; <span class="keywordflow">for</span> (ConstValueIterator targetItr = itr-&gt;value.Begin(); targetItr != itr-&gt;value.End(); ++targetItr) {</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> targetIndex;</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; <span class="keywordflow">if</span> (FindPropertyIndex(*targetItr, &amp;targetIndex))</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160; properties_[sourceIndex].dependencies[targetIndex] = <span class="keyword">true</span>;</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; }</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; }</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (itr-&gt;value.IsObject()) {</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160; hasSchemaDependencies_ = <span class="keyword">true</span>;</div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160; schemaDocument-&gt;CreateSchema(&amp;properties_[sourceIndex].dependenciesSchema, q.Append(itr-&gt;name, allocator_), itr-&gt;value, document);</div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160; properties_[sourceIndex].dependenciesValidatorIndex = validatorCount_;</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160; validatorCount_++;</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; }</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; }</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; }</div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160; }</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160;</div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> ValueType* v = GetMember(value, GetAdditionalPropertiesString())) {</div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; <span class="keywordflow">if</span> (v-&gt;IsBool())</div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160; additionalProperties_ = v-&gt;GetBool();</div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (v-&gt;IsObject())</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160; schemaDocument-&gt;CreateSchema(&amp;additionalPropertiesSchema_, p.Append(GetAdditionalPropertiesString(), allocator_), *v, document);</div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160; }</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160;</div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; AssignIfExist(minProperties_, value, GetMinPropertiesString());</div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; AssignIfExist(maxProperties_, value, GetMaxPropertiesString());</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160;</div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; <span class="comment">// Array</span></div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> ValueType* v = GetMember(value, GetItemsString())) {</div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; PointerType q = p.Append(GetItemsString(), allocator_);</div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; <span class="keywordflow">if</span> (v-&gt;IsObject()) <span class="comment">// List validation</span></div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; schemaDocument-&gt;CreateSchema(&amp;itemsList_, q, *v, document);</div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (v-&gt;IsArray()) { <span class="comment">// Tuple validation</span></div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160; itemsTuple_ = <span class="keyword">static_cast&lt;</span><span class="keyword">const </span>Schema**<span class="keyword">&gt;</span>(allocator_-&gt;Malloc(<span class="keyword">sizeof</span>(<span class="keyword">const</span> Schema*) * v-&gt;Size()));</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> index = 0;</div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160; <span class="keywordflow">for</span> (ConstValueIterator itr = v-&gt;Begin(); itr != v-&gt;End(); ++itr, index++)</div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160; schemaDocument-&gt;CreateSchema(&amp;itemsTuple_[itemsTupleCount_++], q.Append(index, allocator_), *itr, document);</div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; }</div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; }</div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160;</div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; AssignIfExist(minItems_, value, GetMinItemsString());</div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; AssignIfExist(maxItems_, value, GetMaxItemsString());</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160;</div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> ValueType* v = GetMember(value, GetAdditionalItemsString())) {</div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160; <span class="keywordflow">if</span> (v-&gt;IsBool())</div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160; additionalItems_ = v-&gt;GetBool();</div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (v-&gt;IsObject())</div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160; schemaDocument-&gt;CreateSchema(&amp;additionalItemsSchema_, p.Append(GetAdditionalItemsString(), allocator_), *v, document);</div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160; }</div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160;</div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160; AssignIfExist(uniqueItems_, value, GetUniqueItemsString());</div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160;</div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160; <span class="comment">// String</span></div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160; AssignIfExist(minLength_, value, GetMinLengthString());</div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160; AssignIfExist(maxLength_, value, GetMaxLengthString());</div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160;</div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> ValueType* v = GetMember(value, GetPatternString()))</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160; pattern_ = CreatePattern(*v);</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160;</div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160; <span class="comment">// Number</span></div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> ValueType* v = GetMember(value, GetMinimumString()))</div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160; <span class="keywordflow">if</span> (v-&gt;IsNumber())</div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160; minimum_.CopyFrom(*v, *allocator_);</div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160;</div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> ValueType* v = GetMember(value, GetMaximumString()))</div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160; <span class="keywordflow">if</span> (v-&gt;IsNumber())</div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160; maximum_.CopyFrom(*v, *allocator_);</div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160;</div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160; AssignIfExist(exclusiveMinimum_, value, GetExclusiveMinimumString());</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160; AssignIfExist(exclusiveMaximum_, value, GetExclusiveMaximumString());</div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160;</div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> ValueType* v = GetMember(value, GetMultipleOfString()))</div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160; <span class="keywordflow">if</span> (v-&gt;IsNumber() &amp;&amp; v-&gt;GetDouble() &gt; 0.0)</div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160; multipleOf_.CopyFrom(*v, *allocator_);</div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160;</div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160; <span class="comment">// Default</span></div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> ValueType* v = GetMember(value, GetDefaultValueString()))</div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160; <span class="keywordflow">if</span> (v-&gt;IsString())</div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160; defaultValueLength_ = v-&gt;GetStringLength();</div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160;</div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160; }</div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160;</div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; ~Schema() {</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; AllocatorType::Free(enum_);</div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160; <span class="keywordflow">if</span> (properties_) {</div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> i = 0; i &lt; propertyCount_; i++)</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160; properties_[i].~Property();</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160; AllocatorType::Free(properties_);</div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; }</div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160; <span class="keywordflow">if</span> (patternProperties_) {</div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> i = 0; i &lt; patternPropertyCount_; i++)</div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; patternProperties_[i].~PatternProperty();</div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160; AllocatorType::Free(patternProperties_);</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160; }</div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; AllocatorType::Free(itemsTuple_);</div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160;<span class="preprocessor">#if RAPIDJSON_SCHEMA_HAS_REGEX</span></div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160; <span class="keywordflow">if</span> (pattern_) {</div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160; pattern_-&gt;~RegexType();</div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160; AllocatorType::Free(pattern_);</div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160; }</div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160; }</div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160;</div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; <span class="keyword">const</span> SValue&amp; GetURI()<span class="keyword"> const </span>{</div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160; <span class="keywordflow">return</span> uri_;</div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160; }</div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160;</div><div class="line"><a name="l00672"></a><span class="lineno"> 672</span>&#160; <span class="keyword">const</span> PointerType&amp; GetPointer()<span class="keyword"> const </span>{</div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160; <span class="keywordflow">return</span> pointer_;</div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160; }</div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160;</div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160; <span class="keywordtype">bool</span> BeginValue(Context&amp; context)<span class="keyword"> const </span>{</div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160; <span class="keywordflow">if</span> (context.inArray) {</div><div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160; <span class="keywordflow">if</span> (uniqueItems_)</div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160; context.valueUniqueness = <span class="keyword">true</span>;</div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160;</div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160; <span class="keywordflow">if</span> (itemsList_)</div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160; context.valueSchema = itemsList_;</div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (itemsTuple_) {</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160; <span class="keywordflow">if</span> (context.arrayElementIndex &lt; itemsTupleCount_)</div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; context.valueSchema = itemsTuple_[context.arrayElementIndex];</div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (additionalItemsSchema_)</div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160; context.valueSchema = additionalItemsSchema_;</div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (additionalItems_)</div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160; context.valueSchema = typeless_;</div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160; <span class="keywordflow">else</span> {</div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160; context.error_handler.DisallowedItem(context.arrayElementIndex);</div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160; RAPIDJSON_INVALID_KEYWORD_RETURN(GetItemsString());</div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160; }</div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160; }</div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160; context.valueSchema = typeless_;</div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160;</div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160; context.arrayElementIndex++;</div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160; }</div><div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span>&#160; }</div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160;</div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160; RAPIDJSON_FORCEINLINE <span class="keywordtype">bool</span> EndValue(Context&amp; context)<span class="keyword"> const </span>{</div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160; <span class="keywordflow">if</span> (context.patternPropertiesValidatorCount &gt; 0) {</div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160; <span class="keywordtype">bool</span> otherValid = <span class="keyword">false</span>;</div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160; <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> count = context.patternPropertiesValidatorCount;</div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160; <span class="keywordflow">if</span> (context.objectPatternValidatorType != Context::kPatternValidatorOnly)</div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160; otherValid = context.patternPropertiesValidators[--count]-&gt;IsValid();</div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160;</div><div class="line"><a name="l00710"></a><span class="lineno"> 710</span>&#160; <span class="keywordtype">bool</span> patternValid = <span class="keyword">true</span>;</div><div class="line"><a name="l00711"></a><span class="lineno"> 711</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> i = 0; i &lt; count; i++)</div><div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160; <span class="keywordflow">if</span> (!context.patternPropertiesValidators[i]-&gt;IsValid()) {</div><div class="line"><a name="l00713"></a><span class="lineno"> 713</span>&#160; patternValid = <span class="keyword">false</span>;</div><div class="line"><a name="l00714"></a><span class="lineno"> 714</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00715"></a><span class="lineno"> 715</span>&#160; }</div><div class="line"><a name="l00716"></a><span class="lineno"> 716</span>&#160;</div><div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160; <span class="keywordflow">if</span> (context.objectPatternValidatorType == Context::kPatternValidatorOnly) {</div><div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160; <span class="keywordflow">if</span> (!patternValid) {</div><div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160; context.error_handler.PropertyViolations(context.patternPropertiesValidators, count);</div><div class="line"><a name="l00720"></a><span class="lineno"> 720</span>&#160; RAPIDJSON_INVALID_KEYWORD_RETURN(GetPatternPropertiesString());</div><div class="line"><a name="l00721"></a><span class="lineno"> 721</span>&#160; }</div><div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160; }</div><div class="line"><a name="l00723"></a><span class="lineno"> 723</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (context.objectPatternValidatorType == Context::kPatternValidatorWithProperty) {</div><div class="line"><a name="l00724"></a><span class="lineno"> 724</span>&#160; <span class="keywordflow">if</span> (!patternValid || !otherValid) {</div><div class="line"><a name="l00725"></a><span class="lineno"> 725</span>&#160; context.error_handler.PropertyViolations(context.patternPropertiesValidators, count + 1);</div><div class="line"><a name="l00726"></a><span class="lineno"> 726</span>&#160; RAPIDJSON_INVALID_KEYWORD_RETURN(GetPatternPropertiesString());</div><div class="line"><a name="l00727"></a><span class="lineno"> 727</span>&#160; }</div><div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160; }</div><div class="line"><a name="l00729"></a><span class="lineno"> 729</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!patternValid &amp;&amp; !otherValid) { <span class="comment">// kPatternValidatorWithAdditionalProperty)</span></div><div class="line"><a name="l00730"></a><span class="lineno"> 730</span>&#160; context.error_handler.PropertyViolations(context.patternPropertiesValidators, count + 1);</div><div class="line"><a name="l00731"></a><span class="lineno"> 731</span>&#160; RAPIDJSON_INVALID_KEYWORD_RETURN(GetPatternPropertiesString());</div><div class="line"><a name="l00732"></a><span class="lineno"> 732</span>&#160; }</div><div class="line"><a name="l00733"></a><span class="lineno"> 733</span>&#160; }</div><div class="line"><a name="l00734"></a><span class="lineno"> 734</span>&#160;</div><div class="line"><a name="l00735"></a><span class="lineno"> 735</span>&#160; <span class="keywordflow">if</span> (enum_) {</div><div class="line"><a name="l00736"></a><span class="lineno"> 736</span>&#160; <span class="keyword">const</span> uint64_t h = context.factory.GetHashCode(context.hasher);</div><div class="line"><a name="l00737"></a><span class="lineno"> 737</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> i = 0; i &lt; enumCount_; i++)</div><div class="line"><a name="l00738"></a><span class="lineno"> 738</span>&#160; <span class="keywordflow">if</span> (enum_[i] == h)</div><div class="line"><a name="l00739"></a><span class="lineno"> 739</span>&#160; <span class="keywordflow">goto</span> foundEnum;</div><div class="line"><a name="l00740"></a><span class="lineno"> 740</span>&#160; context.error_handler.DisallowedValue();</div><div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160; RAPIDJSON_INVALID_KEYWORD_RETURN(GetEnumString());</div><div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160; foundEnum:;</div><div class="line"><a name="l00743"></a><span class="lineno"> 743</span>&#160; }</div><div class="line"><a name="l00744"></a><span class="lineno"> 744</span>&#160;</div><div class="line"><a name="l00745"></a><span class="lineno"> 745</span>&#160; <span class="keywordflow">if</span> (allOf_.schemas)</div><div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> i = allOf_.begin; i &lt; allOf_.begin + allOf_.count; i++)</div><div class="line"><a name="l00747"></a><span class="lineno"> 747</span>&#160; <span class="keywordflow">if</span> (!context.validators[i]-&gt;IsValid()) {</div><div class="line"><a name="l00748"></a><span class="lineno"> 748</span>&#160; context.error_handler.NotAllOf(&amp;context.validators[allOf_.begin], allOf_.count);</div><div class="line"><a name="l00749"></a><span class="lineno"> 749</span>&#160; RAPIDJSON_INVALID_KEYWORD_RETURN(GetAllOfString());</div><div class="line"><a name="l00750"></a><span class="lineno"> 750</span>&#160; }</div><div class="line"><a name="l00751"></a><span class="lineno"> 751</span>&#160; </div><div class="line"><a name="l00752"></a><span class="lineno"> 752</span>&#160; <span class="keywordflow">if</span> (anyOf_.schemas) {</div><div class="line"><a name="l00753"></a><span class="lineno"> 753</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> i = anyOf_.begin; i &lt; anyOf_.begin + anyOf_.count; i++)</div><div class="line"><a name="l00754"></a><span class="lineno"> 754</span>&#160; <span class="keywordflow">if</span> (context.validators[i]-&gt;IsValid())</div><div class="line"><a name="l00755"></a><span class="lineno"> 755</span>&#160; <span class="keywordflow">goto</span> foundAny;</div><div class="line"><a name="l00756"></a><span class="lineno"> 756</span>&#160; context.error_handler.NoneOf(&amp;context.validators[anyOf_.begin], anyOf_.count);</div><div class="line"><a name="l00757"></a><span class="lineno"> 757</span>&#160; RAPIDJSON_INVALID_KEYWORD_RETURN(GetAnyOfString());</div><div class="line"><a name="l00758"></a><span class="lineno"> 758</span>&#160; foundAny:;</div><div class="line"><a name="l00759"></a><span class="lineno"> 759</span>&#160; }</div><div class="line"><a name="l00760"></a><span class="lineno"> 760</span>&#160;</div><div class="line"><a name="l00761"></a><span class="lineno"> 761</span>&#160; <span class="keywordflow">if</span> (oneOf_.schemas) {</div><div class="line"><a name="l00762"></a><span class="lineno"> 762</span>&#160; <span class="keywordtype">bool</span> oneValid = <span class="keyword">false</span>;</div><div class="line"><a name="l00763"></a><span class="lineno"> 763</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> i = oneOf_.begin; i &lt; oneOf_.begin + oneOf_.count; i++)</div><div class="line"><a name="l00764"></a><span class="lineno"> 764</span>&#160; <span class="keywordflow">if</span> (context.validators[i]-&gt;IsValid()) {</div><div class="line"><a name="l00765"></a><span class="lineno"> 765</span>&#160; <span class="keywordflow">if</span> (oneValid) {</div><div class="line"><a name="l00766"></a><span class="lineno"> 766</span>&#160; context.error_handler.NotOneOf(&amp;context.validators[oneOf_.begin], oneOf_.count);</div><div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160; RAPIDJSON_INVALID_KEYWORD_RETURN(GetOneOfString());</div><div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160; } <span class="keywordflow">else</span></div><div class="line"><a name="l00769"></a><span class="lineno"> 769</span>&#160; oneValid = <span class="keyword">true</span>;</div><div class="line"><a name="l00770"></a><span class="lineno"> 770</span>&#160; }</div><div class="line"><a name="l00771"></a><span class="lineno"> 771</span>&#160; <span class="keywordflow">if</span> (!oneValid) {</div><div class="line"><a name="l00772"></a><span class="lineno"> 772</span>&#160; context.error_handler.NotOneOf(&amp;context.validators[oneOf_.begin], oneOf_.count);</div><div class="line"><a name="l00773"></a><span class="lineno"> 773</span>&#160; RAPIDJSON_INVALID_KEYWORD_RETURN(GetOneOfString());</div><div class="line"><a name="l00774"></a><span class="lineno"> 774</span>&#160; }</div><div class="line"><a name="l00775"></a><span class="lineno"> 775</span>&#160; }</div><div class="line"><a name="l00776"></a><span class="lineno"> 776</span>&#160;</div><div class="line"><a name="l00777"></a><span class="lineno"> 777</span>&#160; <span class="keywordflow">if</span> (not_ &amp;&amp; context.validators[notValidatorIndex_]-&gt;IsValid()) {</div><div class="line"><a name="l00778"></a><span class="lineno"> 778</span>&#160; context.error_handler.Disallowed();</div><div class="line"><a name="l00779"></a><span class="lineno"> 779</span>&#160; RAPIDJSON_INVALID_KEYWORD_RETURN(GetNotString());</div><div class="line"><a name="l00780"></a><span class="lineno"> 780</span>&#160; }</div><div class="line"><a name="l00781"></a><span class="lineno"> 781</span>&#160;</div><div class="line"><a name="l00782"></a><span class="lineno"> 782</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00783"></a><span class="lineno"> 783</span>&#160; }</div><div class="line"><a name="l00784"></a><span class="lineno"> 784</span>&#160;</div><div class="line"><a name="l00785"></a><span class="lineno"> 785</span>&#160; <span class="keywordtype">bool</span> Null(Context&amp; context)<span class="keyword"> const </span>{</div><div class="line"><a name="l00786"></a><span class="lineno"> 786</span>&#160; <span class="keywordflow">if</span> (!(type_ &amp; (1 &lt;&lt; kNullSchemaType))) {</div><div class="line"><a name="l00787"></a><span class="lineno"> 787</span>&#160; DisallowedType(context, GetNullString());</div><div class="line"><a name="l00788"></a><span class="lineno"> 788</span>&#160; RAPIDJSON_INVALID_KEYWORD_RETURN(GetTypeString());</div><div class="line"><a name="l00789"></a><span class="lineno"> 789</span>&#160; }</div><div class="line"><a name="l00790"></a><span class="lineno"> 790</span>&#160; <span class="keywordflow">return</span> CreateParallelValidator(context);</div><div class="line"><a name="l00791"></a><span class="lineno"> 791</span>&#160; }</div><div class="line"><a name="l00792"></a><span class="lineno"> 792</span>&#160; </div><div class="line"><a name="l00793"></a><span class="lineno"> 793</span>&#160; <span class="keywordtype">bool</span> Bool(Context&amp; context, <span class="keywordtype">bool</span>)<span class="keyword"> const </span>{</div><div class="line"><a name="l00794"></a><span class="lineno"> 794</span>&#160; <span class="keywordflow">if</span> (!(type_ &amp; (1 &lt;&lt; kBooleanSchemaType))) {</div><div class="line"><a name="l00795"></a><span class="lineno"> 795</span>&#160; DisallowedType(context, GetBooleanString());</div><div class="line"><a name="l00796"></a><span class="lineno"> 796</span>&#160; RAPIDJSON_INVALID_KEYWORD_RETURN(GetTypeString());</div><div class="line"><a name="l00797"></a><span class="lineno"> 797</span>&#160; }</div><div class="line"><a name="l00798"></a><span class="lineno"> 798</span>&#160; <span class="keywordflow">return</span> CreateParallelValidator(context);</div><div class="line"><a name="l00799"></a><span class="lineno"> 799</span>&#160; }</div><div class="line"><a name="l00800"></a><span class="lineno"> 800</span>&#160;</div><div class="line"><a name="l00801"></a><span class="lineno"> 801</span>&#160; <span class="keywordtype">bool</span> Int(Context&amp; context, <span class="keywordtype">int</span> i)<span class="keyword"> const </span>{</div><div class="line"><a name="l00802"></a><span class="lineno"> 802</span>&#160; <span class="keywordflow">if</span> (!CheckInt(context, i))</div><div class="line"><a name="l00803"></a><span class="lineno"> 803</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00804"></a><span class="lineno"> 804</span>&#160; <span class="keywordflow">return</span> CreateParallelValidator(context);</div><div class="line"><a name="l00805"></a><span class="lineno"> 805</span>&#160; }</div><div class="line"><a name="l00806"></a><span class="lineno"> 806</span>&#160;</div><div class="line"><a name="l00807"></a><span class="lineno"> 807</span>&#160; <span class="keywordtype">bool</span> Uint(Context&amp; context, <span class="keywordtype">unsigned</span> u)<span class="keyword"> const </span>{</div><div class="line"><a name="l00808"></a><span class="lineno"> 808</span>&#160; <span class="keywordflow">if</span> (!CheckUint(context, u))</div><div class="line"><a name="l00809"></a><span class="lineno"> 809</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00810"></a><span class="lineno"> 810</span>&#160; <span class="keywordflow">return</span> CreateParallelValidator(context);</div><div class="line"><a name="l00811"></a><span class="lineno"> 811</span>&#160; }</div><div class="line"><a name="l00812"></a><span class="lineno"> 812</span>&#160;</div><div class="line"><a name="l00813"></a><span class="lineno"> 813</span>&#160; <span class="keywordtype">bool</span> Int64(Context&amp; context, int64_t i)<span class="keyword"> const </span>{</div><div class="line"><a name="l00814"></a><span class="lineno"> 814</span>&#160; <span class="keywordflow">if</span> (!CheckInt(context, i))</div><div class="line"><a name="l00815"></a><span class="lineno"> 815</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00816"></a><span class="lineno"> 816</span>&#160; <span class="keywordflow">return</span> CreateParallelValidator(context);</div><div class="line"><a name="l00817"></a><span class="lineno"> 817</span>&#160; }</div><div class="line"><a name="l00818"></a><span class="lineno"> 818</span>&#160;</div><div class="line"><a name="l00819"></a><span class="lineno"> 819</span>&#160; <span class="keywordtype">bool</span> Uint64(Context&amp; context, uint64_t u)<span class="keyword"> const </span>{</div><div class="line"><a name="l00820"></a><span class="lineno"> 820</span>&#160; <span class="keywordflow">if</span> (!CheckUint(context, u))</div><div class="line"><a name="l00821"></a><span class="lineno"> 821</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00822"></a><span class="lineno"> 822</span>&#160; <span class="keywordflow">return</span> CreateParallelValidator(context);</div><div class="line"><a name="l00823"></a><span class="lineno"> 823</span>&#160; }</div><div class="line"><a name="l00824"></a><span class="lineno"> 824</span>&#160;</div><div class="line"><a name="l00825"></a><span class="lineno"> 825</span>&#160; <span class="keywordtype">bool</span> Double(Context&amp; context, <span class="keywordtype">double</span> d)<span class="keyword"> const </span>{</div><div class="line"><a name="l00826"></a><span class="lineno"> 826</span>&#160; <span class="keywordflow">if</span> (!(type_ &amp; (1 &lt;&lt; kNumberSchemaType))) {</div><div class="line"><a name="l00827"></a><span class="lineno"> 827</span>&#160; DisallowedType(context, GetNumberString());</div><div class="line"><a name="l00828"></a><span class="lineno"> 828</span>&#160; RAPIDJSON_INVALID_KEYWORD_RETURN(GetTypeString());</div><div class="line"><a name="l00829"></a><span class="lineno"> 829</span>&#160; }</div><div class="line"><a name="l00830"></a><span class="lineno"> 830</span>&#160;</div><div class="line"><a name="l00831"></a><span class="lineno"> 831</span>&#160; <span class="keywordflow">if</span> (!minimum_.IsNull() &amp;&amp; !CheckDoubleMinimum(context, d))</div><div class="line"><a name="l00832"></a><span class="lineno"> 832</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00833"></a><span class="lineno"> 833</span>&#160;</div><div class="line"><a name="l00834"></a><span class="lineno"> 834</span>&#160; <span class="keywordflow">if</span> (!maximum_.IsNull() &amp;&amp; !CheckDoubleMaximum(context, d))</div><div class="line"><a name="l00835"></a><span class="lineno"> 835</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00836"></a><span class="lineno"> 836</span>&#160; </div><div class="line"><a name="l00837"></a><span class="lineno"> 837</span>&#160; <span class="keywordflow">if</span> (!multipleOf_.IsNull() &amp;&amp; !CheckDoubleMultipleOf(context, d))</div><div class="line"><a name="l00838"></a><span class="lineno"> 838</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00839"></a><span class="lineno"> 839</span>&#160; </div><div class="line"><a name="l00840"></a><span class="lineno"> 840</span>&#160; <span class="keywordflow">return</span> CreateParallelValidator(context);</div><div class="line"><a name="l00841"></a><span class="lineno"> 841</span>&#160; }</div><div class="line"><a name="l00842"></a><span class="lineno"> 842</span>&#160; </div><div class="line"><a name="l00843"></a><span class="lineno"> 843</span>&#160; <span class="keywordtype">bool</span> String(Context&amp; context, <span class="keyword">const</span> Ch* str, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> length, <span class="keywordtype">bool</span>)<span class="keyword"> const </span>{</div><div class="line"><a name="l00844"></a><span class="lineno"> 844</span>&#160; <span class="keywordflow">if</span> (!(type_ &amp; (1 &lt;&lt; kStringSchemaType))) {</div><div class="line"><a name="l00845"></a><span class="lineno"> 845</span>&#160; DisallowedType(context, GetStringString());</div><div class="line"><a name="l00846"></a><span class="lineno"> 846</span>&#160; RAPIDJSON_INVALID_KEYWORD_RETURN(GetTypeString());</div><div class="line"><a name="l00847"></a><span class="lineno"> 847</span>&#160; }</div><div class="line"><a name="l00848"></a><span class="lineno"> 848</span>&#160;</div><div class="line"><a name="l00849"></a><span class="lineno"> 849</span>&#160; <span class="keywordflow">if</span> (minLength_ != 0 || maxLength_ != <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a>(~0)) {</div><div class="line"><a name="l00850"></a><span class="lineno"> 850</span>&#160; <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> count;</div><div class="line"><a name="l00851"></a><span class="lineno"> 851</span>&#160; <span class="keywordflow">if</span> (internal::CountStringCodePoint&lt;EncodingType&gt;(str, length, &amp;count)) {</div><div class="line"><a name="l00852"></a><span class="lineno"> 852</span>&#160; <span class="keywordflow">if</span> (count &lt; minLength_) {</div><div class="line"><a name="l00853"></a><span class="lineno"> 853</span>&#160; context.error_handler.TooShort(str, length, minLength_);</div><div class="line"><a name="l00854"></a><span class="lineno"> 854</span>&#160; RAPIDJSON_INVALID_KEYWORD_RETURN(GetMinLengthString());</div><div class="line"><a name="l00855"></a><span class="lineno"> 855</span>&#160; }</div><div class="line"><a name="l00856"></a><span class="lineno"> 856</span>&#160; <span class="keywordflow">if</span> (count &gt; maxLength_) {</div><div class="line"><a name="l00857"></a><span class="lineno"> 857</span>&#160; context.error_handler.TooLong(str, length, maxLength_);</div><div class="line"><a name="l00858"></a><span class="lineno"> 858</span>&#160; RAPIDJSON_INVALID_KEYWORD_RETURN(GetMaxLengthString());</div><div class="line"><a name="l00859"></a><span class="lineno"> 859</span>&#160; }</div><div class="line"><a name="l00860"></a><span class="lineno"> 860</span>&#160; }</div><div class="line"><a name="l00861"></a><span class="lineno"> 861</span>&#160; }</div><div class="line"><a name="l00862"></a><span class="lineno"> 862</span>&#160;</div><div class="line"><a name="l00863"></a><span class="lineno"> 863</span>&#160; <span class="keywordflow">if</span> (pattern_ &amp;&amp; !IsPatternMatch(pattern_, str, length)) {</div><div class="line"><a name="l00864"></a><span class="lineno"> 864</span>&#160; context.error_handler.DoesNotMatch(str, length);</div><div class="line"><a name="l00865"></a><span class="lineno"> 865</span>&#160; RAPIDJSON_INVALID_KEYWORD_RETURN(GetPatternString());</div><div class="line"><a name="l00866"></a><span class="lineno"> 866</span>&#160; }</div><div class="line"><a name="l00867"></a><span class="lineno"> 867</span>&#160;</div><div class="line"><a name="l00868"></a><span class="lineno"> 868</span>&#160; <span class="keywordflow">return</span> CreateParallelValidator(context);</div><div class="line"><a name="l00869"></a><span class="lineno"> 869</span>&#160; }</div><div class="line"><a name="l00870"></a><span class="lineno"> 870</span>&#160;</div><div class="line"><a name="l00871"></a><span class="lineno"> 871</span>&#160; <span class="keywordtype">bool</span> StartObject(Context&amp; context)<span class="keyword"> const </span>{</div><div class="line"><a name="l00872"></a><span class="lineno"> 872</span>&#160; <span class="keywordflow">if</span> (!(type_ &amp; (1 &lt;&lt; kObjectSchemaType))) {</div><div class="line"><a name="l00873"></a><span class="lineno"> 873</span>&#160; DisallowedType(context, GetObjectString());</div><div class="line"><a name="l00874"></a><span class="lineno"> 874</span>&#160; RAPIDJSON_INVALID_KEYWORD_RETURN(GetTypeString());</div><div class="line"><a name="l00875"></a><span class="lineno"> 875</span>&#160; }</div><div class="line"><a name="l00876"></a><span class="lineno"> 876</span>&#160;</div><div class="line"><a name="l00877"></a><span class="lineno"> 877</span>&#160; <span class="keywordflow">if</span> (hasDependencies_ || hasRequired_) {</div><div class="line"><a name="l00878"></a><span class="lineno"> 878</span>&#160; context.propertyExist = <span class="keyword">static_cast&lt;</span><span class="keywordtype">bool</span>*<span class="keyword">&gt;</span>(context.factory.MallocState(<span class="keyword">sizeof</span>(<span class="keywordtype">bool</span>) * propertyCount_));</div><div class="line"><a name="l00879"></a><span class="lineno"> 879</span>&#160; std::memset(context.propertyExist, 0, <span class="keyword">sizeof</span>(<span class="keywordtype">bool</span>) * propertyCount_);</div><div class="line"><a name="l00880"></a><span class="lineno"> 880</span>&#160; }</div><div class="line"><a name="l00881"></a><span class="lineno"> 881</span>&#160;</div><div class="line"><a name="l00882"></a><span class="lineno"> 882</span>&#160; <span class="keywordflow">if</span> (patternProperties_) { <span class="comment">// pre-allocate schema array</span></div><div class="line"><a name="l00883"></a><span class="lineno"> 883</span>&#160; <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> count = patternPropertyCount_ + 1; <span class="comment">// extra for valuePatternValidatorType</span></div><div class="line"><a name="l00884"></a><span class="lineno"> 884</span>&#160; context.patternPropertiesSchemas = <span class="keyword">static_cast&lt;</span><span class="keyword">const </span>SchemaType**<span class="keyword">&gt;</span>(context.factory.MallocState(<span class="keyword">sizeof</span>(<span class="keyword">const</span> SchemaType*) * count));</div><div class="line"><a name="l00885"></a><span class="lineno"> 885</span>&#160; context.patternPropertiesSchemaCount = 0;</div><div class="line"><a name="l00886"></a><span class="lineno"> 886</span>&#160; std::memset(context.patternPropertiesSchemas, 0, <span class="keyword">sizeof</span>(SchemaType*) * count);</div><div class="line"><a name="l00887"></a><span class="lineno"> 887</span>&#160; }</div><div class="line"><a name="l00888"></a><span class="lineno"> 888</span>&#160;</div><div class="line"><a name="l00889"></a><span class="lineno"> 889</span>&#160; <span class="keywordflow">return</span> CreateParallelValidator(context);</div><div class="line"><a name="l00890"></a><span class="lineno"> 890</span>&#160; }</div><div class="line"><a name="l00891"></a><span class="lineno"> 891</span>&#160; </div><div class="line"><a name="l00892"></a><span class="lineno"> 892</span>&#160; <span class="keywordtype">bool</span> Key(Context&amp; context, <span class="keyword">const</span> Ch* str, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> len, <span class="keywordtype">bool</span>)<span class="keyword"> const </span>{</div><div class="line"><a name="l00893"></a><span class="lineno"> 893</span>&#160; <span class="keywordflow">if</span> (patternProperties_) {</div><div class="line"><a name="l00894"></a><span class="lineno"> 894</span>&#160; context.patternPropertiesSchemaCount = 0;</div><div class="line"><a name="l00895"></a><span class="lineno"> 895</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> i = 0; i &lt; patternPropertyCount_; i++)</div><div class="line"><a name="l00896"></a><span class="lineno"> 896</span>&#160; <span class="keywordflow">if</span> (patternProperties_[i].pattern &amp;&amp; IsPatternMatch(patternProperties_[i].pattern, str, len)) {</div><div class="line"><a name="l00897"></a><span class="lineno"> 897</span>&#160; context.patternPropertiesSchemas[context.patternPropertiesSchemaCount++] = patternProperties_[i].schema;</div><div class="line"><a name="l00898"></a><span class="lineno"> 898</span>&#160; context.valueSchema = typeless_;</div><div class="line"><a name="l00899"></a><span class="lineno"> 899</span>&#160; }</div><div class="line"><a name="l00900"></a><span class="lineno"> 900</span>&#160; }</div><div class="line"><a name="l00901"></a><span class="lineno"> 901</span>&#160;</div><div class="line"><a name="l00902"></a><span class="lineno"> 902</span>&#160; <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> index;</div><div class="line"><a name="l00903"></a><span class="lineno"> 903</span>&#160; <span class="keywordflow">if</span> (FindPropertyIndex(ValueType(str, len).Move(), &amp;index)) {</div><div class="line"><a name="l00904"></a><span class="lineno"> 904</span>&#160; <span class="keywordflow">if</span> (context.patternPropertiesSchemaCount &gt; 0) {</div><div class="line"><a name="l00905"></a><span class="lineno"> 905</span>&#160; context.patternPropertiesSchemas[context.patternPropertiesSchemaCount++] = properties_[index].schema;</div><div class="line"><a name="l00906"></a><span class="lineno"> 906</span>&#160; context.valueSchema = typeless_;</div><div class="line"><a name="l00907"></a><span class="lineno"> 907</span>&#160; context.valuePatternValidatorType = Context::kPatternValidatorWithProperty;</div><div class="line"><a name="l00908"></a><span class="lineno"> 908</span>&#160; }</div><div class="line"><a name="l00909"></a><span class="lineno"> 909</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00910"></a><span class="lineno"> 910</span>&#160; context.valueSchema = properties_[index].schema;</div><div class="line"><a name="l00911"></a><span class="lineno"> 911</span>&#160;</div><div class="line"><a name="l00912"></a><span class="lineno"> 912</span>&#160; <span class="keywordflow">if</span> (context.propertyExist)</div><div class="line"><a name="l00913"></a><span class="lineno"> 913</span>&#160; context.propertyExist[index] = <span class="keyword">true</span>;</div><div class="line"><a name="l00914"></a><span class="lineno"> 914</span>&#160;</div><div class="line"><a name="l00915"></a><span class="lineno"> 915</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00916"></a><span class="lineno"> 916</span>&#160; }</div><div class="line"><a name="l00917"></a><span class="lineno"> 917</span>&#160;</div><div class="line"><a name="l00918"></a><span class="lineno"> 918</span>&#160; <span class="keywordflow">if</span> (additionalPropertiesSchema_) {</div><div class="line"><a name="l00919"></a><span class="lineno"> 919</span>&#160; <span class="keywordflow">if</span> (additionalPropertiesSchema_ &amp;&amp; context.patternPropertiesSchemaCount &gt; 0) {</div><div class="line"><a name="l00920"></a><span class="lineno"> 920</span>&#160; context.patternPropertiesSchemas[context.patternPropertiesSchemaCount++] = additionalPropertiesSchema_;</div><div class="line"><a name="l00921"></a><span class="lineno"> 921</span>&#160; context.valueSchema = typeless_;</div><div class="line"><a name="l00922"></a><span class="lineno"> 922</span>&#160; context.valuePatternValidatorType = Context::kPatternValidatorWithAdditionalProperty;</div><div class="line"><a name="l00923"></a><span class="lineno"> 923</span>&#160; }</div><div class="line"><a name="l00924"></a><span class="lineno"> 924</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00925"></a><span class="lineno"> 925</span>&#160; context.valueSchema = additionalPropertiesSchema_;</div><div class="line"><a name="l00926"></a><span class="lineno"> 926</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00927"></a><span class="lineno"> 927</span>&#160; }</div><div class="line"><a name="l00928"></a><span class="lineno"> 928</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (additionalProperties_) {</div><div class="line"><a name="l00929"></a><span class="lineno"> 929</span>&#160; context.valueSchema = typeless_;</div><div class="line"><a name="l00930"></a><span class="lineno"> 930</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00931"></a><span class="lineno"> 931</span>&#160; }</div><div class="line"><a name="l00932"></a><span class="lineno"> 932</span>&#160;</div><div class="line"><a name="l00933"></a><span class="lineno"> 933</span>&#160; <span class="keywordflow">if</span> (context.patternPropertiesSchemaCount == 0) { <span class="comment">// patternProperties are not additional properties</span></div><div class="line"><a name="l00934"></a><span class="lineno"> 934</span>&#160; context.error_handler.DisallowedProperty(str, len);</div><div class="line"><a name="l00935"></a><span class="lineno"> 935</span>&#160; RAPIDJSON_INVALID_KEYWORD_RETURN(GetAdditionalPropertiesString());</div><div class="line"><a name="l00936"></a><span class="lineno"> 936</span>&#160; }</div><div class="line"><a name="l00937"></a><span class="lineno"> 937</span>&#160;</div><div class="line"><a name="l00938"></a><span class="lineno"> 938</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00939"></a><span class="lineno"> 939</span>&#160; }</div><div class="line"><a name="l00940"></a><span class="lineno"> 940</span>&#160;</div><div class="line"><a name="l00941"></a><span class="lineno"> 941</span>&#160; <span class="keywordtype">bool</span> EndObject(Context&amp; context, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> memberCount)<span class="keyword"> const </span>{</div><div class="line"><a name="l00942"></a><span class="lineno"> 942</span>&#160; <span class="keywordflow">if</span> (hasRequired_) {</div><div class="line"><a name="l00943"></a><span class="lineno"> 943</span>&#160; context.error_handler.StartMissingProperties();</div><div class="line"><a name="l00944"></a><span class="lineno"> 944</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> index = 0; index &lt; propertyCount_; index++)</div><div class="line"><a name="l00945"></a><span class="lineno"> 945</span>&#160; <span class="keywordflow">if</span> (properties_[index].required &amp;&amp; !context.propertyExist[index])</div><div class="line"><a name="l00946"></a><span class="lineno"> 946</span>&#160; <span class="keywordflow">if</span> (properties_[index].schema-&gt;defaultValueLength_ == 0 )</div><div class="line"><a name="l00947"></a><span class="lineno"> 947</span>&#160; context.error_handler.AddMissingProperty(properties_[index].name);</div><div class="line"><a name="l00948"></a><span class="lineno"> 948</span>&#160; <span class="keywordflow">if</span> (context.error_handler.EndMissingProperties())</div><div class="line"><a name="l00949"></a><span class="lineno"> 949</span>&#160; RAPIDJSON_INVALID_KEYWORD_RETURN(GetRequiredString());</div><div class="line"><a name="l00950"></a><span class="lineno"> 950</span>&#160; }</div><div class="line"><a name="l00951"></a><span class="lineno"> 951</span>&#160;</div><div class="line"><a name="l00952"></a><span class="lineno"> 952</span>&#160; <span class="keywordflow">if</span> (memberCount &lt; minProperties_) {</div><div class="line"><a name="l00953"></a><span class="lineno"> 953</span>&#160; context.error_handler.TooFewProperties(memberCount, minProperties_);</div><div class="line"><a name="l00954"></a><span class="lineno"> 954</span>&#160; RAPIDJSON_INVALID_KEYWORD_RETURN(GetMinPropertiesString());</div><div class="line"><a name="l00955"></a><span class="lineno"> 955</span>&#160; }</div><div class="line"><a name="l00956"></a><span class="lineno"> 956</span>&#160;</div><div class="line"><a name="l00957"></a><span class="lineno"> 957</span>&#160; <span class="keywordflow">if</span> (memberCount &gt; maxProperties_) {</div><div class="line"><a name="l00958"></a><span class="lineno"> 958</span>&#160; context.error_handler.TooManyProperties(memberCount, maxProperties_);</div><div class="line"><a name="l00959"></a><span class="lineno"> 959</span>&#160; RAPIDJSON_INVALID_KEYWORD_RETURN(GetMaxPropertiesString());</div><div class="line"><a name="l00960"></a><span class="lineno"> 960</span>&#160; }</div><div class="line"><a name="l00961"></a><span class="lineno"> 961</span>&#160;</div><div class="line"><a name="l00962"></a><span class="lineno"> 962</span>&#160; <span class="keywordflow">if</span> (hasDependencies_) {</div><div class="line"><a name="l00963"></a><span class="lineno"> 963</span>&#160; context.error_handler.StartDependencyErrors();</div><div class="line"><a name="l00964"></a><span class="lineno"> 964</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> sourceIndex = 0; sourceIndex &lt; propertyCount_; sourceIndex++) {</div><div class="line"><a name="l00965"></a><span class="lineno"> 965</span>&#160; <span class="keyword">const</span> Property&amp; source = properties_[sourceIndex];</div><div class="line"><a name="l00966"></a><span class="lineno"> 966</span>&#160; <span class="keywordflow">if</span> (context.propertyExist[sourceIndex]) {</div><div class="line"><a name="l00967"></a><span class="lineno"> 967</span>&#160; <span class="keywordflow">if</span> (source.dependencies) {</div><div class="line"><a name="l00968"></a><span class="lineno"> 968</span>&#160; context.error_handler.StartMissingDependentProperties();</div><div class="line"><a name="l00969"></a><span class="lineno"> 969</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> targetIndex = 0; targetIndex &lt; propertyCount_; targetIndex++)</div><div class="line"><a name="l00970"></a><span class="lineno"> 970</span>&#160; <span class="keywordflow">if</span> (source.dependencies[targetIndex] &amp;&amp; !context.propertyExist[targetIndex])</div><div class="line"><a name="l00971"></a><span class="lineno"> 971</span>&#160; context.error_handler.AddMissingDependentProperty(properties_[targetIndex].name);</div><div class="line"><a name="l00972"></a><span class="lineno"> 972</span>&#160; context.error_handler.EndMissingDependentProperties(source.name);</div><div class="line"><a name="l00973"></a><span class="lineno"> 973</span>&#160; }</div><div class="line"><a name="l00974"></a><span class="lineno"> 974</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (source.dependenciesSchema) {</div><div class="line"><a name="l00975"></a><span class="lineno"> 975</span>&#160; ISchemaValidator* dependenciesValidator = context.validators[source.dependenciesValidatorIndex];</div><div class="line"><a name="l00976"></a><span class="lineno"> 976</span>&#160; <span class="keywordflow">if</span> (!dependenciesValidator-&gt;IsValid())</div><div class="line"><a name="l00977"></a><span class="lineno"> 977</span>&#160; context.error_handler.AddDependencySchemaError(source.name, dependenciesValidator);</div><div class="line"><a name="l00978"></a><span class="lineno"> 978</span>&#160; }</div><div class="line"><a name="l00979"></a><span class="lineno"> 979</span>&#160; }</div><div class="line"><a name="l00980"></a><span class="lineno"> 980</span>&#160; }</div><div class="line"><a name="l00981"></a><span class="lineno"> 981</span>&#160; <span class="keywordflow">if</span> (context.error_handler.EndDependencyErrors())</div><div class="line"><a name="l00982"></a><span class="lineno"> 982</span>&#160; RAPIDJSON_INVALID_KEYWORD_RETURN(GetDependenciesString());</div><div class="line"><a name="l00983"></a><span class="lineno"> 983</span>&#160; }</div><div class="line"><a name="l00984"></a><span class="lineno"> 984</span>&#160;</div><div class="line"><a name="l00985"></a><span class="lineno"> 985</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00986"></a><span class="lineno"> 986</span>&#160; }</div><div class="line"><a name="l00987"></a><span class="lineno"> 987</span>&#160;</div><div class="line"><a name="l00988"></a><span class="lineno"> 988</span>&#160; <span class="keywordtype">bool</span> StartArray(Context&amp; context)<span class="keyword"> const </span>{</div><div class="line"><a name="l00989"></a><span class="lineno"> 989</span>&#160; <span class="keywordflow">if</span> (!(type_ &amp; (1 &lt;&lt; kArraySchemaType))) {</div><div class="line"><a name="l00990"></a><span class="lineno"> 990</span>&#160; DisallowedType(context, GetArrayString());</div><div class="line"><a name="l00991"></a><span class="lineno"> 991</span>&#160; RAPIDJSON_INVALID_KEYWORD_RETURN(GetTypeString());</div><div class="line"><a name="l00992"></a><span class="lineno"> 992</span>&#160; }</div><div class="line"><a name="l00993"></a><span class="lineno"> 993</span>&#160;</div><div class="line"><a name="l00994"></a><span class="lineno"> 994</span>&#160; context.arrayElementIndex = 0;</div><div class="line"><a name="l00995"></a><span class="lineno"> 995</span>&#160; context.inArray = <span class="keyword">true</span>;</div><div class="line"><a name="l00996"></a><span class="lineno"> 996</span>&#160;</div><div class="line"><a name="l00997"></a><span class="lineno"> 997</span>&#160; <span class="keywordflow">return</span> CreateParallelValidator(context);</div><div class="line"><a name="l00998"></a><span class="lineno"> 998</span>&#160; }</div><div class="line"><a name="l00999"></a><span class="lineno"> 999</span>&#160;</div><div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>&#160; <span class="keywordtype">bool</span> EndArray(Context&amp; context, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> elementCount)<span class="keyword"> const </span>{</div><div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>&#160; context.inArray = <span class="keyword">false</span>;</div><div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>&#160; </div><div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>&#160; <span class="keywordflow">if</span> (elementCount &lt; minItems_) {</div><div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>&#160; context.error_handler.TooFewItems(elementCount, minItems_);</div><div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>&#160; RAPIDJSON_INVALID_KEYWORD_RETURN(GetMinItemsString());</div><div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>&#160; }</div><div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>&#160; </div><div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>&#160; <span class="keywordflow">if</span> (elementCount &gt; maxItems_) {</div><div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>&#160; context.error_handler.TooManyItems(elementCount, maxItems_);</div><div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>&#160; RAPIDJSON_INVALID_KEYWORD_RETURN(GetMaxItemsString());</div><div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>&#160; }</div><div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>&#160;</div><div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>&#160; }</div><div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>&#160;</div><div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>&#160; <span class="comment">// Generate functions for string literal according to Ch</span></div><div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>&#160;<span class="preprocessor">#define RAPIDJSON_STRING_(name, ...) \</span></div><div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>&#160;<span class="preprocessor"> static const ValueType&amp; Get##name##String() {\</span></div><div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>&#160;<span class="preprocessor"> static const Ch s[] = { __VA_ARGS__, &#39;\0&#39; };\</span></div><div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>&#160;<span class="preprocessor"> static const ValueType v(s, static_cast&lt;SizeType&gt;(sizeof(s) / sizeof(Ch) - 1));\</span></div><div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>&#160;<span class="preprocessor"> return v;\</span></div><div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>&#160;<span class="preprocessor"> }</span></div><div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>&#160;</div><div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>&#160; RAPIDJSON_STRING_(Null, <span class="charliteral">&#39;n&#39;</span>, <span class="charliteral">&#39;u&#39;</span>, <span class="charliteral">&#39;l&#39;</span>, <span class="charliteral">&#39;l&#39;</span>)</div><div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>&#160; RAPIDJSON_STRING_(Boolean, &#39;b&#39;, &#39;o&#39;, &#39;o&#39;, &#39;l&#39;, &#39;e&#39;, &#39;a&#39;, &#39;n&#39;)</div><div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>&#160; RAPIDJSON_STRING_(Object, &#39;o&#39;, &#39;b&#39;, &#39;j&#39;, &#39;e&#39;, &#39;c&#39;, &#39;t&#39;)</div><div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>&#160; RAPIDJSON_STRING_(Array, &#39;a&#39;, &#39;r&#39;, &#39;r&#39;, &#39;a&#39;, &#39;y&#39;)</div><div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>&#160; RAPIDJSON_STRING_(String, &#39;s&#39;, &#39;t&#39;, &#39;r&#39;, &#39;i&#39;, &#39;n&#39;, &#39;g&#39;)</div><div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>&#160; RAPIDJSON_STRING_(Number, &#39;n&#39;, &#39;u&#39;, &#39;m&#39;, &#39;b&#39;, &#39;e&#39;, &#39;r&#39;)</div><div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>&#160; RAPIDJSON_STRING_(Integer, &#39;i&#39;, &#39;n&#39;, &#39;t&#39;, &#39;e&#39;, &#39;g&#39;, &#39;e&#39;, &#39;r&#39;)</div><div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>&#160; RAPIDJSON_STRING_(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">Type</a>, &#39;t&#39;, &#39;y&#39;, &#39;p&#39;, &#39;e&#39;)</div><div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>&#160; RAPIDJSON_STRING_(Enum, &#39;e&#39;, &#39;n&#39;, &#39;u&#39;, &#39;m&#39;)</div><div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>&#160; RAPIDJSON_STRING_(AllOf, &#39;a&#39;, &#39;l&#39;, &#39;l&#39;, &#39;O&#39;, &#39;f&#39;)</div><div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>&#160; RAPIDJSON_STRING_(AnyOf, &#39;a&#39;, &#39;n&#39;, &#39;y&#39;, &#39;O&#39;, &#39;f&#39;)</div><div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>&#160; RAPIDJSON_STRING_(OneOf, &#39;o&#39;, &#39;n&#39;, &#39;e&#39;, &#39;O&#39;, &#39;f&#39;)</div><div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>&#160; RAPIDJSON_STRING_(Not, &#39;n&#39;, &#39;o&#39;, &#39;t&#39;)</div><div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>&#160; RAPIDJSON_STRING_(Properties, &#39;p&#39;, &#39;r&#39;, &#39;o&#39;, &#39;p&#39;, &#39;e&#39;, &#39;r&#39;, &#39;t&#39;, &#39;i&#39;, &#39;e&#39;, &#39;s&#39;)</div><div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>&#160; RAPIDJSON_STRING_(Required, &#39;r&#39;, &#39;e&#39;, &#39;q&#39;, &#39;u&#39;, &#39;i&#39;, &#39;r&#39;, &#39;e&#39;, &#39;d&#39;)</div><div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>&#160; RAPIDJSON_STRING_(Dependencies, &#39;d&#39;, &#39;e&#39;, &#39;p&#39;, &#39;e&#39;, &#39;n&#39;, &#39;d&#39;, &#39;e&#39;, &#39;n&#39;, &#39;c&#39;, &#39;i&#39;, &#39;e&#39;, &#39;s&#39;)</div><div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>&#160; RAPIDJSON_STRING_(PatternProperties, &#39;p&#39;, &#39;a&#39;, &#39;t&#39;, &#39;t&#39;, &#39;e&#39;, &#39;r&#39;, &#39;n&#39;, &#39;P&#39;, &#39;r&#39;, &#39;o&#39;, &#39;p&#39;, &#39;e&#39;, &#39;r&#39;, &#39;t&#39;, &#39;i&#39;, &#39;e&#39;, &#39;s&#39;)</div><div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>&#160; RAPIDJSON_STRING_(AdditionalProperties, &#39;a&#39;, &#39;d&#39;, &#39;d&#39;, &#39;i&#39;, &#39;t&#39;, &#39;i&#39;, &#39;o&#39;, &#39;n&#39;, &#39;a&#39;, &#39;l&#39;, &#39;P&#39;, &#39;r&#39;, &#39;o&#39;, &#39;p&#39;, &#39;e&#39;, &#39;r&#39;, &#39;t&#39;, &#39;i&#39;, &#39;e&#39;, &#39;s&#39;)</div><div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>&#160; RAPIDJSON_STRING_(MinProperties, &#39;m&#39;, &#39;i&#39;, &#39;n&#39;, &#39;P&#39;, &#39;r&#39;, &#39;o&#39;, &#39;p&#39;, &#39;e&#39;, &#39;r&#39;, &#39;t&#39;, &#39;i&#39;, &#39;e&#39;, &#39;s&#39;)</div><div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>&#160; RAPIDJSON_STRING_(MaxProperties, &#39;m&#39;, &#39;a&#39;, &#39;x&#39;, &#39;P&#39;, &#39;r&#39;, &#39;o&#39;, &#39;p&#39;, &#39;e&#39;, &#39;r&#39;, &#39;t&#39;, &#39;i&#39;, &#39;e&#39;, &#39;s&#39;)</div><div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>&#160; RAPIDJSON_STRING_(Items, &#39;i&#39;, &#39;t&#39;, &#39;e&#39;, &#39;m&#39;, &#39;s&#39;)</div><div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>&#160; RAPIDJSON_STRING_(MinItems, &#39;m&#39;, &#39;i&#39;, &#39;n&#39;, &#39;I&#39;, &#39;t&#39;, &#39;e&#39;, &#39;m&#39;, &#39;s&#39;)</div><div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>&#160; RAPIDJSON_STRING_(MaxItems, &#39;m&#39;, &#39;a&#39;, &#39;x&#39;, &#39;I&#39;, &#39;t&#39;, &#39;e&#39;, &#39;m&#39;, &#39;s&#39;)</div><div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>&#160; RAPIDJSON_STRING_(AdditionalItems, &#39;a&#39;, &#39;d&#39;, &#39;d&#39;, &#39;i&#39;, &#39;t&#39;, &#39;i&#39;, &#39;o&#39;, &#39;n&#39;, &#39;a&#39;, &#39;l&#39;, &#39;I&#39;, &#39;t&#39;, &#39;e&#39;, &#39;m&#39;, &#39;s&#39;)</div><div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>&#160; RAPIDJSON_STRING_(UniqueItems, &#39;u&#39;, &#39;n&#39;, &#39;i&#39;, &#39;q&#39;, &#39;u&#39;, &#39;e&#39;, &#39;I&#39;, &#39;t&#39;, &#39;e&#39;, &#39;m&#39;, &#39;s&#39;)</div><div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>&#160; RAPIDJSON_STRING_(MinLength, &#39;m&#39;, &#39;i&#39;, &#39;n&#39;, &#39;L&#39;, &#39;e&#39;, &#39;n&#39;, &#39;g&#39;, &#39;t&#39;, &#39;h&#39;)</div><div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>&#160; RAPIDJSON_STRING_(MaxLength, &#39;m&#39;, &#39;a&#39;, &#39;x&#39;, &#39;L&#39;, &#39;e&#39;, &#39;n&#39;, &#39;g&#39;, &#39;t&#39;, &#39;h&#39;)</div><div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>&#160; RAPIDJSON_STRING_(Pattern, &#39;p&#39;, &#39;a&#39;, &#39;t&#39;, &#39;t&#39;, &#39;e&#39;, &#39;r&#39;, &#39;n&#39;)</div><div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>&#160; RAPIDJSON_STRING_(Minimum, &#39;m&#39;, &#39;i&#39;, &#39;n&#39;, &#39;i&#39;, &#39;m&#39;, &#39;u&#39;, &#39;m&#39;)</div><div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>&#160; RAPIDJSON_STRING_(Maximum, &#39;m&#39;, &#39;a&#39;, &#39;x&#39;, &#39;i&#39;, &#39;m&#39;, &#39;u&#39;, &#39;m&#39;)</div><div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>&#160; RAPIDJSON_STRING_(ExclusiveMinimum, &#39;e&#39;, &#39;x&#39;, &#39;c&#39;, &#39;l&#39;, &#39;u&#39;, &#39;s&#39;, &#39;i&#39;, &#39;v&#39;, &#39;e&#39;, &#39;M&#39;, &#39;i&#39;, &#39;n&#39;, &#39;i&#39;, &#39;m&#39;, &#39;u&#39;, &#39;m&#39;)</div><div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>&#160; RAPIDJSON_STRING_(ExclusiveMaximum, &#39;e&#39;, &#39;x&#39;, &#39;c&#39;, &#39;l&#39;, &#39;u&#39;, &#39;s&#39;, &#39;i&#39;, &#39;v&#39;, &#39;e&#39;, &#39;M&#39;, &#39;a&#39;, &#39;x&#39;, &#39;i&#39;, &#39;m&#39;, &#39;u&#39;, &#39;m&#39;)</div><div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>&#160; RAPIDJSON_STRING_(MultipleOf, &#39;m&#39;, &#39;u&#39;, &#39;l&#39;, &#39;t&#39;, &#39;i&#39;, &#39;p&#39;, &#39;l&#39;, &#39;e&#39;, &#39;O&#39;, &#39;f&#39;)</div><div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>&#160; RAPIDJSON_STRING_(DefaultValue, &#39;d&#39;, &#39;e&#39;, &#39;f&#39;, &#39;a&#39;, &#39;u&#39;, &#39;l&#39;, &#39;t&#39;)</div><div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>&#160;</div><div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>&#160;<span class="preprocessor">#undef RAPIDJSON_STRING_</span></div><div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>&#160;</div><div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>&#160; <span class="keyword">enum</span> SchemaValueType {</div><div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>&#160; kNullSchemaType,</div><div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>&#160; kBooleanSchemaType,</div><div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>&#160; kObjectSchemaType,</div><div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>&#160; kArraySchemaType,</div><div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>&#160; kStringSchemaType,</div><div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>&#160; kNumberSchemaType,</div><div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>&#160; kIntegerSchemaType,</div><div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>&#160; kTotalSchemaType</div><div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>&#160; };</div><div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>&#160;</div><div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>&#160;<span class="preprocessor">#if RAPIDJSON_SCHEMA_USE_INTERNALREGEX</span></div><div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>&#160; <span class="keyword">typedef</span> internal::GenericRegex&lt;EncodingType, AllocatorType&gt; RegexType;</div><div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>&#160;<span class="preprocessor">#elif RAPIDJSON_SCHEMA_USE_STDREGEX</span></div><div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>&#160; <span class="keyword">typedef</span> std::basic_regex&lt;Ch&gt; RegexType;</div><div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>&#160; <span class="keyword">typedef</span> <span class="keywordtype">char</span> RegexType;</div><div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>&#160;</div><div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>&#160; <span class="keyword">struct </span>SchemaArray {</div><div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>&#160; SchemaArray() : schemas(), count() {}</div><div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>&#160; ~SchemaArray() { AllocatorType::Free(schemas); }</div><div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>&#160; <span class="keyword">const</span> SchemaType** schemas;</div><div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>&#160; <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> begin; <span class="comment">// begin index of context.validators</span></div><div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>&#160; <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> count;</div><div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>&#160; };</div><div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>&#160;</div><div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> V1, <span class="keyword">typename</span> V2&gt;</div><div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>&#160; <span class="keywordtype">void</span> AddUniqueElement(V1&amp; a, <span class="keyword">const</span> V2&amp; v) {</div><div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">typename</span> V1::ConstValueIterator itr = a.Begin(); itr != a.End(); ++itr)</div><div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>&#160; <span class="keywordflow">if</span> (*itr == v)</div><div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>&#160; V1 c(v, *allocator_);</div><div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>&#160; a.PushBack(c, *allocator_);</div><div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>&#160; }</div><div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>&#160;</div><div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> ValueType* GetMember(<span class="keyword">const</span> ValueType&amp; value, <span class="keyword">const</span> ValueType&amp; name) {</div><div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>&#160; <span class="keyword">typename</span> ValueType::ConstMemberIterator itr = value.FindMember(name);</div><div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>&#160; <span class="keywordflow">return</span> itr != value.MemberEnd() ? &amp;(itr-&gt;value) : 0;</div><div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>&#160; }</div><div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>&#160;</div><div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> AssignIfExist(<span class="keywordtype">bool</span>&amp; out, <span class="keyword">const</span> ValueType&amp; value, <span class="keyword">const</span> ValueType&amp; name) {</div><div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> ValueType* v = GetMember(value, name))</div><div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>&#160; <span class="keywordflow">if</span> (v-&gt;IsBool())</div><div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>&#160; out = v-&gt;GetBool();</div><div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>&#160; }</div><div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>&#160;</div><div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> AssignIfExist(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a>&amp; out, <span class="keyword">const</span> ValueType&amp; value, <span class="keyword">const</span> ValueType&amp; name) {</div><div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> ValueType* v = GetMember(value, name))</div><div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>&#160; <span class="keywordflow">if</span> (v-&gt;IsUint64() &amp;&amp; v-&gt;GetUint64() &lt;= <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a>(~0))</div><div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>&#160; out = static_cast&lt;SizeType&gt;(v-&gt;GetUint64());</div><div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>&#160; }</div><div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>&#160;</div><div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>&#160; <span class="keywordtype">void</span> AssignIfExist(SchemaArray&amp; out, SchemaDocumentType&amp; schemaDocument, <span class="keyword">const</span> PointerType&amp; p, <span class="keyword">const</span> ValueType&amp; value, <span class="keyword">const</span> ValueType&amp; name, <span class="keyword">const</span> ValueType&amp; document) {</div><div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> ValueType* v = GetMember(value, name)) {</div><div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>&#160; <span class="keywordflow">if</span> (v-&gt;IsArray() &amp;&amp; v-&gt;Size() &gt; 0) {</div><div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>&#160; PointerType q = p.Append(name, allocator_);</div><div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>&#160; out.count = v-&gt;Size();</div><div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>&#160; out.schemas = <span class="keyword">static_cast&lt;</span><span class="keyword">const </span>Schema**<span class="keyword">&gt;</span>(allocator_-&gt;Malloc(out.count * <span class="keyword">sizeof</span>(<span class="keyword">const</span> Schema*)));</div><div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>&#160; memset(out.schemas, 0, <span class="keyword">sizeof</span>(Schema*)* out.count);</div><div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> i = 0; i &lt; out.count; i++)</div><div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>&#160; schemaDocument.CreateSchema(&amp;out.schemas[i], q.Append(i, allocator_), (*v)[i], document);</div><div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>&#160; out.begin = validatorCount_;</div><div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>&#160; validatorCount_ += out.count;</div><div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>&#160; }</div><div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>&#160; }</div><div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>&#160; }</div><div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>&#160;</div><div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>&#160;<span class="preprocessor">#if RAPIDJSON_SCHEMA_USE_INTERNALREGEX</span></div><div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> ValueType&gt;</div><div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>&#160; RegexType* CreatePattern(<span class="keyword">const</span> ValueType&amp; value) {</div><div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>&#160; <span class="keywordflow">if</span> (value.IsString()) {</div><div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>&#160; RegexType* r = <span class="keyword">new</span> (allocator_-&gt;Malloc(<span class="keyword">sizeof</span>(RegexType))) RegexType(value.GetString(), allocator_);</div><div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>&#160; <span class="keywordflow">if</span> (!r-&gt;IsValid()) {</div><div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>&#160; r-&gt;~RegexType();</div><div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>&#160; AllocatorType::Free(r);</div><div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>&#160; r = 0;</div><div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>&#160; }</div><div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>&#160; <span class="keywordflow">return</span> r;</div><div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>&#160; }</div><div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>&#160; <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>&#160; }</div><div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>&#160;</div><div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>&#160; <span class="keyword">static</span> <span class="keywordtype">bool</span> IsPatternMatch(<span class="keyword">const</span> RegexType* pattern, <span class="keyword">const</span> Ch *str, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a>) {</div><div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>&#160; GenericRegexSearch&lt;RegexType&gt; rs(*pattern);</div><div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>&#160; <span class="keywordflow">return</span> rs.Search(str);</div><div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>&#160; }</div><div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>&#160;<span class="preprocessor">#elif RAPIDJSON_SCHEMA_USE_STDREGEX</span></div><div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> ValueType&gt;</div><div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>&#160; RegexType* CreatePattern(<span class="keyword">const</span> ValueType&amp; value) {</div><div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>&#160; <span class="keywordflow">if</span> (value.IsString())</div><div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>&#160; <span class="keywordflow">try</span> {</div><div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>&#160; <span class="keywordflow">return</span> <span class="keyword">new</span> (allocator_-&gt;Malloc(<span class="keyword">sizeof</span>(RegexType))) RegexType(value.GetString(), std::size_t(value.GetStringLength()), std::regex_constants::ECMAScript);</div><div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>&#160; }</div><div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>&#160; <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::regex_error&amp;) {</div><div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>&#160; }</div><div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>&#160; <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>&#160; }</div><div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>&#160;</div><div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>&#160; <span class="keyword">static</span> <span class="keywordtype">bool</span> IsPatternMatch(<span class="keyword">const</span> RegexType* pattern, <span class="keyword">const</span> Ch *str, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> length) {</div><div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>&#160; std::match_results&lt;const Ch*&gt; r;</div><div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>&#160; <span class="keywordflow">return</span> std::regex_search(str, str + length, r, *pattern);</div><div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>&#160; }</div><div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> ValueType&gt;</div><div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>&#160; RegexType* CreatePattern(<span class="keyword">const</span> ValueType&amp;) { <span class="keywordflow">return</span> 0; }</div><div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>&#160;</div><div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>&#160; <span class="keyword">static</span> <span class="keywordtype">bool</span> IsPatternMatch(<span class="keyword">const</span> RegexType*, <span class="keyword">const</span> Ch *, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a>) { <span class="keywordflow">return</span> <span class="keyword">true</span>; }</div><div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>&#160;<span class="preprocessor">#endif // RAPIDJSON_SCHEMA_USE_STDREGEX</span></div><div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>&#160;</div><div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>&#160; <span class="keywordtype">void</span> AddType(<span class="keyword">const</span> ValueType&amp; type) {</div><div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>&#160; <span class="keywordflow">if</span> (type == GetNullString() ) type_ |= 1 &lt;&lt; kNullSchemaType;</div><div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (type == GetBooleanString()) type_ |= 1 &lt;&lt; kBooleanSchemaType;</div><div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (type == GetObjectString() ) type_ |= 1 &lt;&lt; kObjectSchemaType;</div><div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (type == GetArrayString() ) type_ |= 1 &lt;&lt; kArraySchemaType;</div><div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (type == GetStringString() ) type_ |= 1 &lt;&lt; kStringSchemaType;</div><div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (type == GetIntegerString()) type_ |= 1 &lt;&lt; kIntegerSchemaType;</div><div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (type == GetNumberString() ) type_ |= (1 &lt;&lt; kNumberSchemaType) | (1 &lt;&lt; kIntegerSchemaType);</div><div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>&#160; }</div><div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>&#160;</div><div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>&#160; <span class="keywordtype">bool</span> CreateParallelValidator(Context&amp; context)<span class="keyword"> const </span>{</div><div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>&#160; <span class="keywordflow">if</span> (enum_ || context.arrayUniqueness)</div><div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>&#160; context.hasher = context.factory.CreateHasher();</div><div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>&#160;</div><div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>&#160; <span class="keywordflow">if</span> (validatorCount_) {</div><div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(context.validators == 0);</div><div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>&#160; context.validators = <span class="keyword">static_cast&lt;</span>ISchemaValidator**<span class="keyword">&gt;</span>(context.factory.MallocState(<span class="keyword">sizeof</span>(ISchemaValidator*) * validatorCount_));</div><div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>&#160; context.validatorCount = validatorCount_;</div><div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>&#160;</div><div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>&#160; <span class="keywordflow">if</span> (allOf_.schemas)</div><div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>&#160; CreateSchemaValidators(context, allOf_);</div><div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>&#160;</div><div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>&#160; <span class="keywordflow">if</span> (anyOf_.schemas)</div><div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>&#160; CreateSchemaValidators(context, anyOf_);</div><div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>&#160; </div><div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>&#160; <span class="keywordflow">if</span> (oneOf_.schemas)</div><div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>&#160; CreateSchemaValidators(context, oneOf_);</div><div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>&#160; </div><div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>&#160; <span class="keywordflow">if</span> (not_)</div><div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>&#160; context.validators[notValidatorIndex_] = context.factory.CreateSchemaValidator(*not_);</div><div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>&#160; </div><div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>&#160; <span class="keywordflow">if</span> (hasSchemaDependencies_) {</div><div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> i = 0; i &lt; propertyCount_; i++)</div><div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>&#160; <span class="keywordflow">if</span> (properties_[i].dependenciesSchema)</div><div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>&#160; context.validators[properties_[i].dependenciesValidatorIndex] = context.factory.CreateSchemaValidator(*properties_[i].dependenciesSchema);</div><div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>&#160; }</div><div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>&#160; }</div><div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>&#160;</div><div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>&#160; }</div><div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>&#160;</div><div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>&#160; <span class="keywordtype">void</span> CreateSchemaValidators(Context&amp; context, <span class="keyword">const</span> SchemaArray&amp; schemas)<span class="keyword"> const </span>{</div><div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> i = 0; i &lt; schemas.count; i++)</div><div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>&#160; context.validators[schemas.begin + i] = context.factory.CreateSchemaValidator(*schemas.schemas[i]);</div><div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>&#160; }</div><div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>&#160;</div><div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>&#160; <span class="comment">// O(n)</span></div><div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>&#160; <span class="keywordtype">bool</span> FindPropertyIndex(<span class="keyword">const</span> ValueType&amp; name, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a>* outIndex)<span class="keyword"> const </span>{</div><div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>&#160; <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> len = name.GetStringLength();</div><div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>&#160; <span class="keyword">const</span> Ch* str = name.GetString();</div><div class="line"><a name="l01222"></a><span class="lineno"> 1222</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> index = 0; index &lt; propertyCount_; index++)</div><div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>&#160; <span class="keywordflow">if</span> (properties_[index].name.GetStringLength() == len &amp;&amp; </div><div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>&#160; (std::memcmp(properties_[index].name.GetString(), str, <span class="keyword">sizeof</span>(Ch) * len) == 0))</div><div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>&#160; {</div><div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>&#160; *outIndex = index;</div><div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>&#160; }</div><div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>&#160; }</div><div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>&#160;</div><div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>&#160; <span class="keywordtype">bool</span> CheckInt(Context&amp; context, int64_t i)<span class="keyword"> const </span>{</div><div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>&#160; <span class="keywordflow">if</span> (!(type_ &amp; ((1 &lt;&lt; kIntegerSchemaType) | (1 &lt;&lt; kNumberSchemaType)))) {</div><div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>&#160; DisallowedType(context, GetIntegerString());</div><div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>&#160; RAPIDJSON_INVALID_KEYWORD_RETURN(GetTypeString());</div><div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>&#160; }</div><div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>&#160;</div><div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>&#160; <span class="keywordflow">if</span> (!minimum_.IsNull()) {</div><div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>&#160; <span class="keywordflow">if</span> (minimum_.IsInt64()) {</div><div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>&#160; <span class="keywordflow">if</span> (exclusiveMinimum_ ? i &lt;= minimum_.GetInt64() : i &lt; minimum_.GetInt64()) {</div><div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>&#160; context.error_handler.BelowMinimum(i, minimum_, exclusiveMinimum_);</div><div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>&#160; RAPIDJSON_INVALID_KEYWORD_RETURN(GetMinimumString());</div><div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>&#160; }</div><div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>&#160; }</div><div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (minimum_.IsUint64()) {</div><div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>&#160; context.error_handler.BelowMinimum(i, minimum_, exclusiveMinimum_);</div><div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>&#160; RAPIDJSON_INVALID_KEYWORD_RETURN(GetMinimumString()); <span class="comment">// i &lt;= max(int64_t) &lt; minimum.GetUint64()</span></div><div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>&#160; }</div><div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!CheckDoubleMinimum(context, static_cast&lt;double&gt;(i)))</div><div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>&#160; }</div><div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>&#160;</div><div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>&#160; <span class="keywordflow">if</span> (!maximum_.IsNull()) {</div><div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>&#160; <span class="keywordflow">if</span> (maximum_.IsInt64()) {</div><div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>&#160; <span class="keywordflow">if</span> (exclusiveMaximum_ ? i &gt;= maximum_.GetInt64() : i &gt; maximum_.GetInt64()) {</div><div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>&#160; context.error_handler.AboveMaximum(i, maximum_, exclusiveMaximum_);</div><div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>&#160; RAPIDJSON_INVALID_KEYWORD_RETURN(GetMaximumString());</div><div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>&#160; }</div><div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>&#160; }</div><div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (maximum_.IsUint64()) { }</div><div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>&#160; <span class="comment">/* do nothing */</span> <span class="comment">// i &lt;= max(int64_t) &lt; maximum_.GetUint64()</span></div><div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!CheckDoubleMaximum(context, static_cast&lt;double&gt;(i)))</div><div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>&#160; }</div><div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>&#160;</div><div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>&#160; <span class="keywordflow">if</span> (!multipleOf_.IsNull()) {</div><div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>&#160; <span class="keywordflow">if</span> (multipleOf_.IsUint64()) {</div><div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>&#160; <span class="keywordflow">if</span> (static_cast&lt;uint64_t&gt;(i &gt;= 0 ? i : -i) % multipleOf_.GetUint64() != 0) {</div><div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>&#160; context.error_handler.NotMultipleOf(i, multipleOf_);</div><div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>&#160; RAPIDJSON_INVALID_KEYWORD_RETURN(GetMultipleOfString());</div><div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>&#160; }</div><div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>&#160; }</div><div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!CheckDoubleMultipleOf(context, static_cast&lt;double&gt;(i)))</div><div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>&#160; }</div><div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>&#160;</div><div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>&#160; }</div><div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>&#160;</div><div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>&#160; <span class="keywordtype">bool</span> CheckUint(Context&amp; context, uint64_t i)<span class="keyword"> const </span>{</div><div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>&#160; <span class="keywordflow">if</span> (!(type_ &amp; ((1 &lt;&lt; kIntegerSchemaType) | (1 &lt;&lt; kNumberSchemaType)))) {</div><div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>&#160; DisallowedType(context, GetIntegerString());</div><div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>&#160; RAPIDJSON_INVALID_KEYWORD_RETURN(GetTypeString());</div><div class="line"><a name="l01284"></a><span class="lineno"> 1284</span>&#160; }</div><div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>&#160;</div><div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>&#160; <span class="keywordflow">if</span> (!minimum_.IsNull()) {</div><div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>&#160; <span class="keywordflow">if</span> (minimum_.IsUint64()) {</div><div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>&#160; <span class="keywordflow">if</span> (exclusiveMinimum_ ? i &lt;= minimum_.GetUint64() : i &lt; minimum_.GetUint64()) {</div><div class="line"><a name="l01289"></a><span class="lineno"> 1289</span>&#160; context.error_handler.BelowMinimum(i, minimum_, exclusiveMinimum_);</div><div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>&#160; RAPIDJSON_INVALID_KEYWORD_RETURN(GetMinimumString());</div><div class="line"><a name="l01291"></a><span class="lineno"> 1291</span>&#160; }</div><div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>&#160; }</div><div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (minimum_.IsInt64())</div><div class="line"><a name="l01294"></a><span class="lineno"> 1294</span>&#160; <span class="comment">/* do nothing */</span>; <span class="comment">// i &gt;= 0 &gt; minimum.Getint64()</span></div><div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!CheckDoubleMinimum(context, static_cast&lt;double&gt;(i)))</div><div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01297"></a><span class="lineno"> 1297</span>&#160; }</div><div class="line"><a name="l01298"></a><span class="lineno"> 1298</span>&#160;</div><div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>&#160; <span class="keywordflow">if</span> (!maximum_.IsNull()) {</div><div class="line"><a name="l01300"></a><span class="lineno"> 1300</span>&#160; <span class="keywordflow">if</span> (maximum_.IsUint64()) {</div><div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>&#160; <span class="keywordflow">if</span> (exclusiveMaximum_ ? i &gt;= maximum_.GetUint64() : i &gt; maximum_.GetUint64()) {</div><div class="line"><a name="l01302"></a><span class="lineno"> 1302</span>&#160; context.error_handler.AboveMaximum(i, maximum_, exclusiveMaximum_);</div><div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>&#160; RAPIDJSON_INVALID_KEYWORD_RETURN(GetMaximumString());</div><div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>&#160; }</div><div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>&#160; }</div><div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (maximum_.IsInt64()) {</div><div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>&#160; context.error_handler.AboveMaximum(i, maximum_, exclusiveMaximum_);</div><div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>&#160; RAPIDJSON_INVALID_KEYWORD_RETURN(GetMaximumString()); <span class="comment">// i &gt;= 0 &gt; maximum_</span></div><div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>&#160; }</div><div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!CheckDoubleMaximum(context, static_cast&lt;double&gt;(i)))</div><div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>&#160; }</div><div class="line"><a name="l01313"></a><span class="lineno"> 1313</span>&#160;</div><div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>&#160; <span class="keywordflow">if</span> (!multipleOf_.IsNull()) {</div><div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>&#160; <span class="keywordflow">if</span> (multipleOf_.IsUint64()) {</div><div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>&#160; <span class="keywordflow">if</span> (i % multipleOf_.GetUint64() != 0) {</div><div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>&#160; context.error_handler.NotMultipleOf(i, multipleOf_);</div><div class="line"><a name="l01318"></a><span class="lineno"> 1318</span>&#160; RAPIDJSON_INVALID_KEYWORD_RETURN(GetMultipleOfString());</div><div class="line"><a name="l01319"></a><span class="lineno"> 1319</span>&#160; }</div><div class="line"><a name="l01320"></a><span class="lineno"> 1320</span>&#160; }</div><div class="line"><a name="l01321"></a><span class="lineno"> 1321</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!CheckDoubleMultipleOf(context, static_cast&lt;double&gt;(i)))</div><div class="line"><a name="l01322"></a><span class="lineno"> 1322</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01323"></a><span class="lineno"> 1323</span>&#160; }</div><div class="line"><a name="l01324"></a><span class="lineno"> 1324</span>&#160;</div><div class="line"><a name="l01325"></a><span class="lineno"> 1325</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l01326"></a><span class="lineno"> 1326</span>&#160; }</div><div class="line"><a name="l01327"></a><span class="lineno"> 1327</span>&#160;</div><div class="line"><a name="l01328"></a><span class="lineno"> 1328</span>&#160; <span class="keywordtype">bool</span> CheckDoubleMinimum(Context&amp; context, <span class="keywordtype">double</span> d)<span class="keyword"> const </span>{</div><div class="line"><a name="l01329"></a><span class="lineno"> 1329</span>&#160; <span class="keywordflow">if</span> (exclusiveMinimum_ ? d &lt;= minimum_.GetDouble() : d &lt; minimum_.GetDouble()) {</div><div class="line"><a name="l01330"></a><span class="lineno"> 1330</span>&#160; context.error_handler.BelowMinimum(d, minimum_, exclusiveMinimum_);</div><div class="line"><a name="l01331"></a><span class="lineno"> 1331</span>&#160; RAPIDJSON_INVALID_KEYWORD_RETURN(GetMinimumString());</div><div class="line"><a name="l01332"></a><span class="lineno"> 1332</span>&#160; }</div><div class="line"><a name="l01333"></a><span class="lineno"> 1333</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>&#160; }</div><div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>&#160;</div><div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>&#160; <span class="keywordtype">bool</span> CheckDoubleMaximum(Context&amp; context, <span class="keywordtype">double</span> d)<span class="keyword"> const </span>{</div><div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>&#160; <span class="keywordflow">if</span> (exclusiveMaximum_ ? d &gt;= maximum_.GetDouble() : d &gt; maximum_.GetDouble()) {</div><div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>&#160; context.error_handler.AboveMaximum(d, maximum_, exclusiveMaximum_);</div><div class="line"><a name="l01339"></a><span class="lineno"> 1339</span>&#160; RAPIDJSON_INVALID_KEYWORD_RETURN(GetMaximumString());</div><div class="line"><a name="l01340"></a><span class="lineno"> 1340</span>&#160; }</div><div class="line"><a name="l01341"></a><span class="lineno"> 1341</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l01342"></a><span class="lineno"> 1342</span>&#160; }</div><div class="line"><a name="l01343"></a><span class="lineno"> 1343</span>&#160;</div><div class="line"><a name="l01344"></a><span class="lineno"> 1344</span>&#160; <span class="keywordtype">bool</span> CheckDoubleMultipleOf(Context&amp; context, <span class="keywordtype">double</span> d)<span class="keyword"> const </span>{</div><div class="line"><a name="l01345"></a><span class="lineno"> 1345</span>&#160; <span class="keywordtype">double</span> a = std::abs(d), b = std::abs(multipleOf_.GetDouble());</div><div class="line"><a name="l01346"></a><span class="lineno"> 1346</span>&#160; <span class="keywordtype">double</span> q = std::floor(a / b);</div><div class="line"><a name="l01347"></a><span class="lineno"> 1347</span>&#160; <span class="keywordtype">double</span> r = a - q * b;</div><div class="line"><a name="l01348"></a><span class="lineno"> 1348</span>&#160; <span class="keywordflow">if</span> (r &gt; 0.0) {</div><div class="line"><a name="l01349"></a><span class="lineno"> 1349</span>&#160; context.error_handler.NotMultipleOf(d, multipleOf_);</div><div class="line"><a name="l01350"></a><span class="lineno"> 1350</span>&#160; RAPIDJSON_INVALID_KEYWORD_RETURN(GetMultipleOfString());</div><div class="line"><a name="l01351"></a><span class="lineno"> 1351</span>&#160; }</div><div class="line"><a name="l01352"></a><span class="lineno"> 1352</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l01353"></a><span class="lineno"> 1353</span>&#160; }</div><div class="line"><a name="l01354"></a><span class="lineno"> 1354</span>&#160;</div><div class="line"><a name="l01355"></a><span class="lineno"> 1355</span>&#160; <span class="keywordtype">void</span> DisallowedType(Context&amp; context, <span class="keyword">const</span> ValueType&amp; actualType)<span class="keyword"> const </span>{</div><div class="line"><a name="l01356"></a><span class="lineno"> 1356</span>&#160; ErrorHandler&amp; eh = context.error_handler;</div><div class="line"><a name="l01357"></a><span class="lineno"> 1357</span>&#160; eh.StartDisallowedType();</div><div class="line"><a name="l01358"></a><span class="lineno"> 1358</span>&#160;</div><div class="line"><a name="l01359"></a><span class="lineno"> 1359</span>&#160; <span class="keywordflow">if</span> (type_ &amp; (1 &lt;&lt; kNullSchemaType)) eh.AddExpectedType(GetNullString());</div><div class="line"><a name="l01360"></a><span class="lineno"> 1360</span>&#160; <span class="keywordflow">if</span> (type_ &amp; (1 &lt;&lt; kBooleanSchemaType)) eh.AddExpectedType(GetBooleanString());</div><div class="line"><a name="l01361"></a><span class="lineno"> 1361</span>&#160; <span class="keywordflow">if</span> (type_ &amp; (1 &lt;&lt; kObjectSchemaType)) eh.AddExpectedType(GetObjectString());</div><div class="line"><a name="l01362"></a><span class="lineno"> 1362</span>&#160; <span class="keywordflow">if</span> (type_ &amp; (1 &lt;&lt; kArraySchemaType)) eh.AddExpectedType(GetArrayString());</div><div class="line"><a name="l01363"></a><span class="lineno"> 1363</span>&#160; <span class="keywordflow">if</span> (type_ &amp; (1 &lt;&lt; kStringSchemaType)) eh.AddExpectedType(GetStringString());</div><div class="line"><a name="l01364"></a><span class="lineno"> 1364</span>&#160;</div><div class="line"><a name="l01365"></a><span class="lineno"> 1365</span>&#160; <span class="keywordflow">if</span> (type_ &amp; (1 &lt;&lt; kNumberSchemaType)) eh.AddExpectedType(GetNumberString());</div><div class="line"><a name="l01366"></a><span class="lineno"> 1366</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (type_ &amp; (1 &lt;&lt; kIntegerSchemaType)) eh.AddExpectedType(GetIntegerString());</div><div class="line"><a name="l01367"></a><span class="lineno"> 1367</span>&#160;</div><div class="line"><a name="l01368"></a><span class="lineno"> 1368</span>&#160; eh.EndDisallowedType(actualType);</div><div class="line"><a name="l01369"></a><span class="lineno"> 1369</span>&#160; }</div><div class="line"><a name="l01370"></a><span class="lineno"> 1370</span>&#160;</div><div class="line"><a name="l01371"></a><span class="lineno"> 1371</span>&#160; <span class="keyword">struct </span>Property {</div><div class="line"><a name="l01372"></a><span class="lineno"> 1372</span>&#160; Property() : schema(), dependenciesSchema(), dependenciesValidatorIndex(), dependencies(), required(false) {}</div><div class="line"><a name="l01373"></a><span class="lineno"> 1373</span>&#160; ~Property() { AllocatorType::Free(dependencies); }</div><div class="line"><a name="l01374"></a><span class="lineno"> 1374</span>&#160; SValue name;</div><div class="line"><a name="l01375"></a><span class="lineno"> 1375</span>&#160; <span class="keyword">const</span> SchemaType* schema;</div><div class="line"><a name="l01376"></a><span class="lineno"> 1376</span>&#160; <span class="keyword">const</span> SchemaType* dependenciesSchema;</div><div class="line"><a name="l01377"></a><span class="lineno"> 1377</span>&#160; <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> dependenciesValidatorIndex;</div><div class="line"><a name="l01378"></a><span class="lineno"> 1378</span>&#160; <span class="keywordtype">bool</span>* dependencies;</div><div class="line"><a name="l01379"></a><span class="lineno"> 1379</span>&#160; <span class="keywordtype">bool</span> required;</div><div class="line"><a name="l01380"></a><span class="lineno"> 1380</span>&#160; };</div><div class="line"><a name="l01381"></a><span class="lineno"> 1381</span>&#160;</div><div class="line"><a name="l01382"></a><span class="lineno"> 1382</span>&#160; <span class="keyword">struct </span>PatternProperty {</div><div class="line"><a name="l01383"></a><span class="lineno"> 1383</span>&#160; PatternProperty() : schema(), pattern() {}</div><div class="line"><a name="l01384"></a><span class="lineno"> 1384</span>&#160; ~PatternProperty() { </div><div class="line"><a name="l01385"></a><span class="lineno"> 1385</span>&#160; <span class="keywordflow">if</span> (pattern) {</div><div class="line"><a name="l01386"></a><span class="lineno"> 1386</span>&#160; pattern-&gt;~RegexType();</div><div class="line"><a name="l01387"></a><span class="lineno"> 1387</span>&#160; AllocatorType::Free(pattern);</div><div class="line"><a name="l01388"></a><span class="lineno"> 1388</span>&#160; }</div><div class="line"><a name="l01389"></a><span class="lineno"> 1389</span>&#160; }</div><div class="line"><a name="l01390"></a><span class="lineno"> 1390</span>&#160; <span class="keyword">const</span> SchemaType* schema;</div><div class="line"><a name="l01391"></a><span class="lineno"> 1391</span>&#160; RegexType* pattern;</div><div class="line"><a name="l01392"></a><span class="lineno"> 1392</span>&#160; };</div><div class="line"><a name="l01393"></a><span class="lineno"> 1393</span>&#160;</div><div class="line"><a name="l01394"></a><span class="lineno"> 1394</span>&#160; AllocatorType* allocator_;</div><div class="line"><a name="l01395"></a><span class="lineno"> 1395</span>&#160; SValue uri_;</div><div class="line"><a name="l01396"></a><span class="lineno"> 1396</span>&#160; PointerType pointer_;</div><div class="line"><a name="l01397"></a><span class="lineno"> 1397</span>&#160; <span class="keyword">const</span> SchemaType* typeless_;</div><div class="line"><a name="l01398"></a><span class="lineno"> 1398</span>&#160; uint64_t* enum_;</div><div class="line"><a name="l01399"></a><span class="lineno"> 1399</span>&#160; <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> enumCount_;</div><div class="line"><a name="l01400"></a><span class="lineno"> 1400</span>&#160; SchemaArray allOf_;</div><div class="line"><a name="l01401"></a><span class="lineno"> 1401</span>&#160; SchemaArray anyOf_;</div><div class="line"><a name="l01402"></a><span class="lineno"> 1402</span>&#160; SchemaArray oneOf_;</div><div class="line"><a name="l01403"></a><span class="lineno"> 1403</span>&#160; <span class="keyword">const</span> SchemaType* not_;</div><div class="line"><a name="l01404"></a><span class="lineno"> 1404</span>&#160; <span class="keywordtype">unsigned</span> type_; <span class="comment">// bitmask of kSchemaType</span></div><div class="line"><a name="l01405"></a><span class="lineno"> 1405</span>&#160; <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> validatorCount_;</div><div class="line"><a name="l01406"></a><span class="lineno"> 1406</span>&#160; <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> notValidatorIndex_;</div><div class="line"><a name="l01407"></a><span class="lineno"> 1407</span>&#160;</div><div class="line"><a name="l01408"></a><span class="lineno"> 1408</span>&#160; Property* properties_;</div><div class="line"><a name="l01409"></a><span class="lineno"> 1409</span>&#160; <span class="keyword">const</span> SchemaType* additionalPropertiesSchema_;</div><div class="line"><a name="l01410"></a><span class="lineno"> 1410</span>&#160; PatternProperty* patternProperties_;</div><div class="line"><a name="l01411"></a><span class="lineno"> 1411</span>&#160; <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> patternPropertyCount_;</div><div class="line"><a name="l01412"></a><span class="lineno"> 1412</span>&#160; <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> propertyCount_;</div><div class="line"><a name="l01413"></a><span class="lineno"> 1413</span>&#160; <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> minProperties_;</div><div class="line"><a name="l01414"></a><span class="lineno"> 1414</span>&#160; <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> maxProperties_;</div><div class="line"><a name="l01415"></a><span class="lineno"> 1415</span>&#160; <span class="keywordtype">bool</span> additionalProperties_;</div><div class="line"><a name="l01416"></a><span class="lineno"> 1416</span>&#160; <span class="keywordtype">bool</span> hasDependencies_;</div><div class="line"><a name="l01417"></a><span class="lineno"> 1417</span>&#160; <span class="keywordtype">bool</span> hasRequired_;</div><div class="line"><a name="l01418"></a><span class="lineno"> 1418</span>&#160; <span class="keywordtype">bool</span> hasSchemaDependencies_;</div><div class="line"><a name="l01419"></a><span class="lineno"> 1419</span>&#160;</div><div class="line"><a name="l01420"></a><span class="lineno"> 1420</span>&#160; <span class="keyword">const</span> SchemaType* additionalItemsSchema_;</div><div class="line"><a name="l01421"></a><span class="lineno"> 1421</span>&#160; <span class="keyword">const</span> SchemaType* itemsList_;</div><div class="line"><a name="l01422"></a><span class="lineno"> 1422</span>&#160; <span class="keyword">const</span> SchemaType** itemsTuple_;</div><div class="line"><a name="l01423"></a><span class="lineno"> 1423</span>&#160; <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> itemsTupleCount_;</div><div class="line"><a name="l01424"></a><span class="lineno"> 1424</span>&#160; <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> minItems_;</div><div class="line"><a name="l01425"></a><span class="lineno"> 1425</span>&#160; <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> maxItems_;</div><div class="line"><a name="l01426"></a><span class="lineno"> 1426</span>&#160; <span class="keywordtype">bool</span> additionalItems_;</div><div class="line"><a name="l01427"></a><span class="lineno"> 1427</span>&#160; <span class="keywordtype">bool</span> uniqueItems_;</div><div class="line"><a name="l01428"></a><span class="lineno"> 1428</span>&#160;</div><div class="line"><a name="l01429"></a><span class="lineno"> 1429</span>&#160; RegexType* pattern_;</div><div class="line"><a name="l01430"></a><span class="lineno"> 1430</span>&#160; <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> minLength_;</div><div class="line"><a name="l01431"></a><span class="lineno"> 1431</span>&#160; <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> maxLength_;</div><div class="line"><a name="l01432"></a><span class="lineno"> 1432</span>&#160;</div><div class="line"><a name="l01433"></a><span class="lineno"> 1433</span>&#160; SValue minimum_;</div><div class="line"><a name="l01434"></a><span class="lineno"> 1434</span>&#160; SValue maximum_;</div><div class="line"><a name="l01435"></a><span class="lineno"> 1435</span>&#160; SValue multipleOf_;</div><div class="line"><a name="l01436"></a><span class="lineno"> 1436</span>&#160; <span class="keywordtype">bool</span> exclusiveMinimum_;</div><div class="line"><a name="l01437"></a><span class="lineno"> 1437</span>&#160; <span class="keywordtype">bool</span> exclusiveMaximum_;</div><div class="line"><a name="l01438"></a><span class="lineno"> 1438</span>&#160; </div><div class="line"><a name="l01439"></a><span class="lineno"> 1439</span>&#160; <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> defaultValueLength_;</div><div class="line"><a name="l01440"></a><span class="lineno"> 1440</span>&#160;};</div><div class="line"><a name="l01441"></a><span class="lineno"> 1441</span>&#160;</div><div class="line"><a name="l01442"></a><span class="lineno"> 1442</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> Stack, <span class="keyword">typename</span> Ch&gt;</div><div class="line"><a name="l01443"></a><span class="lineno"> 1443</span>&#160;<span class="keyword">struct </span>TokenHelper {</div><div class="line"><a name="l01444"></a><span class="lineno"> 1444</span>&#160; RAPIDJSON_FORCEINLINE <span class="keyword">static</span> <span class="keywordtype">void</span> AppendIndexToken(Stack&amp; documentStack, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> index) {</div><div class="line"><a name="l01445"></a><span class="lineno"> 1445</span>&#160; *documentStack.template Push&lt;Ch&gt;() = <span class="charliteral">&#39;/&#39;</span>;</div><div class="line"><a name="l01446"></a><span class="lineno"> 1446</span>&#160; <span class="keywordtype">char</span> buffer[21];</div><div class="line"><a name="l01447"></a><span class="lineno"> 1447</span>&#160; <span class="keywordtype">size_t</span> length = <span class="keyword">static_cast&lt;</span><span class="keywordtype">size_t</span><span class="keyword">&gt;</span>((<span class="keyword">sizeof</span>(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a>) == 4 ? u32toa(index, buffer) : u64toa(index, buffer)) - buffer);</div><div class="line"><a name="l01448"></a><span class="lineno"> 1448</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; length; i++)</div><div class="line"><a name="l01449"></a><span class="lineno"> 1449</span>&#160; *documentStack.template Push&lt;Ch&gt;() = <span class="keyword">static_cast&lt;</span>Ch<span class="keyword">&gt;</span>(buffer[i]);</div><div class="line"><a name="l01450"></a><span class="lineno"> 1450</span>&#160; }</div><div class="line"><a name="l01451"></a><span class="lineno"> 1451</span>&#160;};</div><div class="line"><a name="l01452"></a><span class="lineno"> 1452</span>&#160;</div><div class="line"><a name="l01453"></a><span class="lineno"> 1453</span>&#160;<span class="comment">// Partial specialized version for char to prevent buffer copying.</span></div><div class="line"><a name="l01454"></a><span class="lineno"> 1454</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> Stack&gt;</div><div class="line"><a name="l01455"></a><span class="lineno"> 1455</span>&#160;<span class="keyword">struct </span>TokenHelper&lt;Stack, char&gt; {</div><div class="line"><a name="l01456"></a><span class="lineno"> 1456</span>&#160; RAPIDJSON_FORCEINLINE <span class="keyword">static</span> <span class="keywordtype">void</span> AppendIndexToken(Stack&amp; documentStack, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> index) {</div><div class="line"><a name="l01457"></a><span class="lineno"> 1457</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">sizeof</span>(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a>) == 4) {</div><div class="line"><a name="l01458"></a><span class="lineno"> 1458</span>&#160; <span class="keywordtype">char</span> *buffer = documentStack.template Push&lt;char&gt;(1 + 10); <span class="comment">// &#39;/&#39; + uint</span></div><div class="line"><a name="l01459"></a><span class="lineno"> 1459</span>&#160; *buffer++ = <span class="charliteral">&#39;/&#39;</span>;</div><div class="line"><a name="l01460"></a><span class="lineno"> 1460</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* end = internal::u32toa(index, buffer);</div><div class="line"><a name="l01461"></a><span class="lineno"> 1461</span>&#160; documentStack.template Pop&lt;char&gt;(<span class="keyword">static_cast&lt;</span><span class="keywordtype">size_t</span><span class="keyword">&gt;</span>(10 - (end - buffer)));</div><div class="line"><a name="l01462"></a><span class="lineno"> 1462</span>&#160; }</div><div class="line"><a name="l01463"></a><span class="lineno"> 1463</span>&#160; <span class="keywordflow">else</span> {</div><div class="line"><a name="l01464"></a><span class="lineno"> 1464</span>&#160; <span class="keywordtype">char</span> *buffer = documentStack.template Push&lt;char&gt;(1 + 20); <span class="comment">// &#39;/&#39; + uint64</span></div><div class="line"><a name="l01465"></a><span class="lineno"> 1465</span>&#160; *buffer++ = <span class="charliteral">&#39;/&#39;</span>;</div><div class="line"><a name="l01466"></a><span class="lineno"> 1466</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* end = internal::u64toa(index, buffer);</div><div class="line"><a name="l01467"></a><span class="lineno"> 1467</span>&#160; documentStack.template Pop&lt;char&gt;(<span class="keyword">static_cast&lt;</span><span class="keywordtype">size_t</span><span class="keyword">&gt;</span>(20 - (end - buffer)));</div><div class="line"><a name="l01468"></a><span class="lineno"> 1468</span>&#160; }</div><div class="line"><a name="l01469"></a><span class="lineno"> 1469</span>&#160; }</div><div class="line"><a name="l01470"></a><span class="lineno"> 1470</span>&#160;};</div><div class="line"><a name="l01471"></a><span class="lineno"> 1471</span>&#160;</div><div class="line"><a name="l01472"></a><span class="lineno"> 1472</span>&#160;} <span class="comment">// namespace internal</span></div><div class="line"><a name="l01473"></a><span class="lineno"> 1473</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01474"></a><span class="lineno"> 1474</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l01475"></a><span class="lineno"> 1475</span>&#160;<span class="comment"></span><span class="comment">// IGenericRemoteSchemaDocumentProvider</span></div><div class="line"><a name="l01476"></a><span class="lineno"> 1476</span>&#160;</div><div class="line"><a name="l01477"></a><span class="lineno"> 1477</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> SchemaDocumentType&gt;</div><div class="line"><a name="l01478"></a><span class="lineno"> 1478</span>&#160;<span class="keyword">class </span>IGenericRemoteSchemaDocumentProvider {</div><div class="line"><a name="l01479"></a><span class="lineno"> 1479</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l01480"></a><span class="lineno"> 1480</span>&#160; <span class="keyword">typedef</span> <span class="keyword">typename</span> SchemaDocumentType::Ch Ch;</div><div class="line"><a name="l01481"></a><span class="lineno"> 1481</span>&#160;</div><div class="line"><a name="l01482"></a><span class="lineno"> 1482</span>&#160; <span class="keyword">virtual</span> ~IGenericRemoteSchemaDocumentProvider() {}</div><div class="line"><a name="l01483"></a><span class="lineno"> 1483</span>&#160; <span class="keyword">virtual</span> <span class="keyword">const</span> SchemaDocumentType* GetRemoteDocument(<span class="keyword">const</span> Ch* uri, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> length) = 0;</div><div class="line"><a name="l01484"></a><span class="lineno"> 1484</span>&#160;};</div><div class="line"><a name="l01485"></a><span class="lineno"> 1485</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01486"></a><span class="lineno"> 1486</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l01487"></a><span class="lineno"> 1487</span>&#160;<span class="comment"></span><span class="comment">// GenericSchemaDocument</span></div><div class="line"><a name="l01488"></a><span class="lineno"> 1488</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01489"></a><span class="lineno"> 1489</span>&#160;<span class="comment">//! JSON schema document.</span></div><div class="line"><a name="l01490"></a><span class="lineno"> 1490</span>&#160;<span class="comment"></span><span class="comment">/*!</span></div><div class="line"><a name="l01491"></a><span class="lineno"> 1491</span>&#160;<span class="comment"> A JSON schema document is a compiled version of a JSON schema.</span></div><div class="line"><a name="l01492"></a><span class="lineno"> 1492</span>&#160;<span class="comment"> It is basically a tree of internal::Schema.</span></div><div class="line"><a name="l01493"></a><span class="lineno"> 1493</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01494"></a><span class="lineno"> 1494</span>&#160;<span class="comment"> \note This is an immutable class (i.e. its instance cannot be modified after construction).</span></div><div class="line"><a name="l01495"></a><span class="lineno"> 1495</span>&#160;<span class="comment"> \tparam ValueT Type of JSON value (e.g. \c Value ), which also determine the encoding.</span></div><div class="line"><a name="l01496"></a><span class="lineno"> 1496</span>&#160;<span class="comment"> \tparam Allocator Allocator type for allocating memory of this document.</span></div><div class="line"><a name="l01497"></a><span class="lineno"> 1497</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l01498"></a><span class="lineno"> 1498</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> ValueT, <span class="keyword">typename</span> Allocator = CrtAllocator&gt;</div><div class="line"><a name="l01499"></a><span class="lineno"> 1499</span>&#160;<span class="keyword">class </span>GenericSchemaDocument {</div><div class="line"><a name="l01500"></a><span class="lineno"> 1500</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l01501"></a><span class="lineno"> 1501</span>&#160; <span class="keyword">typedef</span> ValueT ValueType;</div><div class="line"><a name="l01502"></a><span class="lineno"> 1502</span>&#160; <span class="keyword">typedef</span> IGenericRemoteSchemaDocumentProvider&lt;GenericSchemaDocument&gt; IRemoteSchemaDocumentProviderType;</div><div class="line"><a name="l01503"></a><span class="lineno"> 1503</span>&#160; <span class="keyword">typedef</span> Allocator AllocatorType;</div><div class="line"><a name="l01504"></a><span class="lineno"> 1504</span>&#160; <span class="keyword">typedef</span> <span class="keyword">typename</span> ValueType::EncodingType EncodingType;</div><div class="line"><a name="l01505"></a><span class="lineno"> 1505</span>&#160; <span class="keyword">typedef</span> <span class="keyword">typename</span> EncodingType::Ch Ch;</div><div class="line"><a name="l01506"></a><span class="lineno"> 1506</span>&#160; <span class="keyword">typedef</span> internal::Schema&lt;GenericSchemaDocument&gt; SchemaType;</div><div class="line"><a name="l01507"></a><span class="lineno"> 1507</span>&#160; <span class="keyword">typedef</span> GenericPointer&lt;ValueType, Allocator&gt; PointerType;</div><div class="line"><a name="l01508"></a><span class="lineno"> 1508</span>&#160; <span class="keyword">typedef</span> GenericValue&lt;EncodingType, Allocator&gt; URIType;</div><div class="line"><a name="l01509"></a><span class="lineno"> 1509</span>&#160; <span class="keyword">friend</span> <span class="keyword">class </span>internal::Schema&lt;GenericSchemaDocument&gt;;</div><div class="line"><a name="l01510"></a><span class="lineno"> 1510</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span>, <span class="keyword">typename</span>, <span class="keyword">typename</span>&gt;</div><div class="line"><a name="l01511"></a><span class="lineno"> 1511</span>&#160; <span class="keyword">friend</span> <span class="keyword">class </span>GenericSchemaValidator;</div><div class="line"><a name="l01512"></a><span class="lineno"> 1512</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01513"></a><span class="lineno"> 1513</span>&#160;<span class="comment"> //! Constructor.</span></div><div class="line"><a name="l01514"></a><span class="lineno"> 1514</span>&#160;<span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l01515"></a><span class="lineno"> 1515</span>&#160;<span class="comment"> Compile a JSON document into schema document.</span></div><div class="line"><a name="l01516"></a><span class="lineno"> 1516</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01517"></a><span class="lineno"> 1517</span>&#160;<span class="comment"> \param document A JSON document as source.</span></div><div class="line"><a name="l01518"></a><span class="lineno"> 1518</span>&#160;<span class="comment"> \param uri The base URI of this schema document for purposes of violation reporting.</span></div><div class="line"><a name="l01519"></a><span class="lineno"> 1519</span>&#160;<span class="comment"> \param uriLength Length of \c name, in code points.</span></div><div class="line"><a name="l01520"></a><span class="lineno"> 1520</span>&#160;<span class="comment"> \param remoteProvider An optional remote schema document provider for resolving remote reference. Can be null.</span></div><div class="line"><a name="l01521"></a><span class="lineno"> 1521</span>&#160;<span class="comment"> \param allocator An optional allocator instance for allocating memory. Can be null.</span></div><div class="line"><a name="l01522"></a><span class="lineno"> 1522</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01523"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_schema_document.html#aeebf51ef6353f6a01d6f6618da6d0865"> 1523</a></span>&#160; <span class="keyword">explicit</span> <a class="code" href="classrapidjson_1_1_generic_schema_document.html#aeebf51ef6353f6a01d6f6618da6d0865">GenericSchemaDocument</a>(<span class="keyword">const</span> ValueType&amp; document, <span class="keyword">const</span> Ch* uri = 0, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> uriLength = 0,</div><div class="line"><a name="l01524"></a><span class="lineno"> 1524</span>&#160; IRemoteSchemaDocumentProviderType* remoteProvider = 0, <a class="code" href="classrapidjson_1_1_allocator.html">Allocator</a>* allocator = 0) :</div><div class="line"><a name="l01525"></a><span class="lineno"> 1525</span>&#160; remoteProvider_(remoteProvider),</div><div class="line"><a name="l01526"></a><span class="lineno"> 1526</span>&#160; allocator_(allocator),</div><div class="line"><a name="l01527"></a><span class="lineno"> 1527</span>&#160; ownAllocator_(),</div><div class="line"><a name="l01528"></a><span class="lineno"> 1528</span>&#160; root_(),</div><div class="line"><a name="l01529"></a><span class="lineno"> 1529</span>&#160; typeless_(),</div><div class="line"><a name="l01530"></a><span class="lineno"> 1530</span>&#160; schemaMap_(allocator, kInitialSchemaMapSize),</div><div class="line"><a name="l01531"></a><span class="lineno"> 1531</span>&#160; schemaRef_(allocator, kInitialSchemaRefSize)</div><div class="line"><a name="l01532"></a><span class="lineno"> 1532</span>&#160; {</div><div class="line"><a name="l01533"></a><span class="lineno"> 1533</span>&#160; <span class="keywordflow">if</span> (!allocator_)</div><div class="line"><a name="l01534"></a><span class="lineno"> 1534</span>&#160; ownAllocator_ = allocator_ = <a class="code" href="rapidjson_8h.html#abdc7cd7902748ffe6626d71c59a73c3b">RAPIDJSON_NEW</a>(<a class="code" href="classrapidjson_1_1_allocator.html">Allocator</a>)();</div><div class="line"><a name="l01535"></a><span class="lineno"> 1535</span>&#160;</div><div class="line"><a name="l01536"></a><span class="lineno"> 1536</span>&#160; Ch noUri[1] = {0};</div><div class="line"><a name="l01537"></a><span class="lineno"> 1537</span>&#160; uri_.SetString(uri ? uri : noUri, uriLength, *allocator_);</div><div class="line"><a name="l01538"></a><span class="lineno"> 1538</span>&#160;</div><div class="line"><a name="l01539"></a><span class="lineno"> 1539</span>&#160; typeless_ = <span class="keyword">static_cast&lt;</span>SchemaType*<span class="keyword">&gt;</span>(allocator_-&gt;Malloc(<span class="keyword">sizeof</span>(SchemaType)));</div><div class="line"><a name="l01540"></a><span class="lineno"> 1540</span>&#160; <span class="keyword">new</span> (typeless_) SchemaType(<span class="keyword">this</span>, PointerType(), ValueType(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4acf030b422a32c3647c7c5973bd4dd0a9">kObjectType</a>).Move(), ValueType(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4acf030b422a32c3647c7c5973bd4dd0a9">kObjectType</a>).Move(), allocator_);</div><div class="line"><a name="l01541"></a><span class="lineno"> 1541</span>&#160;</div><div class="line"><a name="l01542"></a><span class="lineno"> 1542</span>&#160; <span class="comment">// Generate root schema, it will call CreateSchema() to create sub-schemas,</span></div><div class="line"><a name="l01543"></a><span class="lineno"> 1543</span>&#160; <span class="comment">// And call AddRefSchema() if there are $ref.</span></div><div class="line"><a name="l01544"></a><span class="lineno"> 1544</span>&#160; CreateSchemaRecursive(&amp;root_, PointerType(), document, document);</div><div class="line"><a name="l01545"></a><span class="lineno"> 1545</span>&#160;</div><div class="line"><a name="l01546"></a><span class="lineno"> 1546</span>&#160; <span class="comment">// Resolve $ref</span></div><div class="line"><a name="l01547"></a><span class="lineno"> 1547</span>&#160; <span class="keywordflow">while</span> (!schemaRef_.Empty()) {</div><div class="line"><a name="l01548"></a><span class="lineno"> 1548</span>&#160; SchemaRefEntry* refEntry = schemaRef_.template Pop&lt;SchemaRefEntry&gt;(1);</div><div class="line"><a name="l01549"></a><span class="lineno"> 1549</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> SchemaType* s = GetSchema(refEntry-&gt;target)) {</div><div class="line"><a name="l01550"></a><span class="lineno"> 1550</span>&#160; <span class="keywordflow">if</span> (refEntry-&gt;schema)</div><div class="line"><a name="l01551"></a><span class="lineno"> 1551</span>&#160; *refEntry-&gt;schema = s;</div><div class="line"><a name="l01552"></a><span class="lineno"> 1552</span>&#160;</div><div class="line"><a name="l01553"></a><span class="lineno"> 1553</span>&#160; <span class="comment">// Create entry in map if not exist</span></div><div class="line"><a name="l01554"></a><span class="lineno"> 1554</span>&#160; <span class="keywordflow">if</span> (!GetSchema(refEntry-&gt;source)) {</div><div class="line"><a name="l01555"></a><span class="lineno"> 1555</span>&#160; <span class="keyword">new</span> (schemaMap_.template Push&lt;SchemaEntry&gt;()) SchemaEntry(refEntry-&gt;source, const_cast&lt;SchemaType*&gt;(s), <span class="keyword">false</span>, allocator_);</div><div class="line"><a name="l01556"></a><span class="lineno"> 1556</span>&#160; }</div><div class="line"><a name="l01557"></a><span class="lineno"> 1557</span>&#160; }</div><div class="line"><a name="l01558"></a><span class="lineno"> 1558</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (refEntry-&gt;schema)</div><div class="line"><a name="l01559"></a><span class="lineno"> 1559</span>&#160; *refEntry-&gt;schema = typeless_;</div><div class="line"><a name="l01560"></a><span class="lineno"> 1560</span>&#160;</div><div class="line"><a name="l01561"></a><span class="lineno"> 1561</span>&#160; refEntry-&gt;~SchemaRefEntry();</div><div class="line"><a name="l01562"></a><span class="lineno"> 1562</span>&#160; }</div><div class="line"><a name="l01563"></a><span class="lineno"> 1563</span>&#160;</div><div class="line"><a name="l01564"></a><span class="lineno"> 1564</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(root_ != 0);</div><div class="line"><a name="l01565"></a><span class="lineno"> 1565</span>&#160;</div><div class="line"><a name="l01566"></a><span class="lineno"> 1566</span>&#160; schemaRef_.ShrinkToFit(); <span class="comment">// Deallocate all memory for ref</span></div><div class="line"><a name="l01567"></a><span class="lineno"> 1567</span>&#160; }</div><div class="line"><a name="l01568"></a><span class="lineno"> 1568</span>&#160;</div><div class="line"><a name="l01569"></a><span class="lineno"> 1569</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l01570"></a><span class="lineno"> 1570</span>&#160;<span class="comment"> //! Move constructor in C++11</span></div><div class="line"><a name="l01571"></a><span class="lineno"> 1571</span>&#160;<span class="comment"></span> <a class="code" href="classrapidjson_1_1_generic_schema_document.html">GenericSchemaDocument</a>(<a class="code" href="classrapidjson_1_1_generic_schema_document.html">GenericSchemaDocument</a>&amp;&amp; rhs) RAPIDJSON_NOEXCEPT :</div><div class="line"><a name="l01572"></a><span class="lineno"> 1572</span>&#160; remoteProvider_(rhs.remoteProvider_),</div><div class="line"><a name="l01573"></a><span class="lineno"> 1573</span>&#160; allocator_(rhs.allocator_),</div><div class="line"><a name="l01574"></a><span class="lineno"> 1574</span>&#160; ownAllocator_(rhs.ownAllocator_),</div><div class="line"><a name="l01575"></a><span class="lineno"> 1575</span>&#160; root_(rhs.root_),</div><div class="line"><a name="l01576"></a><span class="lineno"> 1576</span>&#160; typeless_(rhs.typeless_),</div><div class="line"><a name="l01577"></a><span class="lineno"> 1577</span>&#160; schemaMap_(std::move(rhs.schemaMap_)),</div><div class="line"><a name="l01578"></a><span class="lineno"> 1578</span>&#160; schemaRef_(std::move(rhs.schemaRef_)),</div><div class="line"><a name="l01579"></a><span class="lineno"> 1579</span>&#160; uri_(std::move(rhs.uri_))</div><div class="line"><a name="l01580"></a><span class="lineno"> 1580</span>&#160; {</div><div class="line"><a name="l01581"></a><span class="lineno"> 1581</span>&#160; rhs.remoteProvider_ = 0;</div><div class="line"><a name="l01582"></a><span class="lineno"> 1582</span>&#160; rhs.allocator_ = 0;</div><div class="line"><a name="l01583"></a><span class="lineno"> 1583</span>&#160; rhs.ownAllocator_ = 0;</div><div class="line"><a name="l01584"></a><span class="lineno"> 1584</span>&#160; rhs.typeless_ = 0;</div><div class="line"><a name="l01585"></a><span class="lineno"> 1585</span>&#160; }</div><div class="line"><a name="l01586"></a><span class="lineno"> 1586</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01587"></a><span class="lineno"> 1587</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01588"></a><span class="lineno"> 1588</span>&#160;<span class="comment"> //! Destructor</span></div><div class="line"><a name="l01589"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_schema_document.html#adf6f3372013227873ed392dee1e752bf"> 1589</a></span>&#160;<span class="comment"></span> <a class="code" href="classrapidjson_1_1_generic_schema_document.html#adf6f3372013227873ed392dee1e752bf">~GenericSchemaDocument</a>() {</div><div class="line"><a name="l01590"></a><span class="lineno"> 1590</span>&#160; <span class="keywordflow">while</span> (!schemaMap_.Empty())</div><div class="line"><a name="l01591"></a><span class="lineno"> 1591</span>&#160; schemaMap_.template Pop&lt;SchemaEntry&gt;(1)-&gt;~SchemaEntry();</div><div class="line"><a name="l01592"></a><span class="lineno"> 1592</span>&#160;</div><div class="line"><a name="l01593"></a><span class="lineno"> 1593</span>&#160; <span class="keywordflow">if</span> (typeless_) {</div><div class="line"><a name="l01594"></a><span class="lineno"> 1594</span>&#160; typeless_-&gt;~SchemaType();</div><div class="line"><a name="l01595"></a><span class="lineno"> 1595</span>&#160; Allocator::Free(typeless_);</div><div class="line"><a name="l01596"></a><span class="lineno"> 1596</span>&#160; }</div><div class="line"><a name="l01597"></a><span class="lineno"> 1597</span>&#160;</div><div class="line"><a name="l01598"></a><span class="lineno"> 1598</span>&#160; <a class="code" href="rapidjson_8h.html#a52c941c3fdd646527cdcd42aa846a28a">RAPIDJSON_DELETE</a>(ownAllocator_);</div><div class="line"><a name="l01599"></a><span class="lineno"> 1599</span>&#160; }</div><div class="line"><a name="l01600"></a><span class="lineno"> 1600</span>&#160;</div><div class="line"><a name="l01601"></a><span class="lineno"> 1601</span>&#160; <span class="keyword">const</span> URIType&amp; GetURI()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> uri_; }</div><div class="line"><a name="l01602"></a><span class="lineno"> 1602</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01603"></a><span class="lineno"> 1603</span>&#160;<span class="comment"> //! Get the root schema.</span></div><div class="line"><a name="l01604"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_schema_document.html#a8b2ac6de85dc9c1fb4f4d0be4aeb2d6a"> 1604</a></span>&#160;<span class="comment"></span> <span class="keyword">const</span> SchemaType&amp; <a class="code" href="classrapidjson_1_1_generic_schema_document.html#a8b2ac6de85dc9c1fb4f4d0be4aeb2d6a">GetRoot</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> *root_; }</div><div class="line"><a name="l01605"></a><span class="lineno"> 1605</span>&#160;</div><div class="line"><a name="l01606"></a><span class="lineno"> 1606</span>&#160;<span class="keyword">private</span>:<span class="comment"></span></div><div class="line"><a name="l01607"></a><span class="lineno"> 1607</span>&#160;<span class="comment"> //! Prohibit copying</span></div><div class="line"><a name="l01608"></a><span class="lineno"> 1608</span>&#160;<span class="comment"></span> <a class="code" href="classrapidjson_1_1_generic_schema_document.html">GenericSchemaDocument</a>(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_schema_document.html">GenericSchemaDocument</a>&amp;);<span class="comment"></span></div><div class="line"><a name="l01609"></a><span class="lineno"> 1609</span>&#160;<span class="comment"> //! Prohibit assignment</span></div><div class="line"><a name="l01610"></a><span class="lineno"> 1610</span>&#160;<span class="comment"></span> <a class="code" href="classrapidjson_1_1_generic_schema_document.html">GenericSchemaDocument</a>&amp; operator=(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_schema_document.html">GenericSchemaDocument</a>&amp;);</div><div class="line"><a name="l01611"></a><span class="lineno"> 1611</span>&#160;</div><div class="line"><a name="l01612"></a><span class="lineno"> 1612</span>&#160; <span class="keyword">struct </span>SchemaRefEntry {</div><div class="line"><a name="l01613"></a><span class="lineno"> 1613</span>&#160; SchemaRefEntry(<span class="keyword">const</span> PointerType&amp; s, <span class="keyword">const</span> PointerType&amp; t, <span class="keyword">const</span> SchemaType** outSchema, <a class="code" href="classrapidjson_1_1_allocator.html">Allocator</a> *allocator) : source(s, allocator), target(t, allocator), schema(outSchema) {}</div><div class="line"><a name="l01614"></a><span class="lineno"> 1614</span>&#160; PointerType source;</div><div class="line"><a name="l01615"></a><span class="lineno"> 1615</span>&#160; PointerType target;</div><div class="line"><a name="l01616"></a><span class="lineno"> 1616</span>&#160; <span class="keyword">const</span> SchemaType** schema;</div><div class="line"><a name="l01617"></a><span class="lineno"> 1617</span>&#160; };</div><div class="line"><a name="l01618"></a><span class="lineno"> 1618</span>&#160;</div><div class="line"><a name="l01619"></a><span class="lineno"> 1619</span>&#160; <span class="keyword">struct </span>SchemaEntry {</div><div class="line"><a name="l01620"></a><span class="lineno"> 1620</span>&#160; SchemaEntry(<span class="keyword">const</span> PointerType&amp; p, SchemaType* s, <span class="keywordtype">bool</span> o, <a class="code" href="classrapidjson_1_1_allocator.html">Allocator</a>* allocator) : pointer(p, allocator), schema(s), owned(o) {}</div><div class="line"><a name="l01621"></a><span class="lineno"> 1621</span>&#160; ~SchemaEntry() {</div><div class="line"><a name="l01622"></a><span class="lineno"> 1622</span>&#160; <span class="keywordflow">if</span> (owned) {</div><div class="line"><a name="l01623"></a><span class="lineno"> 1623</span>&#160; schema-&gt;~SchemaType();</div><div class="line"><a name="l01624"></a><span class="lineno"> 1624</span>&#160; Allocator::Free(schema);</div><div class="line"><a name="l01625"></a><span class="lineno"> 1625</span>&#160; }</div><div class="line"><a name="l01626"></a><span class="lineno"> 1626</span>&#160; }</div><div class="line"><a name="l01627"></a><span class="lineno"> 1627</span>&#160; PointerType pointer;</div><div class="line"><a name="l01628"></a><span class="lineno"> 1628</span>&#160; SchemaType* schema;</div><div class="line"><a name="l01629"></a><span class="lineno"> 1629</span>&#160; <span class="keywordtype">bool</span> owned;</div><div class="line"><a name="l01630"></a><span class="lineno"> 1630</span>&#160; };</div><div class="line"><a name="l01631"></a><span class="lineno"> 1631</span>&#160;</div><div class="line"><a name="l01632"></a><span class="lineno"> 1632</span>&#160; <span class="keywordtype">void</span> CreateSchemaRecursive(<span class="keyword">const</span> SchemaType** schema, <span class="keyword">const</span> PointerType&amp; pointer, <span class="keyword">const</span> ValueType&amp; v, <span class="keyword">const</span> ValueType&amp; document) {</div><div class="line"><a name="l01633"></a><span class="lineno"> 1633</span>&#160; <span class="keywordflow">if</span> (schema)</div><div class="line"><a name="l01634"></a><span class="lineno"> 1634</span>&#160; *schema = typeless_;</div><div class="line"><a name="l01635"></a><span class="lineno"> 1635</span>&#160;</div><div class="line"><a name="l01636"></a><span class="lineno"> 1636</span>&#160; <span class="keywordflow">if</span> (v.GetType() == <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4acf030b422a32c3647c7c5973bd4dd0a9">kObjectType</a>) {</div><div class="line"><a name="l01637"></a><span class="lineno"> 1637</span>&#160; <span class="keyword">const</span> SchemaType* s = GetSchema(pointer);</div><div class="line"><a name="l01638"></a><span class="lineno"> 1638</span>&#160; <span class="keywordflow">if</span> (!s)</div><div class="line"><a name="l01639"></a><span class="lineno"> 1639</span>&#160; CreateSchema(schema, pointer, v, document);</div><div class="line"><a name="l01640"></a><span class="lineno"> 1640</span>&#160;</div><div class="line"><a name="l01641"></a><span class="lineno"> 1641</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">typename</span> ValueType::ConstMemberIterator itr = v.MemberBegin(); itr != v.MemberEnd(); ++itr)</div><div class="line"><a name="l01642"></a><span class="lineno"> 1642</span>&#160; CreateSchemaRecursive(0, pointer.<a class="code" href="classrapidjson_1_1_generic_pointer.html#a7cb5eda2af1722e52efa591c4103ebec">Append</a>(itr-&gt;name, allocator_), itr-&gt;value, document);</div><div class="line"><a name="l01643"></a><span class="lineno"> 1643</span>&#160; }</div><div class="line"><a name="l01644"></a><span class="lineno"> 1644</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (v.GetType() == <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a058c622e1e7d59419ae58b895cbce468">kArrayType</a>)</div><div class="line"><a name="l01645"></a><span class="lineno"> 1645</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> i = 0; i &lt; v.Size(); i++)</div><div class="line"><a name="l01646"></a><span class="lineno"> 1646</span>&#160; CreateSchemaRecursive(0, pointer.<a class="code" href="classrapidjson_1_1_generic_pointer.html#a7cb5eda2af1722e52efa591c4103ebec">Append</a>(i, allocator_), v[i], document);</div><div class="line"><a name="l01647"></a><span class="lineno"> 1647</span>&#160; }</div><div class="line"><a name="l01648"></a><span class="lineno"> 1648</span>&#160;</div><div class="line"><a name="l01649"></a><span class="lineno"> 1649</span>&#160; <span class="keywordtype">void</span> CreateSchema(<span class="keyword">const</span> SchemaType** schema, <span class="keyword">const</span> PointerType&amp; pointer, <span class="keyword">const</span> ValueType&amp; v, <span class="keyword">const</span> ValueType&amp; document) {</div><div class="line"><a name="l01650"></a><span class="lineno"> 1650</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(pointer.<a class="code" href="classrapidjson_1_1_generic_pointer.html#a98b96d54c2c3378f1892ffffc501069c">IsValid</a>());</div><div class="line"><a name="l01651"></a><span class="lineno"> 1651</span>&#160; <span class="keywordflow">if</span> (v.IsObject()) {</div><div class="line"><a name="l01652"></a><span class="lineno"> 1652</span>&#160; <span class="keywordflow">if</span> (!HandleRefSchema(pointer, schema, v, document)) {</div><div class="line"><a name="l01653"></a><span class="lineno"> 1653</span>&#160; SchemaType* s = <span class="keyword">new</span> (allocator_-&gt;Malloc(<span class="keyword">sizeof</span>(SchemaType))) SchemaType(<span class="keyword">this</span>, pointer, v, document, allocator_);</div><div class="line"><a name="l01654"></a><span class="lineno"> 1654</span>&#160; <span class="keyword">new</span> (schemaMap_.template Push&lt;SchemaEntry&gt;()) SchemaEntry(pointer, s, <span class="keyword">true</span>, allocator_);</div><div class="line"><a name="l01655"></a><span class="lineno"> 1655</span>&#160; <span class="keywordflow">if</span> (schema)</div><div class="line"><a name="l01656"></a><span class="lineno"> 1656</span>&#160; *schema = s;</div><div class="line"><a name="l01657"></a><span class="lineno"> 1657</span>&#160; }</div><div class="line"><a name="l01658"></a><span class="lineno"> 1658</span>&#160; }</div><div class="line"><a name="l01659"></a><span class="lineno"> 1659</span>&#160; }</div><div class="line"><a name="l01660"></a><span class="lineno"> 1660</span>&#160;</div><div class="line"><a name="l01661"></a><span class="lineno"> 1661</span>&#160; <span class="keywordtype">bool</span> HandleRefSchema(<span class="keyword">const</span> PointerType&amp; source, <span class="keyword">const</span> SchemaType** schema, <span class="keyword">const</span> ValueType&amp; v, <span class="keyword">const</span> ValueType&amp; document) {</div><div class="line"><a name="l01662"></a><span class="lineno"> 1662</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> Ch kRefString[] = { <span class="charliteral">&#39;$&#39;</span>, <span class="charliteral">&#39;r&#39;</span>, <span class="charliteral">&#39;e&#39;</span>, <span class="charliteral">&#39;f&#39;</span>, <span class="charliteral">&#39;\0&#39;</span> };</div><div class="line"><a name="l01663"></a><span class="lineno"> 1663</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> ValueType kRefValue(kRefString, 4);</div><div class="line"><a name="l01664"></a><span class="lineno"> 1664</span>&#160;</div><div class="line"><a name="l01665"></a><span class="lineno"> 1665</span>&#160; <span class="keyword">typename</span> ValueType::ConstMemberIterator itr = v.FindMember(kRefValue);</div><div class="line"><a name="l01666"></a><span class="lineno"> 1666</span>&#160; <span class="keywordflow">if</span> (itr == v.MemberEnd())</div><div class="line"><a name="l01667"></a><span class="lineno"> 1667</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01668"></a><span class="lineno"> 1668</span>&#160;</div><div class="line"><a name="l01669"></a><span class="lineno"> 1669</span>&#160; <span class="keywordflow">if</span> (itr-&gt;value.IsString()) {</div><div class="line"><a name="l01670"></a><span class="lineno"> 1670</span>&#160; <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> len = itr-&gt;value.GetStringLength();</div><div class="line"><a name="l01671"></a><span class="lineno"> 1671</span>&#160; <span class="keywordflow">if</span> (len &gt; 0) {</div><div class="line"><a name="l01672"></a><span class="lineno"> 1672</span>&#160; <span class="keyword">const</span> Ch* s = itr-&gt;value.GetString();</div><div class="line"><a name="l01673"></a><span class="lineno"> 1673</span>&#160; <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> i = 0;</div><div class="line"><a name="l01674"></a><span class="lineno"> 1674</span>&#160; <span class="keywordflow">while</span> (i &lt; len &amp;&amp; s[i] != <span class="charliteral">&#39;#&#39;</span>) <span class="comment">// Find the first #</span></div><div class="line"><a name="l01675"></a><span class="lineno"> 1675</span>&#160; i++;</div><div class="line"><a name="l01676"></a><span class="lineno"> 1676</span>&#160;</div><div class="line"><a name="l01677"></a><span class="lineno"> 1677</span>&#160; <span class="keywordflow">if</span> (i &gt; 0) { <span class="comment">// Remote reference, resolve immediately</span></div><div class="line"><a name="l01678"></a><span class="lineno"> 1678</span>&#160; <span class="keywordflow">if</span> (remoteProvider_) {</div><div class="line"><a name="l01679"></a><span class="lineno"> 1679</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_schema_document.html">GenericSchemaDocument</a>* remoteDocument = remoteProvider_-&gt;GetRemoteDocument(s, i)) {</div><div class="line"><a name="l01680"></a><span class="lineno"> 1680</span>&#160; PointerType pointer(&amp;s[i], len - i, allocator_);</div><div class="line"><a name="l01681"></a><span class="lineno"> 1681</span>&#160; <span class="keywordflow">if</span> (pointer.<a class="code" href="classrapidjson_1_1_generic_pointer.html#a98b96d54c2c3378f1892ffffc501069c">IsValid</a>()) {</div><div class="line"><a name="l01682"></a><span class="lineno"> 1682</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> SchemaType* sc = remoteDocument-&gt;GetSchema(pointer)) {</div><div class="line"><a name="l01683"></a><span class="lineno"> 1683</span>&#160; <span class="keywordflow">if</span> (schema)</div><div class="line"><a name="l01684"></a><span class="lineno"> 1684</span>&#160; *schema = sc;</div><div class="line"><a name="l01685"></a><span class="lineno"> 1685</span>&#160; <span class="keyword">new</span> (schemaMap_.template Push&lt;SchemaEntry&gt;()) SchemaEntry(source, const_cast&lt;SchemaType*&gt;(sc), <span class="keyword">false</span>, allocator_);</div><div class="line"><a name="l01686"></a><span class="lineno"> 1686</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l01687"></a><span class="lineno"> 1687</span>&#160; }</div><div class="line"><a name="l01688"></a><span class="lineno"> 1688</span>&#160; }</div><div class="line"><a name="l01689"></a><span class="lineno"> 1689</span>&#160; }</div><div class="line"><a name="l01690"></a><span class="lineno"> 1690</span>&#160; }</div><div class="line"><a name="l01691"></a><span class="lineno"> 1691</span>&#160; }</div><div class="line"><a name="l01692"></a><span class="lineno"> 1692</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (s[i] == <span class="charliteral">&#39;#&#39;</span>) { <span class="comment">// Local reference, defer resolution</span></div><div class="line"><a name="l01693"></a><span class="lineno"> 1693</span>&#160; PointerType pointer(&amp;s[i], len - i, allocator_);</div><div class="line"><a name="l01694"></a><span class="lineno"> 1694</span>&#160; <span class="keywordflow">if</span> (pointer.<a class="code" href="classrapidjson_1_1_generic_pointer.html#a98b96d54c2c3378f1892ffffc501069c">IsValid</a>()) {</div><div class="line"><a name="l01695"></a><span class="lineno"> 1695</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> ValueType* nv = pointer.<a class="code" href="classrapidjson_1_1_generic_pointer.html#af09e26073a7263fc9e8f0c14160f45bd">Get</a>(document))</div><div class="line"><a name="l01696"></a><span class="lineno"> 1696</span>&#160; <span class="keywordflow">if</span> (HandleRefSchema(source, schema, *nv, document))</div><div class="line"><a name="l01697"></a><span class="lineno"> 1697</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l01698"></a><span class="lineno"> 1698</span>&#160;</div><div class="line"><a name="l01699"></a><span class="lineno"> 1699</span>&#160; <span class="keyword">new</span> (schemaRef_.template Push&lt;SchemaRefEntry&gt;()) SchemaRefEntry(source, pointer, schema, allocator_);</div><div class="line"><a name="l01700"></a><span class="lineno"> 1700</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l01701"></a><span class="lineno"> 1701</span>&#160; }</div><div class="line"><a name="l01702"></a><span class="lineno"> 1702</span>&#160; }</div><div class="line"><a name="l01703"></a><span class="lineno"> 1703</span>&#160; }</div><div class="line"><a name="l01704"></a><span class="lineno"> 1704</span>&#160; }</div><div class="line"><a name="l01705"></a><span class="lineno"> 1705</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01706"></a><span class="lineno"> 1706</span>&#160; }</div><div class="line"><a name="l01707"></a><span class="lineno"> 1707</span>&#160;</div><div class="line"><a name="l01708"></a><span class="lineno"> 1708</span>&#160; <span class="keyword">const</span> SchemaType* GetSchema(<span class="keyword">const</span> PointerType&amp; pointer)<span class="keyword"> const </span>{</div><div class="line"><a name="l01709"></a><span class="lineno"> 1709</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> SchemaEntry* target = schemaMap_.template Bottom&lt;SchemaEntry&gt;(); target != schemaMap_.template End&lt;SchemaEntry&gt;(); ++target)</div><div class="line"><a name="l01710"></a><span class="lineno"> 1710</span>&#160; <span class="keywordflow">if</span> (pointer == target-&gt;pointer)</div><div class="line"><a name="l01711"></a><span class="lineno"> 1711</span>&#160; <span class="keywordflow">return</span> target-&gt;schema;</div><div class="line"><a name="l01712"></a><span class="lineno"> 1712</span>&#160; <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l01713"></a><span class="lineno"> 1713</span>&#160; }</div><div class="line"><a name="l01714"></a><span class="lineno"> 1714</span>&#160;</div><div class="line"><a name="l01715"></a><span class="lineno"> 1715</span>&#160; PointerType GetPointer(<span class="keyword">const</span> SchemaType* schema)<span class="keyword"> const </span>{</div><div class="line"><a name="l01716"></a><span class="lineno"> 1716</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> SchemaEntry* target = schemaMap_.template Bottom&lt;SchemaEntry&gt;(); target != schemaMap_.template End&lt;SchemaEntry&gt;(); ++target)</div><div class="line"><a name="l01717"></a><span class="lineno"> 1717</span>&#160; <span class="keywordflow">if</span> (schema == target-&gt;schema)</div><div class="line"><a name="l01718"></a><span class="lineno"> 1718</span>&#160; <span class="keywordflow">return</span> target-&gt;pointer;</div><div class="line"><a name="l01719"></a><span class="lineno"> 1719</span>&#160; <span class="keywordflow">return</span> PointerType();</div><div class="line"><a name="l01720"></a><span class="lineno"> 1720</span>&#160; }</div><div class="line"><a name="l01721"></a><span class="lineno"> 1721</span>&#160;</div><div class="line"><a name="l01722"></a><span class="lineno"> 1722</span>&#160; <span class="keyword">const</span> SchemaType* GetTypeless()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> typeless_; }</div><div class="line"><a name="l01723"></a><span class="lineno"> 1723</span>&#160;</div><div class="line"><a name="l01724"></a><span class="lineno"> 1724</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">size_t</span> kInitialSchemaMapSize = 64;</div><div class="line"><a name="l01725"></a><span class="lineno"> 1725</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">size_t</span> kInitialSchemaRefSize = 64;</div><div class="line"><a name="l01726"></a><span class="lineno"> 1726</span>&#160;</div><div class="line"><a name="l01727"></a><span class="lineno"> 1727</span>&#160; IRemoteSchemaDocumentProviderType* remoteProvider_;</div><div class="line"><a name="l01728"></a><span class="lineno"> 1728</span>&#160; <a class="code" href="classrapidjson_1_1_allocator.html">Allocator</a> *allocator_;</div><div class="line"><a name="l01729"></a><span class="lineno"> 1729</span>&#160; <a class="code" href="classrapidjson_1_1_allocator.html">Allocator</a> *ownAllocator_;</div><div class="line"><a name="l01730"></a><span class="lineno"> 1730</span>&#160; <span class="keyword">const</span> SchemaType* root_; <span class="comment">//!&lt; Root schema.</span></div><div class="line"><a name="l01731"></a><span class="lineno"> 1731</span>&#160;<span class="comment"></span> SchemaType* typeless_;</div><div class="line"><a name="l01732"></a><span class="lineno"> 1732</span>&#160; internal::Stack&lt;Allocator&gt; schemaMap_; <span class="comment">// Stores created Pointer -&gt; Schemas</span></div><div class="line"><a name="l01733"></a><span class="lineno"> 1733</span>&#160; internal::Stack&lt;Allocator&gt; schemaRef_; <span class="comment">// Stores Pointer from $ref and schema which holds the $ref</span></div><div class="line"><a name="l01734"></a><span class="lineno"> 1734</span>&#160; URIType uri_;</div><div class="line"><a name="l01735"></a><span class="lineno"> 1735</span>&#160;};</div><div class="line"><a name="l01736"></a><span class="lineno"> 1736</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01737"></a><span class="lineno"> 1737</span>&#160;<span class="comment">//! GenericSchemaDocument using Value type.</span></div><div class="line"><a name="l01738"></a><span class="lineno"> 1738</span>&#160;<span class="comment"></span><span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_schema_document.html">GenericSchemaDocument&lt;Value&gt;</a> <a class="code" href="classrapidjson_1_1_generic_schema_document.html">SchemaDocument</a>;<span class="comment"></span></div><div class="line"><a name="l01739"></a><span class="lineno"> 1739</span>&#160;<span class="comment">//! IGenericRemoteSchemaDocumentProvider using SchemaDocument.</span></div><div class="line"><a name="l01740"></a><span class="lineno"> 1740</span>&#160;<span class="comment"></span><span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_i_generic_remote_schema_document_provider.html">IGenericRemoteSchemaDocumentProvider&lt;SchemaDocument&gt;</a> <a class="code" href="classrapidjson_1_1_i_generic_remote_schema_document_provider.html">IRemoteSchemaDocumentProvider</a>;</div><div class="line"><a name="l01741"></a><span class="lineno"> 1741</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01742"></a><span class="lineno"> 1742</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l01743"></a><span class="lineno"> 1743</span>&#160;<span class="comment"></span><span class="comment">// GenericSchemaValidator</span></div><div class="line"><a name="l01744"></a><span class="lineno"> 1744</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01745"></a><span class="lineno"> 1745</span>&#160;<span class="comment">//! JSON Schema Validator.</span></div><div class="line"><a name="l01746"></a><span class="lineno"> 1746</span>&#160;<span class="comment"></span><span class="comment">/*!</span></div><div class="line"><a name="l01747"></a><span class="lineno"> 1747</span>&#160;<span class="comment"> A SAX style JSON schema validator.</span></div><div class="line"><a name="l01748"></a><span class="lineno"> 1748</span>&#160;<span class="comment"> It uses a \c GenericSchemaDocument to validate SAX events.</span></div><div class="line"><a name="l01749"></a><span class="lineno"> 1749</span>&#160;<span class="comment"> It delegates the incoming SAX events to an output handler.</span></div><div class="line"><a name="l01750"></a><span class="lineno"> 1750</span>&#160;<span class="comment"> The default output handler does nothing.</span></div><div class="line"><a name="l01751"></a><span class="lineno"> 1751</span>&#160;<span class="comment"> It can be reused multiple times by calling \c Reset().</span></div><div class="line"><a name="l01752"></a><span class="lineno"> 1752</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01753"></a><span class="lineno"> 1753</span>&#160;<span class="comment"> \tparam SchemaDocumentType Type of schema document.</span></div><div class="line"><a name="l01754"></a><span class="lineno"> 1754</span>&#160;<span class="comment"> \tparam OutputHandler Type of output handler. Default handler does nothing.</span></div><div class="line"><a name="l01755"></a><span class="lineno"> 1755</span>&#160;<span class="comment"> \tparam StateAllocator Allocator for storing the internal validation states.</span></div><div class="line"><a name="l01756"></a><span class="lineno"> 1756</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l01757"></a><span class="lineno"> 1757</span>&#160;<span class="keyword">template</span> &lt;</div><div class="line"><a name="l01758"></a><span class="lineno"> 1758</span>&#160; <span class="keyword">typename</span> SchemaDocumentType,</div><div class="line"><a name="l01759"></a><span class="lineno"> 1759</span>&#160; <span class="keyword">typename</span> OutputHandler = <a class="code" href="structrapidjson_1_1_base_reader_handler.html">BaseReaderHandler&lt;typename SchemaDocumentType::SchemaType::EncodingType&gt;</a>,</div><div class="line"><a name="l01760"></a><span class="lineno"> 1760</span>&#160; <span class="keyword">typename</span> StateAllocator = <a class="code" href="classrapidjson_1_1_crt_allocator.html">CrtAllocator</a>&gt;</div><div class="line"><a name="l01761"></a><span class="lineno"> 1761</span>&#160;<span class="keyword">class </span><a class="code" href="classrapidjson_1_1_generic_schema_validator.html">GenericSchemaValidator</a> :</div><div class="line"><a name="l01762"></a><span class="lineno"> 1762</span>&#160; <span class="keyword">public</span> internal::ISchemaStateFactory&lt;typename SchemaDocumentType::SchemaType&gt;, </div><div class="line"><a name="l01763"></a><span class="lineno"> 1763</span>&#160; <span class="keyword">public</span> internal::ISchemaValidator,</div><div class="line"><a name="l01764"></a><span class="lineno"> 1764</span>&#160; <span class="keyword">public</span> internal::IValidationErrorHandler&lt;typename SchemaDocumentType::SchemaType&gt;</div><div class="line"><a name="l01765"></a><span class="lineno"> 1765</span>&#160;{</div><div class="line"><a name="l01766"></a><span class="lineno"> 1766</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l01767"></a><span class="lineno"> 1767</span>&#160; <span class="keyword">typedef</span> <span class="keyword">typename</span> SchemaDocumentType::SchemaType SchemaType;</div><div class="line"><a name="l01768"></a><span class="lineno"> 1768</span>&#160; <span class="keyword">typedef</span> <span class="keyword">typename</span> SchemaDocumentType::PointerType PointerType;</div><div class="line"><a name="l01769"></a><span class="lineno"> 1769</span>&#160; <span class="keyword">typedef</span> <span class="keyword">typename</span> SchemaType::EncodingType EncodingType;</div><div class="line"><a name="l01770"></a><span class="lineno"> 1770</span>&#160; <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="classrapidjson_1_1_generic_value.html">SchemaType::SValue</a> SValue;</div><div class="line"><a name="l01771"></a><span class="lineno"> 1771</span>&#160; <span class="keyword">typedef</span> <span class="keyword">typename</span> EncodingType::Ch Ch;</div><div class="line"><a name="l01772"></a><span class="lineno"> 1772</span>&#160; <span class="keyword">typedef</span> <a class="code" href="structrapidjson_1_1_generic_string_ref.html">GenericStringRef&lt;Ch&gt;</a> StringRefType;</div><div class="line"><a name="l01773"></a><span class="lineno"> 1773</span>&#160; <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue&lt;EncodingType, StateAllocator&gt;</a> ValueType;</div><div class="line"><a name="l01774"></a><span class="lineno"> 1774</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01775"></a><span class="lineno"> 1775</span>&#160;<span class="comment"> //! Constructor without output handler.</span></div><div class="line"><a name="l01776"></a><span class="lineno"> 1776</span>&#160;<span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l01777"></a><span class="lineno"> 1777</span>&#160;<span class="comment"> \param schemaDocument The schema document to conform to.</span></div><div class="line"><a name="l01778"></a><span class="lineno"> 1778</span>&#160;<span class="comment"> \param allocator Optional allocator for storing internal validation states.</span></div><div class="line"><a name="l01779"></a><span class="lineno"> 1779</span>&#160;<span class="comment"> \param schemaStackCapacity Optional initial capacity of schema path stack.</span></div><div class="line"><a name="l01780"></a><span class="lineno"> 1780</span>&#160;<span class="comment"> \param documentStackCapacity Optional initial capacity of document path stack.</span></div><div class="line"><a name="l01781"></a><span class="lineno"> 1781</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01782"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_schema_validator.html#acc07bd08b00195d84bb5b83f59c593d3"> 1782</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_schema_validator.html#acc07bd08b00195d84bb5b83f59c593d3">GenericSchemaValidator</a>(</div><div class="line"><a name="l01783"></a><span class="lineno"> 1783</span>&#160; <span class="keyword">const</span> SchemaDocumentType&amp; schemaDocument,</div><div class="line"><a name="l01784"></a><span class="lineno"> 1784</span>&#160; StateAllocator* allocator = 0, </div><div class="line"><a name="l01785"></a><span class="lineno"> 1785</span>&#160; <span class="keywordtype">size_t</span> schemaStackCapacity = kDefaultSchemaStackCapacity,</div><div class="line"><a name="l01786"></a><span class="lineno"> 1786</span>&#160; <span class="keywordtype">size_t</span> documentStackCapacity = kDefaultDocumentStackCapacity)</div><div class="line"><a name="l01787"></a><span class="lineno"> 1787</span>&#160; :</div><div class="line"><a name="l01788"></a><span class="lineno"> 1788</span>&#160; schemaDocument_(&amp;schemaDocument),</div><div class="line"><a name="l01789"></a><span class="lineno"> 1789</span>&#160; root_(schemaDocument.GetRoot()),</div><div class="line"><a name="l01790"></a><span class="lineno"> 1790</span>&#160; stateAllocator_(allocator),</div><div class="line"><a name="l01791"></a><span class="lineno"> 1791</span>&#160; ownStateAllocator_(0),</div><div class="line"><a name="l01792"></a><span class="lineno"> 1792</span>&#160; schemaStack_(allocator, schemaStackCapacity),</div><div class="line"><a name="l01793"></a><span class="lineno"> 1793</span>&#160; documentStack_(allocator, documentStackCapacity),</div><div class="line"><a name="l01794"></a><span class="lineno"> 1794</span>&#160; outputHandler_(0),</div><div class="line"><a name="l01795"></a><span class="lineno"> 1795</span>&#160; error_(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4acf030b422a32c3647c7c5973bd4dd0a9">kObjectType</a>),</div><div class="line"><a name="l01796"></a><span class="lineno"> 1796</span>&#160; currentError_(),</div><div class="line"><a name="l01797"></a><span class="lineno"> 1797</span>&#160; missingDependents_(),</div><div class="line"><a name="l01798"></a><span class="lineno"> 1798</span>&#160; valid_(true)</div><div class="line"><a name="l01799"></a><span class="lineno"> 1799</span>&#160;#if RAPIDJSON_SCHEMA_VERBOSE</div><div class="line"><a name="l01800"></a><span class="lineno"> 1800</span>&#160; , depth_(0)</div><div class="line"><a name="l01801"></a><span class="lineno"> 1801</span>&#160;#endif</div><div class="line"><a name="l01802"></a><span class="lineno"> 1802</span>&#160; {</div><div class="line"><a name="l01803"></a><span class="lineno"> 1803</span>&#160; }</div><div class="line"><a name="l01804"></a><span class="lineno"> 1804</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01805"></a><span class="lineno"> 1805</span>&#160;<span class="comment"> //! Constructor with output handler.</span></div><div class="line"><a name="l01806"></a><span class="lineno"> 1806</span>&#160;<span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l01807"></a><span class="lineno"> 1807</span>&#160;<span class="comment"> \param schemaDocument The schema document to conform to.</span></div><div class="line"><a name="l01808"></a><span class="lineno"> 1808</span>&#160;<span class="comment"> \param allocator Optional allocator for storing internal validation states.</span></div><div class="line"><a name="l01809"></a><span class="lineno"> 1809</span>&#160;<span class="comment"> \param schemaStackCapacity Optional initial capacity of schema path stack.</span></div><div class="line"><a name="l01810"></a><span class="lineno"> 1810</span>&#160;<span class="comment"> \param documentStackCapacity Optional initial capacity of document path stack.</span></div><div class="line"><a name="l01811"></a><span class="lineno"> 1811</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01812"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_schema_validator.html#a0e1d8f19381bd53d77cc00a9a6dcd067"> 1812</a></span>&#160; <a class="code" href="classrapidjson_1_1_generic_schema_validator.html#a0e1d8f19381bd53d77cc00a9a6dcd067">GenericSchemaValidator</a>(</div><div class="line"><a name="l01813"></a><span class="lineno"> 1813</span>&#160; <span class="keyword">const</span> SchemaDocumentType&amp; schemaDocument,</div><div class="line"><a name="l01814"></a><span class="lineno"> 1814</span>&#160; OutputHandler&amp; outputHandler,</div><div class="line"><a name="l01815"></a><span class="lineno"> 1815</span>&#160; StateAllocator* allocator = 0, </div><div class="line"><a name="l01816"></a><span class="lineno"> 1816</span>&#160; <span class="keywordtype">size_t</span> schemaStackCapacity = kDefaultSchemaStackCapacity,</div><div class="line"><a name="l01817"></a><span class="lineno"> 1817</span>&#160; <span class="keywordtype">size_t</span> documentStackCapacity = kDefaultDocumentStackCapacity)</div><div class="line"><a name="l01818"></a><span class="lineno"> 1818</span>&#160; :</div><div class="line"><a name="l01819"></a><span class="lineno"> 1819</span>&#160; schemaDocument_(&amp;schemaDocument),</div><div class="line"><a name="l01820"></a><span class="lineno"> 1820</span>&#160; root_(schemaDocument.GetRoot()),</div><div class="line"><a name="l01821"></a><span class="lineno"> 1821</span>&#160; stateAllocator_(allocator),</div><div class="line"><a name="l01822"></a><span class="lineno"> 1822</span>&#160; ownStateAllocator_(0),</div><div class="line"><a name="l01823"></a><span class="lineno"> 1823</span>&#160; schemaStack_(allocator, schemaStackCapacity),</div><div class="line"><a name="l01824"></a><span class="lineno"> 1824</span>&#160; documentStack_(allocator, documentStackCapacity),</div><div class="line"><a name="l01825"></a><span class="lineno"> 1825</span>&#160; outputHandler_(&amp;outputHandler),</div><div class="line"><a name="l01826"></a><span class="lineno"> 1826</span>&#160; error_(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4acf030b422a32c3647c7c5973bd4dd0a9">kObjectType</a>),</div><div class="line"><a name="l01827"></a><span class="lineno"> 1827</span>&#160; currentError_(),</div><div class="line"><a name="l01828"></a><span class="lineno"> 1828</span>&#160; missingDependents_(),</div><div class="line"><a name="l01829"></a><span class="lineno"> 1829</span>&#160; valid_(true)</div><div class="line"><a name="l01830"></a><span class="lineno"> 1830</span>&#160;#if RAPIDJSON_SCHEMA_VERBOSE</div><div class="line"><a name="l01831"></a><span class="lineno"> 1831</span>&#160; , depth_(0)</div><div class="line"><a name="l01832"></a><span class="lineno"> 1832</span>&#160;#endif</div><div class="line"><a name="l01833"></a><span class="lineno"> 1833</span>&#160; {</div><div class="line"><a name="l01834"></a><span class="lineno"> 1834</span>&#160; }</div><div class="line"><a name="l01835"></a><span class="lineno"> 1835</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01836"></a><span class="lineno"> 1836</span>&#160;<span class="comment"> //! Destructor.</span></div><div class="line"><a name="l01837"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_schema_validator.html#ad9f00d71bf62b8983cf2514c43fb1572"> 1837</a></span>&#160;<span class="comment"></span> <a class="code" href="classrapidjson_1_1_generic_schema_validator.html#ad9f00d71bf62b8983cf2514c43fb1572">~GenericSchemaValidator</a>() {</div><div class="line"><a name="l01838"></a><span class="lineno"> 1838</span>&#160; Reset();</div><div class="line"><a name="l01839"></a><span class="lineno"> 1839</span>&#160; <a class="code" href="rapidjson_8h.html#a52c941c3fdd646527cdcd42aa846a28a">RAPIDJSON_DELETE</a>(ownStateAllocator_);</div><div class="line"><a name="l01840"></a><span class="lineno"> 1840</span>&#160; }</div><div class="line"><a name="l01841"></a><span class="lineno"> 1841</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01842"></a><span class="lineno"> 1842</span>&#160;<span class="comment"> //! Reset the internal states.</span></div><div class="line"><a name="l01843"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_schema_validator.html#afe6cd0d9088a1d4cf8100c0efc9f76fc"> 1843</a></span>&#160;<span class="comment"></span> <span class="keywordtype">void</span> <a class="code" href="classrapidjson_1_1_generic_schema_validator.html#afe6cd0d9088a1d4cf8100c0efc9f76fc">Reset</a>() {</div><div class="line"><a name="l01844"></a><span class="lineno"> 1844</span>&#160; <span class="keywordflow">while</span> (!schemaStack_.Empty())</div><div class="line"><a name="l01845"></a><span class="lineno"> 1845</span>&#160; PopSchema();</div><div class="line"><a name="l01846"></a><span class="lineno"> 1846</span>&#160; documentStack_.Clear();</div><div class="line"><a name="l01847"></a><span class="lineno"> 1847</span>&#160; error_.SetObject();</div><div class="line"><a name="l01848"></a><span class="lineno"> 1848</span>&#160; currentError_.SetNull();</div><div class="line"><a name="l01849"></a><span class="lineno"> 1849</span>&#160; missingDependents_.SetNull();</div><div class="line"><a name="l01850"></a><span class="lineno"> 1850</span>&#160; valid_ = <span class="keyword">true</span>;</div><div class="line"><a name="l01851"></a><span class="lineno"> 1851</span>&#160; }</div><div class="line"><a name="l01852"></a><span class="lineno"> 1852</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01853"></a><span class="lineno"> 1853</span>&#160;<span class="comment"> //! Checks whether the current state is valid.</span></div><div class="line"><a name="l01854"></a><span class="lineno"> 1854</span>&#160;<span class="comment"></span> <span class="comment">// Implementation of ISchemaValidator</span></div><div class="line"><a name="l01855"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_schema_validator.html#ad32a9ad31dbb588edaaf038ab053275b"> 1855</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_generic_schema_validator.html#ad32a9ad31dbb588edaaf038ab053275b">IsValid</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> valid_; }</div><div class="line"><a name="l01856"></a><span class="lineno"> 1856</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01857"></a><span class="lineno"> 1857</span>&#160;<span class="comment"> //! Gets the error object.</span></div><div class="line"><a name="l01858"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_schema_validator.html#a422c16457e512835b0d0f64ec1c81ba2"> 1858</a></span>&#160;<span class="comment"></span> ValueType&amp; <a class="code" href="classrapidjson_1_1_generic_schema_validator.html#a422c16457e512835b0d0f64ec1c81ba2">GetError</a>() { <span class="keywordflow">return</span> error_; }</div><div class="line"><a name="l01859"></a><span class="lineno"> 1859</span>&#160; <span class="keyword">const</span> ValueType&amp; GetError()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> error_; }</div><div class="line"><a name="l01860"></a><span class="lineno"> 1860</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01861"></a><span class="lineno"> 1861</span>&#160;<span class="comment"> //! Gets the JSON pointer pointed to the invalid schema.</span></div><div class="line"><a name="l01862"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_schema_validator.html#a3238efb9d9144c2d6577362d8dc5f61b"> 1862</a></span>&#160;<span class="comment"></span> PointerType <a class="code" href="classrapidjson_1_1_generic_schema_validator.html#a3238efb9d9144c2d6577362d8dc5f61b">GetInvalidSchemaPointer</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l01863"></a><span class="lineno"> 1863</span>&#160; <span class="keywordflow">return</span> schemaStack_.Empty() ? PointerType() : CurrentSchema().GetPointer();</div><div class="line"><a name="l01864"></a><span class="lineno"> 1864</span>&#160; }</div><div class="line"><a name="l01865"></a><span class="lineno"> 1865</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01866"></a><span class="lineno"> 1866</span>&#160;<span class="comment"> //! Gets the keyword of invalid schema.</span></div><div class="line"><a name="l01867"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_schema_validator.html#a03bcd5497a574cffbd066d0aec2b5585"> 1867</a></span>&#160;<span class="comment"></span> <span class="keyword">const</span> Ch* <a class="code" href="classrapidjson_1_1_generic_schema_validator.html#a03bcd5497a574cffbd066d0aec2b5585">GetInvalidSchemaKeyword</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l01868"></a><span class="lineno"> 1868</span>&#160; <span class="keywordflow">return</span> schemaStack_.Empty() ? 0 : CurrentContext().invalidKeyword;</div><div class="line"><a name="l01869"></a><span class="lineno"> 1869</span>&#160; }</div><div class="line"><a name="l01870"></a><span class="lineno"> 1870</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01871"></a><span class="lineno"> 1871</span>&#160;<span class="comment"> //! Gets the JSON pointer pointed to the invalid value.</span></div><div class="line"><a name="l01872"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_schema_validator.html#a60dfb4a89593c8d3ca4c89a6202feb52"> 1872</a></span>&#160;<span class="comment"></span> PointerType <a class="code" href="classrapidjson_1_1_generic_schema_validator.html#a60dfb4a89593c8d3ca4c89a6202feb52">GetInvalidDocumentPointer</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l01873"></a><span class="lineno"> 1873</span>&#160; <span class="keywordflow">if</span> (documentStack_.Empty()) {</div><div class="line"><a name="l01874"></a><span class="lineno"> 1874</span>&#160; <span class="keywordflow">return</span> PointerType();</div><div class="line"><a name="l01875"></a><span class="lineno"> 1875</span>&#160; }</div><div class="line"><a name="l01876"></a><span class="lineno"> 1876</span>&#160; <span class="keywordflow">else</span> {</div><div class="line"><a name="l01877"></a><span class="lineno"> 1877</span>&#160; <span class="keywordflow">return</span> PointerType(documentStack_.template Bottom&lt;Ch&gt;(), documentStack_.GetSize() / <span class="keyword">sizeof</span>(Ch));</div><div class="line"><a name="l01878"></a><span class="lineno"> 1878</span>&#160; }</div><div class="line"><a name="l01879"></a><span class="lineno"> 1879</span>&#160; }</div><div class="line"><a name="l01880"></a><span class="lineno"> 1880</span>&#160;</div><div class="line"><a name="l01881"></a><span class="lineno"> 1881</span>&#160; <span class="keywordtype">void</span> NotMultipleOf(int64_t actual, <span class="keyword">const</span> SValue&amp; expected) {</div><div class="line"><a name="l01882"></a><span class="lineno"> 1882</span>&#160; AddNumberError(SchemaType::GetMultipleOfString(), ValueType(actual).Move(), expected);</div><div class="line"><a name="l01883"></a><span class="lineno"> 1883</span>&#160; }</div><div class="line"><a name="l01884"></a><span class="lineno"> 1884</span>&#160; <span class="keywordtype">void</span> NotMultipleOf(uint64_t actual, <span class="keyword">const</span> SValue&amp; expected) {</div><div class="line"><a name="l01885"></a><span class="lineno"> 1885</span>&#160; AddNumberError(SchemaType::GetMultipleOfString(), ValueType(actual).Move(), expected);</div><div class="line"><a name="l01886"></a><span class="lineno"> 1886</span>&#160; }</div><div class="line"><a name="l01887"></a><span class="lineno"> 1887</span>&#160; <span class="keywordtype">void</span> NotMultipleOf(<span class="keywordtype">double</span> actual, <span class="keyword">const</span> SValue&amp; expected) {</div><div class="line"><a name="l01888"></a><span class="lineno"> 1888</span>&#160; AddNumberError(SchemaType::GetMultipleOfString(), ValueType(actual).Move(), expected);</div><div class="line"><a name="l01889"></a><span class="lineno"> 1889</span>&#160; }</div><div class="line"><a name="l01890"></a><span class="lineno"> 1890</span>&#160; <span class="keywordtype">void</span> AboveMaximum(int64_t actual, <span class="keyword">const</span> SValue&amp; expected, <span class="keywordtype">bool</span> exclusive) {</div><div class="line"><a name="l01891"></a><span class="lineno"> 1891</span>&#160; AddNumberError(SchemaType::GetMaximumString(), ValueType(actual).Move(), expected,</div><div class="line"><a name="l01892"></a><span class="lineno"> 1892</span>&#160; exclusive ? &amp;SchemaType::GetExclusiveMaximumString : 0);</div><div class="line"><a name="l01893"></a><span class="lineno"> 1893</span>&#160; }</div><div class="line"><a name="l01894"></a><span class="lineno"> 1894</span>&#160; <span class="keywordtype">void</span> AboveMaximum(uint64_t actual, <span class="keyword">const</span> SValue&amp; expected, <span class="keywordtype">bool</span> exclusive) {</div><div class="line"><a name="l01895"></a><span class="lineno"> 1895</span>&#160; AddNumberError(SchemaType::GetMaximumString(), ValueType(actual).Move(), expected,</div><div class="line"><a name="l01896"></a><span class="lineno"> 1896</span>&#160; exclusive ? &amp;SchemaType::GetExclusiveMaximumString : 0);</div><div class="line"><a name="l01897"></a><span class="lineno"> 1897</span>&#160; }</div><div class="line"><a name="l01898"></a><span class="lineno"> 1898</span>&#160; <span class="keywordtype">void</span> AboveMaximum(<span class="keywordtype">double</span> actual, <span class="keyword">const</span> SValue&amp; expected, <span class="keywordtype">bool</span> exclusive) {</div><div class="line"><a name="l01899"></a><span class="lineno"> 1899</span>&#160; AddNumberError(SchemaType::GetMaximumString(), ValueType(actual).Move(), expected,</div><div class="line"><a name="l01900"></a><span class="lineno"> 1900</span>&#160; exclusive ? &amp;SchemaType::GetExclusiveMaximumString : 0);</div><div class="line"><a name="l01901"></a><span class="lineno"> 1901</span>&#160; }</div><div class="line"><a name="l01902"></a><span class="lineno"> 1902</span>&#160; <span class="keywordtype">void</span> BelowMinimum(int64_t actual, <span class="keyword">const</span> SValue&amp; expected, <span class="keywordtype">bool</span> exclusive) {</div><div class="line"><a name="l01903"></a><span class="lineno"> 1903</span>&#160; AddNumberError(SchemaType::GetMinimumString(), ValueType(actual).Move(), expected,</div><div class="line"><a name="l01904"></a><span class="lineno"> 1904</span>&#160; exclusive ? &amp;SchemaType::GetExclusiveMinimumString : 0);</div><div class="line"><a name="l01905"></a><span class="lineno"> 1905</span>&#160; }</div><div class="line"><a name="l01906"></a><span class="lineno"> 1906</span>&#160; <span class="keywordtype">void</span> BelowMinimum(uint64_t actual, <span class="keyword">const</span> SValue&amp; expected, <span class="keywordtype">bool</span> exclusive) {</div><div class="line"><a name="l01907"></a><span class="lineno"> 1907</span>&#160; AddNumberError(SchemaType::GetMinimumString(), ValueType(actual).Move(), expected,</div><div class="line"><a name="l01908"></a><span class="lineno"> 1908</span>&#160; exclusive ? &amp;SchemaType::GetExclusiveMinimumString : 0);</div><div class="line"><a name="l01909"></a><span class="lineno"> 1909</span>&#160; }</div><div class="line"><a name="l01910"></a><span class="lineno"> 1910</span>&#160; <span class="keywordtype">void</span> BelowMinimum(<span class="keywordtype">double</span> actual, <span class="keyword">const</span> SValue&amp; expected, <span class="keywordtype">bool</span> exclusive) {</div><div class="line"><a name="l01911"></a><span class="lineno"> 1911</span>&#160; AddNumberError(SchemaType::GetMinimumString(), ValueType(actual).Move(), expected,</div><div class="line"><a name="l01912"></a><span class="lineno"> 1912</span>&#160; exclusive ? &amp;SchemaType::GetExclusiveMinimumString : 0);</div><div class="line"><a name="l01913"></a><span class="lineno"> 1913</span>&#160; }</div><div class="line"><a name="l01914"></a><span class="lineno"> 1914</span>&#160;</div><div class="line"><a name="l01915"></a><span class="lineno"> 1915</span>&#160; <span class="keywordtype">void</span> TooLong(<span class="keyword">const</span> Ch* str, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> length, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> expected) {</div><div class="line"><a name="l01916"></a><span class="lineno"> 1916</span>&#160; AddNumberError(SchemaType::GetMaxLengthString(),</div><div class="line"><a name="l01917"></a><span class="lineno"> 1917</span>&#160; ValueType(str, length, GetStateAllocator()).Move(), SValue(expected).Move());</div><div class="line"><a name="l01918"></a><span class="lineno"> 1918</span>&#160; }</div><div class="line"><a name="l01919"></a><span class="lineno"> 1919</span>&#160; <span class="keywordtype">void</span> TooShort(<span class="keyword">const</span> Ch* str, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> length, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> expected) {</div><div class="line"><a name="l01920"></a><span class="lineno"> 1920</span>&#160; AddNumberError(SchemaType::GetMinLengthString(),</div><div class="line"><a name="l01921"></a><span class="lineno"> 1921</span>&#160; ValueType(str, length, GetStateAllocator()).Move(), SValue(expected).Move());</div><div class="line"><a name="l01922"></a><span class="lineno"> 1922</span>&#160; }</div><div class="line"><a name="l01923"></a><span class="lineno"> 1923</span>&#160; <span class="keywordtype">void</span> DoesNotMatch(<span class="keyword">const</span> Ch* str, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> length) {</div><div class="line"><a name="l01924"></a><span class="lineno"> 1924</span>&#160; currentError_.SetObject();</div><div class="line"><a name="l01925"></a><span class="lineno"> 1925</span>&#160; currentError_.AddMember(GetActualString(), ValueType(str, length, GetStateAllocator()).Move(), GetStateAllocator());</div><div class="line"><a name="l01926"></a><span class="lineno"> 1926</span>&#160; AddCurrentError(SchemaType::GetPatternString());</div><div class="line"><a name="l01927"></a><span class="lineno"> 1927</span>&#160; }</div><div class="line"><a name="l01928"></a><span class="lineno"> 1928</span>&#160;</div><div class="line"><a name="l01929"></a><span class="lineno"> 1929</span>&#160; <span class="keywordtype">void</span> DisallowedItem(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> index) {</div><div class="line"><a name="l01930"></a><span class="lineno"> 1930</span>&#160; currentError_.SetObject();</div><div class="line"><a name="l01931"></a><span class="lineno"> 1931</span>&#160; currentError_.AddMember(GetDisallowedString(), ValueType(index).Move(), GetStateAllocator());</div><div class="line"><a name="l01932"></a><span class="lineno"> 1932</span>&#160; AddCurrentError(SchemaType::GetAdditionalItemsString(), <span class="keyword">true</span>);</div><div class="line"><a name="l01933"></a><span class="lineno"> 1933</span>&#160; }</div><div class="line"><a name="l01934"></a><span class="lineno"> 1934</span>&#160; <span class="keywordtype">void</span> TooFewItems(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> actualCount, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> expectedCount) {</div><div class="line"><a name="l01935"></a><span class="lineno"> 1935</span>&#160; AddNumberError(SchemaType::GetMinItemsString(),</div><div class="line"><a name="l01936"></a><span class="lineno"> 1936</span>&#160; ValueType(actualCount).Move(), SValue(expectedCount).Move());</div><div class="line"><a name="l01937"></a><span class="lineno"> 1937</span>&#160; }</div><div class="line"><a name="l01938"></a><span class="lineno"> 1938</span>&#160; <span class="keywordtype">void</span> TooManyItems(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> actualCount, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> expectedCount) {</div><div class="line"><a name="l01939"></a><span class="lineno"> 1939</span>&#160; AddNumberError(SchemaType::GetMaxItemsString(),</div><div class="line"><a name="l01940"></a><span class="lineno"> 1940</span>&#160; ValueType(actualCount).Move(), SValue(expectedCount).Move());</div><div class="line"><a name="l01941"></a><span class="lineno"> 1941</span>&#160; }</div><div class="line"><a name="l01942"></a><span class="lineno"> 1942</span>&#160; <span class="keywordtype">void</span> DuplicateItems(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> index1, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> index2) {</div><div class="line"><a name="l01943"></a><span class="lineno"> 1943</span>&#160; ValueType duplicates(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a058c622e1e7d59419ae58b895cbce468">kArrayType</a>);</div><div class="line"><a name="l01944"></a><span class="lineno"> 1944</span>&#160; duplicates.<a class="code" href="classrapidjson_1_1_generic_value.html#a0ec9f34bef5890241d4bc882b73b1db4">PushBack</a>(index1, GetStateAllocator());</div><div class="line"><a name="l01945"></a><span class="lineno"> 1945</span>&#160; duplicates.<a class="code" href="classrapidjson_1_1_generic_value.html#a0ec9f34bef5890241d4bc882b73b1db4">PushBack</a>(index2, GetStateAllocator());</div><div class="line"><a name="l01946"></a><span class="lineno"> 1946</span>&#160; currentError_.<a class="code" href="classrapidjson_1_1_generic_value.html#a7cb3cbaefe4fb99aaf9f155fb4ee039b">SetObject</a>();</div><div class="line"><a name="l01947"></a><span class="lineno"> 1947</span>&#160; currentError_.<a class="code" href="classrapidjson_1_1_generic_value.html#ab018d734d189532b27943bc45776ba68">AddMember</a>(GetDuplicatesString(), duplicates, GetStateAllocator());</div><div class="line"><a name="l01948"></a><span class="lineno"> 1948</span>&#160; AddCurrentError(SchemaType::GetUniqueItemsString(), <span class="keyword">true</span>);</div><div class="line"><a name="l01949"></a><span class="lineno"> 1949</span>&#160; }</div><div class="line"><a name="l01950"></a><span class="lineno"> 1950</span>&#160;</div><div class="line"><a name="l01951"></a><span class="lineno"> 1951</span>&#160; <span class="keywordtype">void</span> TooManyProperties(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> actualCount, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> expectedCount) {</div><div class="line"><a name="l01952"></a><span class="lineno"> 1952</span>&#160; AddNumberError(SchemaType::GetMaxPropertiesString(),</div><div class="line"><a name="l01953"></a><span class="lineno"> 1953</span>&#160; ValueType(actualCount).Move(), SValue(expectedCount).Move());</div><div class="line"><a name="l01954"></a><span class="lineno"> 1954</span>&#160; }</div><div class="line"><a name="l01955"></a><span class="lineno"> 1955</span>&#160; <span class="keywordtype">void</span> TooFewProperties(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> actualCount, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> expectedCount) {</div><div class="line"><a name="l01956"></a><span class="lineno"> 1956</span>&#160; AddNumberError(SchemaType::GetMinPropertiesString(),</div><div class="line"><a name="l01957"></a><span class="lineno"> 1957</span>&#160; ValueType(actualCount).Move(), SValue(expectedCount).Move());</div><div class="line"><a name="l01958"></a><span class="lineno"> 1958</span>&#160; }</div><div class="line"><a name="l01959"></a><span class="lineno"> 1959</span>&#160; <span class="keywordtype">void</span> StartMissingProperties() {</div><div class="line"><a name="l01960"></a><span class="lineno"> 1960</span>&#160; currentError_.SetArray();</div><div class="line"><a name="l01961"></a><span class="lineno"> 1961</span>&#160; }</div><div class="line"><a name="l01962"></a><span class="lineno"> 1962</span>&#160; <span class="keywordtype">void</span> AddMissingProperty(<span class="keyword">const</span> SValue&amp; name) {</div><div class="line"><a name="l01963"></a><span class="lineno"> 1963</span>&#160; currentError_.PushBack(ValueType(name, GetStateAllocator()).Move(), GetStateAllocator());</div><div class="line"><a name="l01964"></a><span class="lineno"> 1964</span>&#160; }</div><div class="line"><a name="l01965"></a><span class="lineno"> 1965</span>&#160; <span class="keywordtype">bool</span> EndMissingProperties() {</div><div class="line"><a name="l01966"></a><span class="lineno"> 1966</span>&#160; <span class="keywordflow">if</span> (currentError_.Empty())</div><div class="line"><a name="l01967"></a><span class="lineno"> 1967</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01968"></a><span class="lineno"> 1968</span>&#160; ValueType error(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4acf030b422a32c3647c7c5973bd4dd0a9">kObjectType</a>);</div><div class="line"><a name="l01969"></a><span class="lineno"> 1969</span>&#160; error.<a class="code" href="classrapidjson_1_1_generic_value.html#ab018d734d189532b27943bc45776ba68">AddMember</a>(GetMissingString(), currentError_, GetStateAllocator());</div><div class="line"><a name="l01970"></a><span class="lineno"> 1970</span>&#160; currentError_ = error;</div><div class="line"><a name="l01971"></a><span class="lineno"> 1971</span>&#160; AddCurrentError(SchemaType::GetRequiredString());</div><div class="line"><a name="l01972"></a><span class="lineno"> 1972</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l01973"></a><span class="lineno"> 1973</span>&#160; }</div><div class="line"><a name="l01974"></a><span class="lineno"> 1974</span>&#160; <span class="keywordtype">void</span> PropertyViolations(ISchemaValidator** subvalidators, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> count) {</div><div class="line"><a name="l01975"></a><span class="lineno"> 1975</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> i = 0; i &lt; count; ++i)</div><div class="line"><a name="l01976"></a><span class="lineno"> 1976</span>&#160; MergeError(static_cast&lt;GenericSchemaValidator*&gt;(subvalidators[i])-&gt;GetError());</div><div class="line"><a name="l01977"></a><span class="lineno"> 1977</span>&#160; }</div><div class="line"><a name="l01978"></a><span class="lineno"> 1978</span>&#160; <span class="keywordtype">void</span> DisallowedProperty(<span class="keyword">const</span> Ch* name, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> length) {</div><div class="line"><a name="l01979"></a><span class="lineno"> 1979</span>&#160; currentError_.SetObject();</div><div class="line"><a name="l01980"></a><span class="lineno"> 1980</span>&#160; currentError_.AddMember(GetDisallowedString(), ValueType(name, length, GetStateAllocator()).Move(), GetStateAllocator());</div><div class="line"><a name="l01981"></a><span class="lineno"> 1981</span>&#160; AddCurrentError(SchemaType::GetAdditionalPropertiesString(), <span class="keyword">true</span>);</div><div class="line"><a name="l01982"></a><span class="lineno"> 1982</span>&#160; }</div><div class="line"><a name="l01983"></a><span class="lineno"> 1983</span>&#160;</div><div class="line"><a name="l01984"></a><span class="lineno"> 1984</span>&#160; <span class="keywordtype">void</span> StartDependencyErrors() {</div><div class="line"><a name="l01985"></a><span class="lineno"> 1985</span>&#160; currentError_.SetObject();</div><div class="line"><a name="l01986"></a><span class="lineno"> 1986</span>&#160; }</div><div class="line"><a name="l01987"></a><span class="lineno"> 1987</span>&#160; <span class="keywordtype">void</span> StartMissingDependentProperties() {</div><div class="line"><a name="l01988"></a><span class="lineno"> 1988</span>&#160; missingDependents_.SetArray();</div><div class="line"><a name="l01989"></a><span class="lineno"> 1989</span>&#160; }</div><div class="line"><a name="l01990"></a><span class="lineno"> 1990</span>&#160; <span class="keywordtype">void</span> AddMissingDependentProperty(<span class="keyword">const</span> SValue&amp; targetName) {</div><div class="line"><a name="l01991"></a><span class="lineno"> 1991</span>&#160; missingDependents_.PushBack(ValueType(targetName, GetStateAllocator()).Move(), GetStateAllocator());</div><div class="line"><a name="l01992"></a><span class="lineno"> 1992</span>&#160; }</div><div class="line"><a name="l01993"></a><span class="lineno"> 1993</span>&#160; <span class="keywordtype">void</span> EndMissingDependentProperties(<span class="keyword">const</span> SValue&amp; sourceName) {</div><div class="line"><a name="l01994"></a><span class="lineno"> 1994</span>&#160; <span class="keywordflow">if</span> (!missingDependents_.Empty())</div><div class="line"><a name="l01995"></a><span class="lineno"> 1995</span>&#160; currentError_.AddMember(ValueType(sourceName, GetStateAllocator()).Move(),</div><div class="line"><a name="l01996"></a><span class="lineno"> 1996</span>&#160; missingDependents_, GetStateAllocator());</div><div class="line"><a name="l01997"></a><span class="lineno"> 1997</span>&#160; }</div><div class="line"><a name="l01998"></a><span class="lineno"> 1998</span>&#160; <span class="keywordtype">void</span> AddDependencySchemaError(<span class="keyword">const</span> SValue&amp; sourceName, ISchemaValidator* subvalidator) {</div><div class="line"><a name="l01999"></a><span class="lineno"> 1999</span>&#160; currentError_.AddMember(ValueType(sourceName, GetStateAllocator()).Move(),</div><div class="line"><a name="l02000"></a><span class="lineno"> 2000</span>&#160; static_cast&lt;GenericSchemaValidator*&gt;(subvalidator)-&gt;GetError(), GetStateAllocator());</div><div class="line"><a name="l02001"></a><span class="lineno"> 2001</span>&#160; }</div><div class="line"><a name="l02002"></a><span class="lineno"> 2002</span>&#160; <span class="keywordtype">bool</span> EndDependencyErrors() {</div><div class="line"><a name="l02003"></a><span class="lineno"> 2003</span>&#160; <span class="keywordflow">if</span> (currentError_.ObjectEmpty())</div><div class="line"><a name="l02004"></a><span class="lineno"> 2004</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l02005"></a><span class="lineno"> 2005</span>&#160; ValueType error(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4acf030b422a32c3647c7c5973bd4dd0a9">kObjectType</a>);</div><div class="line"><a name="l02006"></a><span class="lineno"> 2006</span>&#160; error.<a class="code" href="classrapidjson_1_1_generic_value.html#ab018d734d189532b27943bc45776ba68">AddMember</a>(GetErrorsString(), currentError_, GetStateAllocator());</div><div class="line"><a name="l02007"></a><span class="lineno"> 2007</span>&#160; currentError_ = error;</div><div class="line"><a name="l02008"></a><span class="lineno"> 2008</span>&#160; AddCurrentError(SchemaType::GetDependenciesString());</div><div class="line"><a name="l02009"></a><span class="lineno"> 2009</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l02010"></a><span class="lineno"> 2010</span>&#160; }</div><div class="line"><a name="l02011"></a><span class="lineno"> 2011</span>&#160;</div><div class="line"><a name="l02012"></a><span class="lineno"> 2012</span>&#160; <span class="keywordtype">void</span> DisallowedValue() {</div><div class="line"><a name="l02013"></a><span class="lineno"> 2013</span>&#160; currentError_.SetObject();</div><div class="line"><a name="l02014"></a><span class="lineno"> 2014</span>&#160; AddCurrentError(SchemaType::GetEnumString());</div><div class="line"><a name="l02015"></a><span class="lineno"> 2015</span>&#160; }</div><div class="line"><a name="l02016"></a><span class="lineno"> 2016</span>&#160; <span class="keywordtype">void</span> StartDisallowedType() {</div><div class="line"><a name="l02017"></a><span class="lineno"> 2017</span>&#160; currentError_.SetArray();</div><div class="line"><a name="l02018"></a><span class="lineno"> 2018</span>&#160; }</div><div class="line"><a name="l02019"></a><span class="lineno"> 2019</span>&#160; <span class="keywordtype">void</span> AddExpectedType(<span class="keyword">const</span> <span class="keyword">typename</span> SchemaType::ValueType&amp; expectedType) {</div><div class="line"><a name="l02020"></a><span class="lineno"> 2020</span>&#160; currentError_.PushBack(ValueType(expectedType, GetStateAllocator()).Move(), GetStateAllocator());</div><div class="line"><a name="l02021"></a><span class="lineno"> 2021</span>&#160; }</div><div class="line"><a name="l02022"></a><span class="lineno"> 2022</span>&#160; <span class="keywordtype">void</span> EndDisallowedType(<span class="keyword">const</span> <span class="keyword">typename</span> SchemaType::ValueType&amp; actualType) {</div><div class="line"><a name="l02023"></a><span class="lineno"> 2023</span>&#160; ValueType error(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4acf030b422a32c3647c7c5973bd4dd0a9">kObjectType</a>);</div><div class="line"><a name="l02024"></a><span class="lineno"> 2024</span>&#160; error.<a class="code" href="classrapidjson_1_1_generic_value.html#ab018d734d189532b27943bc45776ba68">AddMember</a>(GetExpectedString(), currentError_, GetStateAllocator());</div><div class="line"><a name="l02025"></a><span class="lineno"> 2025</span>&#160; error.<a class="code" href="classrapidjson_1_1_generic_value.html#ab018d734d189532b27943bc45776ba68">AddMember</a>(GetActualString(), ValueType(actualType, GetStateAllocator()).Move(), GetStateAllocator());</div><div class="line"><a name="l02026"></a><span class="lineno"> 2026</span>&#160; currentError_ = error;</div><div class="line"><a name="l02027"></a><span class="lineno"> 2027</span>&#160; AddCurrentError(SchemaType::GetTypeString());</div><div class="line"><a name="l02028"></a><span class="lineno"> 2028</span>&#160; }</div><div class="line"><a name="l02029"></a><span class="lineno"> 2029</span>&#160; <span class="keywordtype">void</span> NotAllOf(ISchemaValidator** subvalidators, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> count) {</div><div class="line"><a name="l02030"></a><span class="lineno"> 2030</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> i = 0; i &lt; count; ++i) {</div><div class="line"><a name="l02031"></a><span class="lineno"> 2031</span>&#160; MergeError(static_cast&lt;GenericSchemaValidator*&gt;(subvalidators[i])-&gt;GetError());</div><div class="line"><a name="l02032"></a><span class="lineno"> 2032</span>&#160; }</div><div class="line"><a name="l02033"></a><span class="lineno"> 2033</span>&#160; }</div><div class="line"><a name="l02034"></a><span class="lineno"> 2034</span>&#160; <span class="keywordtype">void</span> NoneOf(ISchemaValidator** subvalidators, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> count) {</div><div class="line"><a name="l02035"></a><span class="lineno"> 2035</span>&#160; AddErrorArray(SchemaType::GetAnyOfString(), subvalidators, count);</div><div class="line"><a name="l02036"></a><span class="lineno"> 2036</span>&#160; }</div><div class="line"><a name="l02037"></a><span class="lineno"> 2037</span>&#160; <span class="keywordtype">void</span> NotOneOf(ISchemaValidator** subvalidators, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> count) {</div><div class="line"><a name="l02038"></a><span class="lineno"> 2038</span>&#160; AddErrorArray(SchemaType::GetOneOfString(), subvalidators, count);</div><div class="line"><a name="l02039"></a><span class="lineno"> 2039</span>&#160; }</div><div class="line"><a name="l02040"></a><span class="lineno"> 2040</span>&#160; <span class="keywordtype">void</span> Disallowed() {</div><div class="line"><a name="l02041"></a><span class="lineno"> 2041</span>&#160; currentError_.SetObject();</div><div class="line"><a name="l02042"></a><span class="lineno"> 2042</span>&#160; AddCurrentError(SchemaType::GetNotString());</div><div class="line"><a name="l02043"></a><span class="lineno"> 2043</span>&#160; }</div><div class="line"><a name="l02044"></a><span class="lineno"> 2044</span>&#160;</div><div class="line"><a name="l02045"></a><span class="lineno"> 2045</span>&#160;<span class="preprocessor">#define RAPIDJSON_STRING_(name, ...) \</span></div><div class="line"><a name="l02046"></a><span class="lineno"> 2046</span>&#160;<span class="preprocessor"> static const StringRefType&amp; Get##name##String() {\</span></div><div class="line"><a name="l02047"></a><span class="lineno"> 2047</span>&#160;<span class="preprocessor"> static const Ch s[] = { __VA_ARGS__, &#39;\0&#39; };\</span></div><div class="line"><a name="l02048"></a><span class="lineno"> 2048</span>&#160;<span class="preprocessor"> static const StringRefType v(s, static_cast&lt;SizeType&gt;(sizeof(s) / sizeof(Ch) - 1)); \</span></div><div class="line"><a name="l02049"></a><span class="lineno"> 2049</span>&#160;<span class="preprocessor"> return v;\</span></div><div class="line"><a name="l02050"></a><span class="lineno"> 2050</span>&#160;<span class="preprocessor"> }</span></div><div class="line"><a name="l02051"></a><span class="lineno"> 2051</span>&#160;</div><div class="line"><a name="l02052"></a><span class="lineno"> 2052</span>&#160; RAPIDJSON_STRING_(InstanceRef, <span class="charliteral">&#39;i&#39;</span>, <span class="charliteral">&#39;n&#39;</span>, <span class="charliteral">&#39;s&#39;</span>, <span class="charliteral">&#39;t&#39;</span>, <span class="charliteral">&#39;a&#39;</span>, <span class="charliteral">&#39;n&#39;</span>, <span class="charliteral">&#39;c&#39;</span>, <span class="charliteral">&#39;e&#39;</span>, <span class="charliteral">&#39;R&#39;</span>, <span class="charliteral">&#39;e&#39;</span>, <span class="charliteral">&#39;f&#39;</span>)</div><div class="line"><a name="l02053"></a><span class="lineno"> 2053</span>&#160; RAPIDJSON_STRING_(SchemaRef, <span class="charliteral">&#39;s&#39;</span>, <span class="charliteral">&#39;c&#39;</span>, <span class="charliteral">&#39;h&#39;</span>, <span class="charliteral">&#39;e&#39;</span>, <span class="charliteral">&#39;m&#39;</span>, <span class="charliteral">&#39;a&#39;</span>, <span class="charliteral">&#39;R&#39;</span>, <span class="charliteral">&#39;e&#39;</span>, <span class="charliteral">&#39;f&#39;</span>)</div><div class="line"><a name="l02054"></a><span class="lineno"> 2054</span>&#160; RAPIDJSON_STRING_(Expected, <span class="charliteral">&#39;e&#39;</span>, <span class="charliteral">&#39;x&#39;</span>, <span class="charliteral">&#39;p&#39;</span>, <span class="charliteral">&#39;e&#39;</span>, <span class="charliteral">&#39;c&#39;</span>, <span class="charliteral">&#39;t&#39;</span>, <span class="charliteral">&#39;e&#39;</span>, <span class="charliteral">&#39;d&#39;</span>)</div><div class="line"><a name="l02055"></a><span class="lineno"> 2055</span>&#160; RAPIDJSON_STRING_(Actual, <span class="charliteral">&#39;a&#39;</span>, <span class="charliteral">&#39;c&#39;</span>, <span class="charliteral">&#39;t&#39;</span>, <span class="charliteral">&#39;u&#39;</span>, <span class="charliteral">&#39;a&#39;</span>, <span class="charliteral">&#39;l&#39;</span>)</div><div class="line"><a name="l02056"></a><span class="lineno"> 2056</span>&#160; RAPIDJSON_STRING_(Disallowed, <span class="charliteral">&#39;d&#39;</span>, <span class="charliteral">&#39;i&#39;</span>, <span class="charliteral">&#39;s&#39;</span>, <span class="charliteral">&#39;a&#39;</span>, <span class="charliteral">&#39;l&#39;</span>, <span class="charliteral">&#39;l&#39;</span>, <span class="charliteral">&#39;o&#39;</span>, <span class="charliteral">&#39;w&#39;</span>, <span class="charliteral">&#39;e&#39;</span>, <span class="charliteral">&#39;d&#39;</span>)</div><div class="line"><a name="l02057"></a><span class="lineno"> 2057</span>&#160; RAPIDJSON_STRING_(Missing, <span class="charliteral">&#39;m&#39;</span>, <span class="charliteral">&#39;i&#39;</span>, <span class="charliteral">&#39;s&#39;</span>, <span class="charliteral">&#39;s&#39;</span>, <span class="charliteral">&#39;i&#39;</span>, <span class="charliteral">&#39;n&#39;</span>, <span class="charliteral">&#39;g&#39;</span>)</div><div class="line"><a name="l02058"></a><span class="lineno"> 2058</span>&#160; RAPIDJSON_STRING_(Errors, <span class="charliteral">&#39;e&#39;</span>, <span class="charliteral">&#39;r&#39;</span>, <span class="charliteral">&#39;r&#39;</span>, <span class="charliteral">&#39;o&#39;</span>, <span class="charliteral">&#39;r&#39;</span>, <span class="charliteral">&#39;s&#39;</span>)</div><div class="line"><a name="l02059"></a><span class="lineno"> 2059</span>&#160; RAPIDJSON_STRING_(Duplicates, <span class="charliteral">&#39;d&#39;</span>, <span class="charliteral">&#39;u&#39;</span>, <span class="charliteral">&#39;p&#39;</span>, <span class="charliteral">&#39;l&#39;</span>, <span class="charliteral">&#39;i&#39;</span>, <span class="charliteral">&#39;c&#39;</span>, <span class="charliteral">&#39;a&#39;</span>, <span class="charliteral">&#39;t&#39;</span>, <span class="charliteral">&#39;e&#39;</span>, <span class="charliteral">&#39;s&#39;</span>)</div><div class="line"><a name="l02060"></a><span class="lineno"> 2060</span>&#160;</div><div class="line"><a name="l02061"></a><span class="lineno"> 2061</span>&#160;<span class="preprocessor">#undef RAPIDJSON_STRING_</span></div><div class="line"><a name="l02062"></a><span class="lineno"> 2062</span>&#160;</div><div class="line"><a name="l02063"></a><span class="lineno"> 2063</span>&#160;<span class="preprocessor">#if RAPIDJSON_SCHEMA_VERBOSE</span></div><div class="line"><a name="l02064"></a><span class="lineno"> 2064</span>&#160;<span class="preprocessor">#define RAPIDJSON_SCHEMA_HANDLE_BEGIN_VERBOSE_() \</span></div><div class="line"><a name="l02065"></a><span class="lineno"> 2065</span>&#160;<span class="preprocessor">RAPIDJSON_MULTILINEMACRO_BEGIN\</span></div><div class="line"><a name="l02066"></a><span class="lineno"> 2066</span>&#160;<span class="preprocessor"> *documentStack_.template Push&lt;Ch&gt;() = &#39;\0&#39;;\</span></div><div class="line"><a name="l02067"></a><span class="lineno"> 2067</span>&#160;<span class="preprocessor"> documentStack_.template Pop&lt;Ch&gt;(1);\</span></div><div class="line"><a name="l02068"></a><span class="lineno"> 2068</span>&#160;<span class="preprocessor"> internal::PrintInvalidDocument(documentStack_.template Bottom&lt;Ch&gt;());\</span></div><div class="line"><a name="l02069"></a><span class="lineno"> 2069</span>&#160;<span class="preprocessor">RAPIDJSON_MULTILINEMACRO_END</span></div><div class="line"><a name="l02070"></a><span class="lineno"> 2070</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l02071"></a><span class="lineno"> 2071</span>&#160;<span class="preprocessor">#define RAPIDJSON_SCHEMA_HANDLE_BEGIN_VERBOSE_()</span></div><div class="line"><a name="l02072"></a><span class="lineno"> 2072</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02073"></a><span class="lineno"> 2073</span>&#160;</div><div class="line"><a name="l02074"></a><span class="lineno"> 2074</span>&#160;<span class="preprocessor">#define RAPIDJSON_SCHEMA_HANDLE_BEGIN_(method, arg1)\</span></div><div class="line"><a name="l02075"></a><span class="lineno"> 2075</span>&#160;<span class="preprocessor"> if (!valid_) return false; \</span></div><div class="line"><a name="l02076"></a><span class="lineno"> 2076</span>&#160;<span class="preprocessor"> if (!BeginValue() || !CurrentSchema().method arg1) {\</span></div><div class="line"><a name="l02077"></a><span class="lineno"> 2077</span>&#160;<span class="preprocessor"> RAPIDJSON_SCHEMA_HANDLE_BEGIN_VERBOSE_();\</span></div><div class="line"><a name="l02078"></a><span class="lineno"> 2078</span>&#160;<span class="preprocessor"> return valid_ = false;\</span></div><div class="line"><a name="l02079"></a><span class="lineno"> 2079</span>&#160;<span class="preprocessor"> }</span></div><div class="line"><a name="l02080"></a><span class="lineno"> 2080</span>&#160;</div><div class="line"><a name="l02081"></a><span class="lineno"> 2081</span>&#160;<span class="preprocessor">#define RAPIDJSON_SCHEMA_HANDLE_PARALLEL_(method, arg2)\</span></div><div class="line"><a name="l02082"></a><span class="lineno"> 2082</span>&#160;<span class="preprocessor"> for (Context* context = schemaStack_.template Bottom&lt;Context&gt;(); context != schemaStack_.template End&lt;Context&gt;(); context++) {\</span></div><div class="line"><a name="l02083"></a><span class="lineno"> 2083</span>&#160;<span class="preprocessor"> if (context-&gt;hasher)\</span></div><div class="line"><a name="l02084"></a><span class="lineno"> 2084</span>&#160;<span class="preprocessor"> static_cast&lt;HasherType*&gt;(context-&gt;hasher)-&gt;method arg2;\</span></div><div class="line"><a name="l02085"></a><span class="lineno"> 2085</span>&#160;<span class="preprocessor"> if (context-&gt;validators)\</span></div><div class="line"><a name="l02086"></a><span class="lineno"> 2086</span>&#160;<span class="preprocessor"> for (SizeType i_ = 0; i_ &lt; context-&gt;validatorCount; i_++)\</span></div><div class="line"><a name="l02087"></a><span class="lineno"> 2087</span>&#160;<span class="preprocessor"> static_cast&lt;GenericSchemaValidator*&gt;(context-&gt;validators[i_])-&gt;method arg2;\</span></div><div class="line"><a name="l02088"></a><span class="lineno"> 2088</span>&#160;<span class="preprocessor"> if (context-&gt;patternPropertiesValidators)\</span></div><div class="line"><a name="l02089"></a><span class="lineno"> 2089</span>&#160;<span class="preprocessor"> for (SizeType i_ = 0; i_ &lt; context-&gt;patternPropertiesValidatorCount; i_++)\</span></div><div class="line"><a name="l02090"></a><span class="lineno"> 2090</span>&#160;<span class="preprocessor"> static_cast&lt;GenericSchemaValidator*&gt;(context-&gt;patternPropertiesValidators[i_])-&gt;method arg2;\</span></div><div class="line"><a name="l02091"></a><span class="lineno"> 2091</span>&#160;<span class="preprocessor"> }</span></div><div class="line"><a name="l02092"></a><span class="lineno"> 2092</span>&#160;</div><div class="line"><a name="l02093"></a><span class="lineno"> 2093</span>&#160;<span class="preprocessor">#define RAPIDJSON_SCHEMA_HANDLE_END_(method, arg2)\</span></div><div class="line"><a name="l02094"></a><span class="lineno"> 2094</span>&#160;<span class="preprocessor"> return valid_ = EndValue() &amp;&amp; (!outputHandler_ || outputHandler_-&gt;method arg2)</span></div><div class="line"><a name="l02095"></a><span class="lineno"> 2095</span>&#160;</div><div class="line"><a name="l02096"></a><span class="lineno"> 2096</span>&#160;<span class="preprocessor">#define RAPIDJSON_SCHEMA_HANDLE_VALUE_(method, arg1, arg2) \</span></div><div class="line"><a name="l02097"></a><span class="lineno"> 2097</span>&#160;<span class="preprocessor"> RAPIDJSON_SCHEMA_HANDLE_BEGIN_ (method, arg1);\</span></div><div class="line"><a name="l02098"></a><span class="lineno"> 2098</span>&#160;<span class="preprocessor"> RAPIDJSON_SCHEMA_HANDLE_PARALLEL_(method, arg2);\</span></div><div class="line"><a name="l02099"></a><span class="lineno"> 2099</span>&#160;<span class="preprocessor"> RAPIDJSON_SCHEMA_HANDLE_END_ (method, arg2)</span></div><div class="line"><a name="l02100"></a><span class="lineno"> 2100</span>&#160;</div><div class="line"><a name="l02101"></a><span class="lineno"> 2101</span>&#160; <span class="keywordtype">bool</span> Null() { RAPIDJSON_SCHEMA_HANDLE_VALUE_(Null, (CurrentContext()), ( )); }</div><div class="line"><a name="l02102"></a><span class="lineno"> 2102</span>&#160; <span class="keywordtype">bool</span> Bool(<span class="keywordtype">bool</span> b) { RAPIDJSON_SCHEMA_HANDLE_VALUE_(Bool, (CurrentContext(), b), (b)); }</div><div class="line"><a name="l02103"></a><span class="lineno"> 2103</span>&#160; <span class="keywordtype">bool</span> Int(<span class="keywordtype">int</span> i) { RAPIDJSON_SCHEMA_HANDLE_VALUE_(Int, (CurrentContext(), i), (i)); }</div><div class="line"><a name="l02104"></a><span class="lineno"> 2104</span>&#160; <span class="keywordtype">bool</span> Uint(<span class="keywordtype">unsigned</span> u) { RAPIDJSON_SCHEMA_HANDLE_VALUE_(Uint, (CurrentContext(), u), (u)); }</div><div class="line"><a name="l02105"></a><span class="lineno"> 2105</span>&#160; <span class="keywordtype">bool</span> Int64(int64_t i) { RAPIDJSON_SCHEMA_HANDLE_VALUE_(Int64, (CurrentContext(), i), (i)); }</div><div class="line"><a name="l02106"></a><span class="lineno"> 2106</span>&#160; <span class="keywordtype">bool</span> Uint64(uint64_t u) { RAPIDJSON_SCHEMA_HANDLE_VALUE_(Uint64, (CurrentContext(), u), (u)); }</div><div class="line"><a name="l02107"></a><span class="lineno"> 2107</span>&#160; <span class="keywordtype">bool</span> Double(<span class="keywordtype">double</span> d) { RAPIDJSON_SCHEMA_HANDLE_VALUE_(Double, (CurrentContext(), d), (d)); }</div><div class="line"><a name="l02108"></a><span class="lineno"> 2108</span>&#160; <span class="keywordtype">bool</span> RawNumber(<span class="keyword">const</span> Ch* str, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> length, <span class="keywordtype">bool</span> copy)</div><div class="line"><a name="l02109"></a><span class="lineno"> 2109</span>&#160; { RAPIDJSON_SCHEMA_HANDLE_VALUE_(String, (CurrentContext(), str, length, copy), (str, length, copy)); }</div><div class="line"><a name="l02110"></a><span class="lineno"> 2110</span>&#160; <span class="keywordtype">bool</span> String(<span class="keyword">const</span> Ch* str, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> length, <span class="keywordtype">bool</span> copy)</div><div class="line"><a name="l02111"></a><span class="lineno"> 2111</span>&#160; { RAPIDJSON_SCHEMA_HANDLE_VALUE_(String, (CurrentContext(), str, length, copy), (str, length, copy)); }</div><div class="line"><a name="l02112"></a><span class="lineno"> 2112</span>&#160;</div><div class="line"><a name="l02113"></a><span class="lineno"> 2113</span>&#160; <span class="keywordtype">bool</span> StartObject() {</div><div class="line"><a name="l02114"></a><span class="lineno"> 2114</span>&#160; RAPIDJSON_SCHEMA_HANDLE_BEGIN_(StartObject, (CurrentContext()));</div><div class="line"><a name="l02115"></a><span class="lineno"> 2115</span>&#160; RAPIDJSON_SCHEMA_HANDLE_PARALLEL_(StartObject, ());</div><div class="line"><a name="l02116"></a><span class="lineno"> 2116</span>&#160; <span class="keywordflow">return</span> valid_ = !outputHandler_ || outputHandler_-&gt;StartObject();</div><div class="line"><a name="l02117"></a><span class="lineno"> 2117</span>&#160; }</div><div class="line"><a name="l02118"></a><span class="lineno"> 2118</span>&#160; </div><div class="line"><a name="l02119"></a><span class="lineno"> 2119</span>&#160; <span class="keywordtype">bool</span> Key(<span class="keyword">const</span> Ch* str, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> len, <span class="keywordtype">bool</span> copy) {</div><div class="line"><a name="l02120"></a><span class="lineno"> 2120</span>&#160; <span class="keywordflow">if</span> (!valid_) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l02121"></a><span class="lineno"> 2121</span>&#160; AppendToken(str, len);</div><div class="line"><a name="l02122"></a><span class="lineno"> 2122</span>&#160; <span class="keywordflow">if</span> (!CurrentSchema().Key(CurrentContext(), str, len, copy)) <span class="keywordflow">return</span> valid_ = <span class="keyword">false</span>;</div><div class="line"><a name="l02123"></a><span class="lineno"> 2123</span>&#160; RAPIDJSON_SCHEMA_HANDLE_PARALLEL_(Key, (str, len, copy));</div><div class="line"><a name="l02124"></a><span class="lineno"> 2124</span>&#160; <span class="keywordflow">return</span> valid_ = !outputHandler_ || outputHandler_-&gt;Key(str, len, copy);</div><div class="line"><a name="l02125"></a><span class="lineno"> 2125</span>&#160; }</div><div class="line"><a name="l02126"></a><span class="lineno"> 2126</span>&#160; </div><div class="line"><a name="l02127"></a><span class="lineno"> 2127</span>&#160; <span class="keywordtype">bool</span> EndObject(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> memberCount) { </div><div class="line"><a name="l02128"></a><span class="lineno"> 2128</span>&#160; <span class="keywordflow">if</span> (!valid_) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l02129"></a><span class="lineno"> 2129</span>&#160; RAPIDJSON_SCHEMA_HANDLE_PARALLEL_(EndObject, (memberCount));</div><div class="line"><a name="l02130"></a><span class="lineno"> 2130</span>&#160; <span class="keywordflow">if</span> (!CurrentSchema().EndObject(CurrentContext(), memberCount)) <span class="keywordflow">return</span> valid_ = <span class="keyword">false</span>;</div><div class="line"><a name="l02131"></a><span class="lineno"> 2131</span>&#160; RAPIDJSON_SCHEMA_HANDLE_END_(EndObject, (memberCount));</div><div class="line"><a name="l02132"></a><span class="lineno"> 2132</span>&#160; }</div><div class="line"><a name="l02133"></a><span class="lineno"> 2133</span>&#160;</div><div class="line"><a name="l02134"></a><span class="lineno"> 2134</span>&#160; <span class="keywordtype">bool</span> StartArray() {</div><div class="line"><a name="l02135"></a><span class="lineno"> 2135</span>&#160; RAPIDJSON_SCHEMA_HANDLE_BEGIN_(StartArray, (CurrentContext()));</div><div class="line"><a name="l02136"></a><span class="lineno"> 2136</span>&#160; RAPIDJSON_SCHEMA_HANDLE_PARALLEL_(StartArray, ());</div><div class="line"><a name="l02137"></a><span class="lineno"> 2137</span>&#160; <span class="keywordflow">return</span> valid_ = !outputHandler_ || outputHandler_-&gt;StartArray();</div><div class="line"><a name="l02138"></a><span class="lineno"> 2138</span>&#160; }</div><div class="line"><a name="l02139"></a><span class="lineno"> 2139</span>&#160; </div><div class="line"><a name="l02140"></a><span class="lineno"> 2140</span>&#160; <span class="keywordtype">bool</span> EndArray(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> elementCount) {</div><div class="line"><a name="l02141"></a><span class="lineno"> 2141</span>&#160; <span class="keywordflow">if</span> (!valid_) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l02142"></a><span class="lineno"> 2142</span>&#160; RAPIDJSON_SCHEMA_HANDLE_PARALLEL_(EndArray, (elementCount));</div><div class="line"><a name="l02143"></a><span class="lineno"> 2143</span>&#160; <span class="keywordflow">if</span> (!CurrentSchema().EndArray(CurrentContext(), elementCount)) <span class="keywordflow">return</span> valid_ = <span class="keyword">false</span>;</div><div class="line"><a name="l02144"></a><span class="lineno"> 2144</span>&#160; RAPIDJSON_SCHEMA_HANDLE_END_(EndArray, (elementCount));</div><div class="line"><a name="l02145"></a><span class="lineno"> 2145</span>&#160; }</div><div class="line"><a name="l02146"></a><span class="lineno"> 2146</span>&#160;</div><div class="line"><a name="l02147"></a><span class="lineno"> 2147</span>&#160;<span class="preprocessor">#undef RAPIDJSON_SCHEMA_HANDLE_BEGIN_VERBOSE_</span></div><div class="line"><a name="l02148"></a><span class="lineno"> 2148</span>&#160;<span class="preprocessor">#undef RAPIDJSON_SCHEMA_HANDLE_BEGIN_</span></div><div class="line"><a name="l02149"></a><span class="lineno"> 2149</span>&#160;<span class="preprocessor">#undef RAPIDJSON_SCHEMA_HANDLE_PARALLEL_</span></div><div class="line"><a name="l02150"></a><span class="lineno"> 2150</span>&#160;<span class="preprocessor">#undef RAPIDJSON_SCHEMA_HANDLE_VALUE_</span></div><div class="line"><a name="l02151"></a><span class="lineno"> 2151</span>&#160;</div><div class="line"><a name="l02152"></a><span class="lineno"> 2152</span>&#160; <span class="comment">// Implementation of ISchemaStateFactory&lt;SchemaType&gt;</span></div><div class="line"><a name="l02153"></a><span class="lineno"> 2153</span>&#160; <span class="keyword">virtual</span> ISchemaValidator* CreateSchemaValidator(<span class="keyword">const</span> SchemaType&amp; root) {</div><div class="line"><a name="l02154"></a><span class="lineno"> 2154</span>&#160; <span class="keywordflow">return</span> <span class="keyword">new</span> (GetStateAllocator().Malloc(<span class="keyword">sizeof</span>(<a class="code" href="classrapidjson_1_1_generic_schema_validator.html">GenericSchemaValidator</a>))) <a class="code" href="classrapidjson_1_1_generic_schema_validator.html">GenericSchemaValidator</a>(*schemaDocument_, root, documentStack_.template Bottom&lt;char&gt;(), documentStack_.GetSize(),</div><div class="line"><a name="l02155"></a><span class="lineno"> 2155</span>&#160;<span class="preprocessor">#if RAPIDJSON_SCHEMA_VERBOSE</span></div><div class="line"><a name="l02156"></a><span class="lineno"> 2156</span>&#160; depth_ + 1,</div><div class="line"><a name="l02157"></a><span class="lineno"> 2157</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02158"></a><span class="lineno"> 2158</span>&#160; &amp;GetStateAllocator());</div><div class="line"><a name="l02159"></a><span class="lineno"> 2159</span>&#160; }</div><div class="line"><a name="l02160"></a><span class="lineno"> 2160</span>&#160;</div><div class="line"><a name="l02161"></a><span class="lineno"> 2161</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> DestroySchemaValidator(ISchemaValidator* validator) {</div><div class="line"><a name="l02162"></a><span class="lineno"> 2162</span>&#160; <a class="code" href="classrapidjson_1_1_generic_schema_validator.html">GenericSchemaValidator</a>* v = <span class="keyword">static_cast&lt;</span><a class="code" href="classrapidjson_1_1_generic_schema_validator.html">GenericSchemaValidator</a>*<span class="keyword">&gt;</span>(validator);</div><div class="line"><a name="l02163"></a><span class="lineno"> 2163</span>&#160; v-&gt;<a class="code" href="classrapidjson_1_1_generic_schema_validator.html#ad9f00d71bf62b8983cf2514c43fb1572">~GenericSchemaValidator</a>();</div><div class="line"><a name="l02164"></a><span class="lineno"> 2164</span>&#160; StateAllocator::Free(v);</div><div class="line"><a name="l02165"></a><span class="lineno"> 2165</span>&#160; }</div><div class="line"><a name="l02166"></a><span class="lineno"> 2166</span>&#160;</div><div class="line"><a name="l02167"></a><span class="lineno"> 2167</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span>* CreateHasher() {</div><div class="line"><a name="l02168"></a><span class="lineno"> 2168</span>&#160; <span class="keywordflow">return</span> <span class="keyword">new</span> (GetStateAllocator().Malloc(<span class="keyword">sizeof</span>(HasherType))) HasherType(&amp;GetStateAllocator());</div><div class="line"><a name="l02169"></a><span class="lineno"> 2169</span>&#160; }</div><div class="line"><a name="l02170"></a><span class="lineno"> 2170</span>&#160;</div><div class="line"><a name="l02171"></a><span class="lineno"> 2171</span>&#160; <span class="keyword">virtual</span> uint64_t GetHashCode(<span class="keywordtype">void</span>* hasher) {</div><div class="line"><a name="l02172"></a><span class="lineno"> 2172</span>&#160; <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span>HasherType*<span class="keyword">&gt;</span>(hasher)-&gt;GetHashCode();</div><div class="line"><a name="l02173"></a><span class="lineno"> 2173</span>&#160; }</div><div class="line"><a name="l02174"></a><span class="lineno"> 2174</span>&#160;</div><div class="line"><a name="l02175"></a><span class="lineno"> 2175</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> DestroryHasher(<span class="keywordtype">void</span>* hasher) {</div><div class="line"><a name="l02176"></a><span class="lineno"> 2176</span>&#160; HasherType* h = <span class="keyword">static_cast&lt;</span>HasherType*<span class="keyword">&gt;</span>(hasher);</div><div class="line"><a name="l02177"></a><span class="lineno"> 2177</span>&#160; h-&gt;~HasherType();</div><div class="line"><a name="l02178"></a><span class="lineno"> 2178</span>&#160; StateAllocator::Free(h);</div><div class="line"><a name="l02179"></a><span class="lineno"> 2179</span>&#160; }</div><div class="line"><a name="l02180"></a><span class="lineno"> 2180</span>&#160;</div><div class="line"><a name="l02181"></a><span class="lineno"> 2181</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span>* MallocState(<span class="keywordtype">size_t</span> size) {</div><div class="line"><a name="l02182"></a><span class="lineno"> 2182</span>&#160; <span class="keywordflow">return</span> GetStateAllocator().Malloc(size);</div><div class="line"><a name="l02183"></a><span class="lineno"> 2183</span>&#160; }</div><div class="line"><a name="l02184"></a><span class="lineno"> 2184</span>&#160;</div><div class="line"><a name="l02185"></a><span class="lineno"> 2185</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> FreeState(<span class="keywordtype">void</span>* p) {</div><div class="line"><a name="l02186"></a><span class="lineno"> 2186</span>&#160; StateAllocator::Free(p);</div><div class="line"><a name="l02187"></a><span class="lineno"> 2187</span>&#160; }</div><div class="line"><a name="l02188"></a><span class="lineno"> 2188</span>&#160;</div><div class="line"><a name="l02189"></a><span class="lineno"> 2189</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l02190"></a><span class="lineno"> 2190</span>&#160; <span class="keyword">typedef</span> <span class="keyword">typename</span> SchemaType::Context Context;</div><div class="line"><a name="l02191"></a><span class="lineno"> 2191</span>&#160; <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue&lt;UTF8&lt;&gt;</a>, StateAllocator&gt; <a class="code" href="classrapidjson_1_1_generic_value.html">HashCodeArray</a>;</div><div class="line"><a name="l02192"></a><span class="lineno"> 2192</span>&#160; <span class="keyword">typedef</span> internal::Hasher&lt;EncodingType, StateAllocator&gt; HasherType;</div><div class="line"><a name="l02193"></a><span class="lineno"> 2193</span>&#160;</div><div class="line"><a name="l02194"></a><span class="lineno"> 2194</span>&#160; <a class="code" href="classrapidjson_1_1_generic_schema_validator.html">GenericSchemaValidator</a>( </div><div class="line"><a name="l02195"></a><span class="lineno"> 2195</span>&#160; <span class="keyword">const</span> SchemaDocumentType&amp; schemaDocument,</div><div class="line"><a name="l02196"></a><span class="lineno"> 2196</span>&#160; <span class="keyword">const</span> SchemaType&amp; root,</div><div class="line"><a name="l02197"></a><span class="lineno"> 2197</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* basePath, <span class="keywordtype">size_t</span> basePathSize,</div><div class="line"><a name="l02198"></a><span class="lineno"> 2198</span>&#160;#<span class="keywordflow">if</span> RAPIDJSON_SCHEMA_VERBOSE</div><div class="line"><a name="l02199"></a><span class="lineno"> 2199</span>&#160; <span class="keywordtype">unsigned</span> depth,</div><div class="line"><a name="l02200"></a><span class="lineno"> 2200</span>&#160;#endif</div><div class="line"><a name="l02201"></a><span class="lineno"> 2201</span>&#160; StateAllocator* allocator = 0,</div><div class="line"><a name="l02202"></a><span class="lineno"> 2202</span>&#160; <span class="keywordtype">size_t</span> schemaStackCapacity = kDefaultSchemaStackCapacity,</div><div class="line"><a name="l02203"></a><span class="lineno"> 2203</span>&#160; <span class="keywordtype">size_t</span> documentStackCapacity = kDefaultDocumentStackCapacity)</div><div class="line"><a name="l02204"></a><span class="lineno"> 2204</span>&#160; :</div><div class="line"><a name="l02205"></a><span class="lineno"> 2205</span>&#160; schemaDocument_(&amp;schemaDocument),</div><div class="line"><a name="l02206"></a><span class="lineno"> 2206</span>&#160; root_(root),</div><div class="line"><a name="l02207"></a><span class="lineno"> 2207</span>&#160; stateAllocator_(allocator),</div><div class="line"><a name="l02208"></a><span class="lineno"> 2208</span>&#160; ownStateAllocator_(0),</div><div class="line"><a name="l02209"></a><span class="lineno"> 2209</span>&#160; schemaStack_(allocator, schemaStackCapacity),</div><div class="line"><a name="l02210"></a><span class="lineno"> 2210</span>&#160; documentStack_(allocator, documentStackCapacity),</div><div class="line"><a name="l02211"></a><span class="lineno"> 2211</span>&#160; outputHandler_(0),</div><div class="line"><a name="l02212"></a><span class="lineno"> 2212</span>&#160; error_(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4acf030b422a32c3647c7c5973bd4dd0a9">kObjectType</a>),</div><div class="line"><a name="l02213"></a><span class="lineno"> 2213</span>&#160; currentError_(),</div><div class="line"><a name="l02214"></a><span class="lineno"> 2214</span>&#160; missingDependents_(),</div><div class="line"><a name="l02215"></a><span class="lineno"> 2215</span>&#160; valid_(<span class="keyword">true</span>)</div><div class="line"><a name="l02216"></a><span class="lineno"> 2216</span>&#160;<span class="preprocessor">#if RAPIDJSON_SCHEMA_VERBOSE</span></div><div class="line"><a name="l02217"></a><span class="lineno"> 2217</span>&#160; , depth_(depth)</div><div class="line"><a name="l02218"></a><span class="lineno"> 2218</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02219"></a><span class="lineno"> 2219</span>&#160; {</div><div class="line"><a name="l02220"></a><span class="lineno"> 2220</span>&#160; <span class="keywordflow">if</span> (basePath &amp;&amp; basePathSize)</div><div class="line"><a name="l02221"></a><span class="lineno"> 2221</span>&#160; memcpy(documentStack_.template Push&lt;char&gt;(basePathSize), basePath, basePathSize);</div><div class="line"><a name="l02222"></a><span class="lineno"> 2222</span>&#160; }</div><div class="line"><a name="l02223"></a><span class="lineno"> 2223</span>&#160;</div><div class="line"><a name="l02224"></a><span class="lineno"> 2224</span>&#160; StateAllocator&amp; GetStateAllocator() {</div><div class="line"><a name="l02225"></a><span class="lineno"> 2225</span>&#160; <span class="keywordflow">if</span> (!stateAllocator_)</div><div class="line"><a name="l02226"></a><span class="lineno"> 2226</span>&#160; stateAllocator_ = ownStateAllocator_ = <a class="code" href="rapidjson_8h.html#abdc7cd7902748ffe6626d71c59a73c3b">RAPIDJSON_NEW</a>(StateAllocator)();</div><div class="line"><a name="l02227"></a><span class="lineno"> 2227</span>&#160; <span class="keywordflow">return</span> *stateAllocator_;</div><div class="line"><a name="l02228"></a><span class="lineno"> 2228</span>&#160; }</div><div class="line"><a name="l02229"></a><span class="lineno"> 2229</span>&#160;</div><div class="line"><a name="l02230"></a><span class="lineno"> 2230</span>&#160; <span class="keywordtype">bool</span> BeginValue() {</div><div class="line"><a name="l02231"></a><span class="lineno"> 2231</span>&#160; <span class="keywordflow">if</span> (schemaStack_.Empty())</div><div class="line"><a name="l02232"></a><span class="lineno"> 2232</span>&#160; PushSchema(root_);</div><div class="line"><a name="l02233"></a><span class="lineno"> 2233</span>&#160; <span class="keywordflow">else</span> {</div><div class="line"><a name="l02234"></a><span class="lineno"> 2234</span>&#160; <span class="keywordflow">if</span> (CurrentContext().inArray)</div><div class="line"><a name="l02235"></a><span class="lineno"> 2235</span>&#160; internal::TokenHelper&lt;internal::Stack&lt;StateAllocator&gt;, Ch&gt;::AppendIndexToken(documentStack_, CurrentContext().arrayElementIndex);</div><div class="line"><a name="l02236"></a><span class="lineno"> 2236</span>&#160;</div><div class="line"><a name="l02237"></a><span class="lineno"> 2237</span>&#160; <span class="keywordflow">if</span> (!CurrentSchema().BeginValue(CurrentContext()))</div><div class="line"><a name="l02238"></a><span class="lineno"> 2238</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l02239"></a><span class="lineno"> 2239</span>&#160;</div><div class="line"><a name="l02240"></a><span class="lineno"> 2240</span>&#160; <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> count = CurrentContext().patternPropertiesSchemaCount;</div><div class="line"><a name="l02241"></a><span class="lineno"> 2241</span>&#160; <span class="keyword">const</span> SchemaType** sa = CurrentContext().patternPropertiesSchemas;</div><div class="line"><a name="l02242"></a><span class="lineno"> 2242</span>&#160; <span class="keyword">typename</span> Context::PatternValidatorType patternValidatorType = CurrentContext().valuePatternValidatorType;</div><div class="line"><a name="l02243"></a><span class="lineno"> 2243</span>&#160; <span class="keywordtype">bool</span> valueUniqueness = CurrentContext().valueUniqueness;</div><div class="line"><a name="l02244"></a><span class="lineno"> 2244</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(CurrentContext().valueSchema);</div><div class="line"><a name="l02245"></a><span class="lineno"> 2245</span>&#160; PushSchema(*CurrentContext().valueSchema);</div><div class="line"><a name="l02246"></a><span class="lineno"> 2246</span>&#160;</div><div class="line"><a name="l02247"></a><span class="lineno"> 2247</span>&#160; <span class="keywordflow">if</span> (count &gt; 0) {</div><div class="line"><a name="l02248"></a><span class="lineno"> 2248</span>&#160; CurrentContext().objectPatternValidatorType = patternValidatorType;</div><div class="line"><a name="l02249"></a><span class="lineno"> 2249</span>&#160; ISchemaValidator**&amp; va = CurrentContext().patternPropertiesValidators;</div><div class="line"><a name="l02250"></a><span class="lineno"> 2250</span>&#160; <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a>&amp; validatorCount = CurrentContext().patternPropertiesValidatorCount;</div><div class="line"><a name="l02251"></a><span class="lineno"> 2251</span>&#160; va = <span class="keyword">static_cast&lt;</span>ISchemaValidator**<span class="keyword">&gt;</span>(MallocState(<span class="keyword">sizeof</span>(ISchemaValidator*) * count));</div><div class="line"><a name="l02252"></a><span class="lineno"> 2252</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> i = 0; i &lt; count; i++)</div><div class="line"><a name="l02253"></a><span class="lineno"> 2253</span>&#160; va[validatorCount++] = CreateSchemaValidator(*sa[i]);</div><div class="line"><a name="l02254"></a><span class="lineno"> 2254</span>&#160; }</div><div class="line"><a name="l02255"></a><span class="lineno"> 2255</span>&#160;</div><div class="line"><a name="l02256"></a><span class="lineno"> 2256</span>&#160; CurrentContext().arrayUniqueness = valueUniqueness;</div><div class="line"><a name="l02257"></a><span class="lineno"> 2257</span>&#160; }</div><div class="line"><a name="l02258"></a><span class="lineno"> 2258</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l02259"></a><span class="lineno"> 2259</span>&#160; }</div><div class="line"><a name="l02260"></a><span class="lineno"> 2260</span>&#160;</div><div class="line"><a name="l02261"></a><span class="lineno"> 2261</span>&#160; <span class="keywordtype">bool</span> EndValue() {</div><div class="line"><a name="l02262"></a><span class="lineno"> 2262</span>&#160; <span class="keywordflow">if</span> (!CurrentSchema().EndValue(CurrentContext()))</div><div class="line"><a name="l02263"></a><span class="lineno"> 2263</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l02264"></a><span class="lineno"> 2264</span>&#160;</div><div class="line"><a name="l02265"></a><span class="lineno"> 2265</span>&#160;<span class="preprocessor">#if RAPIDJSON_SCHEMA_VERBOSE</span></div><div class="line"><a name="l02266"></a><span class="lineno"> 2266</span>&#160; <a class="code" href="classrapidjson_1_1_generic_string_buffer.html">GenericStringBuffer&lt;EncodingType&gt;</a> sb;</div><div class="line"><a name="l02267"></a><span class="lineno"> 2267</span>&#160; schemaDocument_-&gt;GetPointer(&amp;CurrentSchema()).Stringify(sb);</div><div class="line"><a name="l02268"></a><span class="lineno"> 2268</span>&#160;</div><div class="line"><a name="l02269"></a><span class="lineno"> 2269</span>&#160; *documentStack_.template Push&lt;Ch&gt;() = <span class="charliteral">&#39;\0&#39;</span>;</div><div class="line"><a name="l02270"></a><span class="lineno"> 2270</span>&#160; documentStack_.template Pop&lt;Ch&gt;(1);</div><div class="line"><a name="l02271"></a><span class="lineno"> 2271</span>&#160; internal::PrintValidatorPointers(depth_, sb.GetString(), documentStack_.template Bottom&lt;Ch&gt;());</div><div class="line"><a name="l02272"></a><span class="lineno"> 2272</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02273"></a><span class="lineno"> 2273</span>&#160;</div><div class="line"><a name="l02274"></a><span class="lineno"> 2274</span>&#160; uint64_t h = CurrentContext().arrayUniqueness ? <span class="keyword">static_cast&lt;</span>HasherType*<span class="keyword">&gt;</span>(CurrentContext().hasher)-&gt;GetHashCode() : 0;</div><div class="line"><a name="l02275"></a><span class="lineno"> 2275</span>&#160; </div><div class="line"><a name="l02276"></a><span class="lineno"> 2276</span>&#160; PopSchema();</div><div class="line"><a name="l02277"></a><span class="lineno"> 2277</span>&#160;</div><div class="line"><a name="l02278"></a><span class="lineno"> 2278</span>&#160; <span class="keywordflow">if</span> (!schemaStack_.Empty()) {</div><div class="line"><a name="l02279"></a><span class="lineno"> 2279</span>&#160; Context&amp; context = CurrentContext();</div><div class="line"><a name="l02280"></a><span class="lineno"> 2280</span>&#160; <span class="keywordflow">if</span> (context.valueUniqueness) {</div><div class="line"><a name="l02281"></a><span class="lineno"> 2281</span>&#160; HashCodeArray* a = <span class="keyword">static_cast&lt;</span>HashCodeArray*<span class="keyword">&gt;</span>(context.arrayElementHashCodes);</div><div class="line"><a name="l02282"></a><span class="lineno"> 2282</span>&#160; <span class="keywordflow">if</span> (!a)</div><div class="line"><a name="l02283"></a><span class="lineno"> 2283</span>&#160; CurrentContext().arrayElementHashCodes = a = <span class="keyword">new</span> (GetStateAllocator().Malloc(<span class="keyword">sizeof</span>(HashCodeArray))) HashCodeArray(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a058c622e1e7d59419ae58b895cbce468">kArrayType</a>);</div><div class="line"><a name="l02284"></a><span class="lineno"> 2284</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">typename</span> <a class="code" href="classrapidjson_1_1_generic_value.html">HashCodeArray::ConstValueIterator</a> itr = a-&gt;<a class="code" href="classrapidjson_1_1_generic_value.html#a8d1040c479d89edb261db86400ebe603">Begin</a>(); itr != a-&gt;<a class="code" href="classrapidjson_1_1_generic_value.html#aaf58b9337ccc0cdf16aa9634c4645109">End</a>(); ++itr)</div><div class="line"><a name="l02285"></a><span class="lineno"> 2285</span>&#160; <span class="keywordflow">if</span> (itr-&gt;GetUint64() == h) {</div><div class="line"><a name="l02286"></a><span class="lineno"> 2286</span>&#160; DuplicateItems(static_cast&lt;SizeType&gt;(itr - a-&gt;<a class="code" href="classrapidjson_1_1_generic_value.html#a8d1040c479d89edb261db86400ebe603">Begin</a>()), a-&gt;<a class="code" href="classrapidjson_1_1_generic_value.html#a799a8a2503989f486f3fc7a660266555">Size</a>());</div><div class="line"><a name="l02287"></a><span class="lineno"> 2287</span>&#160; RAPIDJSON_INVALID_KEYWORD_RETURN(SchemaType::GetUniqueItemsString());</div><div class="line"><a name="l02288"></a><span class="lineno"> 2288</span>&#160; }</div><div class="line"><a name="l02289"></a><span class="lineno"> 2289</span>&#160; a-&gt;<a class="code" href="classrapidjson_1_1_generic_value.html#a0ec9f34bef5890241d4bc882b73b1db4">PushBack</a>(h, GetStateAllocator());</div><div class="line"><a name="l02290"></a><span class="lineno"> 2290</span>&#160; }</div><div class="line"><a name="l02291"></a><span class="lineno"> 2291</span>&#160; }</div><div class="line"><a name="l02292"></a><span class="lineno"> 2292</span>&#160;</div><div class="line"><a name="l02293"></a><span class="lineno"> 2293</span>&#160; <span class="comment">// Remove the last token of document pointer</span></div><div class="line"><a name="l02294"></a><span class="lineno"> 2294</span>&#160; <span class="keywordflow">while</span> (!documentStack_.Empty() &amp;&amp; *documentStack_.template Pop&lt;Ch&gt;(1) != <span class="charliteral">&#39;/&#39;</span>)</div><div class="line"><a name="l02295"></a><span class="lineno"> 2295</span>&#160; ;</div><div class="line"><a name="l02296"></a><span class="lineno"> 2296</span>&#160;</div><div class="line"><a name="l02297"></a><span class="lineno"> 2297</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l02298"></a><span class="lineno"> 2298</span>&#160; }</div><div class="line"><a name="l02299"></a><span class="lineno"> 2299</span>&#160;</div><div class="line"><a name="l02300"></a><span class="lineno"> 2300</span>&#160; <span class="keywordtype">void</span> AppendToken(<span class="keyword">const</span> Ch* str, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> len) {</div><div class="line"><a name="l02301"></a><span class="lineno"> 2301</span>&#160; documentStack_.template Reserve&lt;Ch&gt;(1 + len * 2); <span class="comment">// worst case all characters are escaped as two characters</span></div><div class="line"><a name="l02302"></a><span class="lineno"> 2302</span>&#160; *documentStack_.template PushUnsafe&lt;Ch&gt;() = <span class="charliteral">&#39;/&#39;</span>;</div><div class="line"><a name="l02303"></a><span class="lineno"> 2303</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> i = 0; i &lt; len; i++) {</div><div class="line"><a name="l02304"></a><span class="lineno"> 2304</span>&#160; <span class="keywordflow">if</span> (str[i] == <span class="charliteral">&#39;~&#39;</span>) {</div><div class="line"><a name="l02305"></a><span class="lineno"> 2305</span>&#160; *documentStack_.template PushUnsafe&lt;Ch&gt;() = <span class="charliteral">&#39;~&#39;</span>;</div><div class="line"><a name="l02306"></a><span class="lineno"> 2306</span>&#160; *documentStack_.template PushUnsafe&lt;Ch&gt;() = <span class="charliteral">&#39;0&#39;</span>;</div><div class="line"><a name="l02307"></a><span class="lineno"> 2307</span>&#160; }</div><div class="line"><a name="l02308"></a><span class="lineno"> 2308</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (str[i] == <span class="charliteral">&#39;/&#39;</span>) {</div><div class="line"><a name="l02309"></a><span class="lineno"> 2309</span>&#160; *documentStack_.template PushUnsafe&lt;Ch&gt;() = <span class="charliteral">&#39;~&#39;</span>;</div><div class="line"><a name="l02310"></a><span class="lineno"> 2310</span>&#160; *documentStack_.template PushUnsafe&lt;Ch&gt;() = <span class="charliteral">&#39;1&#39;</span>;</div><div class="line"><a name="l02311"></a><span class="lineno"> 2311</span>&#160; }</div><div class="line"><a name="l02312"></a><span class="lineno"> 2312</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l02313"></a><span class="lineno"> 2313</span>&#160; *documentStack_.template PushUnsafe&lt;Ch&gt;() = str[i];</div><div class="line"><a name="l02314"></a><span class="lineno"> 2314</span>&#160; }</div><div class="line"><a name="l02315"></a><span class="lineno"> 2315</span>&#160; }</div><div class="line"><a name="l02316"></a><span class="lineno"> 2316</span>&#160;</div><div class="line"><a name="l02317"></a><span class="lineno"> 2317</span>&#160; RAPIDJSON_FORCEINLINE <span class="keywordtype">void</span> PushSchema(<span class="keyword">const</span> SchemaType&amp; schema) { <span class="keyword">new</span> (schemaStack_.template Push&lt;Context&gt;()) Context(*<span class="keyword">this</span>, *<span class="keyword">this</span>, &amp;schema); }</div><div class="line"><a name="l02318"></a><span class="lineno"> 2318</span>&#160; </div><div class="line"><a name="l02319"></a><span class="lineno"> 2319</span>&#160; RAPIDJSON_FORCEINLINE <span class="keywordtype">void</span> PopSchema() {</div><div class="line"><a name="l02320"></a><span class="lineno"> 2320</span>&#160; Context* c = schemaStack_.template Pop&lt;Context&gt;(1);</div><div class="line"><a name="l02321"></a><span class="lineno"> 2321</span>&#160; <span class="keywordflow">if</span> (HashCodeArray* a = static_cast&lt;HashCodeArray*&gt;(c-&gt;arrayElementHashCodes)) {</div><div class="line"><a name="l02322"></a><span class="lineno"> 2322</span>&#160; a-&gt;~HashCodeArray();</div><div class="line"><a name="l02323"></a><span class="lineno"> 2323</span>&#160; StateAllocator::Free(a);</div><div class="line"><a name="l02324"></a><span class="lineno"> 2324</span>&#160; }</div><div class="line"><a name="l02325"></a><span class="lineno"> 2325</span>&#160; c-&gt;~Context();</div><div class="line"><a name="l02326"></a><span class="lineno"> 2326</span>&#160; }</div><div class="line"><a name="l02327"></a><span class="lineno"> 2327</span>&#160;</div><div class="line"><a name="l02328"></a><span class="lineno"> 2328</span>&#160; <span class="keywordtype">void</span> AddErrorLocation(ValueType&amp; result, <span class="keywordtype">bool</span> parent) {</div><div class="line"><a name="l02329"></a><span class="lineno"> 2329</span>&#160; <a class="code" href="classrapidjson_1_1_generic_string_buffer.html">GenericStringBuffer&lt;EncodingType&gt;</a> sb;</div><div class="line"><a name="l02330"></a><span class="lineno"> 2330</span>&#160; PointerType instancePointer = GetInvalidDocumentPointer();</div><div class="line"><a name="l02331"></a><span class="lineno"> 2331</span>&#160; ((parent &amp;&amp; instancePointer.GetTokenCount() &gt; 0)</div><div class="line"><a name="l02332"></a><span class="lineno"> 2332</span>&#160; ? PointerType(instancePointer.GetTokens(), instancePointer.GetTokenCount() - 1)</div><div class="line"><a name="l02333"></a><span class="lineno"> 2333</span>&#160; : instancePointer).StringifyUriFragment(sb);</div><div class="line"><a name="l02334"></a><span class="lineno"> 2334</span>&#160; ValueType instanceRef(sb.GetString(), <span class="keyword">static_cast&lt;</span><a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a><span class="keyword">&gt;</span>(sb.<a class="code" href="classrapidjson_1_1_generic_string_buffer.html#a9d830ec37a4ba0fba3b523c90aaf8b42">GetSize</a>() / <span class="keyword">sizeof</span>(Ch)),</div><div class="line"><a name="l02335"></a><span class="lineno"> 2335</span>&#160; GetStateAllocator());</div><div class="line"><a name="l02336"></a><span class="lineno"> 2336</span>&#160; result.<a class="code" href="classrapidjson_1_1_generic_value.html#ab018d734d189532b27943bc45776ba68">AddMember</a>(GetInstanceRefString(), instanceRef, GetStateAllocator());</div><div class="line"><a name="l02337"></a><span class="lineno"> 2337</span>&#160; sb.Clear();</div><div class="line"><a name="l02338"></a><span class="lineno"> 2338</span>&#160; memcpy(sb.Push(CurrentSchema().GetURI().GetStringLength()),</div><div class="line"><a name="l02339"></a><span class="lineno"> 2339</span>&#160; CurrentSchema().GetURI().GetString(),</div><div class="line"><a name="l02340"></a><span class="lineno"> 2340</span>&#160; CurrentSchema().GetURI().GetStringLength() * <span class="keyword">sizeof</span>(Ch));</div><div class="line"><a name="l02341"></a><span class="lineno"> 2341</span>&#160; GetInvalidSchemaPointer().StringifyUriFragment(sb);</div><div class="line"><a name="l02342"></a><span class="lineno"> 2342</span>&#160; ValueType schemaRef(sb.GetString(), <span class="keyword">static_cast&lt;</span><a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a><span class="keyword">&gt;</span>(sb.<a class="code" href="classrapidjson_1_1_generic_string_buffer.html#a9d830ec37a4ba0fba3b523c90aaf8b42">GetSize</a>() / <span class="keyword">sizeof</span>(Ch)),</div><div class="line"><a name="l02343"></a><span class="lineno"> 2343</span>&#160; GetStateAllocator());</div><div class="line"><a name="l02344"></a><span class="lineno"> 2344</span>&#160; result.<a class="code" href="classrapidjson_1_1_generic_value.html#ab018d734d189532b27943bc45776ba68">AddMember</a>(GetSchemaRefString(), schemaRef, GetStateAllocator());</div><div class="line"><a name="l02345"></a><span class="lineno"> 2345</span>&#160; }</div><div class="line"><a name="l02346"></a><span class="lineno"> 2346</span>&#160;</div><div class="line"><a name="l02347"></a><span class="lineno"> 2347</span>&#160; <span class="keywordtype">void</span> AddError(ValueType&amp; keyword, ValueType&amp; error) {</div><div class="line"><a name="l02348"></a><span class="lineno"> 2348</span>&#160; <span class="keyword">typename</span> <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">ValueType::MemberIterator</a> member = error_.FindMember(keyword);</div><div class="line"><a name="l02349"></a><span class="lineno"> 2349</span>&#160; <span class="keywordflow">if</span> (member == error_.MemberEnd())</div><div class="line"><a name="l02350"></a><span class="lineno"> 2350</span>&#160; error_.AddMember(keyword, error, GetStateAllocator());</div><div class="line"><a name="l02351"></a><span class="lineno"> 2351</span>&#160; <span class="keywordflow">else</span> {</div><div class="line"><a name="l02352"></a><span class="lineno"> 2352</span>&#160; <span class="keywordflow">if</span> (member-&gt;value.IsObject()) {</div><div class="line"><a name="l02353"></a><span class="lineno"> 2353</span>&#160; ValueType errors(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a058c622e1e7d59419ae58b895cbce468">kArrayType</a>);</div><div class="line"><a name="l02354"></a><span class="lineno"> 2354</span>&#160; errors.<a class="code" href="classrapidjson_1_1_generic_value.html#a0ec9f34bef5890241d4bc882b73b1db4">PushBack</a>(member-&gt;value, GetStateAllocator());</div><div class="line"><a name="l02355"></a><span class="lineno"> 2355</span>&#160; member-&gt;value = errors;</div><div class="line"><a name="l02356"></a><span class="lineno"> 2356</span>&#160; }</div><div class="line"><a name="l02357"></a><span class="lineno"> 2357</span>&#160; member-&gt;value.PushBack(error, GetStateAllocator());</div><div class="line"><a name="l02358"></a><span class="lineno"> 2358</span>&#160; }</div><div class="line"><a name="l02359"></a><span class="lineno"> 2359</span>&#160; }</div><div class="line"><a name="l02360"></a><span class="lineno"> 2360</span>&#160;</div><div class="line"><a name="l02361"></a><span class="lineno"> 2361</span>&#160; <span class="keywordtype">void</span> AddCurrentError(<span class="keyword">const</span> <span class="keyword">typename</span> SchemaType::ValueType&amp; keyword, <span class="keywordtype">bool</span> parent = <span class="keyword">false</span>) {</div><div class="line"><a name="l02362"></a><span class="lineno"> 2362</span>&#160; AddErrorLocation(currentError_, parent);</div><div class="line"><a name="l02363"></a><span class="lineno"> 2363</span>&#160; AddError(ValueType(keyword, GetStateAllocator(), <span class="keyword">false</span>).Move(), currentError_);</div><div class="line"><a name="l02364"></a><span class="lineno"> 2364</span>&#160; }</div><div class="line"><a name="l02365"></a><span class="lineno"> 2365</span>&#160;</div><div class="line"><a name="l02366"></a><span class="lineno"> 2366</span>&#160; <span class="keywordtype">void</span> MergeError(ValueType&amp; other) {</div><div class="line"><a name="l02367"></a><span class="lineno"> 2367</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">typename</span> <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">ValueType::MemberIterator</a> it = other.<a class="code" href="classrapidjson_1_1_generic_value.html#ae89a77887aa3eb1f1f913727cbff6786">MemberBegin</a>(), end = other.<a class="code" href="classrapidjson_1_1_generic_value.html#a34ee3d75a7aa308043fb34b0743bfe7c">MemberEnd</a>(); it != end; ++it) {</div><div class="line"><a name="l02368"></a><span class="lineno"> 2368</span>&#160; AddError(it-&gt;name, it-&gt;value);</div><div class="line"><a name="l02369"></a><span class="lineno"> 2369</span>&#160; }</div><div class="line"><a name="l02370"></a><span class="lineno"> 2370</span>&#160; }</div><div class="line"><a name="l02371"></a><span class="lineno"> 2371</span>&#160;</div><div class="line"><a name="l02372"></a><span class="lineno"> 2372</span>&#160; <span class="keywordtype">void</span> AddNumberError(<span class="keyword">const</span> <span class="keyword">typename</span> SchemaType::ValueType&amp; keyword, ValueType&amp; actual, <span class="keyword">const</span> SValue&amp; expected,</div><div class="line"><a name="l02373"></a><span class="lineno"> 2373</span>&#160; <span class="keyword">const</span> <span class="keyword">typename</span> SchemaType::ValueType&amp; (*exclusive)() = 0) {</div><div class="line"><a name="l02374"></a><span class="lineno"> 2374</span>&#160; currentError_.SetObject();</div><div class="line"><a name="l02375"></a><span class="lineno"> 2375</span>&#160; currentError_.AddMember(GetActualString(), actual, GetStateAllocator());</div><div class="line"><a name="l02376"></a><span class="lineno"> 2376</span>&#160; currentError_.AddMember(GetExpectedString(), ValueType(expected, GetStateAllocator()).Move(), GetStateAllocator());</div><div class="line"><a name="l02377"></a><span class="lineno"> 2377</span>&#160; <span class="keywordflow">if</span> (exclusive)</div><div class="line"><a name="l02378"></a><span class="lineno"> 2378</span>&#160; currentError_.AddMember(ValueType(exclusive(), GetStateAllocator()).Move(), <span class="keyword">true</span>, GetStateAllocator());</div><div class="line"><a name="l02379"></a><span class="lineno"> 2379</span>&#160; AddCurrentError(keyword);</div><div class="line"><a name="l02380"></a><span class="lineno"> 2380</span>&#160; }</div><div class="line"><a name="l02381"></a><span class="lineno"> 2381</span>&#160;</div><div class="line"><a name="l02382"></a><span class="lineno"> 2382</span>&#160; <span class="keywordtype">void</span> AddErrorArray(<span class="keyword">const</span> <span class="keyword">typename</span> SchemaType::ValueType&amp; keyword,</div><div class="line"><a name="l02383"></a><span class="lineno"> 2383</span>&#160; ISchemaValidator** subvalidators, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> count) {</div><div class="line"><a name="l02384"></a><span class="lineno"> 2384</span>&#160; ValueType errors(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a058c622e1e7d59419ae58b895cbce468">kArrayType</a>);</div><div class="line"><a name="l02385"></a><span class="lineno"> 2385</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> i = 0; i &lt; count; ++i)</div><div class="line"><a name="l02386"></a><span class="lineno"> 2386</span>&#160; errors.<a class="code" href="classrapidjson_1_1_generic_value.html#a0ec9f34bef5890241d4bc882b73b1db4">PushBack</a>(static_cast&lt;GenericSchemaValidator*&gt;(subvalidators[i])-&gt;GetError(), GetStateAllocator());</div><div class="line"><a name="l02387"></a><span class="lineno"> 2387</span>&#160; currentError_.<a class="code" href="classrapidjson_1_1_generic_value.html#a7cb3cbaefe4fb99aaf9f155fb4ee039b">SetObject</a>();</div><div class="line"><a name="l02388"></a><span class="lineno"> 2388</span>&#160; currentError_.<a class="code" href="classrapidjson_1_1_generic_value.html#ab018d734d189532b27943bc45776ba68">AddMember</a>(GetErrorsString(), errors, GetStateAllocator());</div><div class="line"><a name="l02389"></a><span class="lineno"> 2389</span>&#160; AddCurrentError(keyword);</div><div class="line"><a name="l02390"></a><span class="lineno"> 2390</span>&#160; }</div><div class="line"><a name="l02391"></a><span class="lineno"> 2391</span>&#160;</div><div class="line"><a name="l02392"></a><span class="lineno"> 2392</span>&#160; <span class="keyword">const</span> SchemaType&amp; CurrentSchema()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> *schemaStack_.template Top&lt;Context&gt;()-&gt;schema; }</div><div class="line"><a name="l02393"></a><span class="lineno"> 2393</span>&#160; Context&amp; CurrentContext() { <span class="keywordflow">return</span> *schemaStack_.template Top&lt;Context&gt;(); }</div><div class="line"><a name="l02394"></a><span class="lineno"> 2394</span>&#160; <span class="keyword">const</span> Context&amp; CurrentContext()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> *schemaStack_.template Top&lt;Context&gt;(); }</div><div class="line"><a name="l02395"></a><span class="lineno"> 2395</span>&#160;</div><div class="line"><a name="l02396"></a><span class="lineno"> 2396</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">size_t</span> kDefaultSchemaStackCapacity = 1024;</div><div class="line"><a name="l02397"></a><span class="lineno"> 2397</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">size_t</span> kDefaultDocumentStackCapacity = 256;</div><div class="line"><a name="l02398"></a><span class="lineno"> 2398</span>&#160; <span class="keyword">const</span> SchemaDocumentType* schemaDocument_;</div><div class="line"><a name="l02399"></a><span class="lineno"> 2399</span>&#160; <span class="keyword">const</span> SchemaType&amp; root_;</div><div class="line"><a name="l02400"></a><span class="lineno"> 2400</span>&#160; StateAllocator* stateAllocator_;</div><div class="line"><a name="l02401"></a><span class="lineno"> 2401</span>&#160; StateAllocator* ownStateAllocator_;</div><div class="line"><a name="l02402"></a><span class="lineno"> 2402</span>&#160; internal::Stack&lt;StateAllocator&gt; schemaStack_; <span class="comment">//!&lt; stack to store the current path of schema (BaseSchemaType *)</span></div><div class="line"><a name="l02403"></a><span class="lineno"> 2403</span>&#160;<span class="comment"></span> internal::Stack&lt;StateAllocator&gt; documentStack_; <span class="comment">//!&lt; stack to store the current path of validating document (Ch)</span></div><div class="line"><a name="l02404"></a><span class="lineno"> 2404</span>&#160;<span class="comment"></span> OutputHandler* outputHandler_;</div><div class="line"><a name="l02405"></a><span class="lineno"> 2405</span>&#160; ValueType error_;</div><div class="line"><a name="l02406"></a><span class="lineno"> 2406</span>&#160; ValueType currentError_;</div><div class="line"><a name="l02407"></a><span class="lineno"> 2407</span>&#160; ValueType missingDependents_;</div><div class="line"><a name="l02408"></a><span class="lineno"> 2408</span>&#160; <span class="keywordtype">bool</span> valid_;</div><div class="line"><a name="l02409"></a><span class="lineno"> 2409</span>&#160;<span class="preprocessor">#if RAPIDJSON_SCHEMA_VERBOSE</span></div><div class="line"><a name="l02410"></a><span class="lineno"> 2410</span>&#160; <span class="keywordtype">unsigned</span> depth_;</div><div class="line"><a name="l02411"></a><span class="lineno"> 2411</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02412"></a><span class="lineno"> 2412</span>&#160;};</div><div class="line"><a name="l02413"></a><span class="lineno"> 2413</span>&#160;</div><div class="line"><a name="l02414"></a><span class="lineno"> 2414</span>&#160;<span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_schema_validator.html">GenericSchemaValidator&lt;SchemaDocument&gt;</a> <a class="code" href="classrapidjson_1_1_generic_schema_validator.html">SchemaValidator</a>;</div><div class="line"><a name="l02415"></a><span class="lineno"> 2415</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02416"></a><span class="lineno"> 2416</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l02417"></a><span class="lineno"> 2417</span>&#160;<span class="comment"></span><span class="comment">// SchemaValidatingReader</span></div><div class="line"><a name="l02418"></a><span class="lineno"> 2418</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02419"></a><span class="lineno"> 2419</span>&#160;<span class="comment">//! A helper class for parsing with validation.</span></div><div class="line"><a name="l02420"></a><span class="lineno"> 2420</span>&#160;<span class="comment"></span><span class="comment">/*!</span></div><div class="line"><a name="l02421"></a><span class="lineno"> 2421</span>&#160;<span class="comment"> This helper class is a functor, designed as a parameter of \ref GenericDocument::Populate().</span></div><div class="line"><a name="l02422"></a><span class="lineno"> 2422</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02423"></a><span class="lineno"> 2423</span>&#160;<span class="comment"> \tparam parseFlags Combination of \ref ParseFlag.</span></div><div class="line"><a name="l02424"></a><span class="lineno"> 2424</span>&#160;<span class="comment"> \tparam InputStream Type of input stream, implementing Stream concept.</span></div><div class="line"><a name="l02425"></a><span class="lineno"> 2425</span>&#160;<span class="comment"> \tparam SourceEncoding Encoding of the input stream.</span></div><div class="line"><a name="l02426"></a><span class="lineno"> 2426</span>&#160;<span class="comment"> \tparam SchemaDocumentType Type of schema document.</span></div><div class="line"><a name="l02427"></a><span class="lineno"> 2427</span>&#160;<span class="comment"> \tparam StackAllocator Allocator type for stack.</span></div><div class="line"><a name="l02428"></a><span class="lineno"> 2428</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l02429"></a><span class="lineno"> 2429</span>&#160;<span class="keyword">template</span> &lt;</div><div class="line"><a name="l02430"></a><span class="lineno"> 2430</span>&#160; <span class="keywordtype">unsigned</span> parseFlags,</div><div class="line"><a name="l02431"></a><span class="lineno"> 2431</span>&#160; <span class="keyword">typename</span> InputStream,</div><div class="line"><a name="l02432"></a><span class="lineno"> 2432</span>&#160; <span class="keyword">typename</span> SourceEncoding,</div><div class="line"><a name="l02433"></a><span class="lineno"> 2433</span>&#160; <span class="keyword">typename</span> SchemaDocumentType = SchemaDocument,</div><div class="line"><a name="l02434"></a><span class="lineno"> 2434</span>&#160; <span class="keyword">typename</span> StackAllocator = <a class="code" href="classrapidjson_1_1_crt_allocator.html">CrtAllocator</a>&gt;</div><div class="line"><a name="l02435"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_schema_validating_reader.html"> 2435</a></span>&#160;<span class="keyword">class </span><a class="code" href="classrapidjson_1_1_schema_validating_reader.html">SchemaValidatingReader</a> {</div><div class="line"><a name="l02436"></a><span class="lineno"> 2436</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l02437"></a><span class="lineno"> 2437</span>&#160; <span class="keyword">typedef</span> <span class="keyword">typename</span> SchemaDocumentType::PointerType PointerType;</div><div class="line"><a name="l02438"></a><span class="lineno"> 2438</span>&#160; <span class="keyword">typedef</span> <span class="keyword">typename</span> InputStream::Ch Ch;</div><div class="line"><a name="l02439"></a><span class="lineno"> 2439</span>&#160; <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue&lt;SourceEncoding, StackAllocator&gt;</a> ValueType;</div><div class="line"><a name="l02440"></a><span class="lineno"> 2440</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02441"></a><span class="lineno"> 2441</span>&#160;<span class="comment"> //! Constructor</span></div><div class="line"><a name="l02442"></a><span class="lineno"> 2442</span>&#160;<span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l02443"></a><span class="lineno"> 2443</span>&#160;<span class="comment"> \param is Input stream.</span></div><div class="line"><a name="l02444"></a><span class="lineno"> 2444</span>&#160;<span class="comment"> \param sd Schema document.</span></div><div class="line"><a name="l02445"></a><span class="lineno"> 2445</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l02446"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_schema_validating_reader.html#a1e2bcc66cad23376241cd91e8bf8c706"> 2446</a></span>&#160; <a class="code" href="classrapidjson_1_1_schema_validating_reader.html#a1e2bcc66cad23376241cd91e8bf8c706">SchemaValidatingReader</a>(InputStream&amp; is, <span class="keyword">const</span> SchemaDocumentType&amp; sd) : is_(is), sd_(sd), invalidSchemaKeyword_(), error_(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4acf030b422a32c3647c7c5973bd4dd0a9">kObjectType</a>), isValid_(true) {}</div><div class="line"><a name="l02447"></a><span class="lineno"> 2447</span>&#160;</div><div class="line"><a name="l02448"></a><span class="lineno"> 2448</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> Handler&gt;</div><div class="line"><a name="l02449"></a><span class="lineno"> 2449</span>&#160; <span class="keywordtype">bool</span> operator()(<a class="code" href="classrapidjson_1_1_handler.html">Handler</a>&amp; handler) {</div><div class="line"><a name="l02450"></a><span class="lineno"> 2450</span>&#160; <a class="code" href="classrapidjson_1_1_generic_reader.html">GenericReader&lt;SourceEncoding, typename SchemaDocumentType::EncodingType, StackAllocator&gt;</a> reader;</div><div class="line"><a name="l02451"></a><span class="lineno"> 2451</span>&#160; <a class="code" href="classrapidjson_1_1_generic_schema_validator.html">GenericSchemaValidator&lt;SchemaDocumentType, Handler&gt;</a> validator(sd_, handler);</div><div class="line"><a name="l02452"></a><span class="lineno"> 2452</span>&#160; parseResult_ = reader.template Parse&lt;parseFlags&gt;(is_, validator);</div><div class="line"><a name="l02453"></a><span class="lineno"> 2453</span>&#160;</div><div class="line"><a name="l02454"></a><span class="lineno"> 2454</span>&#160; isValid_ = validator.<a class="code" href="classrapidjson_1_1_generic_schema_validator.html#ad32a9ad31dbb588edaaf038ab053275b">IsValid</a>();</div><div class="line"><a name="l02455"></a><span class="lineno"> 2455</span>&#160; <span class="keywordflow">if</span> (isValid_) {</div><div class="line"><a name="l02456"></a><span class="lineno"> 2456</span>&#160; invalidSchemaPointer_ = PointerType();</div><div class="line"><a name="l02457"></a><span class="lineno"> 2457</span>&#160; invalidSchemaKeyword_ = 0;</div><div class="line"><a name="l02458"></a><span class="lineno"> 2458</span>&#160; invalidDocumentPointer_ = PointerType();</div><div class="line"><a name="l02459"></a><span class="lineno"> 2459</span>&#160; error_.SetObject();</div><div class="line"><a name="l02460"></a><span class="lineno"> 2460</span>&#160; }</div><div class="line"><a name="l02461"></a><span class="lineno"> 2461</span>&#160; <span class="keywordflow">else</span> {</div><div class="line"><a name="l02462"></a><span class="lineno"> 2462</span>&#160; invalidSchemaPointer_ = validator.<a class="code" href="classrapidjson_1_1_generic_schema_validator.html#a3238efb9d9144c2d6577362d8dc5f61b">GetInvalidSchemaPointer</a>();</div><div class="line"><a name="l02463"></a><span class="lineno"> 2463</span>&#160; invalidSchemaKeyword_ = validator.<a class="code" href="classrapidjson_1_1_generic_schema_validator.html#a03bcd5497a574cffbd066d0aec2b5585">GetInvalidSchemaKeyword</a>();</div><div class="line"><a name="l02464"></a><span class="lineno"> 2464</span>&#160; invalidDocumentPointer_ = validator.<a class="code" href="classrapidjson_1_1_generic_schema_validator.html#a60dfb4a89593c8d3ca4c89a6202feb52">GetInvalidDocumentPointer</a>();</div><div class="line"><a name="l02465"></a><span class="lineno"> 2465</span>&#160; error_.CopyFrom(validator.<a class="code" href="classrapidjson_1_1_generic_schema_validator.html#a422c16457e512835b0d0f64ec1c81ba2">GetError</a>(), allocator_);</div><div class="line"><a name="l02466"></a><span class="lineno"> 2466</span>&#160; }</div><div class="line"><a name="l02467"></a><span class="lineno"> 2467</span>&#160;</div><div class="line"><a name="l02468"></a><span class="lineno"> 2468</span>&#160; <span class="keywordflow">return</span> parseResult_;</div><div class="line"><a name="l02469"></a><span class="lineno"> 2469</span>&#160; }</div><div class="line"><a name="l02470"></a><span class="lineno"> 2470</span>&#160;</div><div class="line"><a name="l02471"></a><span class="lineno"> 2471</span>&#160; <span class="keyword">const</span> <a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#structrapidjson_1_1_parse_result">ParseResult</a>&amp; GetParseResult()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> parseResult_; }</div><div class="line"><a name="l02472"></a><span class="lineno"> 2472</span>&#160; <span class="keywordtype">bool</span> IsValid()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> isValid_; }</div><div class="line"><a name="l02473"></a><span class="lineno"> 2473</span>&#160; <span class="keyword">const</span> PointerType&amp; GetInvalidSchemaPointer()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> invalidSchemaPointer_; }</div><div class="line"><a name="l02474"></a><span class="lineno"> 2474</span>&#160; <span class="keyword">const</span> Ch* GetInvalidSchemaKeyword()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> invalidSchemaKeyword_; }</div><div class="line"><a name="l02475"></a><span class="lineno"> 2475</span>&#160; <span class="keyword">const</span> PointerType&amp; GetInvalidDocumentPointer()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> invalidDocumentPointer_; }</div><div class="line"><a name="l02476"></a><span class="lineno"> 2476</span>&#160; <span class="keyword">const</span> ValueType&amp; GetError()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> error_; }</div><div class="line"><a name="l02477"></a><span class="lineno"> 2477</span>&#160;</div><div class="line"><a name="l02478"></a><span class="lineno"> 2478</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l02479"></a><span class="lineno"> 2479</span>&#160; InputStream&amp; is_;</div><div class="line"><a name="l02480"></a><span class="lineno"> 2480</span>&#160; <span class="keyword">const</span> SchemaDocumentType&amp; sd_;</div><div class="line"><a name="l02481"></a><span class="lineno"> 2481</span>&#160;</div><div class="line"><a name="l02482"></a><span class="lineno"> 2482</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#structrapidjson_1_1_parse_result">ParseResult</a> parseResult_;</div><div class="line"><a name="l02483"></a><span class="lineno"> 2483</span>&#160; PointerType invalidSchemaPointer_;</div><div class="line"><a name="l02484"></a><span class="lineno"> 2484</span>&#160; <span class="keyword">const</span> Ch* invalidSchemaKeyword_;</div><div class="line"><a name="l02485"></a><span class="lineno"> 2485</span>&#160; PointerType invalidDocumentPointer_;</div><div class="line"><a name="l02486"></a><span class="lineno"> 2486</span>&#160; StackAllocator allocator_;</div><div class="line"><a name="l02487"></a><span class="lineno"> 2487</span>&#160; ValueType error_;</div><div class="line"><a name="l02488"></a><span class="lineno"> 2488</span>&#160; <span class="keywordtype">bool</span> isValid_;</div><div class="line"><a name="l02489"></a><span class="lineno"> 2489</span>&#160;};</div><div class="line"><a name="l02490"></a><span class="lineno"> 2490</span>&#160;</div><div class="line"><a name="l02491"></a><span class="lineno"> 2491</span>&#160;RAPIDJSON_NAMESPACE_END</div><div class="line"><a name="l02492"></a><span class="lineno"> 2492</span>&#160;RAPIDJSON_DIAG_POP</div><div class="line"><a name="l02493"></a><span class="lineno"> 2493</span>&#160;</div><div class="line"><a name="l02494"></a><span class="lineno"> 2494</span>&#160;<span class="preprocessor">#endif // RAPIDJSON_SCHEMA_H_</span></div><div class="ttc" id="classrapidjson_1_1_generic_pointer_html_af09e26073a7263fc9e8f0c14160f45bd"><div class="ttname"><a href="classrapidjson_1_1_generic_pointer.html#af09e26073a7263fc9e8f0c14160f45bd">rapidjson::GenericPointer::Get</a></div><div class="ttdeci">ValueType * Get(ValueType &amp;root, size_t *unresolvedTokenIndex=0) const</div><div class="ttdoc">Query a value in a subtree. </div><div class="ttdef"><b>Definition:</b> pointer.h:482</div></div>
-<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4a80d9f25b083abce45edbfdd3ba006c8e"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a80d9f25b083abce45edbfdd3ba006c8e">rapidjson::kTrueType</a></div><div class="ttdoc">true </div><div class="ttdef"><b>Definition:</b> rapidjson.h:634</div></div>
+<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4a80d9f25b083abce45edbfdd3ba006c8e"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a80d9f25b083abce45edbfdd3ba006c8e">rapidjson::kTrueType</a></div><div class="ttdoc">true </div><div class="ttdef"><b>Definition:</b> rapidjson.h:645</div></div>
<div class="ttc" id="classrapidjson_1_1_handler_html"><div class="ttname"><a href="classrapidjson_1_1_handler.html">rapidjson::Handler</a></div><div class="ttdoc">Concept for receiving events from GenericReader upon parsing. The functions return true if no error o...</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_a8d1040c479d89edb261db86400ebe603"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a8d1040c479d89edb261db86400ebe603">rapidjson::GenericValue::Begin</a></div><div class="ttdeci">ValueIterator Begin()</div><div class="ttdoc">Element iterator </div><div class="ttdef"><b>Definition:</b> document.h:1594</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_a8d1040c479d89edb261db86400ebe603"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a8d1040c479d89edb261db86400ebe603">rapidjson::GenericValue::Begin</a></div><div class="ttdeci">ValueIterator Begin()</div><div class="ttdoc">Element iterator </div><div class="ttdef"><b>Definition:</b> document.h:1591</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_schema_validator_html_a03bcd5497a574cffbd066d0aec2b5585"><div class="ttname"><a href="classrapidjson_1_1_generic_schema_validator.html#a03bcd5497a574cffbd066d0aec2b5585">rapidjson::GenericSchemaValidator::GetInvalidSchemaKeyword</a></div><div class="ttdeci">const Ch * GetInvalidSchemaKeyword() const</div><div class="ttdoc">Gets the keyword of invalid schema. </div><div class="ttdef"><b>Definition:</b> schema.h:1867</div></div>
<div class="ttc" id="rapidjson_8h_html_aaee1245f375a71be1ac9b8a07ba5fb8f"><div class="ttname"><a href="rapidjson_8h.html#aaee1245f375a71be1ac9b8a07ba5fb8f">RAPIDJSON_UINT64_C2</a></div><div class="ttdeci">#define RAPIDJSON_UINT64_C2(high32, low32)</div><div class="ttdoc">Construct a 64-bit literal by a pair of 32-bit integer. </div><div class="ttdef"><b>Definition:</b> rapidjson.h:289</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_reader_html"><div class="ttname"><a href="classrapidjson_1_1_generic_reader.html">rapidjson::GenericReader</a></div><div class="ttdoc">SAX-style JSON parser. Use Reader for UTF8 encoding and default allocator. </div><div class="ttdef"><b>Definition:</b> fwd.h:88</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_a7cb3cbaefe4fb99aaf9f155fb4ee039b"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a7cb3cbaefe4fb99aaf9f155fb4ee039b">rapidjson::GenericValue::SetObject</a></div><div class="ttdeci">GenericValue &amp; SetObject()</div><div class="ttdoc">Set this value as an empty object. </div><div class="ttdef"><b>Definition:</b> document.h:1093</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_a7cb3cbaefe4fb99aaf9f155fb4ee039b"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a7cb3cbaefe4fb99aaf9f155fb4ee039b">rapidjson::GenericValue::SetObject</a></div><div class="ttdeci">GenericValue &amp; SetObject()</div><div class="ttdoc">Set this value as an empty object. </div><div class="ttdef"><b>Definition:</b> document.h:1090</div></div>
<div class="ttc" id="namespacerapidjson_html_a44eb33eaa523e36d466b1ced64b85c84"><div class="ttname"><a href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">rapidjson::SizeType</a></div><div class="ttdeci">unsigned SizeType</div><div class="ttdoc">Size type (for string lengths, array sizes, etc.) </div><div class="ttdef"><b>Definition:</b> rapidjson.h:384</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_a799a8a2503989f486f3fc7a660266555"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a799a8a2503989f486f3fc7a660266555">rapidjson::GenericValue::Size</a></div><div class="ttdeci">SizeType Size() const</div><div class="ttdoc">Get the number of elements in array. </div><div class="ttdef"><b>Definition:</b> document.h:1560</div></div>
-<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4a9f2e7047832dce1029551b5de0f05607"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a9f2e7047832dce1029551b5de0f05607">rapidjson::kFalseType</a></div><div class="ttdoc">false </div><div class="ttdef"><b>Definition:</b> rapidjson.h:633</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_a34ee3d75a7aa308043fb34b0743bfe7c"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a34ee3d75a7aa308043fb34b0743bfe7c">rapidjson::GenericValue::MemberEnd</a></div><div class="ttdeci">ConstMemberIterator MemberEnd() const</div><div class="ttdoc">Const past-the-end member iterator </div><div class="ttdef"><b>Definition:</b> document.h:1161</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_a799a8a2503989f486f3fc7a660266555"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a799a8a2503989f486f3fc7a660266555">rapidjson::GenericValue::Size</a></div><div class="ttdeci">SizeType Size() const</div><div class="ttdoc">Get the number of elements in array. </div><div class="ttdef"><b>Definition:</b> document.h:1557</div></div>
+<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4a9f2e7047832dce1029551b5de0f05607"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a9f2e7047832dce1029551b5de0f05607">rapidjson::kFalseType</a></div><div class="ttdoc">false </div><div class="ttdef"><b>Definition:</b> rapidjson.h:644</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_a34ee3d75a7aa308043fb34b0743bfe7c"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a34ee3d75a7aa308043fb34b0743bfe7c">rapidjson::GenericValue::MemberEnd</a></div><div class="ttdeci">ConstMemberIterator MemberEnd() const</div><div class="ttdoc">Const past-the-end member iterator </div><div class="ttdef"><b>Definition:</b> document.h:1158</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_string_buffer_html"><div class="ttname"><a href="classrapidjson_1_1_generic_string_buffer.html">rapidjson::GenericStringBuffer</a></div><div class="ttdoc">Represents an in-memory output stream. </div><div class="ttdef"><b>Definition:</b> fwd.h:59</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_aaf58b9337ccc0cdf16aa9634c4645109"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#aaf58b9337ccc0cdf16aa9634c4645109">rapidjson::GenericValue::End</a></div><div class="ttdeci">ValueIterator End()</div><div class="ttdoc">Past-the-end element iterator </div><div class="ttdef"><b>Definition:</b> document.h:1597</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_aaf58b9337ccc0cdf16aa9634c4645109"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#aaf58b9337ccc0cdf16aa9634c4645109">rapidjson::GenericValue::End</a></div><div class="ttdeci">ValueIterator End()</div><div class="ttdoc">Past-the-end element iterator </div><div class="ttdef"><b>Definition:</b> document.h:1594</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_schema_document_html_aeebf51ef6353f6a01d6f6618da6d0865"><div class="ttname"><a href="classrapidjson_1_1_generic_schema_document.html#aeebf51ef6353f6a01d6f6618da6d0865">rapidjson::GenericSchemaDocument::GenericSchemaDocument</a></div><div class="ttdeci">GenericSchemaDocument(const ValueType &amp;document, const Ch *uri=0, SizeType uriLength=0, IRemoteSchemaDocumentProviderType *remoteProvider=0, Allocator *allocator=0)</div><div class="ttdoc">Constructor. </div><div class="ttdef"><b>Definition:</b> schema.h:1523</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_schema_validator_html_a60dfb4a89593c8d3ca4c89a6202feb52"><div class="ttname"><a href="classrapidjson_1_1_generic_schema_validator.html#a60dfb4a89593c8d3ca4c89a6202feb52">rapidjson::GenericSchemaValidator::GetInvalidDocumentPointer</a></div><div class="ttdeci">PointerType GetInvalidDocumentPointer() const</div><div class="ttdoc">Gets the JSON pointer pointed to the invalid value. </div><div class="ttdef"><b>Definition:</b> schema.h:1872</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_schema_validator_html_a422c16457e512835b0d0f64ec1c81ba2"><div class="ttname"><a href="classrapidjson_1_1_generic_schema_validator.html#a422c16457e512835b0d0f64ec1c81ba2">rapidjson::GenericSchemaValidator::GetError</a></div><div class="ttdeci">ValueType &amp; GetError()</div><div class="ttdoc">Gets the error object. </div><div class="ttdef"><b>Definition:</b> schema.h:1858</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_schema_validator_html_ad9f00d71bf62b8983cf2514c43fb1572"><div class="ttname"><a href="classrapidjson_1_1_generic_schema_validator.html#ad9f00d71bf62b8983cf2514c43fb1572">rapidjson::GenericSchemaValidator::~GenericSchemaValidator</a></div><div class="ttdeci">~GenericSchemaValidator()</div><div class="ttdoc">Destructor. </div><div class="ttdef"><b>Definition:</b> schema.h:1837</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_ae89a77887aa3eb1f1f913727cbff6786"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#ae89a77887aa3eb1f1f913727cbff6786">rapidjson::GenericValue::MemberBegin</a></div><div class="ttdeci">ConstMemberIterator MemberBegin() const</div><div class="ttdoc">Const member iterator </div><div class="ttdef"><b>Definition:</b> document.h:1158</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_ae89a77887aa3eb1f1f913727cbff6786"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#ae89a77887aa3eb1f1f913727cbff6786">rapidjson::GenericValue::MemberBegin</a></div><div class="ttdeci">ConstMemberIterator MemberBegin() const</div><div class="ttdoc">Const member iterator </div><div class="ttdef"><b>Definition:</b> document.h:1155</div></div>
<div class="ttc" id="classrapidjson_1_1_crt_allocator_html"><div class="ttname"><a href="classrapidjson_1_1_crt_allocator.html">rapidjson::CrtAllocator</a></div><div class="ttdoc">C-runtime library allocator. </div><div class="ttdef"><b>Definition:</b> allocators.h:75</div></div>
-<div class="ttc" id="rapidjson_8h_html_abdc7cd7902748ffe6626d71c59a73c3b"><div class="ttname"><a href="rapidjson_8h.html#abdc7cd7902748ffe6626d71c59a73c3b">RAPIDJSON_NEW</a></div><div class="ttdeci">#define RAPIDJSON_NEW(TypeName)</div><div class="ttdoc">! customization point for global new </div><div class="ttdef"><b>Definition:</b> rapidjson.h:614</div></div>
+<div class="ttc" id="rapidjson_8h_html_abdc7cd7902748ffe6626d71c59a73c3b"><div class="ttname"><a href="rapidjson_8h.html#abdc7cd7902748ffe6626d71c59a73c3b">RAPIDJSON_NEW</a></div><div class="ttdeci">#define RAPIDJSON_NEW(TypeName)</div><div class="ttdoc">! customization point for global new </div><div class="ttdef"><b>Definition:</b> rapidjson.h:625</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_schema_validator_html_ad32a9ad31dbb588edaaf038ab053275b"><div class="ttname"><a href="classrapidjson_1_1_generic_schema_validator.html#ad32a9ad31dbb588edaaf038ab053275b">rapidjson::GenericSchemaValidator::IsValid</a></div><div class="ttdeci">virtual bool IsValid() const</div><div class="ttdoc">Checks whether the current state is valid. </div><div class="ttdef"><b>Definition:</b> schema.h:1855</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_ab018d734d189532b27943bc45776ba68"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#ab018d734d189532b27943bc45776ba68">rapidjson::GenericValue::AddMember</a></div><div class="ttdeci">GenericValue &amp; AddMember(GenericValue &amp;name, GenericValue &amp;value, Allocator &amp;allocator)</div><div class="ttdoc">Add a member (name-value pair) to the object. </div><div class="ttdef"><b>Definition:</b> document.h:1284</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_ab018d734d189532b27943bc45776ba68"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#ab018d734d189532b27943bc45776ba68">rapidjson::GenericValue::AddMember</a></div><div class="ttdeci">GenericValue &amp; AddMember(GenericValue &amp;name, GenericValue &amp;value, Allocator &amp;allocator)</div><div class="ttdoc">Add a member (name-value pair) to the object. </div><div class="ttdef"><b>Definition:</b> document.h:1281</div></div>
<div class="ttc" id="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s_html_structrapidjson_1_1_parse_result"><div class="ttname"><a href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#structrapidjson_1_1_parse_result">rapidjson::ParseResult</a></div><div class="ttdoc">Result of parsing (wraps ParseErrorCode) </div><div class="ttdef"><b>Definition:</b> error.h:106</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_schema_validator_html_acc07bd08b00195d84bb5b83f59c593d3"><div class="ttname"><a href="classrapidjson_1_1_generic_schema_validator.html#acc07bd08b00195d84bb5b83f59c593d3">rapidjson::GenericSchemaValidator::GenericSchemaValidator</a></div><div class="ttdeci">GenericSchemaValidator(const SchemaDocumentType &amp;schemaDocument, StateAllocator *allocator=0, size_t schemaStackCapacity=kDefaultSchemaStackCapacity, size_t documentStackCapacity=kDefaultDocumentStackCapacity)</div><div class="ttdoc">Constructor without output handler. </div><div class="ttdef"><b>Definition:</b> schema.h:1782</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_schema_document_html"><div class="ttname"><a href="classrapidjson_1_1_generic_schema_document.html">rapidjson::GenericSchemaDocument</a></div><div class="ttdoc">JSON schema document. </div><div class="ttdef"><b>Definition:</b> fwd.h:136</div></div>
-<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">rapidjson::Type</a></div><div class="ttdeci">Type</div><div class="ttdoc">Type of JSON value </div><div class="ttdef"><b>Definition:</b> rapidjson.h:631</div></div>
-<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4acf030b422a32c3647c7c5973bd4dd0a9"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4acf030b422a32c3647c7c5973bd4dd0a9">rapidjson::kObjectType</a></div><div class="ttdoc">object </div><div class="ttdef"><b>Definition:</b> rapidjson.h:635</div></div>
+<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">rapidjson::Type</a></div><div class="ttdeci">Type</div><div class="ttdoc">Type of JSON value </div><div class="ttdef"><b>Definition:</b> rapidjson.h:642</div></div>
+<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4acf030b422a32c3647c7c5973bd4dd0a9"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4acf030b422a32c3647c7c5973bd4dd0a9">rapidjson::kObjectType</a></div><div class="ttdoc">object </div><div class="ttdef"><b>Definition:</b> rapidjson.h:646</div></div>
<div class="ttc" id="document_8h_html"><div class="ttname"><a href="document_8h.html">document.h</a></div></div>
<div class="ttc" id="classrapidjson_1_1_generic_schema_validator_html_afe6cd0d9088a1d4cf8100c0efc9f76fc"><div class="ttname"><a href="classrapidjson_1_1_generic_schema_validator.html#afe6cd0d9088a1d4cf8100c0efc9f76fc">rapidjson::GenericSchemaValidator::Reset</a></div><div class="ttdeci">void Reset()</div><div class="ttdoc">Reset the internal states. </div><div class="ttdef"><b>Definition:</b> schema.h:1843</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html_a0ec9f34bef5890241d4bc882b73b1db4"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a0ec9f34bef5890241d4bc882b73b1db4">rapidjson::GenericValue::PushBack</a></div><div class="ttdeci">GenericValue &amp; PushBack(GenericValue &amp;value, Allocator &amp;allocator)</div><div class="ttdoc">Append a GenericValue at the end of the array. </div><div class="ttdef"><b>Definition:</b> document.h:1630</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html_a0ec9f34bef5890241d4bc882b73b1db4"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a0ec9f34bef5890241d4bc882b73b1db4">rapidjson::GenericValue::PushBack</a></div><div class="ttdeci">GenericValue &amp; PushBack(GenericValue &amp;value, Allocator &amp;allocator)</div><div class="ttdoc">Append a GenericValue at the end of the array. </div><div class="ttdef"><b>Definition:</b> document.h:1627</div></div>
<div class="ttc" id="classrapidjson_1_1_i_generic_remote_schema_document_provider_html"><div class="ttname"><a href="classrapidjson_1_1_i_generic_remote_schema_document_provider.html">rapidjson::IGenericRemoteSchemaDocumentProvider</a></div><div class="ttdef"><b>Definition:</b> fwd.h:133</div></div>
-<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4a058c622e1e7d59419ae58b895cbce468"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a058c622e1e7d59419ae58b895cbce468">rapidjson::kArrayType</a></div><div class="ttdoc">array </div><div class="ttdef"><b>Definition:</b> rapidjson.h:636</div></div>
-<div class="ttc" id="rapidjson_8h_html_a52c941c3fdd646527cdcd42aa846a28a"><div class="ttname"><a href="rapidjson_8h.html#a52c941c3fdd646527cdcd42aa846a28a">RAPIDJSON_DELETE</a></div><div class="ttdeci">#define RAPIDJSON_DELETE(x)</div><div class="ttdoc">! customization point for global delete </div><div class="ttdef"><b>Definition:</b> rapidjson.h:618</div></div>
+<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4a058c622e1e7d59419ae58b895cbce468"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a058c622e1e7d59419ae58b895cbce468">rapidjson::kArrayType</a></div><div class="ttdoc">array </div><div class="ttdef"><b>Definition:</b> rapidjson.h:647</div></div>
+<div class="ttc" id="rapidjson_8h_html_a52c941c3fdd646527cdcd42aa846a28a"><div class="ttname"><a href="rapidjson_8h.html#a52c941c3fdd646527cdcd42aa846a28a">RAPIDJSON_DELETE</a></div><div class="ttdeci">#define RAPIDJSON_DELETE(x)</div><div class="ttdoc">! customization point for global delete </div><div class="ttdef"><b>Definition:</b> rapidjson.h:629</div></div>
<div class="ttc" id="classrapidjson_1_1_schema_validating_reader_html_a1e2bcc66cad23376241cd91e8bf8c706"><div class="ttname"><a href="classrapidjson_1_1_schema_validating_reader.html#a1e2bcc66cad23376241cd91e8bf8c706">rapidjson::SchemaValidatingReader::SchemaValidatingReader</a></div><div class="ttdeci">SchemaValidatingReader(InputStream &amp;is, const SchemaDocumentType &amp;sd)</div><div class="ttdoc">Constructor </div><div class="ttdef"><b>Definition:</b> schema.h:2446</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_schema_document_html_adf6f3372013227873ed392dee1e752bf"><div class="ttname"><a href="classrapidjson_1_1_generic_schema_document.html#adf6f3372013227873ed392dee1e752bf">rapidjson::GenericSchemaDocument::~GenericSchemaDocument</a></div><div class="ttdeci">~GenericSchemaDocument()</div><div class="ttdoc">Destructor </div><div class="ttdef"><b>Definition:</b> schema.h:1589</div></div>
-<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4a952871e4326b527154fc8aac1ac1f6ff"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a952871e4326b527154fc8aac1ac1f6ff">rapidjson::kNullType</a></div><div class="ttdoc">null </div><div class="ttdef"><b>Definition:</b> rapidjson.h:632</div></div>
-<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4ad6379da3dc04b83a591992bfb9fabba7"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4ad6379da3dc04b83a591992bfb9fabba7">rapidjson::kStringType</a></div><div class="ttdoc">string </div><div class="ttdef"><b>Definition:</b> rapidjson.h:637</div></div>
+<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4a952871e4326b527154fc8aac1ac1f6ff"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a952871e4326b527154fc8aac1ac1f6ff">rapidjson::kNullType</a></div><div class="ttdoc">null </div><div class="ttdef"><b>Definition:</b> rapidjson.h:643</div></div>
+<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4ad6379da3dc04b83a591992bfb9fabba7"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4ad6379da3dc04b83a591992bfb9fabba7">rapidjson::kStringType</a></div><div class="ttdoc">string </div><div class="ttdef"><b>Definition:</b> rapidjson.h:648</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_schema_document_html_a8b2ac6de85dc9c1fb4f4d0be4aeb2d6a"><div class="ttname"><a href="classrapidjson_1_1_generic_schema_document.html#a8b2ac6de85dc9c1fb4f4d0be4aeb2d6a">rapidjson::GenericSchemaDocument::GetRoot</a></div><div class="ttdeci">const SchemaType &amp; GetRoot() const</div><div class="ttdoc">Get the root schema. </div><div class="ttdef"><b>Definition:</b> schema.h:1604</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_pointer_html_a7cb5eda2af1722e52efa591c4103ebec"><div class="ttname"><a href="classrapidjson_1_1_generic_pointer.html#a7cb5eda2af1722e52efa591c4103ebec">rapidjson::GenericPointer::Append</a></div><div class="ttdeci">GenericPointer Append(const Token &amp;token, Allocator *allocator=0) const</div><div class="ttdoc">Append a token and return a new Pointer </div><div class="ttdef"><b>Definition:</b> pointer.h:214</div></div>
<div class="ttc" id="structrapidjson_1_1_base_reader_handler_html"><div class="ttname"><a href="structrapidjson_1_1_base_reader_handler.html">rapidjson::BaseReaderHandler</a></div><div class="ttdoc">Default implementation of Handler. </div><div class="ttdef"><b>Definition:</b> fwd.h:85</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_schema_validator_html"><div class="ttname"><a href="classrapidjson_1_1_generic_schema_validator.html">rapidjson::GenericSchemaValidator</a></div><div class="ttdoc">JSON Schema Validator. </div><div class="ttdef"><b>Definition:</b> fwd.h:145</div></div>
-<div class="ttc" id="structrapidjson_1_1_generic_string_ref_html"><div class="ttname"><a href="structrapidjson_1_1_generic_string_ref.html">rapidjson::GenericStringRef</a></div><div class="ttdoc">Reference to a constant string (not taking a copy) </div><div class="ttdef"><b>Definition:</b> document.h:253</div></div>
+<div class="ttc" id="structrapidjson_1_1_generic_string_ref_html"><div class="ttname"><a href="structrapidjson_1_1_generic_string_ref.html">rapidjson::GenericStringRef</a></div><div class="ttdoc">Reference to a constant string (not taking a copy) </div><div class="ttdef"><b>Definition:</b> document.h:250</div></div>
<div class="ttc" id="classrapidjson_1_1_allocator_html"><div class="ttname"><a href="classrapidjson_1_1_allocator.html">rapidjson::Allocator</a></div><div class="ttdoc">Concept for allocating, resizing and freeing memory block. </div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_value_html"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html">rapidjson::GenericValue</a></div><div class="ttdoc">Represents a JSON value. Use Value for UTF8 encoding and default allocator. </div><div class="ttdef"><b>Definition:</b> document.h:57</div></div>
-<div class="ttc" id="classrapidjson_1_1_generic_member_iterator_html"><div class="ttname"><a href="classrapidjson_1_1_generic_member_iterator.html">rapidjson::GenericMemberIterator</a></div><div class="ttdoc">(Constant) member iterator for a JSON object value </div><div class="ttdef"><b>Definition:</b> document.h:99</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_value_html"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html">rapidjson::GenericValue</a></div><div class="ttdoc">Represents a JSON value. Use Value for UTF8 encoding and default allocator. </div><div class="ttdef"><b>Definition:</b> document.h:54</div></div>
+<div class="ttc" id="classrapidjson_1_1_generic_member_iterator_html"><div class="ttname"><a href="classrapidjson_1_1_generic_member_iterator.html">rapidjson::GenericMemberIterator</a></div><div class="ttdoc">(Constant) member iterator for a JSON object value </div><div class="ttdef"><b>Definition:</b> document.h:96</div></div>
<div class="ttc" id="classrapidjson_1_1_schema_validating_reader_html"><div class="ttname"><a href="classrapidjson_1_1_schema_validating_reader.html">rapidjson::SchemaValidatingReader</a></div><div class="ttdoc">A helper class for parsing with validation. </div><div class="ttdef"><b>Definition:</b> schema.h:2435</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_pointer_html_a98b96d54c2c3378f1892ffffc501069c"><div class="ttname"><a href="classrapidjson_1_1_generic_pointer.html#a98b96d54c2c3378f1892ffffc501069c">rapidjson::GenericPointer::IsValid</a></div><div class="ttdeci">bool IsValid() const</div><div class="ttdoc">Check whether this is a valid pointer. </div><div class="ttdef"><b>Definition:</b> pointer.h:306</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_schema_validator_html_a3238efb9d9144c2d6577362d8dc5f61b"><div class="ttname"><a href="classrapidjson_1_1_generic_schema_validator.html#a3238efb9d9144c2d6577362d8dc5f61b">rapidjson::GenericSchemaValidator::GetInvalidSchemaPointer</a></div><div class="ttdeci">PointerType GetInvalidSchemaPointer() const</div><div class="ttdoc">Gets the JSON pointer pointed to the invalid schema. </div><div class="ttdef"><b>Definition:</b> schema.h:1862</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_schema_validator_html_a0e1d8f19381bd53d77cc00a9a6dcd067"><div class="ttname"><a href="classrapidjson_1_1_generic_schema_validator.html#a0e1d8f19381bd53d77cc00a9a6dcd067">rapidjson::GenericSchemaValidator::GenericSchemaValidator</a></div><div class="ttdeci">GenericSchemaValidator(const SchemaDocumentType &amp;schemaDocument, OutputHandler &amp;outputHandler, StateAllocator *allocator=0, size_t schemaStackCapacity=kDefaultSchemaStackCapacity, size_t documentStackCapacity=kDefaultDocumentStackCapacity)</div><div class="ttdoc">Constructor with output handler. </div><div class="ttdef"><b>Definition:</b> schema.h:1812</div></div>
<div class="ttc" id="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g_html_gabeba18d612187bad2ac62aed9276d47c"><div class="ttname"><a href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a></div><div class="ttdeci">#define RAPIDJSON_ASSERT(x)</div><div class="ttdoc">Assertion. </div><div class="ttdef"><b>Definition:</b> rapidjson.h:406</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_string_buffer_html_a9d830ec37a4ba0fba3b523c90aaf8b42"><div class="ttname"><a href="classrapidjson_1_1_generic_string_buffer.html#a9d830ec37a4ba0fba3b523c90aaf8b42">rapidjson::GenericStringBuffer::GetSize</a></div><div class="ttdeci">size_t GetSize() const</div><div class="ttdoc">Get the size of string in bytes in the string buffer. </div><div class="ttdef"><b>Definition:</b> stringbuffer.h:82</div></div>
-<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a">rapidjson::kNumberType</a></div><div class="ttdoc">number </div><div class="ttdef"><b>Definition:</b> rapidjson.h:638</div></div>
+<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a">rapidjson::kNumberType</a></div><div class="ttdoc">number </div><div class="ttdef"><b>Definition:</b> rapidjson.h:649</div></div>
</div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->
<!-- HTML footer for doxygen 1.8.7-->
diff --git a/zh-cn/search/all_f.js b/zh-cn/search/all_f.js
index 4a3b3711..1e86cf27 100644
--- a/zh-cn/search/all_f.js
+++ b/zh-cn/search/all_f.js
@@ -22,6 +22,7 @@ var searchData=
['rapidjson_5fnew',['RAPIDJSON_NEW',['../rapidjson_8h.html#abdc7cd7902748ffe6626d71c59a73c3b',1,'rapidjson.h']]],
['rapidjson_5fno_5fint64define',['RAPIDJSON_NO_INT64DEFINE',['../group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga7f4e50c35dae3b015390daa6d48ce23c',1,'rapidjson.h']]],
['rapidjson_5fno_5fsizetypedefine',['RAPIDJSON_NO_SIZETYPEDEFINE',['../group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga250603aa9e2a12429b25ba0c8108ad4f',1,'rapidjson.h']]],
+ ['rapidjson_5fnoexcept_5fassert',['RAPIDJSON_NOEXCEPT_ASSERT',['../group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga2b2a0d9143aa4fb31205a85b34c43952',1,'rapidjson.h']]],
['rapidjson_5fparse_5fdefault_5fflags',['RAPIDJSON_PARSE_DEFAULT_FLAGS',['../group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga77005e892e6601599beaf421b0395c31',1,'reader.h']]],
['rapidjson_5fparse_5ferror',['RAPIDJSON_PARSE_ERROR',['../group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gae3689840fa6e89a241313f33b602f865',1,'reader.h']]],
['rapidjson_5fparse_5ferror_5fnoreturn',['RAPIDJSON_PARSE_ERROR_NORETURN',['../group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#ga7f8c4265b2edda78568ae3338aaf1461',1,'reader.h']]],
diff --git a/zh-cn/stack_8h_source.html b/zh-cn/stack_8h_source.html
index 23c5c030..d1f18f4d 100644
--- a/zh-cn/stack_8h_source.html
+++ b/zh-cn/stack_8h_source.html
@@ -81,9 +81,9 @@ $(document).ready(function(){initNavTree('stack_8h_source.html','');});
<div class="title">stack.h</div> </div>
</div><!--header-->
<div class="contents">
-<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">// Tencent is pleased to support the open source community by making RapidJSON available.</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">// </span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">// Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved.</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment">// Licensed under the MIT License (the &quot;License&quot;); you may not use this file except</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment">// in compliance with the License. You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment">// http://opensource.org/licenses/MIT</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment">// Unless required by applicable law or agreed to in writing, software distributed </span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment">// under the License is distributed on an &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR </span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment">// CONDITIONS OF ANY KIND, either express or implied. See the License for the </span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment">// specific language governing permissions and limitations under the License.</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;</div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#ifndef RAPIDJSON_INTERNAL_STACK_H_</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#define RAPIDJSON_INTERNAL_STACK_H_</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#include &quot;../allocators.h&quot;</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="preprocessor">#include &quot;swap.h&quot;</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="preprocessor">#if defined(__clang__)</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;RAPIDJSON_DIAG_PUSH</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;RAPIDJSON_DIAG_OFF(c++98-compat)</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;RAPIDJSON_NAMESPACE_BEGIN</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="keyword">namespace </span>internal {</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="comment"></span><span class="comment">// Stack</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="comment">//! A type-unsafe stack for storing different types of data.</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="comment"></span><span class="comment">/*! \tparam Allocator Allocator for allocating stack memory.</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> Allocator&gt;</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="keyword">class </span>Stack {</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="comment">// Optimization note: Do not allocate memory for stack_ in constructor.</span></div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="comment">// Do it lazily when first Push() -&gt; Expand() -&gt; Resize().</span></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; Stack(Allocator* allocator, <span class="keywordtype">size_t</span> stackCapacity) : allocator_(allocator), ownAllocator_(0), stack_(0), stackTop_(0), stackEnd_(0), initialCapacity_(stackCapacity) {</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; }</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; Stack(Stack&amp;&amp; rhs)</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; : allocator_(rhs.allocator_),</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; ownAllocator_(rhs.ownAllocator_),</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; stack_(rhs.stack_),</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; stackTop_(rhs.stackTop_),</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; stackEnd_(rhs.stackEnd_),</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; initialCapacity_(rhs.initialCapacity_)</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; {</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; rhs.allocator_ = 0;</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; rhs.ownAllocator_ = 0;</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; rhs.stack_ = 0;</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; rhs.stackTop_ = 0;</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; rhs.stackEnd_ = 0;</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; rhs.initialCapacity_ = 0;</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; }</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; ~Stack() {</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; Destroy();</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; }</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; Stack&amp; operator=(Stack&amp;&amp; rhs) {</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keywordflow">if</span> (&amp;rhs != <span class="keyword">this</span>)</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; {</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; Destroy();</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; allocator_ = rhs.allocator_;</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; ownAllocator_ = rhs.ownAllocator_;</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; stack_ = rhs.stack_;</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; stackTop_ = rhs.stackTop_;</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; stackEnd_ = rhs.stackEnd_;</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; initialCapacity_ = rhs.initialCapacity_;</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; rhs.allocator_ = 0;</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; rhs.ownAllocator_ = 0;</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; rhs.stack_ = 0;</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; rhs.stackTop_ = 0;</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; rhs.stackEnd_ = 0;</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; rhs.initialCapacity_ = 0;</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; }</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; }</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160;</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="keywordtype">void</span> Swap(Stack&amp; rhs) RAPIDJSON_NOEXCEPT {</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; internal::Swap(allocator_, rhs.allocator_);</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; internal::Swap(ownAllocator_, rhs.ownAllocator_);</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; internal::Swap(stack_, rhs.stack_);</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; internal::Swap(stackTop_, rhs.stackTop_);</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; internal::Swap(stackEnd_, rhs.stackEnd_);</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; internal::Swap(initialCapacity_, rhs.initialCapacity_);</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; }</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="keywordtype">void</span> Clear() { stackTop_ = stack_; }</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160;</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <span class="keywordtype">void</span> ShrinkToFit() { </div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keywordflow">if</span> (Empty()) {</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="comment">// If the stack is empty, completely deallocate the memory.</span></div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; Allocator::Free(stack_); <span class="comment">// NOLINT (+clang-analyzer-unix.Malloc)</span></div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; stack_ = 0;</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; stackTop_ = 0;</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; stackEnd_ = 0;</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; }</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; Resize(GetSize());</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; }</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160;</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="comment">// Optimization note: try to minimize the size of this function for force inline.</span></div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <span class="comment">// Expansion is run very infrequently, so it is moved to another (probably non-inline) function.</span></div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; RAPIDJSON_FORCEINLINE <span class="keywordtype">void</span> Reserve(<span class="keywordtype">size_t</span> count = 1) {</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="comment">// Expand the stack if needed</span></div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(stackTop_ + <span class="keyword">sizeof</span>(T) * count &gt; stackEnd_))</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; Expand&lt;T&gt;(count);</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; }</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160;</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; RAPIDJSON_FORCEINLINE T* Push(<span class="keywordtype">size_t</span> count = 1) {</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; Reserve&lt;T&gt;(count);</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <span class="keywordflow">return</span> PushUnsafe&lt;T&gt;(count);</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; }</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160;</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; RAPIDJSON_FORCEINLINE T* PushUnsafe(<span class="keywordtype">size_t</span> count = 1) {</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(stackTop_);</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(stackTop_ + <span class="keyword">sizeof</span>(T) * count &lt;= stackEnd_);</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; T* ret = <span class="keyword">reinterpret_cast&lt;</span>T*<span class="keyword">&gt;</span>(stackTop_);</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; stackTop_ += <span class="keyword">sizeof</span>(T) * count;</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <span class="keywordflow">return</span> ret;</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; }</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160;</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; T* Pop(<span class="keywordtype">size_t</span> count) {</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(GetSize() &gt;= count * <span class="keyword">sizeof</span>(T));</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; stackTop_ -= count * <span class="keyword">sizeof</span>(T);</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast&lt;</span>T*<span class="keyword">&gt;</span>(stackTop_);</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; }</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160;</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; T* Top() { </div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(GetSize() &gt;= <span class="keyword">sizeof</span>(T));</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast&lt;</span>T*<span class="keyword">&gt;</span>(stackTop_ - <span class="keyword">sizeof</span>(T));</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; }</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160;</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="keyword">const</span> T* Top()<span class="keyword"> const </span>{</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(GetSize() &gt;= <span class="keyword">sizeof</span>(T));</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast&lt;</span>T*<span class="keyword">&gt;</span>(stackTop_ - <span class="keyword">sizeof</span>(T));</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; }</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160;</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; T* End() { <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast&lt;</span>T*<span class="keyword">&gt;</span>(stackTop_); }</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160;</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <span class="keyword">const</span> T* End()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast&lt;</span>T*<span class="keyword">&gt;</span>(stackTop_); }</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160;</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; T* Bottom() { <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast&lt;</span>T*<span class="keyword">&gt;</span>(stack_); }</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160;</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; <span class="keyword">const</span> T* Bottom()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast&lt;</span>T*<span class="keyword">&gt;</span>(stack_); }</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160;</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; <span class="keywordtype">bool</span> HasAllocator()<span class="keyword"> const </span>{</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <span class="keywordflow">return</span> allocator_ != 0;</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; }</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160;</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; Allocator&amp; GetAllocator() {</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(allocator_);</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <span class="keywordflow">return</span> *allocator_;</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; }</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160;</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; <span class="keywordtype">bool</span> Empty()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> stackTop_ == stack_; }</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <span class="keywordtype">size_t</span> GetSize()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span><span class="keywordtype">size_t</span><span class="keyword">&gt;</span>(stackTop_ - stack_); }</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; <span class="keywordtype">size_t</span> GetCapacity()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span><span class="keywordtype">size_t</span><span class="keyword">&gt;</span>(stackEnd_ - stack_); }</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160;</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <span class="keywordtype">void</span> Expand(<span class="keywordtype">size_t</span> count) {</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <span class="comment">// Only expand the capacity if the current stack exists. Otherwise just create a stack with initial capacity.</span></div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; <span class="keywordtype">size_t</span> newCapacity;</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; <span class="keywordflow">if</span> (stack_ == 0) {</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; <span class="keywordflow">if</span> (!allocator_)</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; ownAllocator_ = allocator_ = <a class="code" href="rapidjson_8h.html#abdc7cd7902748ffe6626d71c59a73c3b">RAPIDJSON_NEW</a>(Allocator)();</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; newCapacity = initialCapacity_;</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; newCapacity = GetCapacity();</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; newCapacity += (newCapacity + 1) / 2;</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; }</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <span class="keywordtype">size_t</span> newSize = GetSize() + <span class="keyword">sizeof</span>(T) * count;</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <span class="keywordflow">if</span> (newCapacity &lt; newSize)</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; newCapacity = newSize;</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160;</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; Resize(newCapacity);</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; }</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160;</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; <span class="keywordtype">void</span> Resize(<span class="keywordtype">size_t</span> newCapacity) {</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; <span class="keyword">const</span> <span class="keywordtype">size_t</span> size = GetSize(); <span class="comment">// Backup the current size</span></div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; stack_ = <span class="keyword">static_cast&lt;</span><span class="keywordtype">char</span>*<span class="keyword">&gt;</span>(allocator_-&gt;Realloc(stack_, GetCapacity(), newCapacity));</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; stackTop_ = stack_ + size;</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; stackEnd_ = stack_ + newCapacity;</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; }</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160;</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; <span class="keywordtype">void</span> Destroy() {</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; Allocator::Free(stack_);</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <a class="code" href="rapidjson_8h.html#a52c941c3fdd646527cdcd42aa846a28a">RAPIDJSON_DELETE</a>(ownAllocator_); <span class="comment">// Only delete if it is owned by the stack</span></div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; }</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160;</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <span class="comment">// Prohibit copy constructor &amp; assignment operator.</span></div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; Stack(<span class="keyword">const</span> Stack&amp;);</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; Stack&amp; operator=(<span class="keyword">const</span> Stack&amp;);</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160;</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; Allocator* allocator_;</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; Allocator* ownAllocator_;</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; <span class="keywordtype">char</span> *stack_;</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; <span class="keywordtype">char</span> *stackTop_;</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; <span class="keywordtype">char</span> *stackEnd_;</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; <span class="keywordtype">size_t</span> initialCapacity_;</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160;};</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160;</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160;} <span class="comment">// namespace internal</span></div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160;RAPIDJSON_NAMESPACE_END</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160;</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160;<span class="preprocessor">#if defined(__clang__)</span></div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160;RAPIDJSON_DIAG_POP</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160;</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160;<span class="preprocessor">#endif // RAPIDJSON_STACK_H_</span></div><div class="ttc" id="rapidjson_8h_html_abdc7cd7902748ffe6626d71c59a73c3b"><div class="ttname"><a href="rapidjson_8h.html#abdc7cd7902748ffe6626d71c59a73c3b">RAPIDJSON_NEW</a></div><div class="ttdeci">#define RAPIDJSON_NEW(TypeName)</div><div class="ttdoc">! customization point for global new </div><div class="ttdef"><b>Definition:</b> rapidjson.h:614</div></div>
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">// Tencent is pleased to support the open source community by making RapidJSON available.</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">// </span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">// Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved.</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment">// Licensed under the MIT License (the &quot;License&quot;); you may not use this file except</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment">// in compliance with the License. You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment">// http://opensource.org/licenses/MIT</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment">// Unless required by applicable law or agreed to in writing, software distributed </span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment">// under the License is distributed on an &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR </span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment">// CONDITIONS OF ANY KIND, either express or implied. See the License for the </span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment">// specific language governing permissions and limitations under the License.</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;</div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#ifndef RAPIDJSON_INTERNAL_STACK_H_</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#define RAPIDJSON_INTERNAL_STACK_H_</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#include &quot;../allocators.h&quot;</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="preprocessor">#include &quot;swap.h&quot;</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="preprocessor">#if defined(__clang__)</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;RAPIDJSON_DIAG_PUSH</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;RAPIDJSON_DIAG_OFF(c++98-compat)</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;RAPIDJSON_NAMESPACE_BEGIN</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="keyword">namespace </span>internal {</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="comment"></span><span class="comment">// Stack</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="comment">//! A type-unsafe stack for storing different types of data.</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="comment"></span><span class="comment">/*! \tparam Allocator Allocator for allocating stack memory.</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> Allocator&gt;</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="keyword">class </span>Stack {</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="comment">// Optimization note: Do not allocate memory for stack_ in constructor.</span></div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="comment">// Do it lazily when first Push() -&gt; Expand() -&gt; Resize().</span></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; Stack(Allocator* allocator, <span class="keywordtype">size_t</span> stackCapacity) : allocator_(allocator), ownAllocator_(0), stack_(0), stackTop_(0), stackEnd_(0), initialCapacity_(stackCapacity) {</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; }</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; Stack(Stack&amp;&amp; rhs)</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; : allocator_(rhs.allocator_),</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; ownAllocator_(rhs.ownAllocator_),</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; stack_(rhs.stack_),</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; stackTop_(rhs.stackTop_),</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; stackEnd_(rhs.stackEnd_),</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; initialCapacity_(rhs.initialCapacity_)</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; {</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; rhs.allocator_ = 0;</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; rhs.ownAllocator_ = 0;</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; rhs.stack_ = 0;</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; rhs.stackTop_ = 0;</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; rhs.stackEnd_ = 0;</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; rhs.initialCapacity_ = 0;</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; }</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; ~Stack() {</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; Destroy();</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; }</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; Stack&amp; operator=(Stack&amp;&amp; rhs) {</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keywordflow">if</span> (&amp;rhs != <span class="keyword">this</span>)</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; {</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; Destroy();</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; allocator_ = rhs.allocator_;</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; ownAllocator_ = rhs.ownAllocator_;</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; stack_ = rhs.stack_;</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; stackTop_ = rhs.stackTop_;</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; stackEnd_ = rhs.stackEnd_;</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; initialCapacity_ = rhs.initialCapacity_;</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; rhs.allocator_ = 0;</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; rhs.ownAllocator_ = 0;</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; rhs.stack_ = 0;</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; rhs.stackTop_ = 0;</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; rhs.stackEnd_ = 0;</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; rhs.initialCapacity_ = 0;</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; }</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; }</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160;</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="keywordtype">void</span> Swap(Stack&amp; rhs) RAPIDJSON_NOEXCEPT {</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; internal::Swap(allocator_, rhs.allocator_);</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; internal::Swap(ownAllocator_, rhs.ownAllocator_);</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; internal::Swap(stack_, rhs.stack_);</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; internal::Swap(stackTop_, rhs.stackTop_);</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; internal::Swap(stackEnd_, rhs.stackEnd_);</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; internal::Swap(initialCapacity_, rhs.initialCapacity_);</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; }</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="keywordtype">void</span> Clear() { stackTop_ = stack_; }</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160;</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <span class="keywordtype">void</span> ShrinkToFit() { </div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keywordflow">if</span> (Empty()) {</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="comment">// If the stack is empty, completely deallocate the memory.</span></div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; Allocator::Free(stack_); <span class="comment">// NOLINT (+clang-analyzer-unix.Malloc)</span></div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; stack_ = 0;</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; stackTop_ = 0;</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; stackEnd_ = 0;</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; }</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; Resize(GetSize());</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; }</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160;</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="comment">// Optimization note: try to minimize the size of this function for force inline.</span></div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <span class="comment">// Expansion is run very infrequently, so it is moved to another (probably non-inline) function.</span></div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; RAPIDJSON_FORCEINLINE <span class="keywordtype">void</span> Reserve(<span class="keywordtype">size_t</span> count = 1) {</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="comment">// Expand the stack if needed</span></div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(stackTop_ + <span class="keyword">sizeof</span>(T) * count &gt; stackEnd_))</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; Expand&lt;T&gt;(count);</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; }</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160;</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; RAPIDJSON_FORCEINLINE T* Push(<span class="keywordtype">size_t</span> count = 1) {</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; Reserve&lt;T&gt;(count);</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <span class="keywordflow">return</span> PushUnsafe&lt;T&gt;(count);</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; }</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160;</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; RAPIDJSON_FORCEINLINE T* PushUnsafe(<span class="keywordtype">size_t</span> count = 1) {</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(stackTop_);</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(stackTop_ + <span class="keyword">sizeof</span>(T) * count &lt;= stackEnd_);</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; T* ret = <span class="keyword">reinterpret_cast&lt;</span>T*<span class="keyword">&gt;</span>(stackTop_);</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; stackTop_ += <span class="keyword">sizeof</span>(T) * count;</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <span class="keywordflow">return</span> ret;</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; }</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160;</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; T* Pop(<span class="keywordtype">size_t</span> count) {</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(GetSize() &gt;= count * <span class="keyword">sizeof</span>(T));</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; stackTop_ -= count * <span class="keyword">sizeof</span>(T);</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast&lt;</span>T*<span class="keyword">&gt;</span>(stackTop_);</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; }</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160;</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; T* Top() { </div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(GetSize() &gt;= <span class="keyword">sizeof</span>(T));</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast&lt;</span>T*<span class="keyword">&gt;</span>(stackTop_ - <span class="keyword">sizeof</span>(T));</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; }</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160;</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="keyword">const</span> T* Top()<span class="keyword"> const </span>{</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(GetSize() &gt;= <span class="keyword">sizeof</span>(T));</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast&lt;</span>T*<span class="keyword">&gt;</span>(stackTop_ - <span class="keyword">sizeof</span>(T));</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; }</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160;</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; T* End() { <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast&lt;</span>T*<span class="keyword">&gt;</span>(stackTop_); }</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160;</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <span class="keyword">const</span> T* End()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast&lt;</span>T*<span class="keyword">&gt;</span>(stackTop_); }</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160;</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; T* Bottom() { <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast&lt;</span>T*<span class="keyword">&gt;</span>(stack_); }</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160;</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; <span class="keyword">const</span> T* Bottom()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast&lt;</span>T*<span class="keyword">&gt;</span>(stack_); }</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160;</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; <span class="keywordtype">bool</span> HasAllocator()<span class="keyword"> const </span>{</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <span class="keywordflow">return</span> allocator_ != 0;</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; }</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160;</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; Allocator&amp; GetAllocator() {</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(allocator_);</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <span class="keywordflow">return</span> *allocator_;</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; }</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160;</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; <span class="keywordtype">bool</span> Empty()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> stackTop_ == stack_; }</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <span class="keywordtype">size_t</span> GetSize()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span><span class="keywordtype">size_t</span><span class="keyword">&gt;</span>(stackTop_ - stack_); }</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; <span class="keywordtype">size_t</span> GetCapacity()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span><span class="keywordtype">size_t</span><span class="keyword">&gt;</span>(stackEnd_ - stack_); }</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160;</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <span class="keywordtype">void</span> Expand(<span class="keywordtype">size_t</span> count) {</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <span class="comment">// Only expand the capacity if the current stack exists. Otherwise just create a stack with initial capacity.</span></div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; <span class="keywordtype">size_t</span> newCapacity;</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; <span class="keywordflow">if</span> (stack_ == 0) {</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; <span class="keywordflow">if</span> (!allocator_)</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; ownAllocator_ = allocator_ = <a class="code" href="rapidjson_8h.html#abdc7cd7902748ffe6626d71c59a73c3b">RAPIDJSON_NEW</a>(Allocator)();</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; newCapacity = initialCapacity_;</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; newCapacity = GetCapacity();</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; newCapacity += (newCapacity + 1) / 2;</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; }</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <span class="keywordtype">size_t</span> newSize = GetSize() + <span class="keyword">sizeof</span>(T) * count;</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <span class="keywordflow">if</span> (newCapacity &lt; newSize)</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; newCapacity = newSize;</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160;</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; Resize(newCapacity);</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; }</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160;</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; <span class="keywordtype">void</span> Resize(<span class="keywordtype">size_t</span> newCapacity) {</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; <span class="keyword">const</span> <span class="keywordtype">size_t</span> size = GetSize(); <span class="comment">// Backup the current size</span></div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; stack_ = <span class="keyword">static_cast&lt;</span><span class="keywordtype">char</span>*<span class="keyword">&gt;</span>(allocator_-&gt;Realloc(stack_, GetCapacity(), newCapacity));</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; stackTop_ = stack_ + size;</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; stackEnd_ = stack_ + newCapacity;</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; }</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160;</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; <span class="keywordtype">void</span> Destroy() {</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; Allocator::Free(stack_);</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <a class="code" href="rapidjson_8h.html#a52c941c3fdd646527cdcd42aa846a28a">RAPIDJSON_DELETE</a>(ownAllocator_); <span class="comment">// Only delete if it is owned by the stack</span></div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; }</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160;</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <span class="comment">// Prohibit copy constructor &amp; assignment operator.</span></div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; Stack(<span class="keyword">const</span> Stack&amp;);</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; Stack&amp; operator=(<span class="keyword">const</span> Stack&amp;);</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160;</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; Allocator* allocator_;</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; Allocator* ownAllocator_;</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; <span class="keywordtype">char</span> *stack_;</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; <span class="keywordtype">char</span> *stackTop_;</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; <span class="keywordtype">char</span> *stackEnd_;</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; <span class="keywordtype">size_t</span> initialCapacity_;</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160;};</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160;</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160;} <span class="comment">// namespace internal</span></div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160;RAPIDJSON_NAMESPACE_END</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160;</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160;<span class="preprocessor">#if defined(__clang__)</span></div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160;RAPIDJSON_DIAG_POP</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160;</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160;<span class="preprocessor">#endif // RAPIDJSON_STACK_H_</span></div><div class="ttc" id="rapidjson_8h_html_abdc7cd7902748ffe6626d71c59a73c3b"><div class="ttname"><a href="rapidjson_8h.html#abdc7cd7902748ffe6626d71c59a73c3b">RAPIDJSON_NEW</a></div><div class="ttdeci">#define RAPIDJSON_NEW(TypeName)</div><div class="ttdoc">! customization point for global new </div><div class="ttdef"><b>Definition:</b> rapidjson.h:625</div></div>
<div class="ttc" id="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g_html_ga6a2b1695c13e77ae425e3cbac980ccb5"><div class="ttname"><a href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a></div><div class="ttdeci">#define RAPIDJSON_UNLIKELY(x)</div><div class="ttdoc">Compiler branching hint for expression with low probability to be true. </div><div class="ttdef"><b>Definition:</b> rapidjson.h:476</div></div>
-<div class="ttc" id="rapidjson_8h_html_a52c941c3fdd646527cdcd42aa846a28a"><div class="ttname"><a href="rapidjson_8h.html#a52c941c3fdd646527cdcd42aa846a28a">RAPIDJSON_DELETE</a></div><div class="ttdeci">#define RAPIDJSON_DELETE(x)</div><div class="ttdoc">! customization point for global delete </div><div class="ttdef"><b>Definition:</b> rapidjson.h:618</div></div>
+<div class="ttc" id="rapidjson_8h_html_a52c941c3fdd646527cdcd42aa846a28a"><div class="ttname"><a href="rapidjson_8h.html#a52c941c3fdd646527cdcd42aa846a28a">RAPIDJSON_DELETE</a></div><div class="ttdeci">#define RAPIDJSON_DELETE(x)</div><div class="ttdoc">! customization point for global delete </div><div class="ttdef"><b>Definition:</b> rapidjson.h:629</div></div>
<div class="ttc" id="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g_html_gabeba18d612187bad2ac62aed9276d47c"><div class="ttname"><a href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a></div><div class="ttdeci">#define RAPIDJSON_ASSERT(x)</div><div class="ttdoc">Assertion. </div><div class="ttdef"><b>Definition:</b> rapidjson.h:406</div></div>
</div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->
diff --git a/zh-cn/writer_8h_source.html b/zh-cn/writer_8h_source.html
index 0a83b352..83f81377 100644
--- a/zh-cn/writer_8h_source.html
+++ b/zh-cn/writer_8h_source.html
@@ -81,7 +81,7 @@ $(document).ready(function(){initNavTree('writer_8h_source.html','');});
<div class="title">writer.h</div> </div>
</div><!--header-->
<div class="contents">
-<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">// Tencent is pleased to support the open source community by making RapidJSON available.</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">// </span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">// Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved.</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment">// Licensed under the MIT License (the &quot;License&quot;); you may not use this file except</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment">// in compliance with the License. You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment">// http://opensource.org/licenses/MIT</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment">// Unless required by applicable law or agreed to in writing, software distributed </span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment">// under the License is distributed on an &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR </span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment">// CONDITIONS OF ANY KIND, either express or implied. See the License for the </span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment">// specific language governing permissions and limitations under the License.</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;</div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#ifndef RAPIDJSON_WRITER_H_</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#define RAPIDJSON_WRITER_H_</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#include &quot;stream.h&quot;</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="preprocessor">#include &quot;internal/meta.h&quot;</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#include &quot;internal/stack.h&quot;</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="preprocessor">#include &quot;internal/strfunc.h&quot;</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="preprocessor">#include &quot;internal/dtoa.h&quot;</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#include &quot;internal/itoa.h&quot;</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#include &quot;stringbuffer.h&quot;</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor">#include &lt;new&gt;</span> <span class="comment">// placement new</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="preprocessor">#if defined(RAPIDJSON_SIMD) &amp;&amp; defined(_MSC_VER)</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="preprocessor">#include &lt;intrin.h&gt;</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="preprocessor">#pragma intrinsic(_BitScanForward)</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="preprocessor">#ifdef RAPIDJSON_SSE42</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="preprocessor">#include &lt;nmmintrin.h&gt;</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="preprocessor">#elif defined(RAPIDJSON_SSE2)</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="preprocessor">#include &lt;emmintrin.h&gt;</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="preprocessor">#elif defined(RAPIDJSON_NEON)</span></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="preprocessor">#include &lt;arm_neon.h&gt;</span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;<span class="preprocessor">#ifdef __clang__</span></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;RAPIDJSON_DIAG_PUSH</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;RAPIDJSON_DIAG_OFF(padded)</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;RAPIDJSON_DIAG_OFF(unreachable-code)</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;RAPIDJSON_DIAG_OFF(c++98-compat)</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;<span class="preprocessor">#elif defined(_MSC_VER)</span></div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;RAPIDJSON_DIAG_PUSH</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;RAPIDJSON_DIAG_OFF(4127) <span class="comment">// conditional expression is constant</span></div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;RAPIDJSON_NAMESPACE_BEGIN</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;<span class="comment"></span><span class="comment">// WriteFlag</span></div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;<span class="comment">/*! \def RAPIDJSON_WRITE_DEFAULT_FLAGS </span></div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;<span class="comment"> \ingroup RAPIDJSON_CONFIG</span></div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;<span class="comment"> \brief User-defined kWriteDefaultFlags definition.</span></div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;<span class="comment"> User can define this as any \c WriteFlag combinations.</span></div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;<span class="preprocessor">#ifndef RAPIDJSON_WRITE_DEFAULT_FLAGS</span></div><div class="line"><a name="l00061"></a><span class="lineno"><a class="line" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga1975595e2f1dc20a2d4859f340ac88c6"> 61</a></span>&#160;<span class="preprocessor">#define RAPIDJSON_WRITE_DEFAULT_FLAGS kWriteNoFlags</span></div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;<span class="comment">//! Combination of writeFlags</span></div><div class="line"><a name="l00065"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#ad28b1de6aee37e92fc31792dd6dd6b19"> 65</a></span>&#160;<span class="comment"></span><span class="keyword">enum</span> <a class="code" href="namespacerapidjson.html#ad28b1de6aee37e92fc31792dd6dd6b19">WriteFlag</a> {</div><div class="line"><a name="l00066"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#ad28b1de6aee37e92fc31792dd6dd6b19ae971aa1fc0ae64c8f3d2b47fd802846a"> 66</a></span>&#160; <a class="code" href="namespacerapidjson.html#ad28b1de6aee37e92fc31792dd6dd6b19ae971aa1fc0ae64c8f3d2b47fd802846a">kWriteNoFlags</a> = 0, <span class="comment">//!&lt; No flags are set.</span></div><div class="line"><a name="l00067"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#ad28b1de6aee37e92fc31792dd6dd6b19ac1b5e17278b060e9e866df075c104c10"> 67</a></span>&#160;<span class="comment"></span> <a class="code" href="namespacerapidjson.html#ad28b1de6aee37e92fc31792dd6dd6b19ac1b5e17278b060e9e866df075c104c10">kWriteValidateEncodingFlag</a> = 1, <span class="comment">//!&lt; Validate encoding of JSON strings.</span></div><div class="line"><a name="l00068"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#ad28b1de6aee37e92fc31792dd6dd6b19a3adbca1d31ad845ff4e9d742280cce39"> 68</a></span>&#160;<span class="comment"></span> <a class="code" href="namespacerapidjson.html#ad28b1de6aee37e92fc31792dd6dd6b19a3adbca1d31ad845ff4e9d742280cce39">kWriteNanAndInfFlag</a> = 2, <span class="comment">//!&lt; Allow writing of Infinity, -Infinity and NaN.</span></div><div class="line"><a name="l00069"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#ad28b1de6aee37e92fc31792dd6dd6b19a5b5ca665afdfa828a74ae5755c67a226"> 69</a></span>&#160;<span class="comment"></span> <a class="code" href="namespacerapidjson.html#ad28b1de6aee37e92fc31792dd6dd6b19a5b5ca665afdfa828a74ae5755c67a226">kWriteDefaultFlags</a> = <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga1975595e2f1dc20a2d4859f340ac88c6">RAPIDJSON_WRITE_DEFAULT_FLAGS</a> <span class="comment">//!&lt; Default write flags. Can be customized by defining RAPIDJSON_WRITE_DEFAULT_FLAGS</span></div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;<span class="comment"></span>};</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;<span class="comment">//! JSON writer</span></div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;<span class="comment"></span><span class="comment">/*! Writer implements the concept Handler.</span></div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;<span class="comment"> It generates JSON text by events to an output os.</span></div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;<span class="comment"> User may programmatically calls the functions of a writer to generate JSON text.</span></div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160;<span class="comment"> On the other side, a writer can also be passed to objects that generates events, </span></div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;<span class="comment"> for example Reader::Parse() and Document::Accept().</span></div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;<span class="comment"> \tparam OutputStream Type of output stream.</span></div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;<span class="comment"> \tparam SourceEncoding Encoding of source string.</span></div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;<span class="comment"> \tparam TargetEncoding Encoding of output stream.</span></div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160;<span class="comment"> \tparam StackAllocator Type of allocator for allocating memory of stack.</span></div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160;<span class="comment"> \note implements Handler concept</span></div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> OutputStream, <span class="keyword">typename</span> SourceEncoding = UTF8&lt;&gt;, <span class="keyword">typename</span> TargetEncoding = UTF8&lt;&gt;, <span class="keyword">typename</span> StackAllocator = CrtAllocator, <span class="keywordtype">unsigned</span> writeFlags = kWriteDefaultFlags&gt;</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;<span class="keyword">class </span><a class="code" href="classrapidjson_1_1_writer.html">Writer</a> {</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="keyword">typedef</span> <span class="keyword">typename</span> SourceEncoding::Ch Ch;</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160;</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> kDefaultMaxDecimalPlaces = 324;</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;<span class="comment"> //! Constructor</span></div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160;<span class="comment"></span><span class="comment"> /*! \param os Output stream.</span></div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;<span class="comment"> \param stackAllocator User supplied allocator. If it is null, it will create a private one.</span></div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;<span class="comment"> \param levelDepth Initial capacity of stack.</span></div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <span class="keyword">explicit</span></div><div class="line"><a name="l00101"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_writer.html#a98a421c806b456688874511f64add1f2"> 101</a></span>&#160; <a class="code" href="classrapidjson_1_1_writer.html#a98a421c806b456688874511f64add1f2">Writer</a>(OutputStream&amp; os, StackAllocator* stackAllocator = 0, <span class="keywordtype">size_t</span> levelDepth = kDefaultLevelDepth) : </div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; os_(&amp;os), level_stack_(stackAllocator, levelDepth * sizeof(<a class="code" href="structrapidjson_1_1_writer_1_1_level.html">Level</a>)), maxDecimalPlaces_(kDefaultMaxDecimalPlaces), hasRoot_(false) {}</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160;</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <span class="keyword">explicit</span></div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <a class="code" href="classrapidjson_1_1_writer.html">Writer</a>(StackAllocator* allocator = 0, <span class="keywordtype">size_t</span> levelDepth = kDefaultLevelDepth) :</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; os_(0), level_stack_(allocator, levelDepth * <span class="keyword">sizeof</span>(<a class="code" href="structrapidjson_1_1_writer_1_1_level.html">Level</a>)), maxDecimalPlaces_(kDefaultMaxDecimalPlaces), hasRoot_(<span class="keyword">false</span>) {}</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160;</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <a class="code" href="classrapidjson_1_1_writer.html">Writer</a>(<a class="code" href="classrapidjson_1_1_writer.html">Writer</a>&amp;&amp; rhs) :</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; os_(rhs.os_), level_stack_(std::move(rhs.level_stack_)), maxDecimalPlaces_(rhs.maxDecimalPlaces_), hasRoot_(rhs.hasRoot_) {</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; rhs.os_ = 0;</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; }</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160;<span class="comment"> //! Reset the writer with a new stream.</span></div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160;<span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160;<span class="comment"> This function reset the writer with a new stream and default settings,</span></div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160;<span class="comment"> in order to make a Writer object reusable for output multiple JSONs.</span></div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160;<span class="comment"> \param os New output stream.</span></div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160;<span class="comment"> \code</span></div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160;<span class="comment"> Writer&lt;OutputStream&gt; writer(os1);</span></div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160;<span class="comment"> writer.StartObject();</span></div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160;<span class="comment"> // ...</span></div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160;<span class="comment"> writer.EndObject();</span></div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160;<span class="comment"> writer.Reset(os2);</span></div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160;<span class="comment"> writer.StartObject();</span></div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160;<span class="comment"> // ...</span></div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160;<span class="comment"> writer.EndObject();</span></div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160;<span class="comment"> \endcode</span></div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00133"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_writer.html#ac4026d3f14b80d6d7fc10004b1972722"> 133</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classrapidjson_1_1_writer.html#ac4026d3f14b80d6d7fc10004b1972722">Reset</a>(OutputStream&amp; os) {</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; os_ = &amp;os;</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; hasRoot_ = <span class="keyword">false</span>;</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; level_stack_.Clear();</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; }</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160;<span class="comment"> //! Checks whether the output is a complete JSON.</span></div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160;<span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160;<span class="comment"> A complete JSON has a complete root object or array.</span></div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00143"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_writer.html#a190d964d3e62155e87153e858a0b04da"> 143</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_writer.html#a190d964d3e62155e87153e858a0b04da">IsComplete</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; <span class="keywordflow">return</span> hasRoot_ &amp;&amp; level_stack_.Empty();</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; }</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160;</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <span class="keywordtype">int</span> GetMaxDecimalPlaces()<span class="keyword"> const </span>{</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <span class="keywordflow">return</span> maxDecimalPlaces_;</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; }</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160;<span class="comment"> //! Sets the maximum number of decimal places for double output.</span></div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160;<span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160;<span class="comment"> This setting truncates the output with specified number of decimal places.</span></div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160;<span class="comment"> For example, </span></div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160;<span class="comment"> \code</span></div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160;<span class="comment"> writer.SetMaxDecimalPlaces(3);</span></div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160;<span class="comment"> writer.StartArray();</span></div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160;<span class="comment"> writer.Double(0.12345); // &quot;0.123&quot;</span></div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160;<span class="comment"> writer.Double(0.0001); // &quot;0.0&quot;</span></div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160;<span class="comment"> writer.Double(1.234567890123456e30); // &quot;1.234567890123456e30&quot; (do not truncate significand for positive exponent)</span></div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160;<span class="comment"> writer.Double(1.23e-4); // &quot;0.0&quot; (do truncate significand for negative exponent)</span></div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160;<span class="comment"> writer.EndArray();</span></div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160;<span class="comment"> \endcode</span></div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160;<span class="comment"> The default setting does not truncate any decimal places. You can restore to this setting by calling</span></div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160;<span class="comment"> \code</span></div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160;<span class="comment"> writer.SetMaxDecimalPlaces(Writer::kDefaultMaxDecimalPlaces);</span></div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160;<span class="comment"> \endcode</span></div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00172"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_writer.html#aa7b6967dc237519e2a6d8b3939fb9634"> 172</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classrapidjson_1_1_writer.html#aa7b6967dc237519e2a6d8b3939fb9634">SetMaxDecimalPlaces</a>(<span class="keywordtype">int</span> maxDecimalPlaces) {</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; maxDecimalPlaces_ = maxDecimalPlaces;</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; }</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160;<span class="comment"> /*!@name Implementation of Handler</span></div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160;<span class="comment"> \see Handler</span></div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160;<span class="comment"> */</span><span class="comment"></span></div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160;<span class="comment"> //@{</span></div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; <span class="keywordtype">bool</span> Null() { Prefix(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a952871e4326b527154fc8aac1ac1f6ff">kNullType</a>); <span class="keywordflow">return</span> EndValue(WriteNull()); }</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <span class="keywordtype">bool</span> Bool(<span class="keywordtype">bool</span> b) { Prefix(b ? <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a80d9f25b083abce45edbfdd3ba006c8e">kTrueType</a> : <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a9f2e7047832dce1029551b5de0f05607">kFalseType</a>); <span class="keywordflow">return</span> EndValue(WriteBool(b)); }</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <span class="keywordtype">bool</span> Int(<span class="keywordtype">int</span> i) { Prefix(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a">kNumberType</a>); <span class="keywordflow">return</span> EndValue(WriteInt(i)); }</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; <span class="keywordtype">bool</span> Uint(<span class="keywordtype">unsigned</span> u) { Prefix(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a">kNumberType</a>); <span class="keywordflow">return</span> EndValue(WriteUint(u)); }</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; <span class="keywordtype">bool</span> Int64(int64_t i64) { Prefix(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a">kNumberType</a>); <span class="keywordflow">return</span> EndValue(WriteInt64(i64)); }</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; <span class="keywordtype">bool</span> Uint64(uint64_t u64) { Prefix(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a">kNumberType</a>); <span class="keywordflow">return</span> EndValue(WriteUint64(u64)); }</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160;<span class="comment"> //! Writes the given \c double value to the stream</span></div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160;<span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160;<span class="comment"> \param d The value to be written.</span></div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160;<span class="comment"> \return Whether it is succeed.</span></div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00193"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_writer.html#aff66881798d01e932a0b8b8ef97b0373"> 193</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_writer.html#aff66881798d01e932a0b8b8ef97b0373">Double</a>(<span class="keywordtype">double</span> d) { Prefix(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a">kNumberType</a>); <span class="keywordflow">return</span> EndValue(WriteDouble(d)); }</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160;</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; <span class="keywordtype">bool</span> RawNumber(<span class="keyword">const</span> Ch* str, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> length, <span class="keywordtype">bool</span> copy = <span class="keyword">false</span>) {</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(str != 0);</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; (void)copy;</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; Prefix(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a">kNumberType</a>);</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; <span class="keywordflow">return</span> EndValue(WriteString(str, length));</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; }</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160;</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <span class="keywordtype">bool</span> String(<span class="keyword">const</span> Ch* str, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> length, <span class="keywordtype">bool</span> copy = <span class="keyword">false</span>) {</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(str != 0);</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; (void)copy;</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; Prefix(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4ad6379da3dc04b83a591992bfb9fabba7">kStringType</a>);</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; <span class="keywordflow">return</span> EndValue(WriteString(str, length));</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; }</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160;</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; <span class="keywordtype">bool</span> String(<span class="keyword">const</span> std::basic_string&lt;Ch&gt;&amp; str) {</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <span class="keywordflow">return</span> String(str.data(), <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a>(str.size()));</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; }</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160;</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; <span class="keywordtype">bool</span> StartObject() {</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; Prefix(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4acf030b422a32c3647c7c5973bd4dd0a9">kObjectType</a>);</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; <span class="keyword">new</span> (level_stack_.template Push&lt;Level&gt;()) <a class="code" href="structrapidjson_1_1_writer_1_1_level.html">Level</a>(<span class="keyword">false</span>);</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; <span class="keywordflow">return</span> WriteStartObject();</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; }</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160;</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; <span class="keywordtype">bool</span> Key(<span class="keyword">const</span> Ch* str, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> length, <span class="keywordtype">bool</span> copy = <span class="keyword">false</span>) { <span class="keywordflow">return</span> String(str, length, copy); }</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160;</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <span class="keywordtype">bool</span> Key(<span class="keyword">const</span> std::basic_string&lt;Ch&gt;&amp; str)</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; {</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <span class="keywordflow">return</span> Key(str.data(), <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a>(str.size()));</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; }</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; </div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; <span class="keywordtype">bool</span> EndObject(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> memberCount = 0) {</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; (void)memberCount;</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(level_stack_.GetSize() &gt;= <span class="keyword">sizeof</span>(<a class="code" href="structrapidjson_1_1_writer_1_1_level.html">Level</a>)); <span class="comment">// not inside an Object</span></div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(!level_stack_.template Top&lt;Level&gt;()-&gt;inArray); <span class="comment">// currently inside an Array, not Object</span></div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(0 == level_stack_.template Top&lt;Level&gt;()-&gt;valueCount % 2); <span class="comment">// Object has a Key without a Value</span></div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; level_stack_.template Pop&lt;Level&gt;(1);</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; <span class="keywordflow">return</span> EndValue(WriteEndObject());</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; }</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160;</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; <span class="keywordtype">bool</span> StartArray() {</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; Prefix(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a058c622e1e7d59419ae58b895cbce468">kArrayType</a>);</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; <span class="keyword">new</span> (level_stack_.template Push&lt;Level&gt;()) <a class="code" href="structrapidjson_1_1_writer_1_1_level.html">Level</a>(<span class="keyword">true</span>);</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <span class="keywordflow">return</span> WriteStartArray();</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; }</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160;</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; <span class="keywordtype">bool</span> EndArray(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> elementCount = 0) {</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; (void)elementCount;</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(level_stack_.GetSize() &gt;= <span class="keyword">sizeof</span>(<a class="code" href="structrapidjson_1_1_writer_1_1_level.html">Level</a>));</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(level_stack_.template Top&lt;Level&gt;()-&gt;inArray);</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; level_stack_.template Pop&lt;Level&gt;(1);</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; <span class="keywordflow">return</span> EndValue(WriteEndArray());</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; }<span class="comment"></span></div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160;<span class="comment"> //@}</span></div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160;<span class="comment"> /*! @name Convenience extensions */</span><span class="comment"></span></div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160;<span class="comment"> //@{</span></div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160;<span class="comment"> //! Simpler but slower overload.</span></div><div class="line"><a name="l00258"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_writer.html#a849e2b675a2b868699a14d45c7396f24"> 258</a></span>&#160;<span class="comment"></span> <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_writer.html#a849e2b675a2b868699a14d45c7396f24">String</a>(<span class="keyword">const</span> Ch* <span class="keyword">const</span>&amp; str) { <span class="keywordflow">return</span> <a class="code" href="classrapidjson_1_1_writer.html#a849e2b675a2b868699a14d45c7396f24">String</a>(str, internal::StrLen(str)); }</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; <span class="keywordtype">bool</span> Key(<span class="keyword">const</span> Ch* <span class="keyword">const</span>&amp; str) { <span class="keywordflow">return</span> Key(str, internal::StrLen(str)); }</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; <span class="comment"></span></div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160;<span class="comment"> //@}</span></div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160;<span class="comment"> //! Write a raw JSON value.</span></div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160;<span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160;<span class="comment"> For user to write a stringified JSON as a value.</span></div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160;<span class="comment"> \param json A well-formed JSON value. It should not contain null character within [0, length - 1] range.</span></div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160;<span class="comment"> \param length Length of the json.</span></div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160;<span class="comment"> \param type Type of the root of json.</span></div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00271"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_writer.html#a8acb89b2bbb1e5f384e6076b65044dbe"> 271</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_writer.html#a8acb89b2bbb1e5f384e6076b65044dbe">RawValue</a>(<span class="keyword">const</span> Ch* json, <span class="keywordtype">size_t</span> length, <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">Type</a> type) {</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(json != 0);</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; Prefix(type);</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; <span class="keywordflow">return</span> EndValue(WriteRawValue(json, length));</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; }</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160;<span class="comment"> //! Flush the output stream.</span></div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160;<span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160;<span class="comment"> Allows the user to flush the output stream immediately.</span></div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00281"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_writer.html#a72cefd18d176bc12a53adb3185c51ca7"> 281</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classrapidjson_1_1_writer.html#a72cefd18d176bc12a53adb3185c51ca7">Flush</a>() {</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; os_-&gt;Flush();</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; }</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160;</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160;<span class="keyword">protected</span>:<span class="comment"></span></div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160;<span class="comment"> //! Information for each nested level</span></div><div class="line"><a name="l00287"></a><span class="lineno"><a class="line" href="structrapidjson_1_1_writer_1_1_level.html"> 287</a></span>&#160;<span class="comment"></span> <span class="keyword">struct </span><a class="code" href="structrapidjson_1_1_writer_1_1_level.html">Level</a> {</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; <a class="code" href="structrapidjson_1_1_writer_1_1_level.html">Level</a>(<span class="keywordtype">bool</span> inArray_) : valueCount(0), inArray(inArray_) {}</div><div class="line"><a name="l00289"></a><span class="lineno"><a class="line" href="structrapidjson_1_1_writer_1_1_level.html#a5d17bdfa9ded5de72f5f91175cc3e36b"> 289</a></span>&#160; <span class="keywordtype">size_t</span> <a class="code" href="structrapidjson_1_1_writer_1_1_level.html#a5d17bdfa9ded5de72f5f91175cc3e36b">valueCount</a>; <span class="comment">//!&lt; number of values in this level</span></div><div class="line"><a name="l00290"></a><span class="lineno"><a class="line" href="structrapidjson_1_1_writer_1_1_level.html#a59255e3b1d371161f7c894503cfd6bec"> 290</a></span>&#160;<span class="comment"></span> <span class="keywordtype">bool</span> <a class="code" href="structrapidjson_1_1_writer_1_1_level.html#a59255e3b1d371161f7c894503cfd6bec">inArray</a>; <span class="comment">//!&lt; true if in array, otherwise in object</span></div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160;<span class="comment"></span> };</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160;</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">size_t</span> kDefaultLevelDepth = 32;</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160;</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; <span class="keywordtype">bool</span> WriteNull() {</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; <a class="code" href="namespacerapidjson.html#a820f77efccfbb749bd15fe4822d2c740">PutReserve</a>(*os_, 4);</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;n&#39;</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;u&#39;</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;l&#39;</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;l&#39;</span>); <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; }</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160;</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; <span class="keywordtype">bool</span> WriteBool(<span class="keywordtype">bool</span> b) {</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; <span class="keywordflow">if</span> (b) {</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; <a class="code" href="namespacerapidjson.html#a820f77efccfbb749bd15fe4822d2c740">PutReserve</a>(*os_, 4);</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;t&#39;</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;r&#39;</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;u&#39;</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;e&#39;</span>);</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; }</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <span class="keywordflow">else</span> {</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; <a class="code" href="namespacerapidjson.html#a820f77efccfbb749bd15fe4822d2c740">PutReserve</a>(*os_, 5);</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;f&#39;</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;a&#39;</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;l&#39;</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;s&#39;</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;e&#39;</span>);</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; }</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; }</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160;</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; <span class="keywordtype">bool</span> WriteInt(<span class="keywordtype">int</span> i) {</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; <span class="keywordtype">char</span> buffer[11];</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* end = internal::i32toa(i, buffer);</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; <a class="code" href="namespacerapidjson.html#a820f77efccfbb749bd15fe4822d2c740">PutReserve</a>(*os_, static_cast&lt;size_t&gt;(end - buffer));</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keywordtype">char</span>* p = buffer; p != end; ++p)</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, static_cast&lt;typename OutputStream::Ch&gt;(*p));</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; }</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160;</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; <span class="keywordtype">bool</span> WriteUint(<span class="keywordtype">unsigned</span> u) {</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; <span class="keywordtype">char</span> buffer[10];</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* end = internal::u32toa(u, buffer);</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; <a class="code" href="namespacerapidjson.html#a820f77efccfbb749bd15fe4822d2c740">PutReserve</a>(*os_, static_cast&lt;size_t&gt;(end - buffer));</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keywordtype">char</span>* p = buffer; p != end; ++p)</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, static_cast&lt;typename OutputStream::Ch&gt;(*p));</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; }</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160;</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; <span class="keywordtype">bool</span> WriteInt64(int64_t i64) {</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; <span class="keywordtype">char</span> buffer[21];</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* end = internal::i64toa(i64, buffer);</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; <a class="code" href="namespacerapidjson.html#a820f77efccfbb749bd15fe4822d2c740">PutReserve</a>(*os_, static_cast&lt;size_t&gt;(end - buffer));</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keywordtype">char</span>* p = buffer; p != end; ++p)</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, static_cast&lt;typename OutputStream::Ch&gt;(*p));</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; }</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160;</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; <span class="keywordtype">bool</span> WriteUint64(uint64_t u64) {</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; <span class="keywordtype">char</span> buffer[20];</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; <span class="keywordtype">char</span>* end = internal::u64toa(u64, buffer);</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; <a class="code" href="namespacerapidjson.html#a820f77efccfbb749bd15fe4822d2c740">PutReserve</a>(*os_, static_cast&lt;size_t&gt;(end - buffer));</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">char</span>* p = buffer; p != end; ++p)</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, static_cast&lt;typename OutputStream::Ch&gt;(*p));</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; }</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160;</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; <span class="keywordtype">bool</span> WriteDouble(<span class="keywordtype">double</span> d) {</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; <span class="keywordflow">if</span> (internal::Double(d).IsNanOrInf()) {</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; <span class="keywordflow">if</span> (!(writeFlags &amp; <a class="code" href="namespacerapidjson.html#ad28b1de6aee37e92fc31792dd6dd6b19a3adbca1d31ad845ff4e9d742280cce39">kWriteNanAndInfFlag</a>))</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; <span class="keywordflow">if</span> (internal::Double(d).IsNan()) {</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; <a class="code" href="namespacerapidjson.html#a820f77efccfbb749bd15fe4822d2c740">PutReserve</a>(*os_, 3);</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;N&#39;</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;a&#39;</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;N&#39;</span>);</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; }</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; <span class="keywordflow">if</span> (internal::Double(d).Sign()) {</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; <a class="code" href="namespacerapidjson.html#a820f77efccfbb749bd15fe4822d2c740">PutReserve</a>(*os_, 9);</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;-&#39;</span>);</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; }</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; <a class="code" href="namespacerapidjson.html#a820f77efccfbb749bd15fe4822d2c740">PutReserve</a>(*os_, 8);</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;I&#39;</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;n&#39;</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;f&#39;</span>);</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;i&#39;</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;n&#39;</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;i&#39;</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;t&#39;</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;y&#39;</span>);</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; }</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160;</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; <span class="keywordtype">char</span> buffer[25];</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; <span class="keywordtype">char</span>* end = internal::dtoa(d, buffer, maxDecimalPlaces_);</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; <a class="code" href="namespacerapidjson.html#a820f77efccfbb749bd15fe4822d2c740">PutReserve</a>(*os_, static_cast&lt;size_t&gt;(end - buffer));</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">char</span>* p = buffer; p != end; ++p)</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, static_cast&lt;typename OutputStream::Ch&gt;(*p));</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; }</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160;</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; <span class="keywordtype">bool</span> WriteString(<span class="keyword">const</span> Ch* str, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> length) {</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keyword">typename</span> OutputStream::Ch hexDigits[16] = { <span class="charliteral">&#39;0&#39;</span>, <span class="charliteral">&#39;1&#39;</span>, <span class="charliteral">&#39;2&#39;</span>, <span class="charliteral">&#39;3&#39;</span>, <span class="charliteral">&#39;4&#39;</span>, <span class="charliteral">&#39;5&#39;</span>, <span class="charliteral">&#39;6&#39;</span>, <span class="charliteral">&#39;7&#39;</span>, <span class="charliteral">&#39;8&#39;</span>, <span class="charliteral">&#39;9&#39;</span>, <span class="charliteral">&#39;A&#39;</span>, <span class="charliteral">&#39;B&#39;</span>, <span class="charliteral">&#39;C&#39;</span>, <span class="charliteral">&#39;D&#39;</span>, <span class="charliteral">&#39;E&#39;</span>, <span class="charliteral">&#39;F&#39;</span> };</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> escape[256] = {</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160;<span class="preprocessor">#define Z16 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</span></div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; <span class="comment">//0 1 2 3 4 5 6 7 8 9 A B C D E F</span></div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; <span class="charliteral">&#39;u&#39;</span>, <span class="charliteral">&#39;u&#39;</span>, <span class="charliteral">&#39;u&#39;</span>, <span class="charliteral">&#39;u&#39;</span>, <span class="charliteral">&#39;u&#39;</span>, <span class="charliteral">&#39;u&#39;</span>, <span class="charliteral">&#39;u&#39;</span>, <span class="charliteral">&#39;u&#39;</span>, <span class="charliteral">&#39;b&#39;</span>, <span class="charliteral">&#39;t&#39;</span>, <span class="charliteral">&#39;n&#39;</span>, <span class="charliteral">&#39;u&#39;</span>, <span class="charliteral">&#39;f&#39;</span>, <span class="charliteral">&#39;r&#39;</span>, <span class="charliteral">&#39;u&#39;</span>, <span class="charliteral">&#39;u&#39;</span>, <span class="comment">// 00</span></div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; <span class="charliteral">&#39;u&#39;</span>, <span class="charliteral">&#39;u&#39;</span>, <span class="charliteral">&#39;u&#39;</span>, <span class="charliteral">&#39;u&#39;</span>, <span class="charliteral">&#39;u&#39;</span>, <span class="charliteral">&#39;u&#39;</span>, <span class="charliteral">&#39;u&#39;</span>, <span class="charliteral">&#39;u&#39;</span>, <span class="charliteral">&#39;u&#39;</span>, <span class="charliteral">&#39;u&#39;</span>, <span class="charliteral">&#39;u&#39;</span>, <span class="charliteral">&#39;u&#39;</span>, <span class="charliteral">&#39;u&#39;</span>, <span class="charliteral">&#39;u&#39;</span>, <span class="charliteral">&#39;u&#39;</span>, <span class="charliteral">&#39;u&#39;</span>, <span class="comment">// 10</span></div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; 0, 0, <span class="charliteral">&#39;&quot;&#39;</span>, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, <span class="comment">// 20</span></div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; Z16, Z16, <span class="comment">// 30~4F</span></div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,<span class="charliteral">&#39;\\&#39;</span>, 0, 0, 0, <span class="comment">// 50</span></div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; Z16, Z16, Z16, Z16, Z16, Z16, Z16, Z16, Z16, Z16 <span class="comment">// 60~FF</span></div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160;<span class="preprocessor">#undef Z16</span></div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; };</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160;</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; <span class="keywordflow">if</span> (TargetEncoding::supportUnicode)</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; <a class="code" href="namespacerapidjson.html#a820f77efccfbb749bd15fe4822d2c740">PutReserve</a>(*os_, 2 + length * 6); <span class="comment">// &quot;\uxxxx...&quot;</span></div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; <a class="code" href="namespacerapidjson.html#a820f77efccfbb749bd15fe4822d2c740">PutReserve</a>(*os_, 2 + length * 12); <span class="comment">// &quot;\uxxxx\uyyyy...&quot;</span></div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160;</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;\&quot;&#39;</span>);</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; <a class="code" href="structrapidjson_1_1_generic_string_stream.html">GenericStringStream&lt;SourceEncoding&gt;</a> is(str);</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; <span class="keywordflow">while</span> (ScanWriteUnescapedString(is, length)) {</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; <span class="keyword">const</span> Ch c = is.Peek();</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; <span class="keywordflow">if</span> (!TargetEncoding::supportUnicode &amp;&amp; static_cast&lt;unsigned&gt;(c) &gt;= 0x80) {</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; <span class="comment">// Unicode escaping</span></div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; <span class="keywordtype">unsigned</span> codepoint;</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(!SourceEncoding::Decode(is, &amp;codepoint)))</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;\\&#39;</span>);</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;u&#39;</span>);</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; <span class="keywordflow">if</span> (codepoint &lt;= 0xD7FF || (codepoint &gt;= 0xE000 &amp;&amp; codepoint &lt;= 0xFFFF)) {</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, hexDigits[(codepoint &gt;&gt; 12) &amp; 15]);</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, hexDigits[(codepoint &gt;&gt; 8) &amp; 15]);</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, hexDigits[(codepoint &gt;&gt; 4) &amp; 15]);</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, hexDigits[(codepoint ) &amp; 15]);</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; }</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; <span class="keywordflow">else</span> {</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(codepoint &gt;= 0x010000 &amp;&amp; codepoint &lt;= 0x10FFFF);</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; <span class="comment">// Surrogate pair</span></div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; <span class="keywordtype">unsigned</span> s = codepoint - 0x010000;</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; <span class="keywordtype">unsigned</span> lead = (s &gt;&gt; 10) + 0xD800;</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; <span class="keywordtype">unsigned</span> trail = (s &amp; 0x3FF) + 0xDC00;</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, hexDigits[(lead &gt;&gt; 12) &amp; 15]);</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, hexDigits[(lead &gt;&gt; 8) &amp; 15]);</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, hexDigits[(lead &gt;&gt; 4) &amp; 15]);</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, hexDigits[(lead ) &amp; 15]);</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;\\&#39;</span>);</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;u&#39;</span>);</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, hexDigits[(trail &gt;&gt; 12) &amp; 15]);</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, hexDigits[(trail &gt;&gt; 8) &amp; 15]);</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, hexDigits[(trail &gt;&gt; 4) &amp; 15]);</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, hexDigits[(trail ) &amp; 15]); </div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; }</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; }</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((<span class="keyword">sizeof</span>(Ch) == 1 || static_cast&lt;unsigned&gt;(c) &lt; 256) &amp;&amp; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(escape[static_cast&lt;unsigned char&gt;(c)])) {</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; is.Take();</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;\\&#39;</span>);</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, static_cast&lt;typename OutputStream::Ch&gt;(escape[static_cast&lt;unsigned char&gt;(c)]));</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; <span class="keywordflow">if</span> (escape[static_cast&lt;unsigned char&gt;(c)] == <span class="charliteral">&#39;u&#39;</span>) {</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;0&#39;</span>);</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;0&#39;</span>);</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, hexDigits[static_cast&lt;unsigned char&gt;(c) &gt;&gt; 4]);</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, hexDigits[static_cast&lt;unsigned char&gt;(c) &amp; 0xF]);</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; }</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; }</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(!(writeFlags &amp; <a class="code" href="namespacerapidjson.html#ad28b1de6aee37e92fc31792dd6dd6b19ac1b5e17278b060e9e866df075c104c10">kWriteValidateEncodingFlag</a> ? </div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; <a class="code" href="structrapidjson_1_1_transcoder.html">Transcoder&lt;SourceEncoding, TargetEncoding&gt;::Validate</a>(is, *os_) :</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; <a class="code" href="structrapidjson_1_1_transcoder.html">Transcoder&lt;SourceEncoding, TargetEncoding&gt;::TranscodeUnsafe</a>(is, *os_))))</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; }</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;\&quot;&#39;</span>);</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; }</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160;</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; <span class="keywordtype">bool</span> ScanWriteUnescapedString(<a class="code" href="structrapidjson_1_1_generic_string_stream.html">GenericStringStream&lt;SourceEncoding&gt;</a>&amp; is, <span class="keywordtype">size_t</span> length) {</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; <span class="keywordflow">return</span> <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga5dc14176a9e71ace282404b0bcda57a1">RAPIDJSON_LIKELY</a>(is.Tell() &lt; length);</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; }</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160;</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; <span class="keywordtype">bool</span> WriteStartObject() { os_-&gt;Put(<span class="charliteral">&#39;{&#39;</span>); <span class="keywordflow">return</span> <span class="keyword">true</span>; }</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; <span class="keywordtype">bool</span> WriteEndObject() { os_-&gt;Put(<span class="charliteral">&#39;}&#39;</span>); <span class="keywordflow">return</span> <span class="keyword">true</span>; }</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160; <span class="keywordtype">bool</span> WriteStartArray() { os_-&gt;Put(<span class="charliteral">&#39;[&#39;</span>); <span class="keywordflow">return</span> <span class="keyword">true</span>; }</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160; <span class="keywordtype">bool</span> WriteEndArray() { os_-&gt;Put(<span class="charliteral">&#39;]&#39;</span>); <span class="keywordflow">return</span> <span class="keyword">true</span>; }</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160;</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; <span class="keywordtype">bool</span> WriteRawValue(<span class="keyword">const</span> Ch* json, <span class="keywordtype">size_t</span> length) {</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; <a class="code" href="namespacerapidjson.html#a820f77efccfbb749bd15fe4822d2c740">PutReserve</a>(*os_, length);</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; <a class="code" href="structrapidjson_1_1_generic_string_stream.html">GenericStringStream&lt;SourceEncoding&gt;</a> is(json);</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; <span class="keywordflow">while</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga5dc14176a9e71ace282404b0bcda57a1">RAPIDJSON_LIKELY</a>(is.Tell() &lt; length)) {</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160; <span class="keyword">const</span> Ch c = is.Peek();</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(c != <span class="charliteral">&#39;\0&#39;</span>);</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(!(writeFlags &amp; <a class="code" href="namespacerapidjson.html#ad28b1de6aee37e92fc31792dd6dd6b19ac1b5e17278b060e9e866df075c104c10">kWriteValidateEncodingFlag</a> ? </div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; <a class="code" href="structrapidjson_1_1_transcoder.html">Transcoder&lt;SourceEncoding, TargetEncoding&gt;::Validate</a>(is, *os_) :</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; <a class="code" href="structrapidjson_1_1_transcoder.html">Transcoder&lt;SourceEncoding, TargetEncoding&gt;::TranscodeUnsafe</a>(is, *os_))))</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; }</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; }</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160;</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; <span class="keywordtype">void</span> Prefix(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">Type</a> type) {</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; (void)type;</div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga5dc14176a9e71ace282404b0bcda57a1">RAPIDJSON_LIKELY</a>(level_stack_.GetSize() != 0)) { <span class="comment">// this value is not at root</span></div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; <a class="code" href="structrapidjson_1_1_writer_1_1_level.html">Level</a>* level = level_stack_.template Top&lt;Level&gt;();</div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; <span class="keywordflow">if</span> (level-&gt;<a class="code" href="structrapidjson_1_1_writer_1_1_level.html#a5d17bdfa9ded5de72f5f91175cc3e36b">valueCount</a> &gt; 0) {</div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160; <span class="keywordflow">if</span> (level-&gt;<a class="code" href="structrapidjson_1_1_writer_1_1_level.html#a59255e3b1d371161f7c894503cfd6bec">inArray</a>) </div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160; os_-&gt;Put(<span class="charliteral">&#39;,&#39;</span>); <span class="comment">// add comma if it is not the first element in array</span></div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160; <span class="keywordflow">else</span> <span class="comment">// in object</span></div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; os_-&gt;Put((level-&gt;<a class="code" href="structrapidjson_1_1_writer_1_1_level.html#a5d17bdfa9ded5de72f5f91175cc3e36b">valueCount</a> % 2 == 0) ? <span class="charliteral">&#39;,&#39;</span> : <span class="charliteral">&#39;:&#39;</span>);</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; }</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; <span class="keywordflow">if</span> (!level-&gt;<a class="code" href="structrapidjson_1_1_writer_1_1_level.html#a59255e3b1d371161f7c894503cfd6bec">inArray</a> &amp;&amp; level-&gt;<a class="code" href="structrapidjson_1_1_writer_1_1_level.html#a5d17bdfa9ded5de72f5f91175cc3e36b">valueCount</a> % 2 == 0)</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(type == <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4ad6379da3dc04b83a591992bfb9fabba7">kStringType</a>); <span class="comment">// if it&#39;s in object, then even number should be a name</span></div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; level-&gt;<a class="code" href="structrapidjson_1_1_writer_1_1_level.html#a5d17bdfa9ded5de72f5f91175cc3e36b">valueCount</a>++;</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; }</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; <span class="keywordflow">else</span> {</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(!hasRoot_); <span class="comment">// Should only has one and only one root.</span></div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; hasRoot_ = <span class="keyword">true</span>;</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; }</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; }</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160;</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; <span class="comment">// Flush the value if it is the top level one.</span></div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; <span class="keywordtype">bool</span> EndValue(<span class="keywordtype">bool</span> ret) {</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(level_stack_.Empty())) <span class="comment">// end of json text</span></div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160; Flush();</div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; <span class="keywordflow">return</span> ret;</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; }</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160;</div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; OutputStream* os_;</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; internal::Stack&lt;StackAllocator&gt; level_stack_;</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; <span class="keywordtype">int</span> maxDecimalPlaces_;</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; <span class="keywordtype">bool</span> hasRoot_;</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160;</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; <span class="comment">// Prohibit copy constructor &amp; assignment operator.</span></div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; <a class="code" href="classrapidjson_1_1_writer.html">Writer</a>(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_writer.html">Writer</a>&amp;);</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; <a class="code" href="classrapidjson_1_1_writer.html">Writer</a>&amp; operator=(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_writer.html">Writer</a>&amp;);</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160;};</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160;</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160;<span class="comment">// Full specialization for StringStream to prevent memory copying</span></div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160;</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160;<span class="keyword">template</span>&lt;&gt;</div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160;<span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_writer.html">Writer&lt;StringBuffer&gt;::WriteInt</a>(<span class="keywordtype">int</span> i) {</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; <span class="keywordtype">char</span> *buffer = os_-&gt;Push(11);</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* end = internal::i32toa(i, buffer);</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; os_-&gt;Pop(static_cast&lt;size_t&gt;(11 - (end - buffer)));</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160;}</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160;</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160;<span class="keyword">template</span>&lt;&gt;</div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160;<span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_writer.html">Writer&lt;StringBuffer&gt;::WriteUint</a>(<span class="keywordtype">unsigned</span> u) {</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; <span class="keywordtype">char</span> *buffer = os_-&gt;Push(10);</div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* end = internal::u32toa(u, buffer);</div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; os_-&gt;Pop(static_cast&lt;size_t&gt;(10 - (end - buffer)));</div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160;}</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160;</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160;<span class="keyword">template</span>&lt;&gt;</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160;<span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_writer.html">Writer&lt;StringBuffer&gt;::WriteInt64</a>(int64_t i64) {</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; <span class="keywordtype">char</span> *buffer = os_-&gt;Push(21);</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* end = internal::i64toa(i64, buffer);</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; os_-&gt;Pop(static_cast&lt;size_t&gt;(21 - (end - buffer)));</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160;}</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160;</div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160;<span class="keyword">template</span>&lt;&gt;</div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160;<span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_writer.html">Writer&lt;StringBuffer&gt;::WriteUint64</a>(uint64_t u) {</div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; <span class="keywordtype">char</span> *buffer = os_-&gt;Push(20);</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* end = internal::u64toa(u, buffer);</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; os_-&gt;Pop(static_cast&lt;size_t&gt;(20 - (end - buffer)));</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160;}</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160;</div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160;<span class="keyword">template</span>&lt;&gt;</div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160;<span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_writer.html">Writer&lt;StringBuffer&gt;::WriteDouble</a>(<span class="keywordtype">double</span> d) {</div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160; <span class="keywordflow">if</span> (internal::Double(d).IsNanOrInf()) {</div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; <span class="comment">// Note: This code path can only be reached if (RAPIDJSON_WRITE_DEFAULT_FLAGS &amp; kWriteNanAndInfFlag).</span></div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; <span class="keywordflow">if</span> (!(<a class="code" href="namespacerapidjson.html#ad28b1de6aee37e92fc31792dd6dd6b19a5b5ca665afdfa828a74ae5755c67a226">kWriteDefaultFlags</a> &amp; <a class="code" href="namespacerapidjson.html#ad28b1de6aee37e92fc31792dd6dd6b19a3adbca1d31ad845ff4e9d742280cce39">kWriteNanAndInfFlag</a>))</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160; <span class="keywordflow">if</span> (internal::Double(d).IsNan()) {</div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160; <a class="code" href="namespacerapidjson.html#a820f77efccfbb749bd15fe4822d2c740">PutReserve</a>(*os_, 3);</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;N&#39;</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;a&#39;</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;N&#39;</span>);</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160; }</div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160; <span class="keywordflow">if</span> (internal::Double(d).Sign()) {</div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160; <a class="code" href="namespacerapidjson.html#a820f77efccfbb749bd15fe4822d2c740">PutReserve</a>(*os_, 9);</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160; <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;-&#39;</span>);</div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; }</div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160; <a class="code" href="namespacerapidjson.html#a820f77efccfbb749bd15fe4822d2c740">PutReserve</a>(*os_, 8);</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160; <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;I&#39;</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;n&#39;</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;f&#39;</span>);</div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;i&#39;</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;n&#39;</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;i&#39;</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;t&#39;</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;y&#39;</span>);</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; }</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; </div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; <span class="keywordtype">char</span> *buffer = os_-&gt;Push(25);</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; <span class="keywordtype">char</span>* end = internal::dtoa(d, buffer, maxDecimalPlaces_);</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160; os_-&gt;Pop(static_cast&lt;size_t&gt;(25 - (end - buffer)));</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160;}</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160;</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160;<span class="preprocessor">#if defined(RAPIDJSON_SSE2) || defined(RAPIDJSON_SSE42)</span></div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160;<span class="keyword">template</span>&lt;&gt;</div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160;<span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_writer.html">Writer&lt;StringBuffer&gt;::ScanWriteUnescapedString</a>(<a class="code" href="structrapidjson_1_1_generic_string_stream.html">StringStream</a>&amp; is, <span class="keywordtype">size_t</span> length) {</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160; <span class="keywordflow">if</span> (length &lt; 16)</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; <span class="keywordflow">return</span> <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga5dc14176a9e71ace282404b0bcda57a1">RAPIDJSON_LIKELY</a>(is.Tell() &lt; length);</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160;</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga5dc14176a9e71ace282404b0bcda57a1">RAPIDJSON_LIKELY</a>(is.Tell() &lt; length))</div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160;</div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* p = is.<a class="code" href="structrapidjson_1_1_generic_string_stream.html#a9a38a9d5b1ce782cacd4ec1bdf87fc2d">src_</a>;</div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* end = is.<a class="code" href="structrapidjson_1_1_generic_string_stream.html#a2556705b0a0fd6393862efe6db025b32">head_</a> + length;</div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* nextAligned = <span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span><span class="keywordtype">char</span>*<span class="keyword">&gt;</span>((<span class="keyword">reinterpret_cast&lt;</span><span class="keywordtype">size_t</span><span class="keyword">&gt;</span>(p) + 15) &amp; <span class="keyword">static_cast&lt;</span><span class="keywordtype">size_t</span><span class="keyword">&gt;</span>(~15));</div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* endAligned = <span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span><span class="keywordtype">char</span>*<span class="keyword">&gt;</span>(<span class="keyword">reinterpret_cast&lt;</span><span class="keywordtype">size_t</span><span class="keyword">&gt;</span>(end) &amp; static_cast&lt;size_t&gt;(~15));</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160; <span class="keywordflow">if</span> (nextAligned &gt; end)</div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160;</div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; <span class="keywordflow">while</span> (p != nextAligned)</div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; <span class="keywordflow">if</span> (*p &lt; 0x20 || *p == <span class="charliteral">&#39;\&quot;&#39;</span> || *p == <span class="charliteral">&#39;\\&#39;</span>) {</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; is.<a class="code" href="structrapidjson_1_1_generic_string_stream.html#a9a38a9d5b1ce782cacd4ec1bdf87fc2d">src_</a> = p;</div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; <span class="keywordflow">return</span> <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga5dc14176a9e71ace282404b0bcda57a1">RAPIDJSON_LIKELY</a>(is.Tell() &lt; length);</div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; }</div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; os_-&gt;PutUnsafe(*p++);</div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160;</div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; <span class="comment">// The rest of string using SIMD</span></div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> dquote[16] = { <span class="charliteral">&#39;\&quot;&#39;</span>, <span class="charliteral">&#39;\&quot;&#39;</span>, <span class="charliteral">&#39;\&quot;&#39;</span>, <span class="charliteral">&#39;\&quot;&#39;</span>, <span class="charliteral">&#39;\&quot;&#39;</span>, <span class="charliteral">&#39;\&quot;&#39;</span>, <span class="charliteral">&#39;\&quot;&#39;</span>, <span class="charliteral">&#39;\&quot;&#39;</span>, <span class="charliteral">&#39;\&quot;&#39;</span>, <span class="charliteral">&#39;\&quot;&#39;</span>, <span class="charliteral">&#39;\&quot;&#39;</span>, <span class="charliteral">&#39;\&quot;&#39;</span>, <span class="charliteral">&#39;\&quot;&#39;</span>, <span class="charliteral">&#39;\&quot;&#39;</span>, <span class="charliteral">&#39;\&quot;&#39;</span>, <span class="charliteral">&#39;\&quot;&#39;</span> };</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> bslash[16] = { <span class="charliteral">&#39;\\&#39;</span>, <span class="charliteral">&#39;\\&#39;</span>, <span class="charliteral">&#39;\\&#39;</span>, <span class="charliteral">&#39;\\&#39;</span>, <span class="charliteral">&#39;\\&#39;</span>, <span class="charliteral">&#39;\\&#39;</span>, <span class="charliteral">&#39;\\&#39;</span>, <span class="charliteral">&#39;\\&#39;</span>, <span class="charliteral">&#39;\\&#39;</span>, <span class="charliteral">&#39;\\&#39;</span>, <span class="charliteral">&#39;\\&#39;</span>, <span class="charliteral">&#39;\\&#39;</span>, <span class="charliteral">&#39;\\&#39;</span>, <span class="charliteral">&#39;\\&#39;</span>, <span class="charliteral">&#39;\\&#39;</span>, <span class="charliteral">&#39;\\&#39;</span> };</div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> space[16] = { 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F };</div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160; <span class="keyword">const</span> __m128i dq = _mm_loadu_si128(reinterpret_cast&lt;const __m128i *&gt;(&amp;dquote[0]));</div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; <span class="keyword">const</span> __m128i bs = _mm_loadu_si128(reinterpret_cast&lt;const __m128i *&gt;(&amp;bslash[0]));</div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; <span class="keyword">const</span> __m128i sp = _mm_loadu_si128(reinterpret_cast&lt;const __m128i *&gt;(&amp;space[0]));</div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160;</div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; <span class="keywordflow">for</span> (; p != endAligned; p += 16) {</div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; <span class="keyword">const</span> __m128i s = _mm_load_si128(reinterpret_cast&lt;const __m128i *&gt;(p));</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; <span class="keyword">const</span> __m128i t1 = _mm_cmpeq_epi8(s, dq);</div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160; <span class="keyword">const</span> __m128i t2 = _mm_cmpeq_epi8(s, bs);</div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160; <span class="keyword">const</span> __m128i t3 = _mm_cmpeq_epi8(_mm_max_epu8(s, sp), sp); <span class="comment">// s &lt; 0x20 &lt;=&gt; max(s, 0x1F) == 0x1F</span></div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160; <span class="keyword">const</span> __m128i x = _mm_or_si128(_mm_or_si128(t1, t2), t3);</div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> r = <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">short</span><span class="keyword">&gt;</span>(_mm_movemask_epi8(x));</div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(r != 0)) { <span class="comment">// some of characters is escaped</span></div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160; <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> len;</div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160;<span class="preprocessor">#ifdef _MSC_VER // Find the index of first escaped</span></div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> offset;</div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160; _BitScanForward(&amp;offset, r);</div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160; len = offset;</div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160; len = <span class="keyword">static_cast&lt;</span><a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a><span class="keyword">&gt;</span>(__builtin_ffs(r) - 1);</div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160; <span class="keywordtype">char</span>* q = <span class="keyword">reinterpret_cast&lt;</span><span class="keywordtype">char</span>*<span class="keyword">&gt;</span>(os_-&gt;PushUnsafe(len));</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; len; i++)</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160; q[i] = p[i];</div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160;</div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160; p += len;</div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160; }</div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160; _mm_storeu_si128(reinterpret_cast&lt;__m128i *&gt;(os_-&gt;PushUnsafe(16)), s);</div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160; }</div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160;</div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160; is.<a class="code" href="structrapidjson_1_1_generic_string_stream.html#a9a38a9d5b1ce782cacd4ec1bdf87fc2d">src_</a> = p;</div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160; <span class="keywordflow">return</span> <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga5dc14176a9e71ace282404b0bcda57a1">RAPIDJSON_LIKELY</a>(is.Tell() &lt; length);</div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160;}</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160;<span class="preprocessor">#elif defined(RAPIDJSON_NEON)</span></div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160;<span class="keyword">template</span>&lt;&gt;</div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160;<span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_writer.html">Writer&lt;StringBuffer&gt;::ScanWriteUnescapedString</a>(<a class="code" href="structrapidjson_1_1_generic_string_stream.html">StringStream</a>&amp; is, <span class="keywordtype">size_t</span> length) {</div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160; <span class="keywordflow">if</span> (length &lt; 16)</div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160; <span class="keywordflow">return</span> <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga5dc14176a9e71ace282404b0bcda57a1">RAPIDJSON_LIKELY</a>(is.Tell() &lt; length);</div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160;</div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga5dc14176a9e71ace282404b0bcda57a1">RAPIDJSON_LIKELY</a>(is.Tell() &lt; length))</div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160;</div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* p = is.<a class="code" href="structrapidjson_1_1_generic_string_stream.html#a9a38a9d5b1ce782cacd4ec1bdf87fc2d">src_</a>;</div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* end = is.<a class="code" href="structrapidjson_1_1_generic_string_stream.html#a2556705b0a0fd6393862efe6db025b32">head_</a> + length;</div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* nextAligned = <span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span><span class="keywordtype">char</span>*<span class="keyword">&gt;</span>((<span class="keyword">reinterpret_cast&lt;</span><span class="keywordtype">size_t</span><span class="keyword">&gt;</span>(p) + 15) &amp; <span class="keyword">static_cast&lt;</span><span class="keywordtype">size_t</span><span class="keyword">&gt;</span>(~15));</div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* endAligned = <span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span><span class="keywordtype">char</span>*<span class="keyword">&gt;</span>(<span class="keyword">reinterpret_cast&lt;</span><span class="keywordtype">size_t</span><span class="keyword">&gt;</span>(end) &amp; static_cast&lt;size_t&gt;(~15));</div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; <span class="keywordflow">if</span> (nextAligned &gt; end)</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160;</div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; <span class="keywordflow">while</span> (p != nextAligned)</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160; <span class="keywordflow">if</span> (*p &lt; 0x20 || *p == <span class="charliteral">&#39;\&quot;&#39;</span> || *p == <span class="charliteral">&#39;\\&#39;</span>) {</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160; is.<a class="code" href="structrapidjson_1_1_generic_string_stream.html#a9a38a9d5b1ce782cacd4ec1bdf87fc2d">src_</a> = p;</div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; <span class="keywordflow">return</span> <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga5dc14176a9e71ace282404b0bcda57a1">RAPIDJSON_LIKELY</a>(is.Tell() &lt; length);</div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160; }</div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; os_-&gt;PutUnsafe(*p++);</div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160;</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160; <span class="comment">// The rest of string using SIMD</span></div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; <span class="keyword">const</span> uint8x16_t s0 = vmovq_n_u8(<span class="charliteral">&#39;&quot;&#39;</span>);</div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160; <span class="keyword">const</span> uint8x16_t s1 = vmovq_n_u8(<span class="charliteral">&#39;\\&#39;</span>);</div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160; <span class="keyword">const</span> uint8x16_t s2 = vmovq_n_u8(<span class="charliteral">&#39;\b&#39;</span>);</div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160; <span class="keyword">const</span> uint8x16_t s3 = vmovq_n_u8(32);</div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160;</div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160; <span class="keywordflow">for</span> (; p != endAligned; p += 16) {</div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160; <span class="keyword">const</span> uint8x16_t s = vld1q_u8(reinterpret_cast&lt;const uint8_t *&gt;(p));</div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160; uint8x16_t x = vceqq_u8(s, s0);</div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160; x = vorrq_u8(x, vceqq_u8(s, s1));</div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; x = vorrq_u8(x, vceqq_u8(s, s2));</div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160; x = vorrq_u8(x, vcltq_u8(s, s3));</div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160;</div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160; x = vrev64q_u8(x); <span class="comment">// Rev in 64</span></div><div class="line"><a name="l00672"></a><span class="lineno"> 672</span>&#160; uint64_t low = vgetq_lane_u64(reinterpret_cast&lt;uint64x2_t&gt;(x), 0); <span class="comment">// extract</span></div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160; uint64_t high = vgetq_lane_u64(reinterpret_cast&lt;uint64x2_t&gt;(x), 1); <span class="comment">// extract</span></div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160;</div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160; <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> len = 0;</div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160; <span class="keywordtype">bool</span> escaped = <span class="keyword">false</span>;</div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160; <span class="keywordflow">if</span> (low == 0) {</div><div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160; <span class="keywordflow">if</span> (high != 0) {</div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160; <span class="keywordtype">unsigned</span> lz = (unsigned)__builtin_clzll(high);</div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160; len = 8 + (lz &gt;&gt; 3);</div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160; escaped = <span class="keyword">true</span>;</div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160; }</div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160; <span class="keywordtype">unsigned</span> lz = (unsigned)__builtin_clzll(low);</div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; len = lz &gt;&gt; 3;</div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160; escaped = <span class="keyword">true</span>;</div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160; }</div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(escaped)) { <span class="comment">// some of characters is escaped</span></div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160; <span class="keywordtype">char</span>* q = <span class="keyword">reinterpret_cast&lt;</span><span class="keywordtype">char</span>*<span class="keyword">&gt;</span>(os_-&gt;PushUnsafe(len));</div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; len; i++)</div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160; q[i] = p[i];</div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160;</div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160; p += len;</div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160; }</div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160; vst1q_u8(reinterpret_cast&lt;uint8_t *&gt;(os_-&gt;PushUnsafe(16)), s);</div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160; }</div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160;</div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160; is.<a class="code" href="structrapidjson_1_1_generic_string_stream.html#a9a38a9d5b1ce782cacd4ec1bdf87fc2d">src_</a> = p;</div><div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160; <span class="keywordflow">return</span> <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga5dc14176a9e71ace282404b0bcda57a1">RAPIDJSON_LIKELY</a>(is.Tell() &lt; length);</div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span>&#160;}</div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160;<span class="preprocessor">#endif // RAPIDJSON_NEON</span></div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160;</div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160;RAPIDJSON_NAMESPACE_END</div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160;</div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160;<span class="preprocessor">#if defined(_MSC_VER) || defined(__clang__)</span></div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160;RAPIDJSON_DIAG_POP</div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160;</div><div class="line"><a name="l00710"></a><span class="lineno"> 710</span>&#160;<span class="preprocessor">#endif // RAPIDJSON_RAPIDJSON_H_</span></div><div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4a80d9f25b083abce45edbfdd3ba006c8e"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a80d9f25b083abce45edbfdd3ba006c8e">rapidjson::kTrueType</a></div><div class="ttdoc">true </div><div class="ttdef"><b>Definition:</b> rapidjson.h:634</div></div>
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">// Tencent is pleased to support the open source community by making RapidJSON available.</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">// </span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">// Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved.</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment">// Licensed under the MIT License (the &quot;License&quot;); you may not use this file except</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment">// in compliance with the License. You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment">// http://opensource.org/licenses/MIT</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment">// Unless required by applicable law or agreed to in writing, software distributed </span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment">// under the License is distributed on an &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR </span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment">// CONDITIONS OF ANY KIND, either express or implied. See the License for the </span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment">// specific language governing permissions and limitations under the License.</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;</div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#ifndef RAPIDJSON_WRITER_H_</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#define RAPIDJSON_WRITER_H_</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#include &quot;stream.h&quot;</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="preprocessor">#include &quot;internal/meta.h&quot;</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#include &quot;internal/stack.h&quot;</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="preprocessor">#include &quot;internal/strfunc.h&quot;</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="preprocessor">#include &quot;internal/dtoa.h&quot;</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#include &quot;internal/itoa.h&quot;</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#include &quot;stringbuffer.h&quot;</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor">#include &lt;new&gt;</span> <span class="comment">// placement new</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="preprocessor">#if defined(RAPIDJSON_SIMD) &amp;&amp; defined(_MSC_VER)</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="preprocessor">#include &lt;intrin.h&gt;</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="preprocessor">#pragma intrinsic(_BitScanForward)</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="preprocessor">#ifdef RAPIDJSON_SSE42</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="preprocessor">#include &lt;nmmintrin.h&gt;</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="preprocessor">#elif defined(RAPIDJSON_SSE2)</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="preprocessor">#include &lt;emmintrin.h&gt;</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="preprocessor">#elif defined(RAPIDJSON_NEON)</span></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="preprocessor">#include &lt;arm_neon.h&gt;</span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;<span class="preprocessor">#ifdef __clang__</span></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;RAPIDJSON_DIAG_PUSH</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;RAPIDJSON_DIAG_OFF(padded)</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;RAPIDJSON_DIAG_OFF(unreachable-code)</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;RAPIDJSON_DIAG_OFF(c++98-compat)</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;<span class="preprocessor">#elif defined(_MSC_VER)</span></div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;RAPIDJSON_DIAG_PUSH</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;RAPIDJSON_DIAG_OFF(4127) <span class="comment">// conditional expression is constant</span></div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;RAPIDJSON_NAMESPACE_BEGIN</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;<span class="comment"></span><span class="comment">// WriteFlag</span></div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;<span class="comment">/*! \def RAPIDJSON_WRITE_DEFAULT_FLAGS </span></div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;<span class="comment"> \ingroup RAPIDJSON_CONFIG</span></div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;<span class="comment"> \brief User-defined kWriteDefaultFlags definition.</span></div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;<span class="comment"> User can define this as any \c WriteFlag combinations.</span></div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;<span class="preprocessor">#ifndef RAPIDJSON_WRITE_DEFAULT_FLAGS</span></div><div class="line"><a name="l00061"></a><span class="lineno"><a class="line" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga1975595e2f1dc20a2d4859f340ac88c6"> 61</a></span>&#160;<span class="preprocessor">#define RAPIDJSON_WRITE_DEFAULT_FLAGS kWriteNoFlags</span></div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;<span class="comment">//! Combination of writeFlags</span></div><div class="line"><a name="l00065"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#ad28b1de6aee37e92fc31792dd6dd6b19"> 65</a></span>&#160;<span class="comment"></span><span class="keyword">enum</span> <a class="code" href="namespacerapidjson.html#ad28b1de6aee37e92fc31792dd6dd6b19">WriteFlag</a> {</div><div class="line"><a name="l00066"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#ad28b1de6aee37e92fc31792dd6dd6b19ae971aa1fc0ae64c8f3d2b47fd802846a"> 66</a></span>&#160; <a class="code" href="namespacerapidjson.html#ad28b1de6aee37e92fc31792dd6dd6b19ae971aa1fc0ae64c8f3d2b47fd802846a">kWriteNoFlags</a> = 0, <span class="comment">//!&lt; No flags are set.</span></div><div class="line"><a name="l00067"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#ad28b1de6aee37e92fc31792dd6dd6b19ac1b5e17278b060e9e866df075c104c10"> 67</a></span>&#160;<span class="comment"></span> <a class="code" href="namespacerapidjson.html#ad28b1de6aee37e92fc31792dd6dd6b19ac1b5e17278b060e9e866df075c104c10">kWriteValidateEncodingFlag</a> = 1, <span class="comment">//!&lt; Validate encoding of JSON strings.</span></div><div class="line"><a name="l00068"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#ad28b1de6aee37e92fc31792dd6dd6b19a3adbca1d31ad845ff4e9d742280cce39"> 68</a></span>&#160;<span class="comment"></span> <a class="code" href="namespacerapidjson.html#ad28b1de6aee37e92fc31792dd6dd6b19a3adbca1d31ad845ff4e9d742280cce39">kWriteNanAndInfFlag</a> = 2, <span class="comment">//!&lt; Allow writing of Infinity, -Infinity and NaN.</span></div><div class="line"><a name="l00069"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#ad28b1de6aee37e92fc31792dd6dd6b19a5b5ca665afdfa828a74ae5755c67a226"> 69</a></span>&#160;<span class="comment"></span> <a class="code" href="namespacerapidjson.html#ad28b1de6aee37e92fc31792dd6dd6b19a5b5ca665afdfa828a74ae5755c67a226">kWriteDefaultFlags</a> = <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga1975595e2f1dc20a2d4859f340ac88c6">RAPIDJSON_WRITE_DEFAULT_FLAGS</a> <span class="comment">//!&lt; Default write flags. Can be customized by defining RAPIDJSON_WRITE_DEFAULT_FLAGS</span></div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;<span class="comment"></span>};</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;<span class="comment">//! JSON writer</span></div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;<span class="comment"></span><span class="comment">/*! Writer implements the concept Handler.</span></div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;<span class="comment"> It generates JSON text by events to an output os.</span></div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;<span class="comment"> User may programmatically calls the functions of a writer to generate JSON text.</span></div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160;<span class="comment"> On the other side, a writer can also be passed to objects that generates events, </span></div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;<span class="comment"> for example Reader::Parse() and Document::Accept().</span></div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;<span class="comment"> \tparam OutputStream Type of output stream.</span></div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;<span class="comment"> \tparam SourceEncoding Encoding of source string.</span></div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;<span class="comment"> \tparam TargetEncoding Encoding of output stream.</span></div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160;<span class="comment"> \tparam StackAllocator Type of allocator for allocating memory of stack.</span></div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160;<span class="comment"> \note implements Handler concept</span></div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> OutputStream, <span class="keyword">typename</span> SourceEncoding = UTF8&lt;&gt;, <span class="keyword">typename</span> TargetEncoding = UTF8&lt;&gt;, <span class="keyword">typename</span> StackAllocator = CrtAllocator, <span class="keywordtype">unsigned</span> writeFlags = kWriteDefaultFlags&gt;</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;<span class="keyword">class </span><a class="code" href="classrapidjson_1_1_writer.html">Writer</a> {</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="keyword">typedef</span> <span class="keyword">typename</span> SourceEncoding::Ch Ch;</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160;</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> kDefaultMaxDecimalPlaces = 324;</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;<span class="comment"> //! Constructor</span></div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160;<span class="comment"></span><span class="comment"> /*! \param os Output stream.</span></div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;<span class="comment"> \param stackAllocator User supplied allocator. If it is null, it will create a private one.</span></div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;<span class="comment"> \param levelDepth Initial capacity of stack.</span></div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <span class="keyword">explicit</span></div><div class="line"><a name="l00101"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_writer.html#a98a421c806b456688874511f64add1f2"> 101</a></span>&#160; <a class="code" href="classrapidjson_1_1_writer.html#a98a421c806b456688874511f64add1f2">Writer</a>(OutputStream&amp; os, StackAllocator* stackAllocator = 0, <span class="keywordtype">size_t</span> levelDepth = kDefaultLevelDepth) : </div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; os_(&amp;os), level_stack_(stackAllocator, levelDepth * sizeof(<a class="code" href="structrapidjson_1_1_writer_1_1_level.html">Level</a>)), maxDecimalPlaces_(kDefaultMaxDecimalPlaces), hasRoot_(false) {}</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160;</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <span class="keyword">explicit</span></div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <a class="code" href="classrapidjson_1_1_writer.html">Writer</a>(StackAllocator* allocator = 0, <span class="keywordtype">size_t</span> levelDepth = kDefaultLevelDepth) :</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; os_(0), level_stack_(allocator, levelDepth * <span class="keyword">sizeof</span>(<a class="code" href="structrapidjson_1_1_writer_1_1_level.html">Level</a>)), maxDecimalPlaces_(kDefaultMaxDecimalPlaces), hasRoot_(<span class="keyword">false</span>) {}</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160;</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <a class="code" href="classrapidjson_1_1_writer.html">Writer</a>(<a class="code" href="classrapidjson_1_1_writer.html">Writer</a>&amp;&amp; rhs) :</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; os_(rhs.os_), level_stack_(std::move(rhs.level_stack_)), maxDecimalPlaces_(rhs.maxDecimalPlaces_), hasRoot_(rhs.hasRoot_) {</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; rhs.os_ = 0;</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; }</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160;<span class="comment"> //! Reset the writer with a new stream.</span></div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160;<span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160;<span class="comment"> This function reset the writer with a new stream and default settings,</span></div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160;<span class="comment"> in order to make a Writer object reusable for output multiple JSONs.</span></div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160;<span class="comment"> \param os New output stream.</span></div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160;<span class="comment"> \code</span></div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160;<span class="comment"> Writer&lt;OutputStream&gt; writer(os1);</span></div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160;<span class="comment"> writer.StartObject();</span></div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160;<span class="comment"> // ...</span></div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160;<span class="comment"> writer.EndObject();</span></div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160;<span class="comment"> writer.Reset(os2);</span></div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160;<span class="comment"> writer.StartObject();</span></div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160;<span class="comment"> // ...</span></div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160;<span class="comment"> writer.EndObject();</span></div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160;<span class="comment"> \endcode</span></div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00133"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_writer.html#ac4026d3f14b80d6d7fc10004b1972722"> 133</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classrapidjson_1_1_writer.html#ac4026d3f14b80d6d7fc10004b1972722">Reset</a>(OutputStream&amp; os) {</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; os_ = &amp;os;</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; hasRoot_ = <span class="keyword">false</span>;</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; level_stack_.Clear();</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; }</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160;<span class="comment"> //! Checks whether the output is a complete JSON.</span></div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160;<span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160;<span class="comment"> A complete JSON has a complete root object or array.</span></div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00143"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_writer.html#a190d964d3e62155e87153e858a0b04da"> 143</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_writer.html#a190d964d3e62155e87153e858a0b04da">IsComplete</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; <span class="keywordflow">return</span> hasRoot_ &amp;&amp; level_stack_.Empty();</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; }</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160;</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <span class="keywordtype">int</span> GetMaxDecimalPlaces()<span class="keyword"> const </span>{</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <span class="keywordflow">return</span> maxDecimalPlaces_;</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; }</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160;<span class="comment"> //! Sets the maximum number of decimal places for double output.</span></div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160;<span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160;<span class="comment"> This setting truncates the output with specified number of decimal places.</span></div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160;<span class="comment"> For example, </span></div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160;<span class="comment"> \code</span></div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160;<span class="comment"> writer.SetMaxDecimalPlaces(3);</span></div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160;<span class="comment"> writer.StartArray();</span></div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160;<span class="comment"> writer.Double(0.12345); // &quot;0.123&quot;</span></div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160;<span class="comment"> writer.Double(0.0001); // &quot;0.0&quot;</span></div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160;<span class="comment"> writer.Double(1.234567890123456e30); // &quot;1.234567890123456e30&quot; (do not truncate significand for positive exponent)</span></div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160;<span class="comment"> writer.Double(1.23e-4); // &quot;0.0&quot; (do truncate significand for negative exponent)</span></div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160;<span class="comment"> writer.EndArray();</span></div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160;<span class="comment"> \endcode</span></div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160;<span class="comment"> The default setting does not truncate any decimal places. You can restore to this setting by calling</span></div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160;<span class="comment"> \code</span></div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160;<span class="comment"> writer.SetMaxDecimalPlaces(Writer::kDefaultMaxDecimalPlaces);</span></div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160;<span class="comment"> \endcode</span></div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00172"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_writer.html#aa7b6967dc237519e2a6d8b3939fb9634"> 172</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classrapidjson_1_1_writer.html#aa7b6967dc237519e2a6d8b3939fb9634">SetMaxDecimalPlaces</a>(<span class="keywordtype">int</span> maxDecimalPlaces) {</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; maxDecimalPlaces_ = maxDecimalPlaces;</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; }</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160;<span class="comment"> /*!@name Implementation of Handler</span></div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160;<span class="comment"> \see Handler</span></div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160;<span class="comment"> */</span><span class="comment"></span></div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160;<span class="comment"> //@{</span></div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; <span class="keywordtype">bool</span> Null() { Prefix(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a952871e4326b527154fc8aac1ac1f6ff">kNullType</a>); <span class="keywordflow">return</span> EndValue(WriteNull()); }</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <span class="keywordtype">bool</span> Bool(<span class="keywordtype">bool</span> b) { Prefix(b ? <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a80d9f25b083abce45edbfdd3ba006c8e">kTrueType</a> : <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a9f2e7047832dce1029551b5de0f05607">kFalseType</a>); <span class="keywordflow">return</span> EndValue(WriteBool(b)); }</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <span class="keywordtype">bool</span> Int(<span class="keywordtype">int</span> i) { Prefix(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a">kNumberType</a>); <span class="keywordflow">return</span> EndValue(WriteInt(i)); }</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; <span class="keywordtype">bool</span> Uint(<span class="keywordtype">unsigned</span> u) { Prefix(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a">kNumberType</a>); <span class="keywordflow">return</span> EndValue(WriteUint(u)); }</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; <span class="keywordtype">bool</span> Int64(int64_t i64) { Prefix(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a">kNumberType</a>); <span class="keywordflow">return</span> EndValue(WriteInt64(i64)); }</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; <span class="keywordtype">bool</span> Uint64(uint64_t u64) { Prefix(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a">kNumberType</a>); <span class="keywordflow">return</span> EndValue(WriteUint64(u64)); }</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160;<span class="comment"> //! Writes the given \c double value to the stream</span></div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160;<span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160;<span class="comment"> \param d The value to be written.</span></div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160;<span class="comment"> \return Whether it is succeed.</span></div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00193"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_writer.html#aff66881798d01e932a0b8b8ef97b0373"> 193</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_writer.html#aff66881798d01e932a0b8b8ef97b0373">Double</a>(<span class="keywordtype">double</span> d) { Prefix(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a">kNumberType</a>); <span class="keywordflow">return</span> EndValue(WriteDouble(d)); }</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160;</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; <span class="keywordtype">bool</span> RawNumber(<span class="keyword">const</span> Ch* str, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> length, <span class="keywordtype">bool</span> copy = <span class="keyword">false</span>) {</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(str != 0);</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; (void)copy;</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; Prefix(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a">kNumberType</a>);</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; <span class="keywordflow">return</span> EndValue(WriteString(str, length));</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; }</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160;</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <span class="keywordtype">bool</span> String(<span class="keyword">const</span> Ch* str, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> length, <span class="keywordtype">bool</span> copy = <span class="keyword">false</span>) {</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(str != 0);</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; (void)copy;</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; Prefix(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4ad6379da3dc04b83a591992bfb9fabba7">kStringType</a>);</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; <span class="keywordflow">return</span> EndValue(WriteString(str, length));</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; }</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160;</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; <span class="keywordtype">bool</span> String(<span class="keyword">const</span> std::basic_string&lt;Ch&gt;&amp; str) {</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <span class="keywordflow">return</span> String(str.data(), <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a>(str.size()));</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; }</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160;</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; <span class="keywordtype">bool</span> StartObject() {</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; Prefix(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4acf030b422a32c3647c7c5973bd4dd0a9">kObjectType</a>);</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; <span class="keyword">new</span> (level_stack_.template Push&lt;Level&gt;()) <a class="code" href="structrapidjson_1_1_writer_1_1_level.html">Level</a>(<span class="keyword">false</span>);</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; <span class="keywordflow">return</span> WriteStartObject();</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; }</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160;</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; <span class="keywordtype">bool</span> Key(<span class="keyword">const</span> Ch* str, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> length, <span class="keywordtype">bool</span> copy = <span class="keyword">false</span>) { <span class="keywordflow">return</span> String(str, length, copy); }</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160;</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <span class="keywordtype">bool</span> Key(<span class="keyword">const</span> std::basic_string&lt;Ch&gt;&amp; str)</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; {</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <span class="keywordflow">return</span> Key(str.data(), <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a>(str.size()));</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; }</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; </div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; <span class="keywordtype">bool</span> EndObject(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> memberCount = 0) {</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; (void)memberCount;</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(level_stack_.GetSize() &gt;= <span class="keyword">sizeof</span>(<a class="code" href="structrapidjson_1_1_writer_1_1_level.html">Level</a>)); <span class="comment">// not inside an Object</span></div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(!level_stack_.template Top&lt;Level&gt;()-&gt;inArray); <span class="comment">// currently inside an Array, not Object</span></div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(0 == level_stack_.template Top&lt;Level&gt;()-&gt;valueCount % 2); <span class="comment">// Object has a Key without a Value</span></div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; level_stack_.template Pop&lt;Level&gt;(1);</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; <span class="keywordflow">return</span> EndValue(WriteEndObject());</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; }</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160;</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; <span class="keywordtype">bool</span> StartArray() {</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; Prefix(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a058c622e1e7d59419ae58b895cbce468">kArrayType</a>);</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; <span class="keyword">new</span> (level_stack_.template Push&lt;Level&gt;()) <a class="code" href="structrapidjson_1_1_writer_1_1_level.html">Level</a>(<span class="keyword">true</span>);</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <span class="keywordflow">return</span> WriteStartArray();</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; }</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160;</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; <span class="keywordtype">bool</span> EndArray(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> elementCount = 0) {</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; (void)elementCount;</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(level_stack_.GetSize() &gt;= <span class="keyword">sizeof</span>(<a class="code" href="structrapidjson_1_1_writer_1_1_level.html">Level</a>));</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(level_stack_.template Top&lt;Level&gt;()-&gt;inArray);</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; level_stack_.template Pop&lt;Level&gt;(1);</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; <span class="keywordflow">return</span> EndValue(WriteEndArray());</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; }<span class="comment"></span></div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160;<span class="comment"> //@}</span></div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160;<span class="comment"> /*! @name Convenience extensions */</span><span class="comment"></span></div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160;<span class="comment"> //@{</span></div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160;<span class="comment"> //! Simpler but slower overload.</span></div><div class="line"><a name="l00258"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_writer.html#a849e2b675a2b868699a14d45c7396f24"> 258</a></span>&#160;<span class="comment"></span> <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_writer.html#a849e2b675a2b868699a14d45c7396f24">String</a>(<span class="keyword">const</span> Ch* <span class="keyword">const</span>&amp; str) { <span class="keywordflow">return</span> <a class="code" href="classrapidjson_1_1_writer.html#a849e2b675a2b868699a14d45c7396f24">String</a>(str, internal::StrLen(str)); }</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; <span class="keywordtype">bool</span> Key(<span class="keyword">const</span> Ch* <span class="keyword">const</span>&amp; str) { <span class="keywordflow">return</span> Key(str, internal::StrLen(str)); }</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; <span class="comment"></span></div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160;<span class="comment"> //@}</span></div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160;<span class="comment"> //! Write a raw JSON value.</span></div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160;<span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160;<span class="comment"> For user to write a stringified JSON as a value.</span></div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160;<span class="comment"> \param json A well-formed JSON value. It should not contain null character within [0, length - 1] range.</span></div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160;<span class="comment"> \param length Length of the json.</span></div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160;<span class="comment"> \param type Type of the root of json.</span></div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00271"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_writer.html#a8acb89b2bbb1e5f384e6076b65044dbe"> 271</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_writer.html#a8acb89b2bbb1e5f384e6076b65044dbe">RawValue</a>(<span class="keyword">const</span> Ch* json, <span class="keywordtype">size_t</span> length, <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">Type</a> type) {</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(json != 0);</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; Prefix(type);</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; <span class="keywordflow">return</span> EndValue(WriteRawValue(json, length));</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; }</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160;<span class="comment"> //! Flush the output stream.</span></div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160;<span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160;<span class="comment"> Allows the user to flush the output stream immediately.</span></div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00281"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_writer.html#a72cefd18d176bc12a53adb3185c51ca7"> 281</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classrapidjson_1_1_writer.html#a72cefd18d176bc12a53adb3185c51ca7">Flush</a>() {</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; os_-&gt;Flush();</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; }</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160;</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160;<span class="keyword">protected</span>:<span class="comment"></span></div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160;<span class="comment"> //! Information for each nested level</span></div><div class="line"><a name="l00287"></a><span class="lineno"><a class="line" href="structrapidjson_1_1_writer_1_1_level.html"> 287</a></span>&#160;<span class="comment"></span> <span class="keyword">struct </span><a class="code" href="structrapidjson_1_1_writer_1_1_level.html">Level</a> {</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; <a class="code" href="structrapidjson_1_1_writer_1_1_level.html">Level</a>(<span class="keywordtype">bool</span> inArray_) : valueCount(0), inArray(inArray_) {}</div><div class="line"><a name="l00289"></a><span class="lineno"><a class="line" href="structrapidjson_1_1_writer_1_1_level.html#a5d17bdfa9ded5de72f5f91175cc3e36b"> 289</a></span>&#160; <span class="keywordtype">size_t</span> <a class="code" href="structrapidjson_1_1_writer_1_1_level.html#a5d17bdfa9ded5de72f5f91175cc3e36b">valueCount</a>; <span class="comment">//!&lt; number of values in this level</span></div><div class="line"><a name="l00290"></a><span class="lineno"><a class="line" href="structrapidjson_1_1_writer_1_1_level.html#a59255e3b1d371161f7c894503cfd6bec"> 290</a></span>&#160;<span class="comment"></span> <span class="keywordtype">bool</span> <a class="code" href="structrapidjson_1_1_writer_1_1_level.html#a59255e3b1d371161f7c894503cfd6bec">inArray</a>; <span class="comment">//!&lt; true if in array, otherwise in object</span></div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160;<span class="comment"></span> };</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160;</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">size_t</span> kDefaultLevelDepth = 32;</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160;</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; <span class="keywordtype">bool</span> WriteNull() {</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; <a class="code" href="namespacerapidjson.html#a820f77efccfbb749bd15fe4822d2c740">PutReserve</a>(*os_, 4);</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;n&#39;</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;u&#39;</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;l&#39;</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;l&#39;</span>); <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; }</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160;</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; <span class="keywordtype">bool</span> WriteBool(<span class="keywordtype">bool</span> b) {</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; <span class="keywordflow">if</span> (b) {</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; <a class="code" href="namespacerapidjson.html#a820f77efccfbb749bd15fe4822d2c740">PutReserve</a>(*os_, 4);</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;t&#39;</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;r&#39;</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;u&#39;</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;e&#39;</span>);</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; }</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <span class="keywordflow">else</span> {</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; <a class="code" href="namespacerapidjson.html#a820f77efccfbb749bd15fe4822d2c740">PutReserve</a>(*os_, 5);</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;f&#39;</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;a&#39;</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;l&#39;</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;s&#39;</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;e&#39;</span>);</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; }</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; }</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160;</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; <span class="keywordtype">bool</span> WriteInt(<span class="keywordtype">int</span> i) {</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; <span class="keywordtype">char</span> buffer[11];</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* end = internal::i32toa(i, buffer);</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; <a class="code" href="namespacerapidjson.html#a820f77efccfbb749bd15fe4822d2c740">PutReserve</a>(*os_, static_cast&lt;size_t&gt;(end - buffer));</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keywordtype">char</span>* p = buffer; p != end; ++p)</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, static_cast&lt;typename OutputStream::Ch&gt;(*p));</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; }</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160;</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; <span class="keywordtype">bool</span> WriteUint(<span class="keywordtype">unsigned</span> u) {</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; <span class="keywordtype">char</span> buffer[10];</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* end = internal::u32toa(u, buffer);</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; <a class="code" href="namespacerapidjson.html#a820f77efccfbb749bd15fe4822d2c740">PutReserve</a>(*os_, static_cast&lt;size_t&gt;(end - buffer));</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keywordtype">char</span>* p = buffer; p != end; ++p)</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, static_cast&lt;typename OutputStream::Ch&gt;(*p));</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; }</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160;</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; <span class="keywordtype">bool</span> WriteInt64(int64_t i64) {</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; <span class="keywordtype">char</span> buffer[21];</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* end = internal::i64toa(i64, buffer);</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; <a class="code" href="namespacerapidjson.html#a820f77efccfbb749bd15fe4822d2c740">PutReserve</a>(*os_, static_cast&lt;size_t&gt;(end - buffer));</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keywordtype">char</span>* p = buffer; p != end; ++p)</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, static_cast&lt;typename OutputStream::Ch&gt;(*p));</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; }</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160;</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; <span class="keywordtype">bool</span> WriteUint64(uint64_t u64) {</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; <span class="keywordtype">char</span> buffer[20];</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; <span class="keywordtype">char</span>* end = internal::u64toa(u64, buffer);</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; <a class="code" href="namespacerapidjson.html#a820f77efccfbb749bd15fe4822d2c740">PutReserve</a>(*os_, static_cast&lt;size_t&gt;(end - buffer));</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">char</span>* p = buffer; p != end; ++p)</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, static_cast&lt;typename OutputStream::Ch&gt;(*p));</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; }</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160;</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; <span class="keywordtype">bool</span> WriteDouble(<span class="keywordtype">double</span> d) {</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; <span class="keywordflow">if</span> (internal::Double(d).IsNanOrInf()) {</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; <span class="keywordflow">if</span> (!(writeFlags &amp; <a class="code" href="namespacerapidjson.html#ad28b1de6aee37e92fc31792dd6dd6b19a3adbca1d31ad845ff4e9d742280cce39">kWriteNanAndInfFlag</a>))</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; <span class="keywordflow">if</span> (internal::Double(d).IsNan()) {</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; <a class="code" href="namespacerapidjson.html#a820f77efccfbb749bd15fe4822d2c740">PutReserve</a>(*os_, 3);</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;N&#39;</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;a&#39;</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;N&#39;</span>);</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; }</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; <span class="keywordflow">if</span> (internal::Double(d).Sign()) {</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; <a class="code" href="namespacerapidjson.html#a820f77efccfbb749bd15fe4822d2c740">PutReserve</a>(*os_, 9);</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;-&#39;</span>);</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; }</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; <a class="code" href="namespacerapidjson.html#a820f77efccfbb749bd15fe4822d2c740">PutReserve</a>(*os_, 8);</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;I&#39;</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;n&#39;</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;f&#39;</span>);</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;i&#39;</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;n&#39;</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;i&#39;</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;t&#39;</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;y&#39;</span>);</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; }</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160;</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; <span class="keywordtype">char</span> buffer[25];</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; <span class="keywordtype">char</span>* end = internal::dtoa(d, buffer, maxDecimalPlaces_);</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; <a class="code" href="namespacerapidjson.html#a820f77efccfbb749bd15fe4822d2c740">PutReserve</a>(*os_, static_cast&lt;size_t&gt;(end - buffer));</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">char</span>* p = buffer; p != end; ++p)</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, static_cast&lt;typename OutputStream::Ch&gt;(*p));</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; }</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160;</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; <span class="keywordtype">bool</span> WriteString(<span class="keyword">const</span> Ch* str, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> length) {</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keyword">typename</span> OutputStream::Ch hexDigits[16] = { <span class="charliteral">&#39;0&#39;</span>, <span class="charliteral">&#39;1&#39;</span>, <span class="charliteral">&#39;2&#39;</span>, <span class="charliteral">&#39;3&#39;</span>, <span class="charliteral">&#39;4&#39;</span>, <span class="charliteral">&#39;5&#39;</span>, <span class="charliteral">&#39;6&#39;</span>, <span class="charliteral">&#39;7&#39;</span>, <span class="charliteral">&#39;8&#39;</span>, <span class="charliteral">&#39;9&#39;</span>, <span class="charliteral">&#39;A&#39;</span>, <span class="charliteral">&#39;B&#39;</span>, <span class="charliteral">&#39;C&#39;</span>, <span class="charliteral">&#39;D&#39;</span>, <span class="charliteral">&#39;E&#39;</span>, <span class="charliteral">&#39;F&#39;</span> };</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> escape[256] = {</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160;<span class="preprocessor">#define Z16 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</span></div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; <span class="comment">//0 1 2 3 4 5 6 7 8 9 A B C D E F</span></div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; <span class="charliteral">&#39;u&#39;</span>, <span class="charliteral">&#39;u&#39;</span>, <span class="charliteral">&#39;u&#39;</span>, <span class="charliteral">&#39;u&#39;</span>, <span class="charliteral">&#39;u&#39;</span>, <span class="charliteral">&#39;u&#39;</span>, <span class="charliteral">&#39;u&#39;</span>, <span class="charliteral">&#39;u&#39;</span>, <span class="charliteral">&#39;b&#39;</span>, <span class="charliteral">&#39;t&#39;</span>, <span class="charliteral">&#39;n&#39;</span>, <span class="charliteral">&#39;u&#39;</span>, <span class="charliteral">&#39;f&#39;</span>, <span class="charliteral">&#39;r&#39;</span>, <span class="charliteral">&#39;u&#39;</span>, <span class="charliteral">&#39;u&#39;</span>, <span class="comment">// 00</span></div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; <span class="charliteral">&#39;u&#39;</span>, <span class="charliteral">&#39;u&#39;</span>, <span class="charliteral">&#39;u&#39;</span>, <span class="charliteral">&#39;u&#39;</span>, <span class="charliteral">&#39;u&#39;</span>, <span class="charliteral">&#39;u&#39;</span>, <span class="charliteral">&#39;u&#39;</span>, <span class="charliteral">&#39;u&#39;</span>, <span class="charliteral">&#39;u&#39;</span>, <span class="charliteral">&#39;u&#39;</span>, <span class="charliteral">&#39;u&#39;</span>, <span class="charliteral">&#39;u&#39;</span>, <span class="charliteral">&#39;u&#39;</span>, <span class="charliteral">&#39;u&#39;</span>, <span class="charliteral">&#39;u&#39;</span>, <span class="charliteral">&#39;u&#39;</span>, <span class="comment">// 10</span></div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; 0, 0, <span class="charliteral">&#39;&quot;&#39;</span>, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, <span class="comment">// 20</span></div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; Z16, Z16, <span class="comment">// 30~4F</span></div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,<span class="charliteral">&#39;\\&#39;</span>, 0, 0, 0, <span class="comment">// 50</span></div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; Z16, Z16, Z16, Z16, Z16, Z16, Z16, Z16, Z16, Z16 <span class="comment">// 60~FF</span></div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160;<span class="preprocessor">#undef Z16</span></div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; };</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160;</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; <span class="keywordflow">if</span> (TargetEncoding::supportUnicode)</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; <a class="code" href="namespacerapidjson.html#a820f77efccfbb749bd15fe4822d2c740">PutReserve</a>(*os_, 2 + length * 6); <span class="comment">// &quot;\uxxxx...&quot;</span></div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; <a class="code" href="namespacerapidjson.html#a820f77efccfbb749bd15fe4822d2c740">PutReserve</a>(*os_, 2 + length * 12); <span class="comment">// &quot;\uxxxx\uyyyy...&quot;</span></div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160;</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;\&quot;&#39;</span>);</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; <a class="code" href="structrapidjson_1_1_generic_string_stream.html">GenericStringStream&lt;SourceEncoding&gt;</a> is(str);</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; <span class="keywordflow">while</span> (ScanWriteUnescapedString(is, length)) {</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; <span class="keyword">const</span> Ch c = is.Peek();</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; <span class="keywordflow">if</span> (!TargetEncoding::supportUnicode &amp;&amp; static_cast&lt;unsigned&gt;(c) &gt;= 0x80) {</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; <span class="comment">// Unicode escaping</span></div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; <span class="keywordtype">unsigned</span> codepoint;</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(!SourceEncoding::Decode(is, &amp;codepoint)))</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;\\&#39;</span>);</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;u&#39;</span>);</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; <span class="keywordflow">if</span> (codepoint &lt;= 0xD7FF || (codepoint &gt;= 0xE000 &amp;&amp; codepoint &lt;= 0xFFFF)) {</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, hexDigits[(codepoint &gt;&gt; 12) &amp; 15]);</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, hexDigits[(codepoint &gt;&gt; 8) &amp; 15]);</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, hexDigits[(codepoint &gt;&gt; 4) &amp; 15]);</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, hexDigits[(codepoint ) &amp; 15]);</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; }</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; <span class="keywordflow">else</span> {</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(codepoint &gt;= 0x010000 &amp;&amp; codepoint &lt;= 0x10FFFF);</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; <span class="comment">// Surrogate pair</span></div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; <span class="keywordtype">unsigned</span> s = codepoint - 0x010000;</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; <span class="keywordtype">unsigned</span> lead = (s &gt;&gt; 10) + 0xD800;</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; <span class="keywordtype">unsigned</span> trail = (s &amp; 0x3FF) + 0xDC00;</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, hexDigits[(lead &gt;&gt; 12) &amp; 15]);</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, hexDigits[(lead &gt;&gt; 8) &amp; 15]);</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, hexDigits[(lead &gt;&gt; 4) &amp; 15]);</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, hexDigits[(lead ) &amp; 15]);</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;\\&#39;</span>);</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;u&#39;</span>);</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, hexDigits[(trail &gt;&gt; 12) &amp; 15]);</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, hexDigits[(trail &gt;&gt; 8) &amp; 15]);</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, hexDigits[(trail &gt;&gt; 4) &amp; 15]);</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, hexDigits[(trail ) &amp; 15]); </div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; }</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; }</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((<span class="keyword">sizeof</span>(Ch) == 1 || static_cast&lt;unsigned&gt;(c) &lt; 256) &amp;&amp; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(escape[static_cast&lt;unsigned char&gt;(c)])) {</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; is.Take();</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;\\&#39;</span>);</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, static_cast&lt;typename OutputStream::Ch&gt;(escape[static_cast&lt;unsigned char&gt;(c)]));</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; <span class="keywordflow">if</span> (escape[static_cast&lt;unsigned char&gt;(c)] == <span class="charliteral">&#39;u&#39;</span>) {</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;0&#39;</span>);</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;0&#39;</span>);</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, hexDigits[static_cast&lt;unsigned char&gt;(c) &gt;&gt; 4]);</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, hexDigits[static_cast&lt;unsigned char&gt;(c) &amp; 0xF]);</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; }</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; }</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(!(writeFlags &amp; <a class="code" href="namespacerapidjson.html#ad28b1de6aee37e92fc31792dd6dd6b19ac1b5e17278b060e9e866df075c104c10">kWriteValidateEncodingFlag</a> ? </div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; <a class="code" href="structrapidjson_1_1_transcoder.html">Transcoder&lt;SourceEncoding, TargetEncoding&gt;::Validate</a>(is, *os_) :</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; <a class="code" href="structrapidjson_1_1_transcoder.html">Transcoder&lt;SourceEncoding, TargetEncoding&gt;::TranscodeUnsafe</a>(is, *os_))))</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; }</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;\&quot;&#39;</span>);</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; }</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160;</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; <span class="keywordtype">bool</span> ScanWriteUnescapedString(<a class="code" href="structrapidjson_1_1_generic_string_stream.html">GenericStringStream&lt;SourceEncoding&gt;</a>&amp; is, <span class="keywordtype">size_t</span> length) {</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; <span class="keywordflow">return</span> <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga5dc14176a9e71ace282404b0bcda57a1">RAPIDJSON_LIKELY</a>(is.Tell() &lt; length);</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; }</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160;</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; <span class="keywordtype">bool</span> WriteStartObject() { os_-&gt;Put(<span class="charliteral">&#39;{&#39;</span>); <span class="keywordflow">return</span> <span class="keyword">true</span>; }</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; <span class="keywordtype">bool</span> WriteEndObject() { os_-&gt;Put(<span class="charliteral">&#39;}&#39;</span>); <span class="keywordflow">return</span> <span class="keyword">true</span>; }</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160; <span class="keywordtype">bool</span> WriteStartArray() { os_-&gt;Put(<span class="charliteral">&#39;[&#39;</span>); <span class="keywordflow">return</span> <span class="keyword">true</span>; }</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160; <span class="keywordtype">bool</span> WriteEndArray() { os_-&gt;Put(<span class="charliteral">&#39;]&#39;</span>); <span class="keywordflow">return</span> <span class="keyword">true</span>; }</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160;</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; <span class="keywordtype">bool</span> WriteRawValue(<span class="keyword">const</span> Ch* json, <span class="keywordtype">size_t</span> length) {</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; <a class="code" href="namespacerapidjson.html#a820f77efccfbb749bd15fe4822d2c740">PutReserve</a>(*os_, length);</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; <a class="code" href="structrapidjson_1_1_generic_string_stream.html">GenericStringStream&lt;SourceEncoding&gt;</a> is(json);</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; <span class="keywordflow">while</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga5dc14176a9e71ace282404b0bcda57a1">RAPIDJSON_LIKELY</a>(is.Tell() &lt; length)) {</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160; <span class="keyword">const</span> Ch c = is.Peek();</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(c != <span class="charliteral">&#39;\0&#39;</span>);</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(!(writeFlags &amp; <a class="code" href="namespacerapidjson.html#ad28b1de6aee37e92fc31792dd6dd6b19ac1b5e17278b060e9e866df075c104c10">kWriteValidateEncodingFlag</a> ? </div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; <a class="code" href="structrapidjson_1_1_transcoder.html">Transcoder&lt;SourceEncoding, TargetEncoding&gt;::Validate</a>(is, *os_) :</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; <a class="code" href="structrapidjson_1_1_transcoder.html">Transcoder&lt;SourceEncoding, TargetEncoding&gt;::TranscodeUnsafe</a>(is, *os_))))</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; }</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; }</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160;</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; <span class="keywordtype">void</span> Prefix(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">Type</a> type) {</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; (void)type;</div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga5dc14176a9e71ace282404b0bcda57a1">RAPIDJSON_LIKELY</a>(level_stack_.GetSize() != 0)) { <span class="comment">// this value is not at root</span></div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; <a class="code" href="structrapidjson_1_1_writer_1_1_level.html">Level</a>* level = level_stack_.template Top&lt;Level&gt;();</div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; <span class="keywordflow">if</span> (level-&gt;<a class="code" href="structrapidjson_1_1_writer_1_1_level.html#a5d17bdfa9ded5de72f5f91175cc3e36b">valueCount</a> &gt; 0) {</div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160; <span class="keywordflow">if</span> (level-&gt;<a class="code" href="structrapidjson_1_1_writer_1_1_level.html#a59255e3b1d371161f7c894503cfd6bec">inArray</a>) </div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160; os_-&gt;Put(<span class="charliteral">&#39;,&#39;</span>); <span class="comment">// add comma if it is not the first element in array</span></div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160; <span class="keywordflow">else</span> <span class="comment">// in object</span></div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; os_-&gt;Put((level-&gt;<a class="code" href="structrapidjson_1_1_writer_1_1_level.html#a5d17bdfa9ded5de72f5f91175cc3e36b">valueCount</a> % 2 == 0) ? <span class="charliteral">&#39;,&#39;</span> : <span class="charliteral">&#39;:&#39;</span>);</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; }</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; <span class="keywordflow">if</span> (!level-&gt;<a class="code" href="structrapidjson_1_1_writer_1_1_level.html#a59255e3b1d371161f7c894503cfd6bec">inArray</a> &amp;&amp; level-&gt;<a class="code" href="structrapidjson_1_1_writer_1_1_level.html#a5d17bdfa9ded5de72f5f91175cc3e36b">valueCount</a> % 2 == 0)</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(type == <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4ad6379da3dc04b83a591992bfb9fabba7">kStringType</a>); <span class="comment">// if it&#39;s in object, then even number should be a name</span></div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; level-&gt;<a class="code" href="structrapidjson_1_1_writer_1_1_level.html#a5d17bdfa9ded5de72f5f91175cc3e36b">valueCount</a>++;</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; }</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; <span class="keywordflow">else</span> {</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(!hasRoot_); <span class="comment">// Should only has one and only one root.</span></div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; hasRoot_ = <span class="keyword">true</span>;</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; }</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; }</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160;</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; <span class="comment">// Flush the value if it is the top level one.</span></div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; <span class="keywordtype">bool</span> EndValue(<span class="keywordtype">bool</span> ret) {</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(level_stack_.Empty())) <span class="comment">// end of json text</span></div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160; Flush();</div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; <span class="keywordflow">return</span> ret;</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; }</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160;</div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; OutputStream* os_;</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; internal::Stack&lt;StackAllocator&gt; level_stack_;</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; <span class="keywordtype">int</span> maxDecimalPlaces_;</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; <span class="keywordtype">bool</span> hasRoot_;</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160;</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; <span class="comment">// Prohibit copy constructor &amp; assignment operator.</span></div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; <a class="code" href="classrapidjson_1_1_writer.html">Writer</a>(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_writer.html">Writer</a>&amp;);</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; <a class="code" href="classrapidjson_1_1_writer.html">Writer</a>&amp; operator=(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_writer.html">Writer</a>&amp;);</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160;};</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160;</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160;<span class="comment">// Full specialization for StringStream to prevent memory copying</span></div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160;</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160;<span class="keyword">template</span>&lt;&gt;</div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160;<span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_writer.html">Writer&lt;StringBuffer&gt;::WriteInt</a>(<span class="keywordtype">int</span> i) {</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; <span class="keywordtype">char</span> *buffer = os_-&gt;Push(11);</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* end = internal::i32toa(i, buffer);</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; os_-&gt;Pop(static_cast&lt;size_t&gt;(11 - (end - buffer)));</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160;}</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160;</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160;<span class="keyword">template</span>&lt;&gt;</div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160;<span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_writer.html">Writer&lt;StringBuffer&gt;::WriteUint</a>(<span class="keywordtype">unsigned</span> u) {</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; <span class="keywordtype">char</span> *buffer = os_-&gt;Push(10);</div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* end = internal::u32toa(u, buffer);</div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; os_-&gt;Pop(static_cast&lt;size_t&gt;(10 - (end - buffer)));</div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160;}</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160;</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160;<span class="keyword">template</span>&lt;&gt;</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160;<span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_writer.html">Writer&lt;StringBuffer&gt;::WriteInt64</a>(int64_t i64) {</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; <span class="keywordtype">char</span> *buffer = os_-&gt;Push(21);</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* end = internal::i64toa(i64, buffer);</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; os_-&gt;Pop(static_cast&lt;size_t&gt;(21 - (end - buffer)));</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160;}</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160;</div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160;<span class="keyword">template</span>&lt;&gt;</div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160;<span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_writer.html">Writer&lt;StringBuffer&gt;::WriteUint64</a>(uint64_t u) {</div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; <span class="keywordtype">char</span> *buffer = os_-&gt;Push(20);</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* end = internal::u64toa(u, buffer);</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; os_-&gt;Pop(static_cast&lt;size_t&gt;(20 - (end - buffer)));</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160;}</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160;</div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160;<span class="keyword">template</span>&lt;&gt;</div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160;<span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_writer.html">Writer&lt;StringBuffer&gt;::WriteDouble</a>(<span class="keywordtype">double</span> d) {</div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160; <span class="keywordflow">if</span> (internal::Double(d).IsNanOrInf()) {</div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; <span class="comment">// Note: This code path can only be reached if (RAPIDJSON_WRITE_DEFAULT_FLAGS &amp; kWriteNanAndInfFlag).</span></div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; <span class="keywordflow">if</span> (!(<a class="code" href="namespacerapidjson.html#ad28b1de6aee37e92fc31792dd6dd6b19a5b5ca665afdfa828a74ae5755c67a226">kWriteDefaultFlags</a> &amp; <a class="code" href="namespacerapidjson.html#ad28b1de6aee37e92fc31792dd6dd6b19a3adbca1d31ad845ff4e9d742280cce39">kWriteNanAndInfFlag</a>))</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160; <span class="keywordflow">if</span> (internal::Double(d).IsNan()) {</div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160; <a class="code" href="namespacerapidjson.html#a820f77efccfbb749bd15fe4822d2c740">PutReserve</a>(*os_, 3);</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;N&#39;</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;a&#39;</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;N&#39;</span>);</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160; }</div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160; <span class="keywordflow">if</span> (internal::Double(d).Sign()) {</div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160; <a class="code" href="namespacerapidjson.html#a820f77efccfbb749bd15fe4822d2c740">PutReserve</a>(*os_, 9);</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160; <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;-&#39;</span>);</div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; }</div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160; <a class="code" href="namespacerapidjson.html#a820f77efccfbb749bd15fe4822d2c740">PutReserve</a>(*os_, 8);</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160; <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;I&#39;</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;n&#39;</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;f&#39;</span>);</div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;i&#39;</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;n&#39;</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;i&#39;</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;t&#39;</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">&#39;y&#39;</span>);</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; }</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; </div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; <span class="keywordtype">char</span> *buffer = os_-&gt;Push(25);</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; <span class="keywordtype">char</span>* end = internal::dtoa(d, buffer, maxDecimalPlaces_);</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160; os_-&gt;Pop(static_cast&lt;size_t&gt;(25 - (end - buffer)));</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160;}</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160;</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160;<span class="preprocessor">#if defined(RAPIDJSON_SSE2) || defined(RAPIDJSON_SSE42)</span></div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160;<span class="keyword">template</span>&lt;&gt;</div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160;<span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_writer.html">Writer&lt;StringBuffer&gt;::ScanWriteUnescapedString</a>(<a class="code" href="structrapidjson_1_1_generic_string_stream.html">StringStream</a>&amp; is, <span class="keywordtype">size_t</span> length) {</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160; <span class="keywordflow">if</span> (length &lt; 16)</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; <span class="keywordflow">return</span> <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga5dc14176a9e71ace282404b0bcda57a1">RAPIDJSON_LIKELY</a>(is.Tell() &lt; length);</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160;</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga5dc14176a9e71ace282404b0bcda57a1">RAPIDJSON_LIKELY</a>(is.Tell() &lt; length))</div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160;</div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* p = is.<a class="code" href="structrapidjson_1_1_generic_string_stream.html#a9a38a9d5b1ce782cacd4ec1bdf87fc2d">src_</a>;</div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* end = is.<a class="code" href="structrapidjson_1_1_generic_string_stream.html#a2556705b0a0fd6393862efe6db025b32">head_</a> + length;</div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* nextAligned = <span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span><span class="keywordtype">char</span>*<span class="keyword">&gt;</span>((<span class="keyword">reinterpret_cast&lt;</span><span class="keywordtype">size_t</span><span class="keyword">&gt;</span>(p) + 15) &amp; <span class="keyword">static_cast&lt;</span><span class="keywordtype">size_t</span><span class="keyword">&gt;</span>(~15));</div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* endAligned = <span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span><span class="keywordtype">char</span>*<span class="keyword">&gt;</span>(<span class="keyword">reinterpret_cast&lt;</span><span class="keywordtype">size_t</span><span class="keyword">&gt;</span>(end) &amp; static_cast&lt;size_t&gt;(~15));</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160; <span class="keywordflow">if</span> (nextAligned &gt; end)</div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160;</div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; <span class="keywordflow">while</span> (p != nextAligned)</div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; <span class="keywordflow">if</span> (*p &lt; 0x20 || *p == <span class="charliteral">&#39;\&quot;&#39;</span> || *p == <span class="charliteral">&#39;\\&#39;</span>) {</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; is.<a class="code" href="structrapidjson_1_1_generic_string_stream.html#a9a38a9d5b1ce782cacd4ec1bdf87fc2d">src_</a> = p;</div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; <span class="keywordflow">return</span> <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga5dc14176a9e71ace282404b0bcda57a1">RAPIDJSON_LIKELY</a>(is.Tell() &lt; length);</div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; }</div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; os_-&gt;PutUnsafe(*p++);</div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160;</div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; <span class="comment">// The rest of string using SIMD</span></div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> dquote[16] = { <span class="charliteral">&#39;\&quot;&#39;</span>, <span class="charliteral">&#39;\&quot;&#39;</span>, <span class="charliteral">&#39;\&quot;&#39;</span>, <span class="charliteral">&#39;\&quot;&#39;</span>, <span class="charliteral">&#39;\&quot;&#39;</span>, <span class="charliteral">&#39;\&quot;&#39;</span>, <span class="charliteral">&#39;\&quot;&#39;</span>, <span class="charliteral">&#39;\&quot;&#39;</span>, <span class="charliteral">&#39;\&quot;&#39;</span>, <span class="charliteral">&#39;\&quot;&#39;</span>, <span class="charliteral">&#39;\&quot;&#39;</span>, <span class="charliteral">&#39;\&quot;&#39;</span>, <span class="charliteral">&#39;\&quot;&#39;</span>, <span class="charliteral">&#39;\&quot;&#39;</span>, <span class="charliteral">&#39;\&quot;&#39;</span>, <span class="charliteral">&#39;\&quot;&#39;</span> };</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> bslash[16] = { <span class="charliteral">&#39;\\&#39;</span>, <span class="charliteral">&#39;\\&#39;</span>, <span class="charliteral">&#39;\\&#39;</span>, <span class="charliteral">&#39;\\&#39;</span>, <span class="charliteral">&#39;\\&#39;</span>, <span class="charliteral">&#39;\\&#39;</span>, <span class="charliteral">&#39;\\&#39;</span>, <span class="charliteral">&#39;\\&#39;</span>, <span class="charliteral">&#39;\\&#39;</span>, <span class="charliteral">&#39;\\&#39;</span>, <span class="charliteral">&#39;\\&#39;</span>, <span class="charliteral">&#39;\\&#39;</span>, <span class="charliteral">&#39;\\&#39;</span>, <span class="charliteral">&#39;\\&#39;</span>, <span class="charliteral">&#39;\\&#39;</span>, <span class="charliteral">&#39;\\&#39;</span> };</div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> space[16] = { 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F };</div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160; <span class="keyword">const</span> __m128i dq = _mm_loadu_si128(reinterpret_cast&lt;const __m128i *&gt;(&amp;dquote[0]));</div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; <span class="keyword">const</span> __m128i bs = _mm_loadu_si128(reinterpret_cast&lt;const __m128i *&gt;(&amp;bslash[0]));</div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; <span class="keyword">const</span> __m128i sp = _mm_loadu_si128(reinterpret_cast&lt;const __m128i *&gt;(&amp;space[0]));</div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160;</div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; <span class="keywordflow">for</span> (; p != endAligned; p += 16) {</div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; <span class="keyword">const</span> __m128i s = _mm_load_si128(reinterpret_cast&lt;const __m128i *&gt;(p));</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; <span class="keyword">const</span> __m128i t1 = _mm_cmpeq_epi8(s, dq);</div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160; <span class="keyword">const</span> __m128i t2 = _mm_cmpeq_epi8(s, bs);</div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160; <span class="keyword">const</span> __m128i t3 = _mm_cmpeq_epi8(_mm_max_epu8(s, sp), sp); <span class="comment">// s &lt; 0x20 &lt;=&gt; max(s, 0x1F) == 0x1F</span></div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160; <span class="keyword">const</span> __m128i x = _mm_or_si128(_mm_or_si128(t1, t2), t3);</div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> r = <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">short</span><span class="keyword">&gt;</span>(_mm_movemask_epi8(x));</div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(r != 0)) { <span class="comment">// some of characters is escaped</span></div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160; <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> len;</div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160;<span class="preprocessor">#ifdef _MSC_VER // Find the index of first escaped</span></div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> offset;</div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160; _BitScanForward(&amp;offset, r);</div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160; len = offset;</div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160; len = <span class="keyword">static_cast&lt;</span><a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a><span class="keyword">&gt;</span>(__builtin_ffs(r) - 1);</div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160; <span class="keywordtype">char</span>* q = <span class="keyword">reinterpret_cast&lt;</span><span class="keywordtype">char</span>*<span class="keyword">&gt;</span>(os_-&gt;PushUnsafe(len));</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; len; i++)</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160; q[i] = p[i];</div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160;</div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160; p += len;</div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160; }</div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160; _mm_storeu_si128(reinterpret_cast&lt;__m128i *&gt;(os_-&gt;PushUnsafe(16)), s);</div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160; }</div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160;</div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160; is.<a class="code" href="structrapidjson_1_1_generic_string_stream.html#a9a38a9d5b1ce782cacd4ec1bdf87fc2d">src_</a> = p;</div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160; <span class="keywordflow">return</span> <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga5dc14176a9e71ace282404b0bcda57a1">RAPIDJSON_LIKELY</a>(is.Tell() &lt; length);</div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160;}</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160;<span class="preprocessor">#elif defined(RAPIDJSON_NEON)</span></div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160;<span class="keyword">template</span>&lt;&gt;</div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160;<span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_writer.html">Writer&lt;StringBuffer&gt;::ScanWriteUnescapedString</a>(<a class="code" href="structrapidjson_1_1_generic_string_stream.html">StringStream</a>&amp; is, <span class="keywordtype">size_t</span> length) {</div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160; <span class="keywordflow">if</span> (length &lt; 16)</div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160; <span class="keywordflow">return</span> <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga5dc14176a9e71ace282404b0bcda57a1">RAPIDJSON_LIKELY</a>(is.Tell() &lt; length);</div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160;</div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga5dc14176a9e71ace282404b0bcda57a1">RAPIDJSON_LIKELY</a>(is.Tell() &lt; length))</div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160;</div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* p = is.<a class="code" href="structrapidjson_1_1_generic_string_stream.html#a9a38a9d5b1ce782cacd4ec1bdf87fc2d">src_</a>;</div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* end = is.<a class="code" href="structrapidjson_1_1_generic_string_stream.html#a2556705b0a0fd6393862efe6db025b32">head_</a> + length;</div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* nextAligned = <span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span><span class="keywordtype">char</span>*<span class="keyword">&gt;</span>((<span class="keyword">reinterpret_cast&lt;</span><span class="keywordtype">size_t</span><span class="keyword">&gt;</span>(p) + 15) &amp; <span class="keyword">static_cast&lt;</span><span class="keywordtype">size_t</span><span class="keyword">&gt;</span>(~15));</div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* endAligned = <span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span><span class="keywordtype">char</span>*<span class="keyword">&gt;</span>(<span class="keyword">reinterpret_cast&lt;</span><span class="keywordtype">size_t</span><span class="keyword">&gt;</span>(end) &amp; static_cast&lt;size_t&gt;(~15));</div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; <span class="keywordflow">if</span> (nextAligned &gt; end)</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160;</div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; <span class="keywordflow">while</span> (p != nextAligned)</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160; <span class="keywordflow">if</span> (*p &lt; 0x20 || *p == <span class="charliteral">&#39;\&quot;&#39;</span> || *p == <span class="charliteral">&#39;\\&#39;</span>) {</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160; is.<a class="code" href="structrapidjson_1_1_generic_string_stream.html#a9a38a9d5b1ce782cacd4ec1bdf87fc2d">src_</a> = p;</div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; <span class="keywordflow">return</span> <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga5dc14176a9e71ace282404b0bcda57a1">RAPIDJSON_LIKELY</a>(is.Tell() &lt; length);</div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160; }</div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; os_-&gt;PutUnsafe(*p++);</div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160;</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160; <span class="comment">// The rest of string using SIMD</span></div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; <span class="keyword">const</span> uint8x16_t s0 = vmovq_n_u8(<span class="charliteral">&#39;&quot;&#39;</span>);</div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160; <span class="keyword">const</span> uint8x16_t s1 = vmovq_n_u8(<span class="charliteral">&#39;\\&#39;</span>);</div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160; <span class="keyword">const</span> uint8x16_t s2 = vmovq_n_u8(<span class="charliteral">&#39;\b&#39;</span>);</div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160; <span class="keyword">const</span> uint8x16_t s3 = vmovq_n_u8(32);</div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160;</div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160; <span class="keywordflow">for</span> (; p != endAligned; p += 16) {</div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160; <span class="keyword">const</span> uint8x16_t s = vld1q_u8(reinterpret_cast&lt;const uint8_t *&gt;(p));</div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160; uint8x16_t x = vceqq_u8(s, s0);</div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160; x = vorrq_u8(x, vceqq_u8(s, s1));</div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; x = vorrq_u8(x, vceqq_u8(s, s2));</div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160; x = vorrq_u8(x, vcltq_u8(s, s3));</div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160;</div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160; x = vrev64q_u8(x); <span class="comment">// Rev in 64</span></div><div class="line"><a name="l00672"></a><span class="lineno"> 672</span>&#160; uint64_t low = vgetq_lane_u64(reinterpret_cast&lt;uint64x2_t&gt;(x), 0); <span class="comment">// extract</span></div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160; uint64_t high = vgetq_lane_u64(reinterpret_cast&lt;uint64x2_t&gt;(x), 1); <span class="comment">// extract</span></div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160;</div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160; <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> len = 0;</div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160; <span class="keywordtype">bool</span> escaped = <span class="keyword">false</span>;</div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160; <span class="keywordflow">if</span> (low == 0) {</div><div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160; <span class="keywordflow">if</span> (high != 0) {</div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160; <span class="keywordtype">unsigned</span> lz = (unsigned)__builtin_clzll(high);</div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160; len = 8 + (lz &gt;&gt; 3);</div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160; escaped = <span class="keyword">true</span>;</div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160; }</div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160; <span class="keywordtype">unsigned</span> lz = (unsigned)__builtin_clzll(low);</div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; len = lz &gt;&gt; 3;</div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160; escaped = <span class="keyword">true</span>;</div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160; }</div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(escaped)) { <span class="comment">// some of characters is escaped</span></div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160; <span class="keywordtype">char</span>* q = <span class="keyword">reinterpret_cast&lt;</span><span class="keywordtype">char</span>*<span class="keyword">&gt;</span>(os_-&gt;PushUnsafe(len));</div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; len; i++)</div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160; q[i] = p[i];</div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160;</div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160; p += len;</div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160; }</div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160; vst1q_u8(reinterpret_cast&lt;uint8_t *&gt;(os_-&gt;PushUnsafe(16)), s);</div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160; }</div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160;</div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160; is.<a class="code" href="structrapidjson_1_1_generic_string_stream.html#a9a38a9d5b1ce782cacd4ec1bdf87fc2d">src_</a> = p;</div><div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160; <span class="keywordflow">return</span> <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga5dc14176a9e71ace282404b0bcda57a1">RAPIDJSON_LIKELY</a>(is.Tell() &lt; length);</div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span>&#160;}</div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160;<span class="preprocessor">#endif // RAPIDJSON_NEON</span></div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160;</div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160;RAPIDJSON_NAMESPACE_END</div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160;</div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160;<span class="preprocessor">#if defined(_MSC_VER) || defined(__clang__)</span></div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160;RAPIDJSON_DIAG_POP</div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160;</div><div class="line"><a name="l00710"></a><span class="lineno"> 710</span>&#160;<span class="preprocessor">#endif // RAPIDJSON_RAPIDJSON_H_</span></div><div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4a80d9f25b083abce45edbfdd3ba006c8e"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a80d9f25b083abce45edbfdd3ba006c8e">rapidjson::kTrueType</a></div><div class="ttdoc">true </div><div class="ttdef"><b>Definition:</b> rapidjson.h:645</div></div>
<div class="ttc" id="structrapidjson_1_1_writer_1_1_level_html_a59255e3b1d371161f7c894503cfd6bec"><div class="ttname"><a href="structrapidjson_1_1_writer_1_1_level.html#a59255e3b1d371161f7c894503cfd6bec">rapidjson::Writer::Level::inArray</a></div><div class="ttdeci">bool inArray</div><div class="ttdoc">true if in array, otherwise in object </div><div class="ttdef"><b>Definition:</b> writer.h:290</div></div>
<div class="ttc" id="classrapidjson_1_1_writer_html_aa7b6967dc237519e2a6d8b3939fb9634"><div class="ttname"><a href="classrapidjson_1_1_writer.html#aa7b6967dc237519e2a6d8b3939fb9634">rapidjson::Writer::SetMaxDecimalPlaces</a></div><div class="ttdeci">void SetMaxDecimalPlaces(int maxDecimalPlaces)</div><div class="ttdoc">Sets the maximum number of decimal places for double output. </div><div class="ttdef"><b>Definition:</b> writer.h:172</div></div>
<div class="ttc" id="structrapidjson_1_1_generic_string_stream_html"><div class="ttname"><a href="structrapidjson_1_1_generic_string_stream.html">rapidjson::GenericStringStream</a></div><div class="ttdoc">Read-only string stream. </div><div class="ttdef"><b>Definition:</b> fwd.h:47</div></div>
@@ -93,20 +93,20 @@ $(document).ready(function(){initNavTree('writer_8h_source.html','');});
<div class="ttc" id="namespacerapidjson_html_a44eb33eaa523e36d466b1ced64b85c84"><div class="ttname"><a href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">rapidjson::SizeType</a></div><div class="ttdeci">unsigned SizeType</div><div class="ttdoc">Size type (for string lengths, array sizes, etc.) </div><div class="ttdef"><b>Definition:</b> rapidjson.h:384</div></div>
<div class="ttc" id="classrapidjson_1_1_writer_html_a849e2b675a2b868699a14d45c7396f24"><div class="ttname"><a href="classrapidjson_1_1_writer.html#a849e2b675a2b868699a14d45c7396f24">rapidjson::Writer::String</a></div><div class="ttdeci">bool String(const Ch *const &amp;str)</div><div class="ttdoc">Simpler but slower overload. </div><div class="ttdef"><b>Definition:</b> writer.h:258</div></div>
<div class="ttc" id="namespacerapidjson_html_ad28b1de6aee37e92fc31792dd6dd6b19"><div class="ttname"><a href="namespacerapidjson.html#ad28b1de6aee37e92fc31792dd6dd6b19">rapidjson::WriteFlag</a></div><div class="ttdeci">WriteFlag</div><div class="ttdoc">Combination of writeFlags </div><div class="ttdef"><b>Definition:</b> writer.h:65</div></div>
-<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4a9f2e7047832dce1029551b5de0f05607"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a9f2e7047832dce1029551b5de0f05607">rapidjson::kFalseType</a></div><div class="ttdoc">false </div><div class="ttdef"><b>Definition:</b> rapidjson.h:633</div></div>
+<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4a9f2e7047832dce1029551b5de0f05607"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a9f2e7047832dce1029551b5de0f05607">rapidjson::kFalseType</a></div><div class="ttdoc">false </div><div class="ttdef"><b>Definition:</b> rapidjson.h:644</div></div>
<div class="ttc" id="structrapidjson_1_1_generic_string_stream_html_a2556705b0a0fd6393862efe6db025b32"><div class="ttname"><a href="structrapidjson_1_1_generic_string_stream.html#a2556705b0a0fd6393862efe6db025b32">rapidjson::GenericStringStream::head_</a></div><div class="ttdeci">const Ch * head_</div><div class="ttdoc">Original head of the string. </div><div class="ttdef"><b>Definition:</b> stream.h:169</div></div>
<div class="ttc" id="classrapidjson_1_1_writer_html_a8acb89b2bbb1e5f384e6076b65044dbe"><div class="ttname"><a href="classrapidjson_1_1_writer.html#a8acb89b2bbb1e5f384e6076b65044dbe">rapidjson::Writer::RawValue</a></div><div class="ttdeci">bool RawValue(const Ch *json, size_t length, Type type)</div><div class="ttdoc">Write a raw JSON value. </div><div class="ttdef"><b>Definition:</b> writer.h:271</div></div>
<div class="ttc" id="structrapidjson_1_1_generic_string_stream_html_a9a38a9d5b1ce782cacd4ec1bdf87fc2d"><div class="ttname"><a href="structrapidjson_1_1_generic_string_stream.html#a9a38a9d5b1ce782cacd4ec1bdf87fc2d">rapidjson::GenericStringStream::src_</a></div><div class="ttdeci">const Ch * src_</div><div class="ttdoc">Current read position. </div><div class="ttdef"><b>Definition:</b> stream.h:168</div></div>
<div class="ttc" id="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g_html_ga5dc14176a9e71ace282404b0bcda57a1"><div class="ttname"><a href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga5dc14176a9e71ace282404b0bcda57a1">RAPIDJSON_LIKELY</a></div><div class="ttdeci">#define RAPIDJSON_LIKELY(x)</div><div class="ttdoc">Compiler branching hint for expression with high probability to be true. </div><div class="ttdef"><b>Definition:</b> rapidjson.h:463</div></div>
<div class="ttc" id="structrapidjson_1_1_writer_1_1_level_html"><div class="ttname"><a href="structrapidjson_1_1_writer_1_1_level.html">rapidjson::Writer::Level</a></div><div class="ttdoc">Information for each nested level </div><div class="ttdef"><b>Definition:</b> writer.h:287</div></div>
<div class="ttc" id="structrapidjson_1_1_writer_1_1_level_html_a5d17bdfa9ded5de72f5f91175cc3e36b"><div class="ttname"><a href="structrapidjson_1_1_writer_1_1_level.html#a5d17bdfa9ded5de72f5f91175cc3e36b">rapidjson::Writer::Level::valueCount</a></div><div class="ttdeci">size_t valueCount</div><div class="ttdoc">number of values in this level </div><div class="ttdef"><b>Definition:</b> writer.h:289</div></div>
-<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">rapidjson::Type</a></div><div class="ttdeci">Type</div><div class="ttdoc">Type of JSON value </div><div class="ttdef"><b>Definition:</b> rapidjson.h:631</div></div>
-<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4acf030b422a32c3647c7c5973bd4dd0a9"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4acf030b422a32c3647c7c5973bd4dd0a9">rapidjson::kObjectType</a></div><div class="ttdoc">object </div><div class="ttdef"><b>Definition:</b> rapidjson.h:635</div></div>
+<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">rapidjson::Type</a></div><div class="ttdeci">Type</div><div class="ttdoc">Type of JSON value </div><div class="ttdef"><b>Definition:</b> rapidjson.h:642</div></div>
+<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4acf030b422a32c3647c7c5973bd4dd0a9"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4acf030b422a32c3647c7c5973bd4dd0a9">rapidjson::kObjectType</a></div><div class="ttdoc">object </div><div class="ttdef"><b>Definition:</b> rapidjson.h:646</div></div>
<div class="ttc" id="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g_html_ga6a2b1695c13e77ae425e3cbac980ccb5"><div class="ttname"><a href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a></div><div class="ttdeci">#define RAPIDJSON_UNLIKELY(x)</div><div class="ttdoc">Compiler branching hint for expression with low probability to be true. </div><div class="ttdef"><b>Definition:</b> rapidjson.h:476</div></div>
-<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4a058c622e1e7d59419ae58b895cbce468"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a058c622e1e7d59419ae58b895cbce468">rapidjson::kArrayType</a></div><div class="ttdoc">array </div><div class="ttdef"><b>Definition:</b> rapidjson.h:636</div></div>
+<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4a058c622e1e7d59419ae58b895cbce468"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a058c622e1e7d59419ae58b895cbce468">rapidjson::kArrayType</a></div><div class="ttdoc">array </div><div class="ttdef"><b>Definition:</b> rapidjson.h:647</div></div>
<div class="ttc" id="classrapidjson_1_1_writer_html"><div class="ttname"><a href="classrapidjson_1_1_writer.html">rapidjson::Writer</a></div><div class="ttdoc">JSON writer </div><div class="ttdef"><b>Definition:</b> fwd.h:95</div></div>
-<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4a952871e4326b527154fc8aac1ac1f6ff"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a952871e4326b527154fc8aac1ac1f6ff">rapidjson::kNullType</a></div><div class="ttdoc">null </div><div class="ttdef"><b>Definition:</b> rapidjson.h:632</div></div>
-<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4ad6379da3dc04b83a591992bfb9fabba7"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4ad6379da3dc04b83a591992bfb9fabba7">rapidjson::kStringType</a></div><div class="ttdoc">string </div><div class="ttdef"><b>Definition:</b> rapidjson.h:637</div></div>
+<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4a952871e4326b527154fc8aac1ac1f6ff"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a952871e4326b527154fc8aac1ac1f6ff">rapidjson::kNullType</a></div><div class="ttdoc">null </div><div class="ttdef"><b>Definition:</b> rapidjson.h:643</div></div>
+<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4ad6379da3dc04b83a591992bfb9fabba7"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4ad6379da3dc04b83a591992bfb9fabba7">rapidjson::kStringType</a></div><div class="ttdoc">string </div><div class="ttdef"><b>Definition:</b> rapidjson.h:648</div></div>
<div class="ttc" id="namespacerapidjson_html_ad28b1de6aee37e92fc31792dd6dd6b19a5b5ca665afdfa828a74ae5755c67a226"><div class="ttname"><a href="namespacerapidjson.html#ad28b1de6aee37e92fc31792dd6dd6b19a5b5ca665afdfa828a74ae5755c67a226">rapidjson::kWriteDefaultFlags</a></div><div class="ttdoc">Default write flags. Can be customized by defining RAPIDJSON_WRITE_DEFAULT_FLAGS </div><div class="ttdef"><b>Definition:</b> writer.h:69</div></div>
<div class="ttc" id="classrapidjson_1_1_writer_html_a72cefd18d176bc12a53adb3185c51ca7"><div class="ttname"><a href="classrapidjson_1_1_writer.html#a72cefd18d176bc12a53adb3185c51ca7">rapidjson::Writer::Flush</a></div><div class="ttdeci">void Flush()</div><div class="ttdoc">Flush the output stream. </div><div class="ttdef"><b>Definition:</b> writer.h:281</div></div>
<div class="ttc" id="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g_html_ga1975595e2f1dc20a2d4859f340ac88c6"><div class="ttname"><a href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga1975595e2f1dc20a2d4859f340ac88c6">RAPIDJSON_WRITE_DEFAULT_FLAGS</a></div><div class="ttdeci">#define RAPIDJSON_WRITE_DEFAULT_FLAGS</div><div class="ttdoc">User-defined kWriteDefaultFlags definition. </div><div class="ttdef"><b>Definition:</b> writer.h:61</div></div>
@@ -115,7 +115,7 @@ $(document).ready(function(){initNavTree('writer_8h_source.html','');});
<div class="ttc" id="classrapidjson_1_1_writer_html_a98a421c806b456688874511f64add1f2"><div class="ttname"><a href="classrapidjson_1_1_writer.html#a98a421c806b456688874511f64add1f2">rapidjson::Writer::Writer</a></div><div class="ttdeci">Writer(OutputStream &amp;os, StackAllocator *stackAllocator=0, size_t levelDepth=kDefaultLevelDepth)</div><div class="ttdoc">Constructor </div><div class="ttdef"><b>Definition:</b> writer.h:101</div></div>
<div class="ttc" id="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g_html_gabeba18d612187bad2ac62aed9276d47c"><div class="ttname"><a href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a></div><div class="ttdeci">#define RAPIDJSON_ASSERT(x)</div><div class="ttdoc">Assertion. </div><div class="ttdef"><b>Definition:</b> rapidjson.h:406</div></div>
<div class="ttc" id="classrapidjson_1_1_writer_html_ac4026d3f14b80d6d7fc10004b1972722"><div class="ttname"><a href="classrapidjson_1_1_writer.html#ac4026d3f14b80d6d7fc10004b1972722">rapidjson::Writer::Reset</a></div><div class="ttdeci">void Reset(OutputStream &amp;os)</div><div class="ttdoc">Reset the writer with a new stream. </div><div class="ttdef"><b>Definition:</b> writer.h:133</div></div>
-<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a">rapidjson::kNumberType</a></div><div class="ttdoc">number </div><div class="ttdef"><b>Definition:</b> rapidjson.h:638</div></div>
+<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a">rapidjson::kNumberType</a></div><div class="ttdoc">number </div><div class="ttdef"><b>Definition:</b> rapidjson.h:649</div></div>
<div class="ttc" id="namespacerapidjson_html_ad28b1de6aee37e92fc31792dd6dd6b19a3adbca1d31ad845ff4e9d742280cce39"><div class="ttname"><a href="namespacerapidjson.html#ad28b1de6aee37e92fc31792dd6dd6b19a3adbca1d31ad845ff4e9d742280cce39">rapidjson::kWriteNanAndInfFlag</a></div><div class="ttdoc">Allow writing of Infinity, -Infinity and NaN. </div><div class="ttdef"><b>Definition:</b> writer.h:68</div></div>
</div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->