diff options
Diffstat (limited to 'zh-cn')
-rw-r--r-- | zh-cn/allocators_8h_source.html | 4 | ||||
-rw-r--r-- | zh-cn/biginteger_8h_source.html | 2 | ||||
-rw-r--r-- | zh-cn/document_8h_source.html | 323 | ||||
-rw-r--r-- | zh-cn/fwd_8h_source.html | 14 | ||||
-rw-r--r-- | zh-cn/globals.html | 3 | ||||
-rw-r--r-- | zh-cn/globals_defs.html | 3 | ||||
-rw-r--r-- | zh-cn/group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html | 25 | ||||
-rw-r--r-- | zh-cn/group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.js | 1 | ||||
-rw-r--r-- | zh-cn/ieee754_8h_source.html | 2 | ||||
-rw-r--r-- | zh-cn/meta_8h_source.html | 4 | ||||
-rw-r--r-- | zh-cn/navtreedata.js | 2 | ||||
-rw-r--r-- | zh-cn/navtreeindex3.js | 34 | ||||
-rw-r--r-- | zh-cn/navtreeindex4.js | 3 | ||||
-rw-r--r-- | zh-cn/pointer_8h_source.html | 16 | ||||
-rw-r--r-- | zh-cn/prettywriter_8h_source.html | 16 | ||||
-rw-r--r-- | zh-cn/rapidjson_8h.html | 6 | ||||
-rw-r--r-- | zh-cn/rapidjson_8h.js | 2 | ||||
-rw-r--r-- | zh-cn/rapidjson_8h_source.html | 16 | ||||
-rw-r--r-- | zh-cn/reader_8h_source.html | 2 | ||||
-rw-r--r-- | zh-cn/regex_8h_source.html | 4 | ||||
-rw-r--r-- | zh-cn/schema_8h_source.html | 42 | ||||
-rw-r--r-- | zh-cn/search/all_f.js | 1 | ||||
-rw-r--r-- | zh-cn/stack_8h_source.html | 4 | ||||
-rw-r--r-- | zh-cn/writer_8h_source.html | 16 |
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> <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> <span class="comment">// </span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <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> <span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">// Licensed under the MIT License (the "License"); you may not use this file except</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <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> <span class="comment">//</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">// http://opensource.org/licenses/MIT</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">//</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <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> <span class="comment">// under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR </span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <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> <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> </div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor">#ifndef RAPIDJSON_BIGINTEGER_H_</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#define RAPIDJSON_BIGINTEGER_H_</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> </div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#include "../rapidjson.h"</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> </div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#if defined(_MSC_VER) && !__INTEL_COMPILER && defined(_M_AMD64)</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include <intrin.h></span> <span class="comment">// for _umul128</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#pragma intrinsic(_umul128)</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> </div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> RAPIDJSON_NAMESPACE_BEGIN</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="keyword">namespace </span>internal {</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> </div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="keyword">class </span>BigInteger {</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  <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> </div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  BigInteger(<span class="keyword">const</span> BigInteger& rhs) : count_(rhs.count_) {</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  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>  }</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> </div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="keyword">explicit</span> BigInteger(uint64_t u) : count_(1) {</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  digits_[0] = u;</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  }</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span> </div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  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>  <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 > 0);</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  digits_[0] = 0;</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <span class="keywordtype">size_t</span> i = 0;</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <span class="keyword">const</span> <span class="keywordtype">size_t</span> kMaxDigitPerIteration = 19; <span class="comment">// 2^64 = 18446744073709551616 > 10^19</span></div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keywordflow">while</span> (length >= kMaxDigitPerIteration) {</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  AppendDecimal64(decimals + i, decimals + i + kMaxDigitPerIteration);</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  length -= kMaxDigitPerIteration;</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  i += kMaxDigitPerIteration;</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  }</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span> </div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <span class="keywordflow">if</span> (length > 0)</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  AppendDecimal64(decimals + i, decimals + i + length);</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  }</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  </div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  BigInteger& operator=(<span class="keyword">const</span> BigInteger &rhs)</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  {</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <span class="keywordflow">if</span> (<span class="keyword">this</span> != &rhs) {</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  count_ = rhs.count_;</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  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>  }</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  }</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  </div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  BigInteger& operator=(uint64_t u) {</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  digits_[0] = u; </div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  count_ = 1;</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  }</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span> </div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  BigInteger& operator+=(uint64_t u) {</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  Type backup = digits_[0];</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  digits_[0] += u;</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i < count_ - 1; i++) {</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <span class="keywordflow">if</span> (digits_[i] >= backup)</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <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>  backup = digits_[i + 1];</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  digits_[i + 1] += 1;</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  }</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span> </div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  <span class="comment">// Last carry</span></div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <span class="keywordflow">if</span> (digits_[count_ - 1] < backup)</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  PushBack(1);</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span> </div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  }</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span> </div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  BigInteger& operator*=(uint64_t u) {</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <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>  <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>  <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> </div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  uint64_t k = 0;</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i < count_; i++) {</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  uint64_t hi;</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  digits_[i] = MulAdd64(digits_[i], u, k, &hi);</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  k = hi;</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  }</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  </div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  <span class="keywordflow">if</span> (k > 0)</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  PushBack(k);</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span> </div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  }</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span> </div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  BigInteger& operator*=(uint32_t u) {</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  <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>  <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>  <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> </div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  uint64_t k = 0;</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i < count_; i++) {</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <span class="keyword">const</span> uint64_t c = digits_[i] >> 32;</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  <span class="keyword">const</span> uint64_t d = digits_[i] & 0xFFFFFFFF;</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <span class="keyword">const</span> uint64_t uc = u * c;</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <span class="keyword">const</span> uint64_t ud = u * d;</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  <span class="keyword">const</span> uint64_t p0 = ud + k;</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  <span class="keyword">const</span> uint64_t p1 = uc + (p0 >> 32);</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  digits_[i] = (p0 & 0xFFFFFFFF) | (p1 << 32);</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  k = p1 >> 32;</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  }</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  </div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  <span class="keywordflow">if</span> (k > 0)</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  PushBack(k);</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span> </div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  }</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span> </div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  BigInteger& operator<<=(<span class="keywordtype">size_t</span> shift) {</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  <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> </div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  <span class="keywordtype">size_t</span> offset = shift / kTypeBit;</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  <span class="keywordtype">size_t</span> interShift = shift % kTypeBit;</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</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>(count_ + offset <= kCapacity);</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span> </div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  <span class="keywordflow">if</span> (interShift == 0) {</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  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>  count_ += offset;</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  }</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  <span class="keywordflow">else</span> {</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  digits_[count_] = 0;</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = count_; i > 0; i--)</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  digits_[i + offset] = (digits_[i] << interShift) | (digits_[i - 1] >> (kTypeBit - interShift));</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  digits_[offset] = digits_[0] << interShift;</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  count_ += offset;</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  <span class="keywordflow">if</span> (digits_[count_])</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  count_++;</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  }</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span> </div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  std::memset(digits_, 0, offset * <span class="keyword">sizeof</span>(Type));</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span> </div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  }</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span> </div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  <span class="keywordtype">bool</span> operator==(<span class="keyword">const</span> BigInteger& rhs)<span class="keyword"> const </span>{</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  <span class="keywordflow">return</span> count_ == rhs.count_ && 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>  }</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span> </div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  <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>  <span class="keywordflow">return</span> count_ == 1 && digits_[0] == rhs;</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  }</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span> </div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  BigInteger& MultiplyPow5(<span class="keywordtype">unsigned</span> exp) {</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  <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>  5,</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  5 * 5,</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  5 * 5 * 5,</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  5 * 5 * 5 * 5,</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  5 * 5 * 5 * 5 * 5,</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  5 * 5 * 5 * 5 * 5 * 5,</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  5 * 5 * 5 * 5 * 5 * 5 * 5,</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  5 * 5 * 5 * 5 * 5 * 5 * 5 * 5,</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5,</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5,</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5,</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  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>  };</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  <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>  <span class="keywordflow">for</span> (; exp >= 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>  <span class="keywordflow">for</span> (; exp >= 13; exp -= 13) *<span class="keyword">this</span> *= static_cast<uint32_t>(1220703125u); <span class="comment">// 5^13</span></div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  <span class="keywordflow">if</span> (exp > 0) *<span class="keyword">this</span> *= kPow5[exp - 1];</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  }</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span> </div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  <span class="comment">// Compute absolute difference of this and rhs.</span></div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  <span class="comment">// Assume this != rhs</span></div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  <span class="keywordtype">bool</span> Difference(<span class="keyword">const</span> BigInteger& rhs, BigInteger* out)<span class="keyword"> const </span>{</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  <span class="keywordtype">int</span> cmp = Compare(rhs);</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</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>(cmp != 0);</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  <span class="keyword">const</span> BigInteger *a, *b; <span class="comment">// Makes a > b</span></div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  <span class="keywordtype">bool</span> ret;</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  <span class="keywordflow">if</span> (cmp < 0) { a = &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>  <span class="keywordflow">else</span> { a = <span class="keyword">this</span>; b = &rhs; ret = <span class="keyword">false</span>; }</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span> </div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  Type borrow = 0;</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i < a->count_; i++) {</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  Type d = a->digits_[i] - borrow;</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  <span class="keywordflow">if</span> (i < b->count_)</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  d -= b->digits_[i];</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  borrow = (d > a->digits_[i]) ? 1 : 0;</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  out->digits_[i] = d;</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  <span class="keywordflow">if</span> (d != 0)</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  out->count_ = i + 1;</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  }</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span> </div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  <span class="keywordflow">return</span> ret;</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  }</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span> </div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  <span class="keywordtype">int</span> Compare(<span class="keyword">const</span> BigInteger& rhs)<span class="keyword"> const </span>{</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  <span class="keywordflow">if</span> (count_ != rhs.count_)</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  <span class="keywordflow">return</span> count_ < rhs.count_ ? -1 : 1;</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span> </div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = count_; i-- > 0;)</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  <span class="keywordflow">if</span> (digits_[i] != rhs.digits_[i])</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  <span class="keywordflow">return</span> digits_[i] < rhs.digits_[i] ? -1 : 1;</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span> </div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  }</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span> </div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  <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>  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 < count_); <span class="keywordflow">return</span> digits_[index]; }</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  <span class="keywordtype">bool</span> IsZero()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> count_ == 1 && digits_[0] == 0; }</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span> </div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span> <span class="keyword">private</span>:</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  <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>  uint64_t u = ParseUint64(begin, end);</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  <span class="keywordflow">if</span> (IsZero())</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  *<span class="keyword">this</span> = u;</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  <span class="keywordflow">else</span> {</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  <span class="keywordtype">unsigned</span> exp = <span class="keyword">static_cast<</span><span class="keywordtype">unsigned</span><span class="keyword">></span>(end - begin);</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  (MultiplyPow5(exp) <<= exp) += u; <span class="comment">// *this = *this * 10^exp + u</span></div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  }</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  }</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span> </div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  <span class="keywordtype">void</span> PushBack(Type digit) {</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</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>(count_ < kCapacity);</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  digits_[count_++] = digit;</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  }</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span> </div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  <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>  uint64_t r = 0;</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  <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>  <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 >= <span class="charliteral">'0'</span> && *p <= <span class="charliteral">'9'</span>);</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  r = r * 10u + <span class="keyword">static_cast<</span><span class="keywordtype">unsigned</span><span class="keyword">></span>(*p - <span class="charliteral">'0'</span>);</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  }</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  <span class="keywordflow">return</span> r;</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  }</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span> </div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  <span class="comment">// Assume a * b + k < 2^128</span></div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>  <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> <span class="preprocessor">#if defined(_MSC_VER) && defined(_M_AMD64)</span></div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  uint64_t low = _umul128(a, b, outHigh) + k;</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  <span class="keywordflow">if</span> (low < k)</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>  (*outHigh)++;</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>  <span class="keywordflow">return</span> low;</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span> <span class="preprocessor">#elif (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) && defined(__x86_64__)</span></div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  __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>  uint128 p = <span class="keyword">static_cast<</span>uint128<span class="keyword">></span>(a) * static_cast<uint128>(b);</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  p += k;</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  *outHigh = <span class="keyword">static_cast<</span>uint64_t<span class="keyword">></span>(p >> 64);</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  <span class="keywordflow">return</span> <span class="keyword">static_cast<</span>uint64_t<span class="keyword">></span>(p);</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span> <span class="preprocessor">#else</span></div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  <span class="keyword">const</span> uint64_t a0 = a & 0xFFFFFFFF, a1 = a >> 32, b0 = b & 0xFFFFFFFF, b1 = b >> 32;</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  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>  x1 += (x0 >> 32); <span class="comment">// can't give carry</span></div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  x1 += x2;</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  <span class="keywordflow">if</span> (x1 < x2)</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  x3 += (<span class="keyword">static_cast<</span>uint64_t<span class="keyword">></span>(1) << 32);</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  uint64_t lo = (x1 << 32) + (x0 & 0xFFFFFFFF);</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>  uint64_t hi = x3 + (x1 >> 32);</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span> </div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>  lo += k;</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  <span class="keywordflow">if</span> (lo < k)</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  hi++;</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  *outHigh = hi;</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  <span class="keywordflow">return</span> lo;</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  }</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span> </div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">size_t</span> kBitCount = 3328; <span class="comment">// 64bit * 54 > 10^1000</span></div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  <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>  <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> </div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>  Type digits_[kCapacity];</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  <span class="keywordtype">size_t</span> count_;</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span> };</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span> </div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span> } <span class="comment">// namespace internal</span></div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span> RAPIDJSON_NAMESPACE_END</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span> </div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span> <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> <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> <span class="comment">// </span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <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> <span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">// Licensed under the MIT License (the "License"); you may not use this file except</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <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> <span class="comment">//</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">// http://opensource.org/licenses/MIT</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">//</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <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> <span class="comment">// under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR </span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <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> <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> </div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor">#ifndef RAPIDJSON_DOCUMENT_H_</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#define RAPIDJSON_DOCUMENT_H_</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"></span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">/*! \file document.h */</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> </div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include "<a class="code" href="reader_8h.html">reader.h</a>"</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include "internal/meta.h"</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include "internal/strfunc.h"</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include "memorystream.h"</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include "encodedstream.h"</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include <new></span> <span class="comment">// placement new</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include <limits></span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> </div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> RAPIDJSON_DIAG_PUSH</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#ifdef __clang__</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> RAPIDJSON_DIAG_OFF(padded)</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> 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> RAPIDJSON_DIAG_OFF(c++98-compat)</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#elif defined(_MSC_VER)</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> 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> RAPIDJSON_DIAG_OFF(4244) <span class="comment">// conversion from kXxxFlags to 'uint16_t', possible loss of data</span></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> </div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="preprocessor">#ifdef __GNUC__</span></div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span> RAPIDJSON_DIAG_OFF(effc++)</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="preprocessor">#if __GNUC__ >= 6</span></div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span> 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> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="preprocessor">#endif // __GNUC__</span></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span> </div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="preprocessor">#ifndef RAPIDJSON_NOMEMBERITERATORCLASS</span></div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="preprocessor">#include <iterator></span> <span class="comment">// std::random_access_iterator_tag</span></div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span> </div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="preprocessor">#if RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="preprocessor">#include <utility></span> <span class="comment">// std::move</span></div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span> </div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span> RAPIDJSON_NAMESPACE_BEGIN</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span> </div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="comment">// Forward declaration.</span></div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="keyword">template</span> <<span class="keyword">typename</span> Encoding, <span class="keyword">typename</span> Allocator></div><div class="line"><a name="l00057"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html"> 57</a></span> <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> </div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="keyword">template</span> <<span class="keyword">typename</span> Encoding, <span class="keyword">typename</span> Allocator, <span class="keyword">typename</span> StackAllocator></div><div class="line"><a name="l00060"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_document.html"> 60</a></span> <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> <span class="comment"></span></div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <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> <span class="comment"></span><span class="comment">/*!</span></div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <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> <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> <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> <span class="comment">*/</span></div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="keyword">template</span> <<span class="keyword">typename</span> Encoding, <span class="keyword">typename</span> Allocator> </div><div class="line"><a name="l00069"></a><span class="lineno"><a class="line" href="structrapidjson_1_1_generic_member.html"> 69</a></span> <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>  <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue<Encoding, Allocator></a> <a class="code" href="structrapidjson_1_1_generic_member.html#ae820eaa74b415a9073f3f3855f6c6607">name</a>; <span class="comment">//!< 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> <span class="comment"></span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue<Encoding, Allocator></a> <a class="code" href="structrapidjson_1_1_generic_member.html#a8ffff2076e62d988a070a136da6ffca6">value</a>; <span class="comment">//!< value of member.</span></div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="comment"></span>};</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="comment"></span></div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="comment"></span><span class="comment">// GenericMemberIterator</span></div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span> </div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="preprocessor">#ifndef RAPIDJSON_NOMEMBERITERATORCLASS</span></div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="comment"></span></div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <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> <span class="comment"></span><span class="comment">/*!</span></div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="comment"> \tparam Const Is this a constant iterator?</span></div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <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> <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> <span class="comment"></span></div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <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> <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> <span class="comment"></span></div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <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> <span class="comment"> conversions from iterator values to \c NULL,</span></div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="comment"> e.g. from GenericValue::FindMember.</span></div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="comment"></span></div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <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> <span class="comment"> pointer-based implementation, if your platform doesn't provide</span></div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span> <span class="comment"> the C++ <iterator> header.</span></div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <span class="comment"></span></div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <span class="comment"> \see GenericMember, GenericValue::MemberIterator, GenericValue::ConstMemberIterator</span></div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <span class="comment"> */</span></div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="keyword">template</span> <<span class="keywordtype">bool</span> Const, <span class="keyword">typename</span> Encoding, <span class="keyword">typename</span> Allocator></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> <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> </div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a><Encoding,Allocator>;</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  <span class="keyword">template</span> <<span class="keywordtype">bool</span>, <span class="keyword">typename</span>, <span class="keyword">typename</span>> <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> </div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <span class="keyword">typedef</span> <a class="code" href="structrapidjson_1_1_generic_member.html">GenericMember<Encoding,Allocator></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>  <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">internal::MaybeAddConst<Const,PlainType>::Type</a> ValueType;</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span> </div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <span class="keyword">public</span>:<span class="comment"></span></div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <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> <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> <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> <span class="comment"></span> <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">GenericMemberIterator<true,Encoding,Allocator></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> <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> <span class="comment"></span> <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">GenericMemberIterator<false,Encoding,Allocator></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> <span class="comment"></span></div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <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> <span class="comment"> //@{</span></div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span> <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>  <span class="keyword">typedef</span> ValueType * pointer;</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  <span class="keyword">typedef</span> ValueType & reference;</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  <span class="keyword">typedef</span> std::ptrdiff_t difference_type;</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  <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> <span class="comment"> //@}</span></div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span> <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> <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> <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> <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> <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> <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> <span class="comment"></span></div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <span class="comment"> //! Default constructor (singular value)</span></div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <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> <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> <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>  <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> <span class="comment"></span></div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span> <span class="comment"> //! Iterator conversions to more const</span></div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span> <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> <span class="comment"></span></div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span> <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> <span class="comment"> that is "less const". Especially, creating a non-constant iterator</span></div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span> <span class="comment"> from a constant iterator are disabled:</span></div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span> <span class="comment"> \li const -> non-const (not ok)</span></div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span> <span class="comment"> \li const -> const (ok)</span></div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span> <span class="comment"> \li non-const -> const (ok)</span></div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span> <span class="comment"> \li non-const -> non-const (ok)</span></div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span> <span class="comment"></span></div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span> <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> <span class="comment"> constructor effectively defines a regular copy-constructor.</span></div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span> <span class="comment"> Otherwise, the copy constructor is implicitly defined.</span></div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span> <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>  <a class="code" href="classrapidjson_1_1_generic_member_iterator.html#aa30ffef74b3f4978b403024d81b484e4">GenericMemberIterator</a>(<span class="keyword">const</span> NonConstIterator & it) : ptr_(it.ptr_) {}</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  Iterator& operator=(<span class="keyword">const</span> NonConstIterator & 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> <span class="comment"></span></div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span> <span class="comment"> //! @name stepping</span></div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span> <span class="comment"></span><span class="comment"> //@{</span></div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span> <span class="comment"></span> Iterator& 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>  Iterator& 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>  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>  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> <span class="comment"> //@}</span></div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span> <span class="comment"> //! @name increment/decrement</span></div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span> <span class="comment"></span><span class="comment"> //@{</span></div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span> <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>  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> </div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  Iterator& 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>  Iterator& 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> <span class="comment"> //@}</span></div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span> <span class="comment"> //! @name relations</span></div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span> <span class="comment"></span><span class="comment"> //@{</span></div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span> <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>  <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>  <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="l00178"></a><span class="lineno"> 178</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="l00179"></a><span class="lineno"> 179</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="l00180"></a><span class="lineno"> 180</span>  <span class="keywordtype">bool</span> operator> (ConstIterator that)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> ptr_ > that.ptr_; }<span class="comment"></span></div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span> <span class="comment"> //@}</span></div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span> <span class="comment"> //! @name dereference</span></div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span> <span class="comment"></span><span class="comment"> //@{</span></div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span> <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>  Pointer operator->()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> ptr_; }</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  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> <span class="comment"> //@}</span></div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span> <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> <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> </div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span> <span class="keyword">private</span>:<span class="comment"></span></div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span> <span class="comment"> //! Internal constructor from plain pointer</span></div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span> <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> </div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  Pointer ptr_; <span class="comment">//!< raw pointer</span></div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span> <span class="comment"></span>};</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span> </div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span> <span class="preprocessor">#else // RAPIDJSON_NOMEMBERITERATORCLASS</span></div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span> </div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span> <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> </div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span> <span class="keyword">template</span> <<span class="keywordtype">bool</span> Const, <span class="keyword">typename</span> Encoding, <span class="keyword">typename</span> Allocator></div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span> <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> <span class="comment"></span></div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span> <span class="comment">//! non-const GenericMemberIterator</span></div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span> <span class="comment"></span><span class="keyword">template</span> <<span class="keyword">typename</span> Encoding, <span class="keyword">typename</span> Allocator></div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span> <span class="keyword">struct </span><a class="code" href="classrapidjson_1_1_generic_member_iterator.html">GenericMemberIterator</a><false,Encoding,Allocator> {<span class="comment"></span></div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span> <span class="comment"> //! use plain pointer as iterator type</span></div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span> <span class="comment"></span> <span class="keyword">typedef</span> <a class="code" href="structrapidjson_1_1_generic_member.html">GenericMember<Encoding,Allocator></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> };<span class="comment"></span></div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span> <span class="comment">//! const GenericMemberIterator</span></div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span> <span class="comment"></span><span class="keyword">template</span> <<span class="keyword">typename</span> Encoding, <span class="keyword">typename</span> Allocator></div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span> <span class="keyword">struct </span><a class="code" href="classrapidjson_1_1_generic_member_iterator.html">GenericMemberIterator</a><true,Encoding,Allocator> {<span class="comment"></span></div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span> <span class="comment"> //! use plain const pointer as iterator type</span></div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span> <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<Encoding,Allocator></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> };</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span> </div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span> <span class="preprocessor">#endif // RAPIDJSON_NOMEMBERITERATORCLASS</span></div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span> <span class="comment"></span></div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span> <span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span> <span class="comment"></span><span class="comment">// GenericStringRef</span></div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span> <span class="comment"></span></div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span> <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> <span class="comment"></span><span class="comment">/*!</span></div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span> <span class="comment"> \tparam CharType character type of the string</span></div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span> <span class="comment"></span></div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span> <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> <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> <span class="comment"> character arrays.</span></div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span> <span class="comment"></span></div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span> <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> <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> <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> <span class="comment"> of the associated GenericValue.</span></div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span> <span class="comment"></span></div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span> <span class="comment"> \b Example</span></div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span> <span class="comment"> \code</span></div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span> <span class="comment"> Value v("foo"); // ok, no need to copy & calculate length</span></div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span> <span class="comment"> const char foo[] = "foo";</span></div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span> <span class="comment"> v.SetString(foo); // ok</span></div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span> <span class="comment"></span></div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span> <span class="comment"> const char* bar = foo;</span></div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span> <span class="comment"> // Value x(bar); // not ok, can't rely on bar's lifetime</span></div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span> <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> <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> <span class="comment"> \endcode</span></div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span> <span class="comment"></span></div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span> <span class="comment"> \see StringRef, GenericValue::SetString</span></div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span> <span class="comment">*/</span></div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span> <span class="keyword">template</span><<span class="keyword">typename</span> CharType></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> <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>  <span class="keyword">typedef</span> CharType <a class="code" href="structrapidjson_1_1_generic_string_ref.html#aa2a8eccae3d7eb14c30bc21afb7d6fba">Ch</a>; <span class="comment">//!< character type of the string</span></div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span> <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> <span class="comment"></span><span class="preprocessor">#ifndef __clang__ // -Wdocumentation</span></div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span> <span class="comment"> /*!</span></div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span> <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> <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> <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> <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> <span class="comment"> characters.</span></div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span> <span class="comment"></span></div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span> <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> <span class="comment"></span></div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span> <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> <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> <span class="comment"></span></div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span> <span class="comment"> \post \ref s == str</span></div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span> <span class="comment"></span></div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span> <span class="comment"> \note Constant complexity.</span></div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span> <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> <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> <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> <span class="comment"> \c snprintf are excluded from consideration.</span></div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span> <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> <span class="comment"> GenericValue instead.</span></div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span> <span class="comment"> */</span></div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  <span class="keyword">template</span><SizeType N></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>  <a class="code" href="structrapidjson_1_1_generic_string_ref.html#acd4d5ebac2b610ce647356aa52998002">GenericStringRef</a>(<span class="keyword">const</span> CharType (&str)[N]) RAPIDJSON_NOEXCEPT</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>  : s(str), length(N-1) {}</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span> <span class="comment"></span></div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span> <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> <span class="comment"></span><span class="preprocessor">#ifndef __clang__ // -Wdocumentation</span></div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span> <span class="comment"> /*!</span></div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span> <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> <span class="comment"> a constant string pointer.</span></div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span> <span class="comment"></span></div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span> <span class="comment"> \see StringRef(const CharType*)</span></div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span> <span class="comment"></span></div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span> <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> <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> <span class="comment"></span></div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span> <span class="comment"> \post \ref s == str</span></div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span> <span class="comment"></span></div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span> <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> <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> <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> <span class="comment"> \c snprintf are excluded from consideration.</span></div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span> <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> <span class="comment"> GenericValue instead.</span></div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span> <span class="comment"> */</span></div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span> <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>  <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>  : s(str), length(NotNullStrLen(str)) {}</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span> <span class="comment"></span></div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span> <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> <span class="comment"></span><span class="preprocessor">#ifndef __clang__ // -Wdocumentation</span></div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span> <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> <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> <span class="comment"></span></div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span> <span class="comment"> \post \ref s == str && \ref length == len</span></div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span> <span class="comment"> \note Constant complexity.</span></div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span> <span class="comment"> */</span></div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span> <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>  <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>  : 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> </div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  <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>& 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> <span class="comment"></span></div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span> <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> <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> </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>  <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">//!< 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> <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">//!< length of the string (excluding the trailing NULL terminator)</span></div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span> <span class="comment"></span></div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span> <span class="keyword">private</span>:</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  <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>  <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>  <span class="keywordflow">return</span> internal::StrLen(str);</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>  }</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span> <span class="comment"></span></div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span> <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> <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> <span class="comment"></span></div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span> <span class="comment"> //! Disallow construction from non-const array</span></div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span> <span class="comment"></span> <span class="keyword">template</span><SizeType N></div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>  <a class="code" href="structrapidjson_1_1_generic_string_ref.html">GenericStringRef</a>(CharType (&str)[N]) <span class="comment">/* = delete */</span>;<span class="comment"></span></div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span> <span class="comment"> //! Copy assignment operator not permitted - immutable type</span></div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span> <span class="comment"></span> <a class="code" href="structrapidjson_1_1_generic_string_ref.html">GenericStringRef</a>& operator=(<span class="keyword">const</span> <a class="code" href="structrapidjson_1_1_generic_string_ref.html">GenericStringRef</a>& rhs) <span class="comment">/* = delete */</span>;</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span> };</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span> </div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span> <span class="keyword">template</span><<span class="keyword">typename</span> CharType></div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span> <span class="keyword">const</span> CharType <a class="code" href="structrapidjson_1_1_generic_string_ref.html">GenericStringRef<CharType>::emptyString</a>[] = { CharType() };</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span> <span class="comment"></span></div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span> <span class="comment">//! Mark a character pointer as constant string</span></div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span> <span class="comment"></span><span class="comment">/*! Mark a plain character pointer as a "string literal". This function</span></div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span> <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> <span class="comment"> value in a JSON GenericValue object, if the string's lifetime is known</span></div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span> <span class="comment"> to be valid long enough.</span></div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span> <span class="comment"> \tparam CharType Character type of the string</span></div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span> <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> <span class="comment"> \return GenericStringRef string reference object</span></div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span> <span class="comment"> \relatesalso GenericStringRef</span></div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span> <span class="comment"></span></div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span> <span class="comment"> \see GenericValue::GenericValue(StringRefType), GenericValue::operator=(StringRefType), GenericValue::SetString(StringRefType), GenericValue::PushBack(StringRefType, Allocator&), GenericValue::AddMember</span></div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span> <span class="comment">*/</span></div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span> <span class="keyword">template</span><<span class="keyword">typename</span> CharType></div><div class="line"><a name="l00361"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#aa6b9fd9f6aa49405a574c362ba9af6b5"> 361</a></span> <span class="keyword">inline</span> <a class="code" href="structrapidjson_1_1_generic_string_ref.html">GenericStringRef<CharType></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>  <span class="keywordflow">return</span> <a class="code" href="structrapidjson_1_1_generic_string_ref.html">GenericStringRef<CharType></a>(str);</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span> }</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span> <span class="comment"></span></div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span> <span class="comment">//! Mark a character pointer as constant string</span></div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span> <span class="comment"></span><span class="comment">/*! Mark a plain character pointer as a "string literal". This function</span></div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span> <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> <span class="comment"> value in a JSON GenericValue object, if the string's lifetime is known</span></div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span> <span class="comment"> to be valid long enough.</span></div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span> <span class="comment"></span></div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span> <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> <span class="comment"> supports string containing null characters.</span></div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span> <span class="comment"></span></div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span> <span class="comment"> \tparam CharType character type of the string</span></div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span> <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> <span class="comment"> \param length The length of source string.</span></div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span> <span class="comment"> \return GenericStringRef string reference object</span></div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span> <span class="comment"> \relatesalso GenericStringRef</span></div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span> <span class="comment">*/</span></div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span> <span class="keyword">template</span><<span class="keyword">typename</span> CharType></div><div class="line"><a name="l00381"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#a578c51ab574a50a9c760b9da7c7562f2"> 381</a></span> <span class="keyword">inline</span> <a class="code" href="structrapidjson_1_1_generic_string_ref.html">GenericStringRef<CharType></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>  <span class="keywordflow">return</span> <a class="code" href="structrapidjson_1_1_generic_string_ref.html">GenericStringRef<CharType></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> }</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span> </div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span> <span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span> <span class="comment">//! Mark a string object as constant string</span></div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span> <span class="comment"></span><span class="comment">/*! Mark a string object (e.g. \c std::string) as a "string literal".</span></div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span> <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> <span class="comment"> value in a JSON GenericValue object, if the string's lifetime is known</span></div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span> <span class="comment"> to be valid long enough.</span></div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span> <span class="comment"></span></div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span> <span class="comment"> \tparam CharType character type of the string</span></div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span> <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> <span class="comment"> \return GenericStringRef string reference object</span></div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span> <span class="comment"> \relatesalso GenericStringRef</span></div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span> <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> <span class="comment">*/</span></div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span> <span class="keyword">template</span><<span class="keyword">typename</span> CharType></div><div class="line"><a name="l00399"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#af94951529a5d51e8c4e6e770bb707c1f"> 399</a></span> <span class="keyword">inline</span> <a class="code" href="structrapidjson_1_1_generic_string_ref.html">GenericStringRef<CharType></a> <a class="code" href="namespacerapidjson.html#af94951529a5d51e8c4e6e770bb707c1f">StringRef</a>(<span class="keyword">const</span> std::basic_string<CharType>& str) {</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>  <span class="keywordflow">return</span> <a class="code" href="structrapidjson_1_1_generic_string_ref.html">GenericStringRef<CharType></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> }</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span> <span class="comment"></span></div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span> <span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span> <span class="comment"></span><span class="comment">// GenericValue type traits</span></div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span> <span class="keyword">namespace </span>internal {</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span> </div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span> <span class="keyword">template</span> <<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>></div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span> <span class="keyword">struct </span>IsGenericValueImpl : FalseType {};</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span> </div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span> <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> <span class="keyword">template</span> <<span class="keyword">typename</span> T> <span class="keyword">struct </span>IsGenericValueImpl<T, typename Void<typename T::EncodingType><a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">::Type</a>, typename Void<typename T::AllocatorType><a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">::Type</a>></div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>  : IsBaseOf<GenericValue<typename T::EncodingType, typename T::AllocatorType>, T><a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">::Type</a> {};</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span> </div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span> <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> <span class="keyword">template</span> <<span class="keyword">typename</span> T> <span class="keyword">struct </span>IsGenericValue : IsGenericValueImpl<T><a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">::Type</a> {};</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span> </div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span> } <span class="comment">// namespace internal</span></div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span> <span class="comment"></span></div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span> <span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span> <span class="comment"></span><span class="comment">// TypeHelper</span></div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span> </div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span> <span class="keyword">namespace </span>internal {</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span> </div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span> <span class="keyword">template</span> <<span class="keyword">typename</span> ValueType, <span class="keyword">typename</span> T></div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span> <span class="keyword">struct </span>TypeHelper {};</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span> </div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span> <span class="keyword">template</span><<span class="keyword">typename</span> ValueType> </div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span> <span class="keyword">struct </span>TypeHelper<ValueType, bool> {</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>  <span class="keyword">static</span> <span class="keywordtype">bool</span> Is(<span class="keyword">const</span> ValueType& v) { <span class="keywordflow">return</span> v.IsBool(); }</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>  <span class="keyword">static</span> <span class="keywordtype">bool</span> Get(<span class="keyword">const</span> ValueType& v) { <span class="keywordflow">return</span> v.GetBool(); }</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>  <span class="keyword">static</span> ValueType& Set(ValueType& 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>  <span class="keyword">static</span> ValueType& Set(ValueType& v, <span class="keywordtype">bool</span> data, <span class="keyword">typename</span> ValueType::AllocatorType&) { <span class="keywordflow">return</span> v.SetBool(data); }</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span> };</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span> </div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span> <span class="keyword">template</span><<span class="keyword">typename</span> ValueType> </div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span> <span class="keyword">struct </span>TypeHelper<ValueType, int> {</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>  <span class="keyword">static</span> <span class="keywordtype">bool</span> Is(<span class="keyword">const</span> ValueType& v) { <span class="keywordflow">return</span> v.IsInt(); }</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>  <span class="keyword">static</span> <span class="keywordtype">int</span> Get(<span class="keyword">const</span> ValueType& v) { <span class="keywordflow">return</span> v.GetInt(); }</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>  <span class="keyword">static</span> ValueType& Set(ValueType& 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>  <span class="keyword">static</span> ValueType& Set(ValueType& v, <span class="keywordtype">int</span> data, <span class="keyword">typename</span> ValueType::AllocatorType&) { <span class="keywordflow">return</span> v.SetInt(data); }</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span> };</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span> </div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span> <span class="keyword">template</span><<span class="keyword">typename</span> ValueType> </div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span> <span class="keyword">struct </span>TypeHelper<ValueType, unsigned> {</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>  <span class="keyword">static</span> <span class="keywordtype">bool</span> Is(<span class="keyword">const</span> ValueType& v) { <span class="keywordflow">return</span> v.IsUint(); }</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>  <span class="keyword">static</span> <span class="keywordtype">unsigned</span> Get(<span class="keyword">const</span> ValueType& v) { <span class="keywordflow">return</span> v.GetUint(); }</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>  <span class="keyword">static</span> ValueType& Set(ValueType& 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>  <span class="keyword">static</span> ValueType& Set(ValueType& v, <span class="keywordtype">unsigned</span> data, <span class="keyword">typename</span> ValueType::AllocatorType&) { <span class="keywordflow">return</span> v.SetUint(data); }</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span> };</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span> </div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span> <span class="preprocessor">#ifdef _MSC_VER</span></div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span> <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> <span class="keyword">template</span><<span class="keyword">typename</span> ValueType></div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span> <span class="keyword">struct </span>TypeHelper<ValueType, long> {</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>  <span class="keyword">static</span> <span class="keywordtype">bool</span> Is(<span class="keyword">const</span> ValueType& v) { <span class="keywordflow">return</span> v.IsInt(); }</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>  <span class="keyword">static</span> <span class="keywordtype">long</span> Get(<span class="keyword">const</span> ValueType& v) { <span class="keywordflow">return</span> v.GetInt(); }</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>  <span class="keyword">static</span> ValueType& Set(ValueType& 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>  <span class="keyword">static</span> ValueType& Set(ValueType& v, <span class="keywordtype">long</span> data, <span class="keyword">typename</span> ValueType::AllocatorType&) { <span class="keywordflow">return</span> v.SetInt(data); }</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span> };</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span> </div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span> <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> <span class="keyword">template</span><<span class="keyword">typename</span> ValueType></div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span> <span class="keyword">struct </span>TypeHelper<ValueType, unsigned long> {</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>  <span class="keyword">static</span> <span class="keywordtype">bool</span> Is(<span class="keyword">const</span> ValueType& v) { <span class="keywordflow">return</span> v.IsUint(); }</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>  <span class="keyword">static</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> Get(<span class="keyword">const</span> ValueType& v) { <span class="keywordflow">return</span> v.GetUint(); }</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>  <span class="keyword">static</span> ValueType& Set(ValueType& 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>  <span class="keyword">static</span> ValueType& Set(ValueType& v, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> data, <span class="keyword">typename</span> ValueType::AllocatorType&) { <span class="keywordflow">return</span> v.SetUint(data); }</div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span> };</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span> </div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span> <span class="keyword">template</span><<span class="keyword">typename</span> ValueType> </div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span> <span class="keyword">struct </span>TypeHelper<ValueType, int64_t> {</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>  <span class="keyword">static</span> <span class="keywordtype">bool</span> Is(<span class="keyword">const</span> ValueType& v) { <span class="keywordflow">return</span> v.IsInt64(); }</div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>  <span class="keyword">static</span> int64_t Get(<span class="keyword">const</span> ValueType& v) { <span class="keywordflow">return</span> v.GetInt64(); }</div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>  <span class="keyword">static</span> ValueType& Set(ValueType& 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>  <span class="keyword">static</span> ValueType& Set(ValueType& v, int64_t data, <span class="keyword">typename</span> ValueType::AllocatorType&) { <span class="keywordflow">return</span> v.SetInt64(data); }</div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span> };</div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span> </div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span> <span class="keyword">template</span><<span class="keyword">typename</span> ValueType> </div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span> <span class="keyword">struct </span>TypeHelper<ValueType, uint64_t> {</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>  <span class="keyword">static</span> <span class="keywordtype">bool</span> Is(<span class="keyword">const</span> ValueType& v) { <span class="keywordflow">return</span> v.IsUint64(); }</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>  <span class="keyword">static</span> uint64_t Get(<span class="keyword">const</span> ValueType& v) { <span class="keywordflow">return</span> v.GetUint64(); }</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>  <span class="keyword">static</span> ValueType& Set(ValueType& 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>  <span class="keyword">static</span> ValueType& Set(ValueType& v, uint64_t data, <span class="keyword">typename</span> ValueType::AllocatorType&) { <span class="keywordflow">return</span> v.SetUint64(data); }</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span> };</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span> </div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span> <span class="keyword">template</span><<span class="keyword">typename</span> ValueType> </div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span> <span class="keyword">struct </span>TypeHelper<ValueType, double> {</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>  <span class="keyword">static</span> <span class="keywordtype">bool</span> Is(<span class="keyword">const</span> ValueType& v) { <span class="keywordflow">return</span> v.IsDouble(); }</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>  <span class="keyword">static</span> <span class="keywordtype">double</span> Get(<span class="keyword">const</span> ValueType& v) { <span class="keywordflow">return</span> v.GetDouble(); }</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>  <span class="keyword">static</span> ValueType& Set(ValueType& 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>  <span class="keyword">static</span> ValueType& Set(ValueType& v, <span class="keywordtype">double</span> data, <span class="keyword">typename</span> ValueType::AllocatorType&) { <span class="keywordflow">return</span> v.SetDouble(data); }</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span> };</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span> </div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span> <span class="keyword">template</span><<span class="keyword">typename</span> ValueType> </div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span> <span class="keyword">struct </span>TypeHelper<ValueType, float> {</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>  <span class="keyword">static</span> <span class="keywordtype">bool</span> Is(<span class="keyword">const</span> ValueType& v) { <span class="keywordflow">return</span> v.IsFloat(); }</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>  <span class="keyword">static</span> <span class="keywordtype">float</span> Get(<span class="keyword">const</span> ValueType& v) { <span class="keywordflow">return</span> v.GetFloat(); }</div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>  <span class="keyword">static</span> ValueType& Set(ValueType& 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>  <span class="keyword">static</span> ValueType& Set(ValueType& v, <span class="keywordtype">float</span> data, <span class="keyword">typename</span> ValueType::AllocatorType&) { <span class="keywordflow">return</span> v.SetFloat(data); }</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span> };</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span> </div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span> <span class="keyword">template</span><<span class="keyword">typename</span> ValueType> </div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span> <span class="keyword">struct </span>TypeHelper<ValueType, const typename ValueType::Ch*> {</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>  <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>  <span class="keyword">static</span> <span class="keywordtype">bool</span> Is(<span class="keyword">const</span> ValueType& v) { <span class="keywordflow">return</span> v.IsString(); }</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>  <span class="keyword">static</span> StringType Get(<span class="keyword">const</span> ValueType& v) { <span class="keywordflow">return</span> v.GetString(); }</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>  <span class="keyword">static</span> ValueType& Set(ValueType& 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>  <span class="keyword">static</span> ValueType& Set(ValueType& v, <span class="keyword">const</span> StringType data, <span class="keyword">typename</span> ValueType::AllocatorType& a) { <span class="keywordflow">return</span> v.SetString(data, a); }</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span> };</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span> </div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span> <span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span> <span class="keyword">template</span><<span class="keyword">typename</span> ValueType> </div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span> <span class="keyword">struct </span>TypeHelper<ValueType, std::basic_string<typename ValueType::Ch> > {</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>  <span class="keyword">typedef</span> std::basic_string<typename ValueType::Ch> StringType;</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>  <span class="keyword">static</span> <span class="keywordtype">bool</span> Is(<span class="keyword">const</span> ValueType& v) { <span class="keywordflow">return</span> v.IsString(); }</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>  <span class="keyword">static</span> StringType Get(<span class="keyword">const</span> ValueType& v) { <span class="keywordflow">return</span> StringType(v.GetString(), v.GetStringLength()); }</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>  <span class="keyword">static</span> ValueType& Set(ValueType& v, <span class="keyword">const</span> StringType& data, <span class="keyword">typename</span> ValueType::AllocatorType& a) { <span class="keywordflow">return</span> v.SetString(data, a); }</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span> };</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span> </div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span> <span class="keyword">template</span><<span class="keyword">typename</span> ValueType> </div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span> <span class="keyword">struct </span>TypeHelper<ValueType, typename ValueType::Array> {</div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>  <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>  <span class="keyword">static</span> <span class="keywordtype">bool</span> Is(<span class="keyword">const</span> ValueType& v) { <span class="keywordflow">return</span> v.IsArray(); }</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>  <span class="keyword">static</span> ArrayType Get(ValueType& v) { <span class="keywordflow">return</span> v.GetArray(); }</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>  <span class="keyword">static</span> ValueType& Set(ValueType& v, ArrayType data) { <span class="keywordflow">return</span> v = data; }</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>  <span class="keyword">static</span> ValueType& Set(ValueType& v, ArrayType data, <span class="keyword">typename</span> ValueType::AllocatorType&) { <span class="keywordflow">return</span> v = data; }</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span> };</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span> </div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span> <span class="keyword">template</span><<span class="keyword">typename</span> ValueType> </div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span> <span class="keyword">struct </span>TypeHelper<ValueType, typename ValueType::ConstArray> {</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>  <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>  <span class="keyword">static</span> <span class="keywordtype">bool</span> Is(<span class="keyword">const</span> ValueType& v) { <span class="keywordflow">return</span> v.IsArray(); }</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>  <span class="keyword">static</span> ArrayType Get(<span class="keyword">const</span> ValueType& v) { <span class="keywordflow">return</span> v.GetArray(); }</div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span> };</div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span> </div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span> <span class="keyword">template</span><<span class="keyword">typename</span> ValueType> </div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span> <span class="keyword">struct </span>TypeHelper<ValueType, typename ValueType::Object> {</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>  <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>  <span class="keyword">static</span> <span class="keywordtype">bool</span> Is(<span class="keyword">const</span> ValueType& v) { <span class="keywordflow">return</span> v.IsObject(); }</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>  <span class="keyword">static</span> ObjectType Get(ValueType& v) { <span class="keywordflow">return</span> v.GetObject(); }</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>  <span class="keyword">static</span> ValueType& Set(ValueType& v, ObjectType data) { <span class="keywordflow">return</span> v = data; }</div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>  <span class="keyword">static</span> ValueType& Set(ValueType& v, ObjectType data, <span class="keyword">typename</span> ValueType::AllocatorType&) { <span class="keywordflow">return</span> v = data; }</div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span> };</div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span> </div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span> <span class="keyword">template</span><<span class="keyword">typename</span> ValueType> </div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span> <span class="keyword">struct </span>TypeHelper<ValueType, typename ValueType::ConstObject> {</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>  <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>  <span class="keyword">static</span> <span class="keywordtype">bool</span> Is(<span class="keyword">const</span> ValueType& v) { <span class="keywordflow">return</span> v.IsObject(); }</div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>  <span class="keyword">static</span> ObjectType Get(<span class="keyword">const</span> ValueType& v) { <span class="keywordflow">return</span> v.GetObject(); }</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span> };</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span> </div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span> } <span class="comment">// namespace internal</span></div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span> </div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span> <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> <span class="keyword">template</span> <<span class="keywordtype">bool</span>, <span class="keyword">typename</span>> <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> <span class="keyword">template</span> <<span class="keywordtype">bool</span>, <span class="keyword">typename</span>> <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> <span class="comment"></span></div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span> <span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span> <span class="comment"></span><span class="comment">// GenericValue</span></div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span> <span class="comment"></span></div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span> <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> <span class="comment"></span><span class="comment">/*!</span></div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span> <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> <span class="comment"> these types.</span></div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span> <span class="comment"></span></div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span> <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> <span class="comment"></span></div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span> <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> <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> <span class="comment">*/</span></div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span> <span class="keyword">template</span> <<span class="keyword">typename</span> Encoding, <span class="keyword">typename</span> Allocator = MemoryPoolAllocator<> > </div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span> <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> <span class="keyword">public</span>:<span class="comment"></span></div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span> <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> <span class="comment"></span> <span class="keyword">typedef</span> <a class="code" href="structrapidjson_1_1_generic_member.html">GenericMember<Encoding, Allocator></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>  <span class="keyword">typedef</span> Encoding <a class="code" href="classrapidjson_1_1_generic_value.html#a05906384808645a2e798d29a9b2d441d">EncodingType</a>; <span class="comment">//!< 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> <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">//!< 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> <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">//!< 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> <span class="comment"></span> <span class="keyword">typedef</span> <a class="code" href="structrapidjson_1_1_generic_string_ref.html">GenericStringRef<Ch></a> <a class="code" href="classrapidjson_1_1_generic_value.html#a559eb9cea54364a35518b02f6d74f379">StringRefType</a>; <span class="comment">//!< 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> <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<false,Encoding,Allocator>::Iterator</a> <a class="code" href="classrapidjson_1_1_generic_value.html#aca5596987335016c1a7c2a9467baf80b">MemberIterator</a>; <span class="comment">//!< 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> <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<true,Encoding,Allocator>::Iterator</a> <a class="code" href="classrapidjson_1_1_generic_value.html#a6cd2b09795c48d2892bebc0ae350d51f">ConstMemberIterator</a>; <span class="comment">//!< 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> <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">//!< 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> <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">//!< 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> <span class="comment"></span> <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue<Encoding, Allocator></a> <a class="code" href="classrapidjson_1_1_generic_value.html#ad2935191ab28c2c2e472b739a9d58202">ValueType</a>; <span class="comment">//!< Value type of itself.</span></div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span> <span class="comment"></span> <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_array.html">GenericArray<false, ValueType></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>  <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_array.html">GenericArray<true, ValueType></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>  <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject<false, ValueType></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>  <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject<true, ValueType></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> <span class="comment"></span></div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span> <span class="comment"> //!@name Constructors and destructor.</span></div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span> <span class="comment"></span><span class="comment"> //@{</span></div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span> <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> <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> </div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span> <span class="preprocessor">#if RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span> <span class="comment"> //! Move constructor in C++11</span></div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span> <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>&& rhs) RAPIDJSON_NOEXCEPT : data_(rhs.data_) {</div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>  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>  }</div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span> </div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span> <span class="keyword">private</span>:<span class="comment"></span></div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span> <span class="comment"> //! Copy constructor is not permitted.</span></div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span> <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>& rhs);</div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span> </div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span> <span class="preprocessor">#if RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span> <span class="comment"> //! Moving from a GenericDocument is not permitted.</span></div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span> <span class="comment"></span> <span class="keyword">template</span> <<span class="keyword">typename</span> StackAllocator></div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>  <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(<a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument<Encoding,Allocator,StackAllocator></a>&& rhs);</div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span> <span class="comment"></span></div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span> <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> <span class="comment"></span> <span class="keyword">template</span> <<span class="keyword">typename</span> StackAllocator></div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>  <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& operator=(<a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument<Encoding,Allocator,StackAllocator></a>&& rhs);</div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span> </div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span> <span class="comment"></span></div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span> <span class="comment"> //! Constructor with JSON value type.</span></div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span> <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> <span class="comment"> \param type Type of the value.</span></div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span> <span class="comment"> \note Default content for number is zero.</span></div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span> <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>  <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>  <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>  kNullFlag, kFalseFlag, kTrueFlag, kObjectFlag, kArrayFlag, kShortStringFlag,</div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>  kNumberAnyFlag</div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>  };</div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>  RAPIDJSON_NOEXCEPT_ASSERT(type >= <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a952871e4326b527154fc8aac1ac1f6ff">kNullType</a> && type <= <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a">kNumberType</a>);</div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>  data_.f.flags = defaultFlags[type];</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span> </div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span>  <span class="comment">// Use ShortString to store empty string.</span></div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span>  <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>  data_.ss.SetLength(0);</div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>  }</div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span> <span class="comment"></span></div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span> <span class="comment"> //! Explicit copy constructor (with allocator)</span></div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span> <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> <span class="comment"> \tparam SourceAllocator allocator of \c rhs</span></div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span> <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> <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> <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> <span class="comment"> \see CopyFrom()</span></div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span> <span class="comment"> */</span></div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> SourceAllocator></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>  <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<Encoding,SourceAllocator></a>& rhs, Allocator& 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>  <span class="keywordflow">switch</span> (rhs.GetType()) {</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>  <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>  <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>  Member* lm = <span class="keyword">reinterpret_cast<</span>Member*<span class="keyword">></span>(allocator.Malloc(count * <span class="keyword">sizeof</span>(Member)));</div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>  <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="structrapidjson_1_1_generic_member.html">GenericValue<Encoding,SourceAllocator>::Member</a>* rm = rhs.GetMembersPointer();</div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>  <span class="keywordflow">for</span> (<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> i = 0; i < count; i++) {</div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>  <span class="keyword">new</span> (&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>  <span class="keyword">new</span> (&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>  }</div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>  data_.f.flags = kObjectFlag;</div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>  data_.o.size = data_.o.capacity = count;</div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span>  SetMembersPointer(lm);</div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>  }</div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>  <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>  <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>  <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>* le = <span class="keyword">reinterpret_cast<</span><a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>*<span class="keyword">></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>  <span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue<Encoding,SourceAllocator></a>* re = rhs.GetElementsPointer();</div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>  <span class="keywordflow">for</span> (<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> i = 0; i < count; i++)</div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>  <span class="keyword">new</span> (&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>  data_.f.flags = kArrayFlag;</div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span>  data_.a.size = data_.a.capacity = count;</div><div class="line"><a name="l00672"></a><span class="lineno"> 672</span>  SetElementsPointer(le);</div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span>  }</div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>  <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>  <span class="keywordflow">if</span> (rhs.data_.f.flags == kConstStringFlag && !copyConstStrings) {</div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span>  data_.f.flags = rhs.data_.f.flags;</div><div class="line"><a name="l00678"></a><span class="lineno"> 678</span>  data_ = *<span class="keyword">reinterpret_cast<</span><span class="keyword">const </span>Data*<span class="keyword">></span>(&rhs.data_);</div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span>  }</div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>  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>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>  <span class="keywordflow">default</span>:</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>  data_.f.flags = rhs.data_.f.flags;</div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>  data_ = *<span class="keyword">reinterpret_cast<</span><span class="keyword">const </span>Data*<span class="keyword">></span>(&rhs.data_);</div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>  }</div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span>  }</div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span> <span class="comment"></span></div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span> <span class="comment"> //! Constructor for boolean value.</span></div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span> <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> <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> <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> <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> <span class="comment"> */</span></div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span> <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>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span>  <span class="keyword">explicit</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(T b, RAPIDJSON_ENABLEIF((internal::IsSame<bool, T>))) RAPIDJSON_NOEXCEPT <span class="comment">// See #472</span></div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span> <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>  <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> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>  : data_() {</div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span>  <span class="comment">// safe-guard against failing SFINAE</span></div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span>  <a class="code" href="rapidjson_8h.html#af95188da1d8eb6d4b148fe9ce71cd7c4">RAPIDJSON_STATIC_ASSERT</a>((<a class="code" href="namespacerapidjson.html#aa65fc9fb381b2cbc54f98673eadd6505">internal::IsSame<bool,T>::Value</a>));</div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span>  data_.f.flags = b ? kTrueFlag : kFalseFlag;</div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span>  }</div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span> <span class="comment"></span></div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span> <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> <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>  data_.n.i64 = i;</div><div class="line"><a name="l00711"></a><span class="lineno"> 711</span>  data_.f.flags = (i >= 0) ? (kNumberIntFlag | kUintFlag | kUint64Flag) : kNumberIntFlag;</div><div class="line"><a name="l00712"></a><span class="lineno"> 712</span>  }</div><div class="line"><a name="l00713"></a><span class="lineno"> 713</span> <span class="comment"></span></div><div class="line"><a name="l00714"></a><span class="lineno"> 714</span> <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> <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>  data_.n.u64 = u; </div><div class="line"><a name="l00717"></a><span class="lineno"> 717</span>  data_.f.flags = (u & 0x80000000) ? kNumberUintFlag : (kNumberUintFlag | kIntFlag | kInt64Flag);</div><div class="line"><a name="l00718"></a><span class="lineno"> 718</span>  }</div><div class="line"><a name="l00719"></a><span class="lineno"> 719</span> <span class="comment"></span></div><div class="line"><a name="l00720"></a><span class="lineno"> 720</span> <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> <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>  data_.n.i64 = i64;</div><div class="line"><a name="l00723"></a><span class="lineno"> 723</span>  data_.f.flags = kNumberInt64Flag;</div><div class="line"><a name="l00724"></a><span class="lineno"> 724</span>  <span class="keywordflow">if</span> (i64 >= 0) {</div><div class="line"><a name="l00725"></a><span class="lineno"> 725</span>  data_.f.flags |= kNumberUint64Flag;</div><div class="line"><a name="l00726"></a><span class="lineno"> 726</span>  <span class="keywordflow">if</span> (!(static_cast<uint64_t>(i64) & <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>  data_.f.flags |= kUintFlag;</div><div class="line"><a name="l00728"></a><span class="lineno"> 728</span>  <span class="keywordflow">if</span> (!(static_cast<uint64_t>(i64) & <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>  data_.f.flags |= kIntFlag;</div><div class="line"><a name="l00730"></a><span class="lineno"> 730</span>  }</div><div class="line"><a name="l00731"></a><span class="lineno"> 731</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (i64 >= static_cast<int64_t>(<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>  data_.f.flags |= kIntFlag;</div><div class="line"><a name="l00733"></a><span class="lineno"> 733</span>  }</div><div class="line"><a name="l00734"></a><span class="lineno"> 734</span> <span class="comment"></span></div><div class="line"><a name="l00735"></a><span class="lineno"> 735</span> <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> <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>  data_.n.u64 = u64;</div><div class="line"><a name="l00738"></a><span class="lineno"> 738</span>  data_.f.flags = kNumberUint64Flag;</div><div class="line"><a name="l00739"></a><span class="lineno"> 739</span>  <span class="keywordflow">if</span> (!(u64 & <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>  data_.f.flags |= kInt64Flag;</div><div class="line"><a name="l00741"></a><span class="lineno"> 741</span>  <span class="keywordflow">if</span> (!(u64 & <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>  data_.f.flags |= kUintFlag;</div><div class="line"><a name="l00743"></a><span class="lineno"> 743</span>  <span class="keywordflow">if</span> (!(u64 & <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>  data_.f.flags |= kIntFlag;</div><div class="line"><a name="l00745"></a><span class="lineno"> 745</span>  }</div><div class="line"><a name="l00746"></a><span class="lineno"> 746</span> <span class="comment"></span></div><div class="line"><a name="l00747"></a><span class="lineno"> 747</span> <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> <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> <span class="comment"></span></div><div class="line"><a name="l00750"></a><span class="lineno"> 750</span> <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> <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<</span><span class="keywordtype">double</span><span class="keyword">></span>(f); data_.f.flags = kNumberDoubleFlag; }</div><div class="line"><a name="l00752"></a><span class="lineno"> 752</span> <span class="comment"></span></div><div class="line"><a name="l00753"></a><span class="lineno"> 753</span> <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> <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> <span class="comment"></span></div><div class="line"><a name="l00756"></a><span class="lineno"> 756</span> <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> <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> <span class="comment"></span></div><div class="line"><a name="l00759"></a><span class="lineno"> 759</span> <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> <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& 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> <span class="comment"></span></div><div class="line"><a name="l00762"></a><span class="lineno"> 762</span> <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> <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& 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> </div><div class="line"><a name="l00765"></a><span class="lineno"> 765</span> <span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l00766"></a><span class="lineno"> 766</span> <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> <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> <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>  <a class="code" href="classrapidjson_1_1_generic_value.html#a852788b35257762cd8d6c4bf5c5d77bc">GenericValue</a>(<span class="keyword">const</span> std::basic_string<Ch>& s, Allocator& 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> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00771"></a><span class="lineno"> 771</span> <span class="comment"></span></div><div class="line"><a name="l00772"></a><span class="lineno"> 772</span> <span class="comment"> //! Constructor for Array.</span></div><div class="line"><a name="l00773"></a><span class="lineno"> 773</span> <span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l00774"></a><span class="lineno"> 774</span> <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> <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> <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> <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>  <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>  a.value_.data_ = Data();</div><div class="line"><a name="l00780"></a><span class="lineno"> 780</span>  a.value_.data_.f.flags = kArrayFlag;</div><div class="line"><a name="l00781"></a><span class="lineno"> 781</span>  }</div><div class="line"><a name="l00782"></a><span class="lineno"> 782</span> <span class="comment"></span></div><div class="line"><a name="l00783"></a><span class="lineno"> 783</span> <span class="comment"> //! Constructor for Object.</span></div><div class="line"><a name="l00784"></a><span class="lineno"> 784</span> <span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l00785"></a><span class="lineno"> 785</span> <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> <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> <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> <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>  <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>  o.value_.data_ = Data();</div><div class="line"><a name="l00791"></a><span class="lineno"> 791</span>  o.value_.data_.f.flags = kObjectFlag;</div><div class="line"><a name="l00792"></a><span class="lineno"> 792</span>  }</div><div class="line"><a name="l00793"></a><span class="lineno"> 793</span> <span class="comment"></span></div><div class="line"><a name="l00794"></a><span class="lineno"> 794</span> <span class="comment"> //! Destructor.</span></div><div class="line"><a name="l00795"></a><span class="lineno"> 795</span> <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> <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>  <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>  <span class="keywordflow">if</span> (Allocator::kNeedFree) { <span class="comment">// Shortcut by Allocator's trait</span></div><div class="line"><a name="l00799"></a><span class="lineno"> 799</span>  <span class="keywordflow">switch</span>(data_.f.flags) {</div><div class="line"><a name="l00800"></a><span class="lineno"> 800</span>  <span class="keywordflow">case</span> kArrayFlag:</div><div class="line"><a name="l00801"></a><span class="lineno"> 801</span>  {</div><div class="line"><a name="l00802"></a><span class="lineno"> 802</span>  <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>  <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>  v->~GenericValue();</div><div class="line"><a name="l00805"></a><span class="lineno"> 805</span>  Allocator::Free(e);</div><div class="line"><a name="l00806"></a><span class="lineno"> 806</span>  }</div><div class="line"><a name="l00807"></a><span class="lineno"> 807</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00808"></a><span class="lineno"> 808</span> </div><div class="line"><a name="l00809"></a><span class="lineno"> 809</span>  <span class="keywordflow">case</span> kObjectFlag:</div><div class="line"><a name="l00810"></a><span class="lineno"> 810</span>  <span class="keywordflow">for</span> (MemberIterator m = MemberBegin(); m != MemberEnd(); ++m)</div><div class="line"><a name="l00811"></a><span class="lineno"> 811</span>  m->~Member();</div><div class="line"><a name="l00812"></a><span class="lineno"> 812</span>  Allocator::Free(GetMembersPointer());</div><div class="line"><a name="l00813"></a><span class="lineno"> 813</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00814"></a><span class="lineno"> 814</span> </div><div class="line"><a name="l00815"></a><span class="lineno"> 815</span>  <span class="keywordflow">case</span> kCopyStringFlag:</div><div class="line"><a name="l00816"></a><span class="lineno"> 816</span>  Allocator::Free(const_cast<Ch*>(GetStringPointer()));</div><div class="line"><a name="l00817"></a><span class="lineno"> 817</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00818"></a><span class="lineno"> 818</span> </div><div class="line"><a name="l00819"></a><span class="lineno"> 819</span>  <span class="keywordflow">default</span>:</div><div class="line"><a name="l00820"></a><span class="lineno"> 820</span>  <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>  }</div><div class="line"><a name="l00822"></a><span class="lineno"> 822</span>  }</div><div class="line"><a name="l00823"></a><span class="lineno"> 823</span>  }</div><div class="line"><a name="l00824"></a><span class="lineno"> 824</span> <span class="comment"></span></div><div class="line"><a name="l00825"></a><span class="lineno"> 825</span> <span class="comment"> //@}</span></div><div class="line"><a name="l00826"></a><span class="lineno"> 826</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00827"></a><span class="lineno"> 827</span> <span class="comment"> //!@name Assignment operators</span></div><div class="line"><a name="l00828"></a><span class="lineno"> 828</span> <span class="comment"></span><span class="comment"> //@{</span></div><div class="line"><a name="l00829"></a><span class="lineno"> 829</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00830"></a><span class="lineno"> 830</span> <span class="comment"> //! Assignment with move semantics.</span></div><div class="line"><a name="l00831"></a><span class="lineno"> 831</span> <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> <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>  <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& <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>& rhs) RAPIDJSON_NOEXCEPT {</div><div class="line"><a name="l00834"></a><span class="lineno"> 834</span>  <span class="keywordflow">if</span> (<span class="keyword">this</span> != &rhs) {</div><div class="line"><a name="l00835"></a><span class="lineno"> 835</span>  this->~<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>  RawAssign(rhs);</div><div class="line"><a name="l00837"></a><span class="lineno"> 837</span>  }</div><div class="line"><a name="l00838"></a><span class="lineno"> 838</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00839"></a><span class="lineno"> 839</span>  }</div><div class="line"><a name="l00840"></a><span class="lineno"> 840</span> </div><div class="line"><a name="l00841"></a><span class="lineno"> 841</span> <span class="preprocessor">#if RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l00842"></a><span class="lineno"> 842</span> <span class="comment"> //! Move assignment in C++11</span></div><div class="line"><a name="l00843"></a><span class="lineno"> 843</span> <span class="comment"></span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& operator=(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&& rhs) RAPIDJSON_NOEXCEPT {</div><div class="line"><a name="l00844"></a><span class="lineno"> 844</span>  <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>  }</div><div class="line"><a name="l00846"></a><span class="lineno"> 846</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00847"></a><span class="lineno"> 847</span> <span class="comment"></span></div><div class="line"><a name="l00848"></a><span class="lineno"> 848</span> <span class="comment"> //! Assignment of constant string reference (no copy)</span></div><div class="line"><a name="l00849"></a><span class="lineno"> 849</span> <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> <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> <span class="comment"> \see GenericStringRef, operator=(T)</span></div><div class="line"><a name="l00852"></a><span class="lineno"> 852</span> <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>  <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& <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>  <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>  <span class="keywordflow">return</span> *<span class="keyword">this</span> = s;</div><div class="line"><a name="l00856"></a><span class="lineno"> 856</span>  }</div><div class="line"><a name="l00857"></a><span class="lineno"> 857</span> <span class="comment"></span></div><div class="line"><a name="l00858"></a><span class="lineno"> 858</span> <span class="comment"> //! Assignment with primitive types.</span></div><div class="line"><a name="l00859"></a><span class="lineno"> 859</span> <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> <span class="comment"> \param value The value to be assigned.</span></div><div class="line"><a name="l00861"></a><span class="lineno"> 861</span> <span class="comment"></span></div><div class="line"><a name="l00862"></a><span class="lineno"> 862</span> <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> <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> <span class="comment"> referencing character strings with insufficient lifetime, use</span></div><div class="line"><a name="l00865"></a><span class="lineno"> 865</span> <span class="comment"> \ref SetString(const Ch*, Allocator&) (for copying) or</span></div><div class="line"><a name="l00866"></a><span class="lineno"> 866</span> <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> <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> <span class="comment"> use \ref SetBool() instead.</span></div><div class="line"><a name="l00869"></a><span class="lineno"> 869</span> <span class="comment"> */</span></div><div class="line"><a name="l00870"></a><span class="lineno"> 870</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div><div class="line"><a name="l00871"></a><span class="lineno"> 871</span>  RAPIDJSON_DISABLEIF_RETURN((internal::IsPointer<T>), (<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&))</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>  operator=(T value) {</div><div class="line"><a name="l00873"></a><span class="lineno"> 873</span>  <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>  <span class="keywordflow">return</span> *<span class="keyword">this</span> = v;</div><div class="line"><a name="l00875"></a><span class="lineno"> 875</span>  }</div><div class="line"><a name="l00876"></a><span class="lineno"> 876</span> <span class="comment"></span></div><div class="line"><a name="l00877"></a><span class="lineno"> 877</span> <span class="comment"> //! Deep-copy assignment from Value</span></div><div class="line"><a name="l00878"></a><span class="lineno"> 878</span> <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> <span class="comment"> \tparam SourceAllocator Allocator type of \c rhs</span></div><div class="line"><a name="l00880"></a><span class="lineno"> 880</span> <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> <span class="comment"> \param allocator Allocator to use for copying</span></div><div class="line"><a name="l00882"></a><span class="lineno"> 882</span> <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> <span class="comment"> */</span></div><div class="line"><a name="l00884"></a><span class="lineno"> 884</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> SourceAllocator></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>  <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& <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<Encoding, SourceAllocator></a>& rhs, Allocator& 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>  <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<void*>(<span class="keyword">this</span>) != static_cast<void const*>(&rhs));</div><div class="line"><a name="l00887"></a><span class="lineno"> 887</span>  this->~<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>  <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>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00890"></a><span class="lineno"> 890</span>  }</div><div class="line"><a name="l00891"></a><span class="lineno"> 891</span> <span class="comment"></span></div><div class="line"><a name="l00892"></a><span class="lineno"> 892</span> <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> <span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l00894"></a><span class="lineno"> 894</span> <span class="comment"> \param other Another value.</span></div><div class="line"><a name="l00895"></a><span class="lineno"> 895</span> <span class="comment"> \note Constant complexity.</span></div><div class="line"><a name="l00896"></a><span class="lineno"> 896</span> <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>  <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& <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>& other) RAPIDJSON_NOEXCEPT {</div><div class="line"><a name="l00898"></a><span class="lineno"> 898</span>  <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>  temp.RawAssign(*<span class="keyword">this</span>);</div><div class="line"><a name="l00900"></a><span class="lineno"> 900</span>  RawAssign(other);</div><div class="line"><a name="l00901"></a><span class="lineno"> 901</span>  other.RawAssign(temp);</div><div class="line"><a name="l00902"></a><span class="lineno"> 902</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00903"></a><span class="lineno"> 903</span>  }</div><div class="line"><a name="l00904"></a><span class="lineno"> 904</span> <span class="comment"></span></div><div class="line"><a name="l00905"></a><span class="lineno"> 905</span> <span class="comment"> //! free-standing swap function helper</span></div><div class="line"><a name="l00906"></a><span class="lineno"> 906</span> <span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l00907"></a><span class="lineno"> 907</span> <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> <span class="comment"> \code</span></div><div class="line"><a name="l00909"></a><span class="lineno"> 909</span> <span class="comment"> void swap(MyClass& a, MyClass& b) {</span></div><div class="line"><a name="l00910"></a><span class="lineno"> 910</span> <span class="comment"> using std::swap;</span></div><div class="line"><a name="l00911"></a><span class="lineno"> 911</span> <span class="comment"> swap(a.value, b.value);</span></div><div class="line"><a name="l00912"></a><span class="lineno"> 912</span> <span class="comment"> // ...</span></div><div class="line"><a name="l00913"></a><span class="lineno"> 913</span> <span class="comment"> }</span></div><div class="line"><a name="l00914"></a><span class="lineno"> 914</span> <span class="comment"> \endcode</span></div><div class="line"><a name="l00915"></a><span class="lineno"> 915</span> <span class="comment"> \see Swap()</span></div><div class="line"><a name="l00916"></a><span class="lineno"> 916</span> <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>  <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>& a, <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& b) RAPIDJSON_NOEXCEPT { a.Swap(b); }</div><div class="line"><a name="l00918"></a><span class="lineno"> 918</span> <span class="comment"></span></div><div class="line"><a name="l00919"></a><span class="lineno"> 919</span> <span class="comment"> //! Prepare Value for move semantics</span></div><div class="line"><a name="l00920"></a><span class="lineno"> 920</span> <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>  <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& <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> <span class="comment"> //@}</span></div><div class="line"><a name="l00923"></a><span class="lineno"> 923</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00924"></a><span class="lineno"> 924</span> <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> <span class="comment"></span><span class="comment"> //@{</span></div><div class="line"><a name="l00926"></a><span class="lineno"> 926</span> <span class="comment"></span><span class="comment"> //! Equal-to operator</span></div><div class="line"><a name="l00927"></a><span class="lineno"> 927</span> <span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l00928"></a><span class="lineno"> 928</span> <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> <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> <span class="comment"> */</span></div><div class="line"><a name="l00931"></a><span class="lineno"> 931</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> SourceAllocator></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>  <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<Encoding, SourceAllocator></a>& rhs)<span class="keyword"> const </span>{</div><div class="line"><a name="l00933"></a><span class="lineno"> 933</span>  <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue<Encoding, SourceAllocator></a> RhsType;</div><div class="line"><a name="l00934"></a><span class="lineno"> 934</span>  <span class="keywordflow">if</span> (GetType() != rhs.GetType())</div><div class="line"><a name="l00935"></a><span class="lineno"> 935</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00936"></a><span class="lineno"> 936</span> </div><div class="line"><a name="l00937"></a><span class="lineno"> 937</span>  <span class="keywordflow">switch</span> (GetType()) {</div><div class="line"><a name="l00938"></a><span class="lineno"> 938</span>  <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>  <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>  <span class="keywordflow">return</span> <span class="keyword">false</span>; </div><div class="line"><a name="l00941"></a><span class="lineno"> 941</span>  <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>  <span class="keyword">typename</span> RhsType::ConstMemberIterator rhsMemberItr = rhs.<a class="code" href="classrapidjson_1_1_generic_value.html#ad22fdeac87ec6c370dd43075d3586811">FindMember</a>(lhsMemberItr->name);</div><div class="line"><a name="l00943"></a><span class="lineno"> 943</span>  <span class="keywordflow">if</span> (rhsMemberItr == rhs.<a class="code" href="classrapidjson_1_1_generic_value.html#a34ee3d75a7aa308043fb34b0743bfe7c">MemberEnd</a>() || lhsMemberItr->value != rhsMemberItr->value)</div><div class="line"><a name="l00944"></a><span class="lineno"> 944</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00945"></a><span class="lineno"> 945</span>  }</div><div class="line"><a name="l00946"></a><span class="lineno"> 946</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00947"></a><span class="lineno"> 947</span>  </div><div class="line"><a name="l00948"></a><span class="lineno"> 948</span>  <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>  <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>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00951"></a><span class="lineno"> 951</span>  <span class="keywordflow">for</span> (<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> i = 0; i < data_.a.size; i++)</div><div class="line"><a name="l00952"></a><span class="lineno"> 952</span>  <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>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00954"></a><span class="lineno"> 954</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00955"></a><span class="lineno"> 955</span> </div><div class="line"><a name="l00956"></a><span class="lineno"> 956</span>  <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>  <span class="keywordflow">return</span> StringEqual(rhs);</div><div class="line"><a name="l00958"></a><span class="lineno"> 958</span> </div><div class="line"><a name="l00959"></a><span class="lineno"> 959</span>  <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>  <span class="keywordflow">if</span> (IsDouble() || rhs.IsDouble()) {</div><div class="line"><a name="l00961"></a><span class="lineno"> 961</span>  <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>  <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>  <span class="keywordflow">return</span> a >= b && a <= b; <span class="comment">// Prevent -Wfloat-equal</span></div><div class="line"><a name="l00964"></a><span class="lineno"> 964</span>  }</div><div class="line"><a name="l00965"></a><span class="lineno"> 965</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00966"></a><span class="lineno"> 966</span>  <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> </div><div class="line"><a name="l00968"></a><span class="lineno"> 968</span>  <span class="keywordflow">default</span>:</div><div class="line"><a name="l00969"></a><span class="lineno"> 969</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00970"></a><span class="lineno"> 970</span>  }</div><div class="line"><a name="l00971"></a><span class="lineno"> 971</span>  }</div><div class="line"><a name="l00972"></a><span class="lineno"> 972</span> <span class="comment"></span></div><div class="line"><a name="l00973"></a><span class="lineno"> 973</span> <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> <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> </div><div class="line"><a name="l00976"></a><span class="lineno"> 976</span> <span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l00977"></a><span class="lineno"> 977</span> <span class="comment"> //! Equal-to operator with string object</span></div><div class="line"><a name="l00978"></a><span class="lineno"> 978</span> <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> <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>  <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<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="l00981"></a><span class="lineno"> 981</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00982"></a><span class="lineno"> 982</span> <span class="comment"></span></div><div class="line"><a name="l00983"></a><span class="lineno"> 983</span> <span class="comment"> //! Equal-to operator with primitive types</span></div><div class="line"><a name="l00984"></a><span class="lineno"> 984</span> <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> <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>  <span class="keyword">template</span> <<span class="keyword">typename</span> T> RAPIDJSON_DISABLEIF_RETURN((internal::OrExpr<internal::IsPointer<T>,internal::IsGenericValue<T> >), (<span class="keywordtype">bool</span>)) <a class="code" href="classrapidjson_1_1_generic_value.html#aaddbbbb35cd783f209f889cf8dea9570">operator==</a>(<span class="keyword">const</span> T& 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> <span class="comment"></span></div><div class="line"><a name="l00988"></a><span class="lineno"> 988</span> <span class="comment"> //! Not-equal-to operator</span></div><div class="line"><a name="l00989"></a><span class="lineno"> 989</span> <span class="comment"></span><span class="comment"> /*! \return !(*this == rhs)</span></div><div class="line"><a name="l00990"></a><span class="lineno"> 990</span> <span class="comment"> */</span></div><div class="line"><a name="l00991"></a><span class="lineno"> 991</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> SourceAllocator></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>  <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<Encoding, SourceAllocator></a>& 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> <span class="comment"></span></div><div class="line"><a name="l00994"></a><span class="lineno"> 994</span> <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> <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> <span class="comment"></span></div><div class="line"><a name="l00997"></a><span class="lineno"> 997</span> <span class="comment"> //! Not-equal-to operator with arbitrary types</span></div><div class="line"><a name="l00998"></a><span class="lineno"> 998</span> <span class="comment"></span><span class="comment"> /*! \return !(*this == rhs)</span></div><div class="line"><a name="l00999"></a><span class="lineno"> 999</span> <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>  <span class="keyword">template</span> <<span class="keyword">typename</span> T> RAPIDJSON_DISABLEIF_RETURN((internal::IsGenericValue<T>), (<span class="keywordtype">bool</span>)) <a class="code" href="classrapidjson_1_1_generic_value.html#ae6fe0576ff0336f6e2b09fe32f3ff809">operator!=</a>(<span class="keyword">const</span> T& 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> <span class="comment"></span></div><div class="line"><a name="l01002"></a><span class="lineno"> 1002</span> <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> <span class="comment"></span><span class="comment"> /*! \return (rhs == lhs)</span></div><div class="line"><a name="l01004"></a><span class="lineno"> 1004</span> <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>  <span class="keyword">template</span> <<span class="keyword">typename</span> T> <span class="keyword">friend</span> RAPIDJSON_DISABLEIF_RETURN((internal::IsGenericValue<T>), (<span class="keywordtype">bool</span>)) <a class="code" href="classrapidjson_1_1_generic_value.html#aaa465706fda1e1ef4513ce877e0b4b69">operator==</a>(<span class="keyword">const</span> T& lhs, <span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& rhs) { <span class="keywordflow">return</span> rhs == lhs; }</div><div class="line"><a name="l01006"></a><span class="lineno"> 1006</span> <span class="comment"></span></div><div class="line"><a name="l01007"></a><span class="lineno"> 1007</span> <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> <span class="comment"></span><span class="comment"> /*! \return !(rhs == lhs)</span></div><div class="line"><a name="l01009"></a><span class="lineno"> 1009</span> <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>  <span class="keyword">template</span> <<span class="keyword">typename</span> T> <span class="keyword">friend</span> RAPIDJSON_DISABLEIF_RETURN((internal::IsGenericValue<T>), (<span class="keywordtype">bool</span>)) <a class="code" href="classrapidjson_1_1_generic_value.html#ae08898bef949f217f0e5d28e19f05992">operator!=</a>(<span class="keyword">const</span> T& lhs, <span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& 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> <span class="comment"> //@}</span></div><div class="line"><a name="l01012"></a><span class="lineno"> 1012</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l01013"></a><span class="lineno"> 1013</span> <span class="comment"> //!@name Type</span></div><div class="line"><a name="l01014"></a><span class="lineno"> 1014</span> <span class="comment"></span><span class="comment"> //@{</span></div><div class="line"><a name="l01015"></a><span class="lineno"> 1015</span> <span class="comment"></span></div><div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>  <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<</span><a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">Type</a><span class="keyword">></span>(data_.f.flags & kTypeMask); }</div><div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>  <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>  <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>  <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>  <span class="keywordtype">bool</span> IsBool()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (data_.f.flags & kBoolFlag) != 0; }</div><div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>  <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>  <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>  <span class="keywordtype">bool</span> IsNumber()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (data_.f.flags & kNumberFlag) != 0; }</div><div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>  <span class="keywordtype">bool</span> IsInt()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (data_.f.flags & kIntFlag) != 0; }</div><div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>  <span class="keywordtype">bool</span> IsUint()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (data_.f.flags & kUintFlag) != 0; }</div><div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>  <span class="keywordtype">bool</span> IsInt64()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (data_.f.flags & kInt64Flag) != 0; }</div><div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>  <span class="keywordtype">bool</span> IsUint64()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (data_.f.flags & kUint64Flag) != 0; }</div><div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>  <span class="keywordtype">bool</span> IsDouble()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (data_.f.flags & kDoubleFlag) != 0; }</div><div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>  <span class="keywordtype">bool</span> IsString()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (data_.f.flags & kStringFlag) != 0; }</div><div class="line"><a name="l01030"></a><span class="lineno"> 1030</span> </div><div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>  <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>  <span class="keywordtype">bool</span> IsLosslessDouble()<span class="keyword"> const </span>{</div><div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>  <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>  <span class="keywordflow">if</span> (IsUint64()) {</div><div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>  uint64_t u = GetUint64();</div><div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>  <span class="keyword">volatile</span> <span class="keywordtype">double</span> d = <span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>(u);</div><div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>  <span class="keywordflow">return</span> (d >= 0.0)</div><div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>  && (d < static_cast<double>((std::numeric_limits<uint64_t>::max)()))</div><div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>  && (u == <span class="keyword">static_cast<</span>uint64_t<span class="keyword">></span>(d));</div><div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>  }</div><div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>  <span class="keywordflow">if</span> (IsInt64()) {</div><div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>  int64_t i = GetInt64();</div><div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>  <span class="keyword">volatile</span> <span class="keywordtype">double</span> d = <span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>(i);</div><div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>  <span class="keywordflow">return</span> (d >= static_cast<double>((std::numeric_limits<int64_t>::min)()))</div><div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>  && (d < static_cast<double>((std::numeric_limits<int64_t>::max)()))</div><div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>  && (i == static_cast<int64_t>(d));</div><div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>  }</div><div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>  <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>  }</div><div class="line"><a name="l01050"></a><span class="lineno"> 1050</span> </div><div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>  <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>  <span class="keywordtype">bool</span> IsFloat()<span class="keyword"> const </span>{</div><div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>  <span class="keywordflow">if</span> ((data_.f.flags & kDoubleFlag) == 0)</div><div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>  <span class="keywordtype">double</span> d = GetDouble();</div><div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>  <span class="keywordflow">return</span> d >= -3.4028234e38 && d <= 3.4028234e38;</div><div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>  }</div><div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>  <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>  <span class="keywordtype">bool</span> IsLosslessFloat()<span class="keyword"> const </span>{</div><div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>  <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>  <span class="keywordtype">double</span> a = GetDouble();</div><div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>  <span class="keywordflow">if</span> (a < static_cast<double>(-(std::numeric_limits<float>::max)())</div><div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>  || a > static_cast<double>((std::numeric_limits<float>::max)()))</div><div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>  <span class="keywordtype">double</span> b = <span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>(<span class="keyword">static_cast<</span><span class="keywordtype">float</span><span class="keyword">></span>(a));</div><div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>  <span class="keywordflow">return</span> a >= b && a <= b; <span class="comment">// Prevent -Wfloat-equal</span></div><div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>  }</div><div class="line"><a name="l01068"></a><span class="lineno"> 1068</span> <span class="comment"></span></div><div class="line"><a name="l01069"></a><span class="lineno"> 1069</span> <span class="comment"> //@}</span></div><div class="line"><a name="l01070"></a><span class="lineno"> 1070</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l01071"></a><span class="lineno"> 1071</span> <span class="comment"> //!@name Null</span></div><div class="line"><a name="l01072"></a><span class="lineno"> 1072</span> <span class="comment"></span><span class="comment"> //@{</span></div><div class="line"><a name="l01073"></a><span class="lineno"> 1073</span> <span class="comment"></span></div><div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>  <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& SetNull() { this->~<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> <span class="comment"></span></div><div class="line"><a name="l01076"></a><span class="lineno"> 1076</span> <span class="comment"> //@}</span></div><div class="line"><a name="l01077"></a><span class="lineno"> 1077</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l01078"></a><span class="lineno"> 1078</span> <span class="comment"> //!@name Bool</span></div><div class="line"><a name="l01079"></a><span class="lineno"> 1079</span> <span class="comment"></span><span class="comment"> //@{</span></div><div class="line"><a name="l01080"></a><span class="lineno"> 1080</span> <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>  <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> <span class="comment"> //!< Set boolean value</span></div><div class="line"><a name="l01083"></a><span class="lineno"> 1083</span> <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>  <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& <a class="code" href="classrapidjson_1_1_generic_value.html#a5623c9039977ca0daf394e5c12f10c2d">SetBool</a>(<span class="keywordtype">bool</span> b) { this->~<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> <span class="comment"></span></div><div class="line"><a name="l01086"></a><span class="lineno"> 1086</span> <span class="comment"> //@}</span></div><div class="line"><a name="l01087"></a><span class="lineno"> 1087</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l01088"></a><span class="lineno"> 1088</span> <span class="comment"> //!@name Object</span></div><div class="line"><a name="l01089"></a><span class="lineno"> 1089</span> <span class="comment"></span><span class="comment"> //@{</span></div><div class="line"><a name="l01090"></a><span class="lineno"> 1090</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l01091"></a><span class="lineno"> 1091</span> <span class="comment"> //! Set this value as an empty object.</span></div><div class="line"><a name="l01092"></a><span class="lineno"> 1092</span> <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>  <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& <a class="code" href="classrapidjson_1_1_generic_value.html#a7cb3cbaefe4fb99aaf9f155fb4ee039b">SetObject</a>() { this->~<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> <span class="comment"></span></div><div class="line"><a name="l01095"></a><span class="lineno"> 1095</span> <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> <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> <span class="comment"></span></div><div class="line"><a name="l01098"></a><span class="lineno"> 1098</span> <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> <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> <span class="comment"></span></div><div class="line"><a name="l01101"></a><span class="lineno"> 1101</span> <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> <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> <span class="comment"></span></div><div class="line"><a name="l01104"></a><span class="lineno"> 1104</span> <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> <span class="comment"></span><span class="comment"> /*! \pre IsObject() == true</span></div><div class="line"><a name="l01106"></a><span class="lineno"> 1106</span> <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> <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> <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> <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> <span class="comment"> A better approach is to use FindMember().</span></div><div class="line"><a name="l01111"></a><span class="lineno"> 1111</span> <span class="comment"> \note Linear time complexity.</span></div><div class="line"><a name="l01112"></a><span class="lineno"> 1112</span> <span class="comment"> */</span></div><div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></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>  RAPIDJSON_DISABLEIF_RETURN((internal::NotExpr<internal::IsSame<<span class="keyword">typename</span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">internal::RemoveConst<T>::Type</a>, Ch> >),(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&)) <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>  <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>  <span class="keywordflow">return</span> (*<span class="keyword">this</span>)[n];</div><div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>  }</div><div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div><div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>  RAPIDJSON_DISABLEIF_RETURN((internal::NotExpr<internal::IsSame<<span class="keyword">typename</span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">internal::RemoveConst<T>::Type</a>, Ch> >),(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&)) operator[](T* name)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">const_cast<</span><a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&<span class="keyword">></span>(*this)[name]; }</div><div class="line"><a name="l01120"></a><span class="lineno"> 1120</span> <span class="comment"></span></div><div class="line"><a name="l01121"></a><span class="lineno"> 1121</span> <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> <span class="comment"></span><span class="comment"> /*! \pre IsObject() == true</span></div><div class="line"><a name="l01123"></a><span class="lineno"> 1123</span> <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> <span class="comment"></span></div><div class="line"><a name="l01125"></a><span class="lineno"> 1125</span> <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> <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> <span class="comment"></span></div><div class="line"><a name="l01128"></a><span class="lineno"> 1128</span> <span class="comment"> \note Linear time complexity.</span></div><div class="line"><a name="l01129"></a><span class="lineno"> 1129</span> <span class="comment"> */</span></div><div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> SourceAllocator></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>  <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& <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<Encoding, SourceAllocator></a>& name) {</div><div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>  <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>  <span class="keywordflow">if</span> (member != MemberEnd())</div><div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>  <span class="keywordflow">return</span> member->value;</div><div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>  <span class="keywordflow">else</span> {</div><div class="line"><a name="l01136"></a><span class="lineno"> 1136</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>(<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> </div><div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>  <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>  <span class="comment">// static GenericValue NullValue;</span></div><div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>  <span class="comment">// return NullValue;</span></div><div class="line"><a name="l01141"></a><span class="lineno"> 1141</span> </div><div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>  <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>  <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>  <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>  }</div><div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>  }</div><div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> SourceAllocator></div><div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>  <span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& operator[](<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue<Encoding, SourceAllocator></a>& name)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">const_cast<</span><a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&<span class="keyword">></span>(*this)[name]; }</div><div class="line"><a name="l01149"></a><span class="lineno"> 1149</span> </div><div class="line"><a name="l01150"></a><span class="lineno"> 1150</span> <span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l01151"></a><span class="lineno"> 1151</span> <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> <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#a4d337239ee3e2096462f6a36b9ab0811">operator[]</a>(<span class="keyword">const</span> std::basic_string<Ch>& 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>  <span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& operator[](<span class="keyword">const</span> std::basic_string<Ch>& 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> <span class="preprocessor">#endif</span></div><div class="line"><a name="l01155"></a><span class="lineno"> 1155</span> <span class="comment"></span></div><div class="line"><a name="l01156"></a><span class="lineno"> 1156</span> <span class="comment"> //! Const member iterator</span></div><div class="line"><a name="l01157"></a><span class="lineno"> 1157</span> <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>  <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> <span class="comment"> //! Const \em past-the-end member iterator</span></div><div class="line"><a name="l01160"></a><span class="lineno"> 1160</span> <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>  <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> <span class="comment"> //! Member iterator</span></div><div class="line"><a name="l01163"></a><span class="lineno"> 1163</span> <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>  <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> <span class="comment"> //! \em Past-the-end member iterator</span></div><div class="line"><a name="l01166"></a><span class="lineno"> 1166</span> <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>  <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> <span class="comment"></span></div><div class="line"><a name="l01169"></a><span class="lineno"> 1169</span> <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> <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> <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> <span class="comment"> \return The value itself for fluent API.</span></div><div class="line"><a name="l01173"></a><span class="lineno"> 1173</span> <span class="comment"> \note Linear time complexity.</span></div><div class="line"><a name="l01174"></a><span class="lineno"> 1174</span> <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>  <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& <a class="code" href="classrapidjson_1_1_generic_value.html#a9131d6e49ac5a6bf8000d851381e4a25">MemberReserve</a>(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> newCapacity, Allocator &allocator) {</div><div class="line"><a name="l01176"></a><span class="lineno"> 1176</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());</div><div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>  <span class="keywordflow">if</span> (newCapacity > data_.o.capacity) {</div><div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>  SetMembersPointer(reinterpret_cast<Member*>(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>  data_.o.capacity = newCapacity;</div><div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>  }</div><div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>  }</div><div class="line"><a name="l01183"></a><span class="lineno"> 1183</span> <span class="comment"></span></div><div class="line"><a name="l01184"></a><span class="lineno"> 1184</span> <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> <span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l01186"></a><span class="lineno"> 1186</span> <span class="comment"> \param name Member name to be searched.</span></div><div class="line"><a name="l01187"></a><span class="lineno"> 1187</span> <span class="comment"> \pre IsObject() == true</span></div><div class="line"><a name="l01188"></a><span class="lineno"> 1188</span> <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> <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> <span class="comment"> \note Linear time complexity.</span></div><div class="line"><a name="l01191"></a><span class="lineno"> 1191</span> <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>  <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> </div><div class="line"><a name="l01194"></a><span class="lineno"> 1194</span> <span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l01195"></a><span class="lineno"> 1195</span> <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> <span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l01197"></a><span class="lineno"> 1197</span> <span class="comment"> \param name Member name to be searched.</span></div><div class="line"><a name="l01198"></a><span class="lineno"> 1198</span> <span class="comment"> \pre IsObject() == true</span></div><div class="line"><a name="l01199"></a><span class="lineno"> 1199</span> <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> <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> <span class="comment"> \note Linear time complexity.</span></div><div class="line"><a name="l01202"></a><span class="lineno"> 1202</span> <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>  <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<Ch>& 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> <span class="preprocessor">#endif</span></div><div class="line"><a name="l01205"></a><span class="lineno"> 1205</span> <span class="comment"></span></div><div class="line"><a name="l01206"></a><span class="lineno"> 1206</span> <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> <span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l01208"></a><span class="lineno"> 1208</span> <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> <span class="comment"> \param name Member name to be searched.</span></div><div class="line"><a name="l01210"></a><span class="lineno"> 1210</span> <span class="comment"> \pre IsObject() == true</span></div><div class="line"><a name="l01211"></a><span class="lineno"> 1211</span> <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> <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> <span class="comment"> \note Linear time complexity.</span></div><div class="line"><a name="l01214"></a><span class="lineno"> 1214</span> <span class="comment"> */</span></div><div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> SourceAllocator></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>  <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<Encoding, SourceAllocator></a>& 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> <span class="comment"></span></div><div class="line"><a name="l01218"></a><span class="lineno"> 1218</span> <span class="comment"> //! Find member by name.</span></div><div class="line"><a name="l01219"></a><span class="lineno"> 1219</span> <span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l01220"></a><span class="lineno"> 1220</span> <span class="comment"> \param name Member name to be searched.</span></div><div class="line"><a name="l01221"></a><span class="lineno"> 1221</span> <span class="comment"> \pre IsObject() == true</span></div><div class="line"><a name="l01222"></a><span class="lineno"> 1222</span> <span class="comment"> \return Iterator to member, if it exists.</span></div><div class="line"><a name="l01223"></a><span class="lineno"> 1223</span> <span class="comment"> Otherwise returns \ref MemberEnd().</span></div><div class="line"><a name="l01224"></a><span class="lineno"> 1224</span> <span class="comment"></span></div><div class="line"><a name="l01225"></a><span class="lineno"> 1225</span> <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> <span class="comment"> the requested member doesn't exist. For consistency with e.g.</span></div><div class="line"><a name="l01227"></a><span class="lineno"> 1227</span> <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> <span class="comment"> \note Linear time complexity.</span></div><div class="line"><a name="l01229"></a><span class="lineno"> 1229</span> <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>  <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>  <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>  <span class="keywordflow">return</span> FindMember(n);</div><div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>  }</div><div class="line"><a name="l01234"></a><span class="lineno"> 1234</span> </div><div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>  <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<</span><a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&<span class="keyword">></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> <span class="comment"></span></div><div class="line"><a name="l01237"></a><span class="lineno"> 1237</span> <span class="comment"> //! Find member by name.</span></div><div class="line"><a name="l01238"></a><span class="lineno"> 1238</span> <span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l01239"></a><span class="lineno"> 1239</span> <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> <span class="comment"> \param name Member name to be searched.</span></div><div class="line"><a name="l01241"></a><span class="lineno"> 1241</span> <span class="comment"> \pre IsObject() == true</span></div><div class="line"><a name="l01242"></a><span class="lineno"> 1242</span> <span class="comment"> \return Iterator to member, if it exists.</span></div><div class="line"><a name="l01243"></a><span class="lineno"> 1243</span> <span class="comment"> Otherwise returns \ref MemberEnd().</span></div><div class="line"><a name="l01244"></a><span class="lineno"> 1244</span> <span class="comment"></span></div><div class="line"><a name="l01245"></a><span class="lineno"> 1245</span> <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> <span class="comment"> the requested member doesn't exist. For consistency with e.g.</span></div><div class="line"><a name="l01247"></a><span class="lineno"> 1247</span> <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> <span class="comment"> \note Linear time complexity.</span></div><div class="line"><a name="l01249"></a><span class="lineno"> 1249</span> <span class="comment"> */</span></div><div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> SourceAllocator></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>  <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<Encoding, SourceAllocator></a>& name) {</div><div class="line"><a name="l01252"></a><span class="lineno"> 1252</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());</div><div class="line"><a name="l01253"></a><span class="lineno"> 1253</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>(name.IsString());</div><div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>  <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>  <span class="keywordflow">for</span> ( ; member != MemberEnd(); ++member)</div><div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>  <span class="keywordflow">if</span> (name.StringEqual(member->name))</div><div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>  <span class="keywordflow">return</span> member;</div><div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>  }</div><div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> SourceAllocator> <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<Encoding, SourceAllocator></a>& name)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">const_cast<</span><a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&<span class="keyword">></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> </div><div class="line"><a name="l01262"></a><span class="lineno"> 1262</span> <span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l01263"></a><span class="lineno"> 1263</span> <span class="comment"> //! Find member by string object name.</span></div><div class="line"><a name="l01264"></a><span class="lineno"> 1264</span> <span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l01265"></a><span class="lineno"> 1265</span> <span class="comment"> \param name Member name to be searched.</span></div><div class="line"><a name="l01266"></a><span class="lineno"> 1266</span> <span class="comment"> \pre IsObject() == true</span></div><div class="line"><a name="l01267"></a><span class="lineno"> 1267</span> <span class="comment"> \return Iterator to member, if it exists.</span></div><div class="line"><a name="l01268"></a><span class="lineno"> 1268</span> <span class="comment"> Otherwise returns \ref MemberEnd().</span></div><div class="line"><a name="l01269"></a><span class="lineno"> 1269</span> <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>  <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<Ch>& 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>  <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">ConstMemberIterator</a> FindMember(<span class="keyword">const</span> std::basic_string<Ch>& 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> <span class="preprocessor">#endif</span></div><div class="line"><a name="l01273"></a><span class="lineno"> 1273</span> <span class="comment"></span></div><div class="line"><a name="l01274"></a><span class="lineno"> 1274</span> <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> <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> <span class="comment"> \param value Value of any type.</span></div><div class="line"><a name="l01277"></a><span class="lineno"> 1277</span> <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> <span class="comment"> \return The value itself for fluent API.</span></div><div class="line"><a name="l01279"></a><span class="lineno"> 1279</span> <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> <span class="comment"> \pre IsObject() && name.IsString()</span></div><div class="line"><a name="l01281"></a><span class="lineno"> 1281</span> <span class="comment"> \post name.IsNull() && value.IsNull()</span></div><div class="line"><a name="l01282"></a><span class="lineno"> 1282</span> <span class="comment"> \note Amortized Constant time complexity.</span></div><div class="line"><a name="l01283"></a><span class="lineno"> 1283</span> <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>  <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& <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>& name, <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& value, Allocator& allocator) {</div><div class="line"><a name="l01285"></a><span class="lineno"> 1285</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());</div><div class="line"><a name="l01286"></a><span class="lineno"> 1286</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>(name.IsString());</div><div class="line"><a name="l01287"></a><span class="lineno"> 1287</span> </div><div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>  ObjectData& o = data_.o;</div><div class="line"><a name="l01289"></a><span class="lineno"> 1289</span>  <span class="keywordflow">if</span> (o.size >= o.capacity)</div><div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>  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>  <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>  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>  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>  o.size++;</div><div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>  }</div><div class="line"><a name="l01297"></a><span class="lineno"> 1297</span> <span class="comment"></span></div><div class="line"><a name="l01298"></a><span class="lineno"> 1298</span> <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> <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> <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> <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> <span class="comment"> \return The value itself for fluent API.</span></div><div class="line"><a name="l01303"></a><span class="lineno"> 1303</span> <span class="comment"> \pre IsObject()</span></div><div class="line"><a name="l01304"></a><span class="lineno"> 1304</span> <span class="comment"> \note This overload is needed to avoid clashes with the generic primitive type AddMember(GenericValue&,T,Allocator&) overload below.</span></div><div class="line"><a name="l01305"></a><span class="lineno"> 1305</span> <span class="comment"> \note Amortized Constant time complexity.</span></div><div class="line"><a name="l01306"></a><span class="lineno"> 1306</span> <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>  <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& <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>& name, <a class="code" href="structrapidjson_1_1_generic_string_ref.html">StringRefType</a> value, Allocator& allocator) {</div><div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>  <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>  <span class="keywordflow">return</span> AddMember(name, v, allocator);</div><div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>  }</div><div class="line"><a name="l01311"></a><span class="lineno"> 1311</span> </div><div class="line"><a name="l01312"></a><span class="lineno"> 1312</span> <span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l01313"></a><span class="lineno"> 1313</span> <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> <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> <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> <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> <span class="comment"> \return The value itself for fluent API.</span></div><div class="line"><a name="l01318"></a><span class="lineno"> 1318</span> <span class="comment"> \pre IsObject()</span></div><div class="line"><a name="l01319"></a><span class="lineno"> 1319</span> <span class="comment"> \note This overload is needed to avoid clashes with the generic primitive type AddMember(GenericValue&,T,Allocator&) overload below.</span></div><div class="line"><a name="l01320"></a><span class="lineno"> 1320</span> <span class="comment"> \note Amortized Constant time complexity.</span></div><div class="line"><a name="l01321"></a><span class="lineno"> 1321</span> <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>  <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& <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>& name, std::basic_string<Ch>& value, Allocator& allocator) {</div><div class="line"><a name="l01323"></a><span class="lineno"> 1323</span>  <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>  <span class="keywordflow">return</span> AddMember(name, v, allocator);</div><div class="line"><a name="l01325"></a><span class="lineno"> 1325</span>  }</div><div class="line"><a name="l01326"></a><span class="lineno"> 1326</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l01327"></a><span class="lineno"> 1327</span> <span class="comment"></span></div><div class="line"><a name="l01328"></a><span class="lineno"> 1328</span> <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> <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> <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> <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> <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> <span class="comment"> \return The value itself for fluent API.</span></div><div class="line"><a name="l01334"></a><span class="lineno"> 1334</span> <span class="comment"> \pre IsObject()</span></div><div class="line"><a name="l01335"></a><span class="lineno"> 1335</span> <span class="comment"></span></div><div class="line"><a name="l01336"></a><span class="lineno"> 1336</span> <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> <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> <span class="comment"> referencing character strings with insufficient lifetime, use</span></div><div class="line"><a name="l01339"></a><span class="lineno"> 1339</span> <span class="comment"> \ref AddMember(StringRefType, GenericValue&, Allocator&) or \ref</span></div><div class="line"><a name="l01340"></a><span class="lineno"> 1340</span> <span class="comment"> AddMember(StringRefType, StringRefType, Allocator&).</span></div><div class="line"><a name="l01341"></a><span class="lineno"> 1341</span> <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> <span class="comment"> use an explicit cast instead, if needed.</span></div><div class="line"><a name="l01343"></a><span class="lineno"> 1343</span> <span class="comment"> \note Amortized Constant time complexity.</span></div><div class="line"><a name="l01344"></a><span class="lineno"> 1344</span> <span class="comment"> */</span></div><div class="line"><a name="l01345"></a><span class="lineno"> 1345</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div><div class="line"><a name="l01346"></a><span class="lineno"> 1346</span>  RAPIDJSON_DISABLEIF_RETURN((internal::OrExpr<internal::IsPointer<T>, internal::IsGenericValue<T> >), (<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&))</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>  AddMember(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& name, T value, Allocator& allocator) {</div><div class="line"><a name="l01348"></a><span class="lineno"> 1348</span>  <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>  <span class="keywordflow">return</span> AddMember(name, v, allocator);</div><div class="line"><a name="l01350"></a><span class="lineno"> 1350</span>  }</div><div class="line"><a name="l01351"></a><span class="lineno"> 1351</span> </div><div class="line"><a name="l01352"></a><span class="lineno"> 1352</span> <span class="preprocessor">#if RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l01353"></a><span class="lineno"> 1353</span>  <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& AddMember(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&& name, <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&& value, Allocator& allocator) {</div><div class="line"><a name="l01354"></a><span class="lineno"> 1354</span>  <span class="keywordflow">return</span> AddMember(name, value, allocator);</div><div class="line"><a name="l01355"></a><span class="lineno"> 1355</span>  }</div><div class="line"><a name="l01356"></a><span class="lineno"> 1356</span>  <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& AddMember(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&& name, <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& value, Allocator& allocator) {</div><div class="line"><a name="l01357"></a><span class="lineno"> 1357</span>  <span class="keywordflow">return</span> AddMember(name, value, allocator);</div><div class="line"><a name="l01358"></a><span class="lineno"> 1358</span>  }</div><div class="line"><a name="l01359"></a><span class="lineno"> 1359</span>  <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& AddMember(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& name, <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&& value, Allocator& allocator) {</div><div class="line"><a name="l01360"></a><span class="lineno"> 1360</span>  <span class="keywordflow">return</span> AddMember(name, value, allocator);</div><div class="line"><a name="l01361"></a><span class="lineno"> 1361</span>  }</div><div class="line"><a name="l01362"></a><span class="lineno"> 1362</span>  <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& 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>&& value, Allocator& allocator) {</div><div class="line"><a name="l01363"></a><span class="lineno"> 1363</span>  <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>  <span class="keywordflow">return</span> AddMember(n, value, allocator);</div><div class="line"><a name="l01365"></a><span class="lineno"> 1365</span>  }</div><div class="line"><a name="l01366"></a><span class="lineno"> 1366</span> <span class="preprocessor">#endif // RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l01367"></a><span class="lineno"> 1367</span> </div><div class="line"><a name="l01368"></a><span class="lineno"> 1368</span> <span class="comment"></span></div><div class="line"><a name="l01369"></a><span class="lineno"> 1369</span> <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> <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> <span class="comment"> \param value Value of any type.</span></div><div class="line"><a name="l01372"></a><span class="lineno"> 1372</span> <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> <span class="comment"> \return The value itself for fluent API.</span></div><div class="line"><a name="l01374"></a><span class="lineno"> 1374</span> <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> <span class="comment"> \pre IsObject()</span></div><div class="line"><a name="l01376"></a><span class="lineno"> 1376</span> <span class="comment"> \post value.IsNull()</span></div><div class="line"><a name="l01377"></a><span class="lineno"> 1377</span> <span class="comment"> \note Amortized Constant time complexity.</span></div><div class="line"><a name="l01378"></a><span class="lineno"> 1378</span> <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>  <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& <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>& value, Allocator& allocator) {</div><div class="line"><a name="l01380"></a><span class="lineno"> 1380</span>  <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>  <span class="keywordflow">return</span> AddMember(n, value, allocator);</div><div class="line"><a name="l01382"></a><span class="lineno"> 1382</span>  }</div><div class="line"><a name="l01383"></a><span class="lineno"> 1383</span> <span class="comment"></span></div><div class="line"><a name="l01384"></a><span class="lineno"> 1384</span> <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> <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> <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> <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> <span class="comment"> \return The value itself for fluent API.</span></div><div class="line"><a name="l01389"></a><span class="lineno"> 1389</span> <span class="comment"> \pre IsObject()</span></div><div class="line"><a name="l01390"></a><span class="lineno"> 1390</span> <span class="comment"> \note This overload is needed to avoid clashes with the generic primitive type AddMember(StringRefType,T,Allocator&) overload below.</span></div><div class="line"><a name="l01391"></a><span class="lineno"> 1391</span> <span class="comment"> \note Amortized Constant time complexity.</span></div><div class="line"><a name="l01392"></a><span class="lineno"> 1392</span> <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>  <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& <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& allocator) {</div><div class="line"><a name="l01394"></a><span class="lineno"> 1394</span>  <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>  <span class="keywordflow">return</span> AddMember(name, v, allocator);</div><div class="line"><a name="l01396"></a><span class="lineno"> 1396</span>  }</div><div class="line"><a name="l01397"></a><span class="lineno"> 1397</span> <span class="comment"></span></div><div class="line"><a name="l01398"></a><span class="lineno"> 1398</span> <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> <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> <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> <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> <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> <span class="comment"> \return The value itself for fluent API.</span></div><div class="line"><a name="l01404"></a><span class="lineno"> 1404</span> <span class="comment"> \pre IsObject()</span></div><div class="line"><a name="l01405"></a><span class="lineno"> 1405</span> <span class="comment"></span></div><div class="line"><a name="l01406"></a><span class="lineno"> 1406</span> <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> <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> <span class="comment"> referencing character strings with insufficient lifetime, use</span></div><div class="line"><a name="l01409"></a><span class="lineno"> 1409</span> <span class="comment"> \ref AddMember(StringRefType, GenericValue&, Allocator&) or \ref</span></div><div class="line"><a name="l01410"></a><span class="lineno"> 1410</span> <span class="comment"> AddMember(StringRefType, StringRefType, Allocator&).</span></div><div class="line"><a name="l01411"></a><span class="lineno"> 1411</span> <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> <span class="comment"> use an explicit cast instead, if needed.</span></div><div class="line"><a name="l01413"></a><span class="lineno"> 1413</span> <span class="comment"> \note Amortized Constant time complexity.</span></div><div class="line"><a name="l01414"></a><span class="lineno"> 1414</span> <span class="comment"> */</span></div><div class="line"><a name="l01415"></a><span class="lineno"> 1415</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div><div class="line"><a name="l01416"></a><span class="lineno"> 1416</span>  RAPIDJSON_DISABLEIF_RETURN((internal::OrExpr<internal::IsPointer<T>, internal::IsGenericValue<T> >), (<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&))</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>  AddMember(<a class="code" href="structrapidjson_1_1_generic_string_ref.html">StringRefType</a> name, T value, Allocator& allocator) {</div><div class="line"><a name="l01418"></a><span class="lineno"> 1418</span>  <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>  <span class="keywordflow">return</span> AddMember(n, value, allocator);</div><div class="line"><a name="l01420"></a><span class="lineno"> 1420</span>  }</div><div class="line"><a name="l01421"></a><span class="lineno"> 1421</span> <span class="comment"></span></div><div class="line"><a name="l01422"></a><span class="lineno"> 1422</span> <span class="comment"> //! Remove all members in the object.</span></div><div class="line"><a name="l01423"></a><span class="lineno"> 1423</span> <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> <span class="comment"> \note Linear time complexity.</span></div><div class="line"><a name="l01425"></a><span class="lineno"> 1425</span> <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>  <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>  <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>  <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>  m->~Member();</div><div class="line"><a name="l01430"></a><span class="lineno"> 1430</span>  data_.o.size = 0;</div><div class="line"><a name="l01431"></a><span class="lineno"> 1431</span>  }</div><div class="line"><a name="l01432"></a><span class="lineno"> 1432</span> <span class="comment"></span></div><div class="line"><a name="l01433"></a><span class="lineno"> 1433</span> <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> <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> <span class="comment"> \return Whether the member existed.</span></div><div class="line"><a name="l01436"></a><span class="lineno"> 1436</span> <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> <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> <span class="comment"> relative order of the remaining members.</span></div><div class="line"><a name="l01439"></a><span class="lineno"> 1439</span> <span class="comment"> \note Linear time complexity.</span></div><div class="line"><a name="l01440"></a><span class="lineno"> 1440</span> <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>  <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>  <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>  <span class="keywordflow">return</span> RemoveMember(n);</div><div class="line"><a name="l01444"></a><span class="lineno"> 1444</span>  }</div><div class="line"><a name="l01445"></a><span class="lineno"> 1445</span> </div><div class="line"><a name="l01446"></a><span class="lineno"> 1446</span> <span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l01447"></a><span class="lineno"> 1447</span>  <span class="keywordtype">bool</span> RemoveMember(<span class="keyword">const</span> std::basic_string<Ch>& 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> <span class="preprocessor">#endif</span></div><div class="line"><a name="l01449"></a><span class="lineno"> 1449</span> </div><div class="line"><a name="l01450"></a><span class="lineno"> 1450</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> SourceAllocator></div><div class="line"><a name="l01451"></a><span class="lineno"> 1451</span>  <span class="keywordtype">bool</span> RemoveMember(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue<Encoding, SourceAllocator></a>& name) {</div><div class="line"><a name="l01452"></a><span class="lineno"> 1452</span>  <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>  <span class="keywordflow">if</span> (m != MemberEnd()) {</div><div class="line"><a name="l01454"></a><span class="lineno"> 1454</span>  RemoveMember(m);</div><div class="line"><a name="l01455"></a><span class="lineno"> 1455</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l01456"></a><span class="lineno"> 1456</span>  }</div><div class="line"><a name="l01457"></a><span class="lineno"> 1457</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l01458"></a><span class="lineno"> 1458</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01459"></a><span class="lineno"> 1459</span>  }</div><div class="line"><a name="l01460"></a><span class="lineno"> 1460</span> <span class="comment"></span></div><div class="line"><a name="l01461"></a><span class="lineno"> 1461</span> <span class="comment"> //! Remove a member in object by iterator.</span></div><div class="line"><a name="l01462"></a><span class="lineno"> 1462</span> <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> <span class="comment"> \return the new iterator after removal.</span></div><div class="line"><a name="l01464"></a><span class="lineno"> 1464</span> <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> <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> <span class="comment"> relative order of the remaining members.</span></div><div class="line"><a name="l01467"></a><span class="lineno"> 1467</span> <span class="comment"> \note Constant time complexity.</span></div><div class="line"><a name="l01468"></a><span class="lineno"> 1468</span> <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>  <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>  <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>  <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 > 0);</div><div class="line"><a name="l01472"></a><span class="lineno"> 1472</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>(GetMembersPointer() != 0);</div><div class="line"><a name="l01473"></a><span class="lineno"> 1473</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>(m >= MemberBegin() && m < MemberEnd());</div><div class="line"><a name="l01474"></a><span class="lineno"> 1474</span> </div><div class="line"><a name="l01475"></a><span class="lineno"> 1475</span>  <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>  <span class="keywordflow">if</span> (data_.o.size > 1 && m != last)</div><div class="line"><a name="l01477"></a><span class="lineno"> 1477</span>  *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>  <span class="keywordflow">else</span></div><div class="line"><a name="l01479"></a><span class="lineno"> 1479</span>  m->~Member(); <span class="comment">// Only one left, just destroy</span></div><div class="line"><a name="l01480"></a><span class="lineno"> 1480</span>  --data_.o.size;</div><div class="line"><a name="l01481"></a><span class="lineno"> 1481</span>  <span class="keywordflow">return</span> m;</div><div class="line"><a name="l01482"></a><span class="lineno"> 1482</span>  }</div><div class="line"><a name="l01483"></a><span class="lineno"> 1483</span> <span class="comment"></span></div><div class="line"><a name="l01484"></a><span class="lineno"> 1484</span> <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> <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> <span class="comment"> \pre IsObject() == true && \ref MemberBegin() <= \c pos < \ref MemberEnd()</span></div><div class="line"><a name="l01487"></a><span class="lineno"> 1487</span> <span class="comment"> \return Iterator following the removed element.</span></div><div class="line"><a name="l01488"></a><span class="lineno"> 1488</span> <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> <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> <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> <span class="comment"> \note Linear time complexity.</span></div><div class="line"><a name="l01492"></a><span class="lineno"> 1492</span> <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>  <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>  <span class="keywordflow">return</span> EraseMember(pos, pos +1);</div><div class="line"><a name="l01495"></a><span class="lineno"> 1495</span>  }</div><div class="line"><a name="l01496"></a><span class="lineno"> 1496</span> <span class="comment"></span></div><div class="line"><a name="l01497"></a><span class="lineno"> 1497</span> <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> <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> <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> <span class="comment"> \pre IsObject() == true && \ref MemberBegin() <= \c first <= \c last <= \ref MemberEnd()</span></div><div class="line"><a name="l01501"></a><span class="lineno"> 1501</span> <span class="comment"> \return Iterator following the last removed element.</span></div><div class="line"><a name="l01502"></a><span class="lineno"> 1502</span> <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> <span class="comment"> members.</span></div><div class="line"><a name="l01504"></a><span class="lineno"> 1504</span> <span class="comment"> \note Linear time complexity.</span></div><div class="line"><a name="l01505"></a><span class="lineno"> 1505</span> <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>  <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>  <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>  <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 > 0);</div><div class="line"><a name="l01509"></a><span class="lineno"> 1509</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>(GetMembersPointer() != 0);</div><div class="line"><a name="l01510"></a><span class="lineno"> 1510</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>(first >= MemberBegin());</div><div class="line"><a name="l01511"></a><span class="lineno"> 1511</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>(first <= last);</div><div class="line"><a name="l01512"></a><span class="lineno"> 1512</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>(last <= MemberEnd());</div><div class="line"><a name="l01513"></a><span class="lineno"> 1513</span> </div><div class="line"><a name="l01514"></a><span class="lineno"> 1514</span>  <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>  <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>  itr->~Member();</div><div class="line"><a name="l01517"></a><span class="lineno"> 1517</span>  std::memmove(static_cast<void*>(&*pos), &*last, static_cast<size_t>(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>  data_.o.size -= <span class="keyword">static_cast<</span><a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a><span class="keyword">></span>(last - first);</div><div class="line"><a name="l01519"></a><span class="lineno"> 1519</span>  <span class="keywordflow">return</span> pos;</div><div class="line"><a name="l01520"></a><span class="lineno"> 1520</span>  }</div><div class="line"><a name="l01521"></a><span class="lineno"> 1521</span> <span class="comment"></span></div><div class="line"><a name="l01522"></a><span class="lineno"> 1522</span> <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> <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> <span class="comment"> \return Whether the member existed.</span></div><div class="line"><a name="l01525"></a><span class="lineno"> 1525</span> <span class="comment"> \note Linear time complexity.</span></div><div class="line"><a name="l01526"></a><span class="lineno"> 1526</span> <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>  <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>  <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>  <span class="keywordflow">return</span> EraseMember(n);</div><div class="line"><a name="l01530"></a><span class="lineno"> 1530</span>  }</div><div class="line"><a name="l01531"></a><span class="lineno"> 1531</span> </div><div class="line"><a name="l01532"></a><span class="lineno"> 1532</span> <span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l01533"></a><span class="lineno"> 1533</span>  <span class="keywordtype">bool</span> EraseMember(<span class="keyword">const</span> std::basic_string<Ch>& 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> <span class="preprocessor">#endif</span></div><div class="line"><a name="l01535"></a><span class="lineno"> 1535</span> </div><div class="line"><a name="l01536"></a><span class="lineno"> 1536</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> SourceAllocator></div><div class="line"><a name="l01537"></a><span class="lineno"> 1537</span>  <span class="keywordtype">bool</span> EraseMember(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue<Encoding, SourceAllocator></a>& name) {</div><div class="line"><a name="l01538"></a><span class="lineno"> 1538</span>  <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>  <span class="keywordflow">if</span> (m != MemberEnd()) {</div><div class="line"><a name="l01540"></a><span class="lineno"> 1540</span>  EraseMember(m);</div><div class="line"><a name="l01541"></a><span class="lineno"> 1541</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l01542"></a><span class="lineno"> 1542</span>  }</div><div class="line"><a name="l01543"></a><span class="lineno"> 1543</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l01544"></a><span class="lineno"> 1544</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01545"></a><span class="lineno"> 1545</span>  }</div><div class="line"><a name="l01546"></a><span class="lineno"> 1546</span> </div><div class="line"><a name="l01547"></a><span class="lineno"> 1547</span>  <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>  <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> <span class="comment"></span></div><div class="line"><a name="l01550"></a><span class="lineno"> 1550</span> <span class="comment"> //@}</span></div><div class="line"><a name="l01551"></a><span class="lineno"> 1551</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l01552"></a><span class="lineno"> 1552</span> <span class="comment"> //!@name Array</span></div><div class="line"><a name="l01553"></a><span class="lineno"> 1553</span> <span class="comment"></span><span class="comment"> //@{</span></div><div class="line"><a name="l01554"></a><span class="lineno"> 1554</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l01555"></a><span class="lineno"> 1555</span> <span class="comment"> //! Set this value as an empty array.</span></div><div class="line"><a name="l01556"></a><span class="lineno"> 1556</span> <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>  <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& <a class="code" href="classrapidjson_1_1_generic_value.html#a25069c76d045b058e54835d8c467c789">SetArray</a>() { this->~<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> <span class="comment"></span></div><div class="line"><a name="l01559"></a><span class="lineno"> 1559</span> <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> <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> <span class="comment"></span></div><div class="line"><a name="l01562"></a><span class="lineno"> 1562</span> <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> <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> <span class="comment"></span></div><div class="line"><a name="l01565"></a><span class="lineno"> 1565</span> <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> <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> <span class="comment"></span></div><div class="line"><a name="l01568"></a><span class="lineno"> 1568</span> <span class="comment"> //! Remove all elements in the array.</span></div><div class="line"><a name="l01569"></a><span class="lineno"> 1569</span> <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> <span class="comment"> \note Linear time complexity.</span></div><div class="line"><a name="l01571"></a><span class="lineno"> 1571</span> <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>  <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>  <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>  <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>  <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>  v->~GenericValue();</div><div class="line"><a name="l01577"></a><span class="lineno"> 1577</span>  data_.a.size = 0;</div><div class="line"><a name="l01578"></a><span class="lineno"> 1578</span>  }</div><div class="line"><a name="l01579"></a><span class="lineno"> 1579</span> <span class="comment"></span></div><div class="line"><a name="l01580"></a><span class="lineno"> 1580</span> <span class="comment"> //! Get an element from array by index.</span></div><div class="line"><a name="l01581"></a><span class="lineno"> 1581</span> <span class="comment"></span><span class="comment"> /*! \pre IsArray() == true</span></div><div class="line"><a name="l01582"></a><span class="lineno"> 1582</span> <span class="comment"> \param index Zero-based index of element.</span></div><div class="line"><a name="l01583"></a><span class="lineno"> 1583</span> <span class="comment"> \see operator[](T*)</span></div><div class="line"><a name="l01584"></a><span class="lineno"> 1584</span> <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>  <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& <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>  <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>  <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 < data_.a.size);</div><div class="line"><a name="l01588"></a><span class="lineno"> 1588</span>  <span class="keywordflow">return</span> GetElementsPointer()[index];</div><div class="line"><a name="l01589"></a><span class="lineno"> 1589</span>  }</div><div class="line"><a name="l01590"></a><span class="lineno"> 1590</span>  <span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& 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<</span><a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&<span class="keyword">></span>(*this)[index]; }</div><div class="line"><a name="l01591"></a><span class="lineno"> 1591</span> <span class="comment"></span></div><div class="line"><a name="l01592"></a><span class="lineno"> 1592</span> <span class="comment"> //! Element iterator</span></div><div class="line"><a name="l01593"></a><span class="lineno"> 1593</span> <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>  <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> <span class="comment"> //! \em Past-the-end element iterator</span></div><div class="line"><a name="l01596"></a><span class="lineno"> 1596</span> <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>  <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> <span class="comment"> //! Constant element iterator</span></div><div class="line"><a name="l01599"></a><span class="lineno"> 1599</span> <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>  <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<</span><a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&<span class="keyword">></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> <span class="comment"> //! Constant \em past-the-end element iterator</span></div><div class="line"><a name="l01602"></a><span class="lineno"> 1602</span> <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>  <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<</span><a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&<span class="keyword">></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> <span class="comment"></span></div><div class="line"><a name="l01605"></a><span class="lineno"> 1605</span> <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> <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> <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> <span class="comment"> \return The value itself for fluent API.</span></div><div class="line"><a name="l01609"></a><span class="lineno"> 1609</span> <span class="comment"> \note Linear time complexity.</span></div><div class="line"><a name="l01610"></a><span class="lineno"> 1610</span> <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>  <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& <a class="code" href="classrapidjson_1_1_generic_value.html#a17971ba2bcd4eb1716098fdfe9182386">Reserve</a>(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> newCapacity, Allocator &allocator) {</div><div class="line"><a name="l01612"></a><span class="lineno"> 1612</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());</div><div class="line"><a name="l01613"></a><span class="lineno"> 1613</span>  <span class="keywordflow">if</span> (newCapacity > data_.a.capacity) {</div><div class="line"><a name="l01614"></a><span class="lineno"> 1614</span>  SetElementsPointer(reinterpret_cast<GenericValue*>(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>  data_.a.capacity = newCapacity;</div><div class="line"><a name="l01616"></a><span class="lineno"> 1616</span>  }</div><div class="line"><a name="l01617"></a><span class="lineno"> 1617</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l01618"></a><span class="lineno"> 1618</span>  }</div><div class="line"><a name="l01619"></a><span class="lineno"> 1619</span> <span class="comment"></span></div><div class="line"><a name="l01620"></a><span class="lineno"> 1620</span> <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> <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> <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> <span class="comment"> \pre IsArray() == true</span></div><div class="line"><a name="l01624"></a><span class="lineno"> 1624</span> <span class="comment"> \post value.IsNull() == true</span></div><div class="line"><a name="l01625"></a><span class="lineno"> 1625</span> <span class="comment"> \return The value itself for fluent API.</span></div><div class="line"><a name="l01626"></a><span class="lineno"> 1626</span> <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> <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> <span class="comment"> \note Amortized constant time complexity.</span></div><div class="line"><a name="l01629"></a><span class="lineno"> 1629</span> <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>  <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& <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>& value, Allocator& allocator) {</div><div class="line"><a name="l01631"></a><span class="lineno"> 1631</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());</div><div class="line"><a name="l01632"></a><span class="lineno"> 1632</span>  <span class="keywordflow">if</span> (data_.a.size >= data_.a.capacity)</div><div class="line"><a name="l01633"></a><span class="lineno"> 1633</span>  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>  GetElementsPointer()[data_.a.size++].RawAssign(value);</div><div class="line"><a name="l01635"></a><span class="lineno"> 1635</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l01636"></a><span class="lineno"> 1636</span>  }</div><div class="line"><a name="l01637"></a><span class="lineno"> 1637</span> </div><div class="line"><a name="l01638"></a><span class="lineno"> 1638</span> <span class="preprocessor">#if RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l01639"></a><span class="lineno"> 1639</span>  <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& PushBack(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&& value, Allocator& allocator) {</div><div class="line"><a name="l01640"></a><span class="lineno"> 1640</span>  <span class="keywordflow">return</span> PushBack(value, allocator);</div><div class="line"><a name="l01641"></a><span class="lineno"> 1641</span>  }</div><div class="line"><a name="l01642"></a><span class="lineno"> 1642</span> <span class="preprocessor">#endif // RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l01643"></a><span class="lineno"> 1643</span> <span class="comment"></span></div><div class="line"><a name="l01644"></a><span class="lineno"> 1644</span> <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> <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> <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> <span class="comment"> \pre IsArray() == true</span></div><div class="line"><a name="l01648"></a><span class="lineno"> 1648</span> <span class="comment"> \return The value itself for fluent API.</span></div><div class="line"><a name="l01649"></a><span class="lineno"> 1649</span> <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> <span class="comment"> \note Amortized constant time complexity.</span></div><div class="line"><a name="l01651"></a><span class="lineno"> 1651</span> <span class="comment"> \see GenericStringRef</span></div><div class="line"><a name="l01652"></a><span class="lineno"> 1652</span> <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>  <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& <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& allocator) {</div><div class="line"><a name="l01654"></a><span class="lineno"> 1654</span>  <span class="keywordflow">return</span> (*this).template PushBack<StringRefType>(value, allocator);</div><div class="line"><a name="l01655"></a><span class="lineno"> 1655</span>  }</div><div class="line"><a name="l01656"></a><span class="lineno"> 1656</span> <span class="comment"></span></div><div class="line"><a name="l01657"></a><span class="lineno"> 1657</span> <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> <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> <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> <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> <span class="comment"> \pre IsArray() == true</span></div><div class="line"><a name="l01662"></a><span class="lineno"> 1662</span> <span class="comment"> \return The value itself for fluent API.</span></div><div class="line"><a name="l01663"></a><span class="lineno"> 1663</span> <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> <span class="comment"></span></div><div class="line"><a name="l01665"></a><span class="lineno"> 1665</span> <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> <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> <span class="comment"> referencing character strings with insufficient lifetime, use</span></div><div class="line"><a name="l01668"></a><span class="lineno"> 1668</span> <span class="comment"> \ref PushBack(GenericValue&, Allocator&) or \ref</span></div><div class="line"><a name="l01669"></a><span class="lineno"> 1669</span> <span class="comment"> PushBack(StringRefType, Allocator&).</span></div><div class="line"><a name="l01670"></a><span class="lineno"> 1670</span> <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> <span class="comment"> use an explicit cast instead, if needed.</span></div><div class="line"><a name="l01672"></a><span class="lineno"> 1672</span> <span class="comment"> \note Amortized constant time complexity.</span></div><div class="line"><a name="l01673"></a><span class="lineno"> 1673</span> <span class="comment"> */</span></div><div class="line"><a name="l01674"></a><span class="lineno"> 1674</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div><div class="line"><a name="l01675"></a><span class="lineno"> 1675</span>  RAPIDJSON_DISABLEIF_RETURN((internal::OrExpr<internal::IsPointer<T>, internal::IsGenericValue<T> >), (<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&))</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>  PushBack(T value, Allocator& allocator) {</div><div class="line"><a name="l01677"></a><span class="lineno"> 1677</span>  <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>  <span class="keywordflow">return</span> PushBack(v, allocator);</div><div class="line"><a name="l01679"></a><span class="lineno"> 1679</span>  }</div><div class="line"><a name="l01680"></a><span class="lineno"> 1680</span> <span class="comment"></span></div><div class="line"><a name="l01681"></a><span class="lineno"> 1681</span> <span class="comment"> //! Remove the last element in the array.</span></div><div class="line"><a name="l01682"></a><span class="lineno"> 1682</span> <span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l01683"></a><span class="lineno"> 1683</span> <span class="comment"> \note Constant time complexity.</span></div><div class="line"><a name="l01684"></a><span class="lineno"> 1684</span> <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>  <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& <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>  <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>  <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>  GetElementsPointer()[--data_.a.size].~GenericValue();</div><div class="line"><a name="l01689"></a><span class="lineno"> 1689</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l01690"></a><span class="lineno"> 1690</span>  }</div><div class="line"><a name="l01691"></a><span class="lineno"> 1691</span> <span class="comment"></span></div><div class="line"><a name="l01692"></a><span class="lineno"> 1692</span> <span class="comment"> //! Remove an element of array by iterator.</span></div><div class="line"><a name="l01693"></a><span class="lineno"> 1693</span> <span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l01694"></a><span class="lineno"> 1694</span> <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> <span class="comment"> \pre IsArray() == true && \ref Begin() <= \c pos < \ref End()</span></div><div class="line"><a name="l01696"></a><span class="lineno"> 1696</span> <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> <span class="comment"> \note Linear time complexity.</span></div><div class="line"><a name="l01698"></a><span class="lineno"> 1698</span> <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>  <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>  <span class="keywordflow">return</span> Erase(pos, pos + 1);</div><div class="line"><a name="l01701"></a><span class="lineno"> 1701</span>  }</div><div class="line"><a name="l01702"></a><span class="lineno"> 1702</span> <span class="comment"></span></div><div class="line"><a name="l01703"></a><span class="lineno"> 1703</span> <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> <span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l01705"></a><span class="lineno"> 1705</span> <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> <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> <span class="comment"> \pre IsArray() == true && \ref Begin() <= \c first <= \c last <= \ref End()</span></div><div class="line"><a name="l01708"></a><span class="lineno"> 1708</span> <span class="comment"> \return Iterator following the last removed element.</span></div><div class="line"><a name="l01709"></a><span class="lineno"> 1709</span> <span class="comment"> \note Linear time complexity.</span></div><div class="line"><a name="l01710"></a><span class="lineno"> 1710</span> <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>  <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>  <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>  <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 > 0);</div><div class="line"><a name="l01714"></a><span class="lineno"> 1714</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>(GetElementsPointer() != 0);</div><div class="line"><a name="l01715"></a><span class="lineno"> 1715</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>(first >= Begin());</div><div class="line"><a name="l01716"></a><span class="lineno"> 1716</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>(first <= last);</div><div class="line"><a name="l01717"></a><span class="lineno"> 1717</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>(last <= End());</div><div class="line"><a name="l01718"></a><span class="lineno"> 1718</span>  <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>  <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>  itr-><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>  std::memmove(static_cast<void*>(pos), last, static_cast<size_t>(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>  data_.a.size -= <span class="keyword">static_cast<</span><a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a><span class="keyword">></span>(last - first);</div><div class="line"><a name="l01723"></a><span class="lineno"> 1723</span>  <span class="keywordflow">return</span> pos;</div><div class="line"><a name="l01724"></a><span class="lineno"> 1724</span>  }</div><div class="line"><a name="l01725"></a><span class="lineno"> 1725</span> </div><div class="line"><a name="l01726"></a><span class="lineno"> 1726</span>  <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>  <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> <span class="comment"></span></div><div class="line"><a name="l01729"></a><span class="lineno"> 1729</span> <span class="comment"> //@}</span></div><div class="line"><a name="l01730"></a><span class="lineno"> 1730</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l01731"></a><span class="lineno"> 1731</span> <span class="comment"> //!@name Number</span></div><div class="line"><a name="l01732"></a><span class="lineno"> 1732</span> <span class="comment"></span><span class="comment"> //@{</span></div><div class="line"><a name="l01733"></a><span class="lineno"> 1733</span> <span class="comment"></span></div><div class="line"><a name="l01734"></a><span class="lineno"> 1734</span>  <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 & kIntFlag); <span class="keywordflow">return</span> data_.n.i.i; }</div><div class="line"><a name="l01735"></a><span class="lineno"> 1735</span>  <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 & kUintFlag); <span class="keywordflow">return</span> data_.n.u.u; }</div><div class="line"><a name="l01736"></a><span class="lineno"> 1736</span>  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 & kInt64Flag); <span class="keywordflow">return</span> data_.n.i64; }</div><div class="line"><a name="l01737"></a><span class="lineno"> 1737</span>  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 & kUint64Flag); <span class="keywordflow">return</span> data_.n.u64; }</div><div class="line"><a name="l01738"></a><span class="lineno"> 1738</span> <span class="comment"></span></div><div class="line"><a name="l01739"></a><span class="lineno"> 1739</span> <span class="comment"> //! Get the value as double type.</span></div><div class="line"><a name="l01740"></a><span class="lineno"> 1740</span> <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> <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>  <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>  <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>  <span class="keywordflow">if</span> ((data_.f.flags & 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>  <span class="keywordflow">if</span> ((data_.f.flags & kIntFlag) != 0) <span class="keywordflow">return</span> data_.n.i.i; <span class="comment">// int -> double</span></div><div class="line"><a name="l01746"></a><span class="lineno"> 1746</span>  <span class="keywordflow">if</span> ((data_.f.flags & kUintFlag) != 0) <span class="keywordflow">return</span> data_.n.u.u; <span class="comment">// unsigned -> double</span></div><div class="line"><a name="l01747"></a><span class="lineno"> 1747</span>  <span class="keywordflow">if</span> ((data_.f.flags & kInt64Flag) != 0) <span class="keywordflow">return</span> <span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>(data_.n.i64); <span class="comment">// int64_t -> double (may lose precision)</span></div><div class="line"><a name="l01748"></a><span class="lineno"> 1748</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 & kUint64Flag) != 0); <span class="keywordflow">return</span> <span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>(data_.n.u64); <span class="comment">// uint64_t -> double (may lose precision)</span></div><div class="line"><a name="l01749"></a><span class="lineno"> 1749</span>  }</div><div class="line"><a name="l01750"></a><span class="lineno"> 1750</span> <span class="comment"></span></div><div class="line"><a name="l01751"></a><span class="lineno"> 1751</span> <span class="comment"> //! Get the value as float type.</span></div><div class="line"><a name="l01752"></a><span class="lineno"> 1752</span> <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> <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>  <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>  <span class="keywordflow">return</span> <span class="keyword">static_cast<</span><span class="keywordtype">float</span><span class="keyword">></span>(GetDouble());</div><div class="line"><a name="l01756"></a><span class="lineno"> 1756</span>  }</div><div class="line"><a name="l01757"></a><span class="lineno"> 1757</span> </div><div class="line"><a name="l01758"></a><span class="lineno"> 1758</span>  <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& SetInt(<span class="keywordtype">int</span> i) { this->~<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>  <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& SetUint(<span class="keywordtype">unsigned</span> u) { this->~<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>  <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& SetInt64(int64_t i64) { this->~<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>  <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& SetUint64(uint64_t u64) { this->~<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>  <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& SetDouble(<span class="keywordtype">double</span> d) { this->~<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>  <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& SetFloat(<span class="keywordtype">float</span> f) { this->~<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<double>(f)); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l01764"></a><span class="lineno"> 1764</span> <span class="comment"></span></div><div class="line"><a name="l01765"></a><span class="lineno"> 1765</span> <span class="comment"> //@}</span></div><div class="line"><a name="l01766"></a><span class="lineno"> 1766</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l01767"></a><span class="lineno"> 1767</span> <span class="comment"> //!@name String</span></div><div class="line"><a name="l01768"></a><span class="lineno"> 1768</span> <span class="comment"></span><span class="comment"> //@{</span></div><div class="line"><a name="l01769"></a><span class="lineno"> 1769</span> <span class="comment"></span></div><div class="line"><a name="l01770"></a><span class="lineno"> 1770</span>  <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 & kInlineStrFlag) ? data_.ss.str : GetStringPointer(); }</div><div class="line"><a name="l01771"></a><span class="lineno"> 1771</span> <span class="comment"></span></div><div class="line"><a name="l01772"></a><span class="lineno"> 1772</span> <span class="comment"> //! Get the length of string.</span></div><div class="line"><a name="l01773"></a><span class="lineno"> 1773</span> <span class="comment"></span><span class="comment"> /*! Since rapidjson permits "\\u0000" 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> <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>  <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 & kInlineStrFlag) ? (data_.ss.GetLength()) : data_.s.length); }</div><div class="line"><a name="l01776"></a><span class="lineno"> 1776</span> <span class="comment"></span></div><div class="line"><a name="l01777"></a><span class="lineno"> 1777</span> <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> <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> <span class="comment"> \param s source string pointer. </span></div><div class="line"><a name="l01780"></a><span class="lineno"> 1780</span> <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> <span class="comment"> \return The value itself for fluent API.</span></div><div class="line"><a name="l01782"></a><span class="lineno"> 1782</span> <span class="comment"> \post IsString() == true && GetString() == s && GetStringLength() == length</span></div><div class="line"><a name="l01783"></a><span class="lineno"> 1783</span> <span class="comment"> \see SetString(StringRefType)</span></div><div class="line"><a name="l01784"></a><span class="lineno"> 1784</span> <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>  <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& <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> <span class="comment"></span></div><div class="line"><a name="l01787"></a><span class="lineno"> 1787</span> <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> <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> <span class="comment"> \return The value itself for fluent API.</span></div><div class="line"><a name="l01790"></a><span class="lineno"> 1790</span> <span class="comment"> \post IsString() == true && GetString() == s && GetStringLength() == s.length</span></div><div class="line"><a name="l01791"></a><span class="lineno"> 1791</span> <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>  <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& <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->~<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> <span class="comment"></span></div><div class="line"><a name="l01794"></a><span class="lineno"> 1794</span> <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> <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> <span class="comment"> \param s source string. </span></div><div class="line"><a name="l01797"></a><span class="lineno"> 1797</span> <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> <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> <span class="comment"> \return The value itself for fluent API.</span></div><div class="line"><a name="l01800"></a><span class="lineno"> 1800</span> <span class="comment"> \post IsString() == true && GetString() != s && strcmp(GetString(),s) == 0 && GetStringLength() == length</span></div><div class="line"><a name="l01801"></a><span class="lineno"> 1801</span> <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>  <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& <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& 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> <span class="comment"></span></div><div class="line"><a name="l01804"></a><span class="lineno"> 1804</span> <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> <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> <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> <span class="comment"> \return The value itself for fluent API.</span></div><div class="line"><a name="l01808"></a><span class="lineno"> 1808</span> <span class="comment"> \post IsString() == true && GetString() != s && strcmp(GetString(),s) == 0 && GetStringLength() == length</span></div><div class="line"><a name="l01809"></a><span class="lineno"> 1809</span> <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>  <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& <a class="code" href="classrapidjson_1_1_generic_value.html#ab4babf200cac2dacb412a3ea279ddf5b">SetString</a>(<span class="keyword">const</span> Ch* s, Allocator& 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> <span class="comment"></span></div><div class="line"><a name="l01812"></a><span class="lineno"> 1812</span> <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> <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> <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> <span class="comment"> \return The value itself for fluent API.</span></div><div class="line"><a name="l01816"></a><span class="lineno"> 1816</span> <span class="comment"> \post IsString() == true && GetString() != s.s && strcmp(GetString(),s) == 0 && GetStringLength() == length</span></div><div class="line"><a name="l01817"></a><span class="lineno"> 1817</span> <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>  <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& <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& allocator) { this->~<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> </div><div class="line"><a name="l01820"></a><span class="lineno"> 1820</span> <span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l01821"></a><span class="lineno"> 1821</span> <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> <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> <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> <span class="comment"> \return The value itself for fluent API.</span></div><div class="line"><a name="l01825"></a><span class="lineno"> 1825</span> <span class="comment"> \post IsString() == true && GetString() != s.data() && strcmp(GetString(),s.data() == 0 && GetStringLength() == s.size()</span></div><div class="line"><a name="l01826"></a><span class="lineno"> 1826</span> <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> <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>  <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& <a class="code" href="classrapidjson_1_1_generic_value.html#a3e930bffb40a78e570e3deef461f0532">SetString</a>(<span class="keyword">const</span> std::basic_string<Ch>& s, Allocator& 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> <span class="preprocessor">#endif</span></div><div class="line"><a name="l01830"></a><span class="lineno"> 1830</span> <span class="comment"></span></div><div class="line"><a name="l01831"></a><span class="lineno"> 1831</span> <span class="comment"> //@}</span></div><div class="line"><a name="l01832"></a><span class="lineno"> 1832</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l01833"></a><span class="lineno"> 1833</span> <span class="comment"> //!@name Array</span></div><div class="line"><a name="l01834"></a><span class="lineno"> 1834</span> <span class="comment"></span><span class="comment"> //@{</span></div><div class="line"><a name="l01835"></a><span class="lineno"> 1835</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l01836"></a><span class="lineno"> 1836</span> <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> <span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l01838"></a><span class="lineno"> 1838</span> <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<Ch></span></div><div class="line"><a name="l01839"></a><span class="lineno"> 1839</span> <span class="comment"> */</span></div><div class="line"><a name="l01840"></a><span class="lineno"> 1840</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></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>  <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<ValueType, T>::Is(*<span class="keyword">this</span>); }</div><div class="line"><a name="l01842"></a><span class="lineno"> 1842</span> </div><div class="line"><a name="l01843"></a><span class="lineno"> 1843</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div><div class="line"><a name="l01844"></a><span class="lineno"> 1844</span>  T Get()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> internal::TypeHelper<ValueType, T>::Get(*<span class="keyword">this</span>); }</div><div class="line"><a name="l01845"></a><span class="lineno"> 1845</span> </div><div class="line"><a name="l01846"></a><span class="lineno"> 1846</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div><div class="line"><a name="l01847"></a><span class="lineno"> 1847</span>  T Get() { <span class="keywordflow">return</span> internal::TypeHelper<ValueType, T>::Get(*<span class="keyword">this</span>); }</div><div class="line"><a name="l01848"></a><span class="lineno"> 1848</span> </div><div class="line"><a name="l01849"></a><span class="lineno"> 1849</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T></div><div class="line"><a name="l01850"></a><span class="lineno"> 1850</span>  <a class="code" href="classrapidjson_1_1_generic_value.html">ValueType</a>& Set(<span class="keyword">const</span> T& data) { <span class="keywordflow">return</span> internal::TypeHelper<ValueType, T>::Set(*<span class="keyword">this</span>, data); }</div><div class="line"><a name="l01851"></a><span class="lineno"> 1851</span> </div><div class="line"><a name="l01852"></a><span class="lineno"> 1852</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T></div><div class="line"><a name="l01853"></a><span class="lineno"> 1853</span>  <a class="code" href="classrapidjson_1_1_generic_value.html">ValueType</a>& Set(<span class="keyword">const</span> T& data, <a class="code" href="classrapidjson_1_1_allocator.html">AllocatorType</a>& allocator) { <span class="keywordflow">return</span> internal::TypeHelper<ValueType, T>::Set(*<span class="keyword">this</span>, data, allocator); }</div><div class="line"><a name="l01854"></a><span class="lineno"> 1854</span> <span class="comment"></span></div><div class="line"><a name="l01855"></a><span class="lineno"> 1855</span> <span class="comment"> //@}</span></div><div class="line"><a name="l01856"></a><span class="lineno"> 1856</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l01857"></a><span class="lineno"> 1857</span> <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> <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> <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> <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> <span class="comment"> \tparam Handler type of handler.</span></div><div class="line"><a name="l01862"></a><span class="lineno"> 1862</span> <span class="comment"> \param handler An object implementing concept Handler.</span></div><div class="line"><a name="l01863"></a><span class="lineno"> 1863</span> <span class="comment"> */</span></div><div class="line"><a name="l01864"></a><span class="lineno"> 1864</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> Handler></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>  <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>& handler)<span class="keyword"> const </span>{</div><div class="line"><a name="l01866"></a><span class="lineno"> 1866</span>  <span class="keywordflow">switch</span>(GetType()) {</div><div class="line"><a name="l01867"></a><span class="lineno"> 1867</span>  <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>  <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>  <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> </div><div class="line"><a name="l01871"></a><span class="lineno"> 1871</span>  <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>  <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>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01874"></a><span class="lineno"> 1874</span>  <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>  <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->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>  <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->name.GetString(), m->name.GetStringLength(), (m->name.data_.f.flags & kCopyFlag) != 0)))</div><div class="line"><a name="l01877"></a><span class="lineno"> 1877</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01878"></a><span class="lineno"> 1878</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>(!m->value.Accept(handler)))</div><div class="line"><a name="l01879"></a><span class="lineno"> 1879</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01880"></a><span class="lineno"> 1880</span>  }</div><div class="line"><a name="l01881"></a><span class="lineno"> 1881</span>  <span class="keywordflow">return</span> handler.EndObject(data_.o.size);</div><div class="line"><a name="l01882"></a><span class="lineno"> 1882</span> </div><div class="line"><a name="l01883"></a><span class="lineno"> 1883</span>  <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>  <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>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01886"></a><span class="lineno"> 1886</span>  <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>  <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->Accept(handler)))</div><div class="line"><a name="l01888"></a><span class="lineno"> 1888</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01889"></a><span class="lineno"> 1889</span>  <span class="keywordflow">return</span> handler.EndArray(data_.a.size);</div><div class="line"><a name="l01890"></a><span class="lineno"> 1890</span>  </div><div class="line"><a name="l01891"></a><span class="lineno"> 1891</span>  <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>  <span class="keywordflow">return</span> handler.String(GetString(), GetStringLength(), (data_.f.flags & kCopyFlag) != 0);</div><div class="line"><a name="l01893"></a><span class="lineno"> 1893</span>  </div><div class="line"><a name="l01894"></a><span class="lineno"> 1894</span>  <span class="keywordflow">default</span>:</div><div class="line"><a name="l01895"></a><span class="lineno"> 1895</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>(GetType() == <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a">kNumberType</a>);</div><div class="line"><a name="l01896"></a><span class="lineno"> 1896</span>  <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>  <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>  <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>  <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>  <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>  }</div><div class="line"><a name="l01902"></a><span class="lineno"> 1902</span>  }</div><div class="line"><a name="l01903"></a><span class="lineno"> 1903</span> </div><div class="line"><a name="l01904"></a><span class="lineno"> 1904</span> <span class="keyword">private</span>:</div><div class="line"><a name="l01905"></a><span class="lineno"> 1905</span>  <span class="keyword">template</span> <<span class="keyword">typename</span>, <span class="keyword">typename</span>> <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>  <span class="keyword">template</span> <<span class="keyword">typename</span>, <span class="keyword">typename</span>, <span class="keyword">typename</span>> <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> </div><div class="line"><a name="l01908"></a><span class="lineno"> 1908</span>  <span class="keyword">enum</span> {</div><div class="line"><a name="l01909"></a><span class="lineno"> 1909</span>  kBoolFlag = 0x0008,</div><div class="line"><a name="l01910"></a><span class="lineno"> 1910</span>  kNumberFlag = 0x0010,</div><div class="line"><a name="l01911"></a><span class="lineno"> 1911</span>  kIntFlag = 0x0020,</div><div class="line"><a name="l01912"></a><span class="lineno"> 1912</span>  kUintFlag = 0x0040,</div><div class="line"><a name="l01913"></a><span class="lineno"> 1913</span>  kInt64Flag = 0x0080,</div><div class="line"><a name="l01914"></a><span class="lineno"> 1914</span>  kUint64Flag = 0x0100,</div><div class="line"><a name="l01915"></a><span class="lineno"> 1915</span>  kDoubleFlag = 0x0200,</div><div class="line"><a name="l01916"></a><span class="lineno"> 1916</span>  kStringFlag = 0x0400,</div><div class="line"><a name="l01917"></a><span class="lineno"> 1917</span>  kCopyFlag = 0x0800,</div><div class="line"><a name="l01918"></a><span class="lineno"> 1918</span>  kInlineStrFlag = 0x1000,</div><div class="line"><a name="l01919"></a><span class="lineno"> 1919</span> </div><div class="line"><a name="l01920"></a><span class="lineno"> 1920</span>  <span class="comment">// Initial flags of different types.</span></div><div class="line"><a name="l01921"></a><span class="lineno"> 1921</span>  kNullFlag = <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a952871e4326b527154fc8aac1ac1f6ff">kNullType</a>,</div><div class="line"><a name="l01922"></a><span class="lineno"> 1922</span>  kTrueFlag = <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a80d9f25b083abce45edbfdd3ba006c8e">kTrueType</a> | kBoolFlag,</div><div class="line"><a name="l01923"></a><span class="lineno"> 1923</span>  kFalseFlag = <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a9f2e7047832dce1029551b5de0f05607">kFalseType</a> | kBoolFlag,</div><div class="line"><a name="l01924"></a><span class="lineno"> 1924</span>  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>  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>  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>  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>  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>  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>  kConstStringFlag = <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4ad6379da3dc04b83a591992bfb9fabba7">kStringType</a> | kStringFlag,</div><div class="line"><a name="l01931"></a><span class="lineno"> 1931</span>  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>  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>  kObjectFlag = <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4acf030b422a32c3647c7c5973bd4dd0a9">kObjectType</a>,</div><div class="line"><a name="l01934"></a><span class="lineno"> 1934</span>  kArrayFlag = <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a058c622e1e7d59419ae58b895cbce468">kArrayType</a>,</div><div class="line"><a name="l01935"></a><span class="lineno"> 1935</span> </div><div class="line"><a name="l01936"></a><span class="lineno"> 1936</span>  kTypeMask = 0x07</div><div class="line"><a name="l01937"></a><span class="lineno"> 1937</span>  };</div><div class="line"><a name="l01938"></a><span class="lineno"> 1938</span> </div><div class="line"><a name="l01939"></a><span class="lineno"> 1939</span>  <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>  <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> </div><div class="line"><a name="l01942"></a><span class="lineno"> 1942</span>  <span class="keyword">struct </span>Flag {</div><div class="line"><a name="l01943"></a><span class="lineno"> 1943</span> <span class="preprocessor">#if RAPIDJSON_48BITPOINTER_OPTIMIZATION</span></div><div class="line"><a name="l01944"></a><span class="lineno"> 1944</span>  <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> <span class="preprocessor">#elif RAPIDJSON_64BIT</span></div><div class="line"><a name="l01946"></a><span class="lineno"> 1946</span>  <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> <span class="preprocessor">#else</span></div><div class="line"><a name="l01948"></a><span class="lineno"> 1948</span>  <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> <span class="preprocessor">#endif</span></div><div class="line"><a name="l01950"></a><span class="lineno"> 1950</span>  uint16_t flags;</div><div class="line"><a name="l01951"></a><span class="lineno"> 1951</span>  };</div><div class="line"><a name="l01952"></a><span class="lineno"> 1952</span> </div><div class="line"><a name="l01953"></a><span class="lineno"> 1953</span>  <span class="keyword">struct </span>String {</div><div class="line"><a name="l01954"></a><span class="lineno"> 1954</span>  <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> length;</div><div class="line"><a name="l01955"></a><span class="lineno"> 1955</span>  <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> hashcode; <span class="comment">//!< reserved</span></div><div class="line"><a name="l01956"></a><span class="lineno"> 1956</span> <span class="comment"></span> <span class="keyword">const</span> Ch* str;</div><div class="line"><a name="l01957"></a><span class="lineno"> 1957</span>  }; <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> </div><div class="line"><a name="l01959"></a><span class="lineno"> 1959</span>  <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>  <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>  <span class="comment">// string in the last character str[LenPos] by storing "MaxSize - length" there. If the string</span></div><div class="line"><a name="l01962"></a><span class="lineno"> 1962</span>  <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>  <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>  <span class="comment">// "MaxSize - str[LenPos]".</span></div><div class="line"><a name="l01965"></a><span class="lineno"> 1965</span>  <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>  <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>  <span class="keyword">struct </span>ShortString {</div><div class="line"><a name="l01968"></a><span class="lineno"> 1968</span>  <span class="keyword">enum</span> { MaxChars = <span class="keyword">sizeof</span>(<span class="keyword">static_cast<</span>Flag*<span class="keyword">></span>(0)->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>  Ch str[MaxChars];</div><div class="line"><a name="l01970"></a><span class="lineno"> 1970</span> </div><div class="line"><a name="l01971"></a><span class="lineno"> 1971</span>  <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 >= len); }</div><div class="line"><a name="l01972"></a><span class="lineno"> 1972</span>  <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<</span>Ch<span class="keyword">></span>(MaxSize - len); }</div><div class="line"><a name="l01973"></a><span class="lineno"> 1973</span>  <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<</span><a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a><span class="keyword">></span>(MaxSize - str[LenPos]); }</div><div class="line"><a name="l01974"></a><span class="lineno"> 1974</span>  }; <span class="comment">// at most as many bytes as "String" above => 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> </div><div class="line"><a name="l01976"></a><span class="lineno"> 1976</span>  <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>  <span class="keyword">union </span>Number {</div><div class="line"><a name="l01978"></a><span class="lineno"> 1978</span> <span class="preprocessor">#if RAPIDJSON_ENDIAN == RAPIDJSON_LITTLEENDIAN</span></div><div class="line"><a name="l01979"></a><span class="lineno"> 1979</span>  <span class="keyword">struct </span>I {</div><div class="line"><a name="l01980"></a><span class="lineno"> 1980</span>  <span class="keywordtype">int</span> i;</div><div class="line"><a name="l01981"></a><span class="lineno"> 1981</span>  <span class="keywordtype">char</span> padding[4];</div><div class="line"><a name="l01982"></a><span class="lineno"> 1982</span>  }i;</div><div class="line"><a name="l01983"></a><span class="lineno"> 1983</span>  <span class="keyword">struct </span>U {</div><div class="line"><a name="l01984"></a><span class="lineno"> 1984</span>  <span class="keywordtype">unsigned</span> u;</div><div class="line"><a name="l01985"></a><span class="lineno"> 1985</span>  <span class="keywordtype">char</span> padding2[4];</div><div class="line"><a name="l01986"></a><span class="lineno"> 1986</span>  }u;</div><div class="line"><a name="l01987"></a><span class="lineno"> 1987</span> <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>  <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>  <span class="keywordtype">char</span> padding[4];</div><div class="line"><a name="l01990"></a><span class="lineno"> 1990</span>  <span class="keywordtype">int</span> i;</div><div class="line"><a name="l01991"></a><span class="lineno"> 1991</span>  }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>  <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>  <span class="keywordtype">char</span> padding2[4];</div><div class="line"><a name="l01994"></a><span class="lineno"> 1994</span>  <span class="keywordtype">unsigned</span> u;</div><div class="line"><a name="l01995"></a><span class="lineno"> 1995</span>  }u;</div><div class="line"><a name="l01996"></a><span class="lineno"> 1996</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l01997"></a><span class="lineno"> 1997</span>  int64_t i64;</div><div class="line"><a name="l01998"></a><span class="lineno"> 1998</span>  uint64_t u64;</div><div class="line"><a name="l01999"></a><span class="lineno"> 1999</span>  <span class="keywordtype">double</span> d;</div><div class="line"><a name="l02000"></a><span class="lineno"> 2000</span>  }; <span class="comment">// 8 bytes</span></div><div class="line"><a name="l02001"></a><span class="lineno"> 2001</span> </div><div class="line"><a name="l02002"></a><span class="lineno"> 2002</span>  <span class="keyword">struct </span>ObjectData {</div><div class="line"><a name="l02003"></a><span class="lineno"> 2003</span>  <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> size;</div><div class="line"><a name="l02004"></a><span class="lineno"> 2004</span>  <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> capacity;</div><div class="line"><a name="l02005"></a><span class="lineno"> 2005</span>  <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>  }; <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> </div><div class="line"><a name="l02008"></a><span class="lineno"> 2008</span>  <span class="keyword">struct </span>ArrayData {</div><div class="line"><a name="l02009"></a><span class="lineno"> 2009</span>  <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> size;</div><div class="line"><a name="l02010"></a><span class="lineno"> 2010</span>  <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> capacity;</div><div class="line"><a name="l02011"></a><span class="lineno"> 2011</span>  <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>  }; <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> </div><div class="line"><a name="l02014"></a><span class="lineno"> 2014</span>  <span class="keyword">union </span>Data {</div><div class="line"><a name="l02015"></a><span class="lineno"> 2015</span>  String s;</div><div class="line"><a name="l02016"></a><span class="lineno"> 2016</span>  ShortString ss;</div><div class="line"><a name="l02017"></a><span class="lineno"> 2017</span>  Number n;</div><div class="line"><a name="l02018"></a><span class="lineno"> 2018</span>  ObjectData o;</div><div class="line"><a name="l02019"></a><span class="lineno"> 2019</span>  ArrayData a;</div><div class="line"><a name="l02020"></a><span class="lineno"> 2020</span>  Flag f;</div><div class="line"><a name="l02021"></a><span class="lineno"> 2021</span>  }; <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> </div><div class="line"><a name="l02023"></a><span class="lineno"> 2023</span>  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>  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>  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>  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>  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>  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> </div><div class="line"><a name="l02030"></a><span class="lineno"> 2030</span>  <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>  <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& allocator) {</div><div class="line"><a name="l02032"></a><span class="lineno"> 2032</span>  data_.f.flags = kArrayFlag;</div><div class="line"><a name="l02033"></a><span class="lineno"> 2033</span>  <span class="keywordflow">if</span> (count) {</div><div class="line"><a name="l02034"></a><span class="lineno"> 2034</span>  <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>* e = <span class="keyword">static_cast<</span><a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>*<span class="keyword">></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>  SetElementsPointer(e);</div><div class="line"><a name="l02036"></a><span class="lineno"> 2036</span>  std::memcpy(static_cast<void*>(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>  }</div><div class="line"><a name="l02038"></a><span class="lineno"> 2038</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l02039"></a><span class="lineno"> 2039</span>  SetElementsPointer(0);</div><div class="line"><a name="l02040"></a><span class="lineno"> 2040</span>  data_.a.size = data_.a.capacity = count;</div><div class="line"><a name="l02041"></a><span class="lineno"> 2041</span>  }</div><div class="line"><a name="l02042"></a><span class="lineno"> 2042</span> <span class="comment"></span></div><div class="line"><a name="l02043"></a><span class="lineno"> 2043</span> <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> <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& allocator) {</div><div class="line"><a name="l02045"></a><span class="lineno"> 2045</span>  data_.f.flags = kObjectFlag;</div><div class="line"><a name="l02046"></a><span class="lineno"> 2046</span>  <span class="keywordflow">if</span> (count) {</div><div class="line"><a name="l02047"></a><span class="lineno"> 2047</span>  <a class="code" href="structrapidjson_1_1_generic_member.html">Member</a>* m = <span class="keyword">static_cast<</span><a class="code" href="structrapidjson_1_1_generic_member.html">Member</a>*<span class="keyword">></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>  SetMembersPointer(m);</div><div class="line"><a name="l02049"></a><span class="lineno"> 2049</span>  std::memcpy(static_cast<void*>(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>  }</div><div class="line"><a name="l02051"></a><span class="lineno"> 2051</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l02052"></a><span class="lineno"> 2052</span>  SetMembersPointer(0);</div><div class="line"><a name="l02053"></a><span class="lineno"> 2053</span>  data_.o.size = data_.o.capacity = count;</div><div class="line"><a name="l02054"></a><span class="lineno"> 2054</span>  }</div><div class="line"><a name="l02055"></a><span class="lineno"> 2055</span> <span class="comment"></span></div><div class="line"><a name="l02056"></a><span class="lineno"> 2056</span> <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> <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>  data_.f.flags = kConstStringFlag;</div><div class="line"><a name="l02059"></a><span class="lineno"> 2059</span>  SetStringPointer(s);</div><div class="line"><a name="l02060"></a><span class="lineno"> 2060</span>  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>  }</div><div class="line"><a name="l02062"></a><span class="lineno"> 2062</span> <span class="comment"></span></div><div class="line"><a name="l02063"></a><span class="lineno"> 2063</span> <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> <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& allocator) {</div><div class="line"><a name="l02065"></a><span class="lineno"> 2065</span>  Ch* str = 0;</div><div class="line"><a name="l02066"></a><span class="lineno"> 2066</span>  <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>  data_.f.flags = kShortStringFlag;</div><div class="line"><a name="l02068"></a><span class="lineno"> 2068</span>  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>  str = data_.ss.str;</div><div class="line"><a name="l02070"></a><span class="lineno"> 2070</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l02071"></a><span class="lineno"> 2071</span>  data_.f.flags = kCopyStringFlag;</div><div class="line"><a name="l02072"></a><span class="lineno"> 2072</span>  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>  str = <span class="keyword">static_cast<</span>Ch *<span class="keyword">></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>  SetStringPointer(str);</div><div class="line"><a name="l02075"></a><span class="lineno"> 2075</span>  }</div><div class="line"><a name="l02076"></a><span class="lineno"> 2076</span>  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>  str[s.<a class="code" href="structrapidjson_1_1_generic_string_ref.html#ae223535ec20edf0c1db44a40b7735111">length</a>] = <span class="charliteral">'\0'</span>;</div><div class="line"><a name="l02078"></a><span class="lineno"> 2078</span>  }</div><div class="line"><a name="l02079"></a><span class="lineno"> 2079</span> <span class="comment"></span></div><div class="line"><a name="l02080"></a><span class="lineno"> 2080</span> <span class="comment"> //! Assignment without calling destructor</span></div><div class="line"><a name="l02081"></a><span class="lineno"> 2081</span> <span class="comment"></span> <span class="keywordtype">void</span> RawAssign(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& rhs) RAPIDJSON_NOEXCEPT {</div><div class="line"><a name="l02082"></a><span class="lineno"> 2082</span>  data_ = rhs.data_;</div><div class="line"><a name="l02083"></a><span class="lineno"> 2083</span>  <span class="comment">// data_.f.flags = rhs.data_.f.flags;</span></div><div class="line"><a name="l02084"></a><span class="lineno"> 2084</span>  rhs.data_.f.flags = kNullFlag;</div><div class="line"><a name="l02085"></a><span class="lineno"> 2085</span>  }</div><div class="line"><a name="l02086"></a><span class="lineno"> 2086</span> </div><div class="line"><a name="l02087"></a><span class="lineno"> 2087</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> SourceAllocator></div><div class="line"><a name="l02088"></a><span class="lineno"> 2088</span>  <span class="keywordtype">bool</span> StringEqual(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue<Encoding, SourceAllocator></a>& rhs)<span class="keyword"> const </span>{</div><div class="line"><a name="l02089"></a><span class="lineno"> 2089</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());</div><div class="line"><a name="l02090"></a><span class="lineno"> 2090</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>(rhs.IsString());</div><div class="line"><a name="l02091"></a><span class="lineno"> 2091</span> </div><div class="line"><a name="l02092"></a><span class="lineno"> 2092</span>  <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>  <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>  <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> </div><div class="line"><a name="l02096"></a><span class="lineno"> 2096</span>  <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>  <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>  <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> </div><div class="line"><a name="l02100"></a><span class="lineno"> 2100</span>  <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>  }</div><div class="line"><a name="l02102"></a><span class="lineno"> 2102</span> </div><div class="line"><a name="l02103"></a><span class="lineno"> 2103</span>  Data data_;</div><div class="line"><a name="l02104"></a><span class="lineno"> 2104</span> };</div><div class="line"><a name="l02105"></a><span class="lineno"> 2105</span> <span class="comment"></span></div><div class="line"><a name="l02106"></a><span class="lineno"> 2106</span> <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> <span class="comment"></span><span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue<UTF8<></a> > <a class="code" href="namespacerapidjson.html#aa65fc9fb381b2cbc54f98673eadd6505">Value</a>;</div><div class="line"><a name="l02108"></a><span class="lineno"> 2108</span> <span class="comment"></span></div><div class="line"><a name="l02109"></a><span class="lineno"> 2109</span> <span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l02110"></a><span class="lineno"> 2110</span> <span class="comment"></span><span class="comment">// GenericDocument </span></div><div class="line"><a name="l02111"></a><span class="lineno"> 2111</span> <span class="comment"></span></div><div class="line"><a name="l02112"></a><span class="lineno"> 2112</span> <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> <span class="comment"></span><span class="comment">/*!</span></div><div class="line"><a name="l02114"></a><span class="lineno"> 2114</span> <span class="comment"> \note implements Handler concept</span></div><div class="line"><a name="l02115"></a><span class="lineno"> 2115</span> <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> <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> <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> <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> <span class="comment">*/</span></div><div class="line"><a name="l02120"></a><span class="lineno"> 2120</span> <span class="keyword">template</span> <<span class="keyword">typename</span> Encoding, <span class="keyword">typename</span> Allocator = MemoryPoolAllocator<>, <span class="keyword">typename</span> StackAllocator = CrtAllocator></div><div class="line"><a name="l02121"></a><span class="lineno"> 2121</span> <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><Encoding, Allocator> {</div><div class="line"><a name="l02122"></a><span class="lineno"> 2122</span> <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>  <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">//!< 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> <span class="comment"></span> <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue<Encoding, Allocator></a> <a class="code" href="classrapidjson_1_1_generic_document.html#a41bbec044c421e870a9d355075d741bc">ValueType</a>; <span class="comment">//!< 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> <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">//!< Allocator type from template parameter.</span></div><div class="line"><a name="l02126"></a><span class="lineno"> 2126</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l02127"></a><span class="lineno"> 2127</span> <span class="comment"> //! Constructor</span></div><div class="line"><a name="l02128"></a><span class="lineno"> 2128</span> <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> <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> <span class="comment"> \param allocator Optional allocator for allocating memory.</span></div><div class="line"><a name="l02131"></a><span class="lineno"> 2131</span> <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> <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> <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>  <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>  <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a><Encoding, Allocator>(type), allocator_(allocator), ownAllocator_(0), stack_(stackAllocator, stackCapacity), parseResult_()</div><div class="line"><a name="l02136"></a><span class="lineno"> 2136</span>  {</div><div class="line"><a name="l02137"></a><span class="lineno"> 2137</span>  <span class="keywordflow">if</span> (!allocator_)</div><div class="line"><a name="l02138"></a><span class="lineno"> 2138</span>  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>  }</div><div class="line"><a name="l02140"></a><span class="lineno"> 2140</span> <span class="comment"></span></div><div class="line"><a name="l02141"></a><span class="lineno"> 2141</span> <span class="comment"> //! Constructor</span></div><div class="line"><a name="l02142"></a><span class="lineno"> 2142</span> <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> <span class="comment"> \param allocator Optional allocator for allocating memory.</span></div><div class="line"><a name="l02144"></a><span class="lineno"> 2144</span> <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> <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> <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>  <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>  allocator_(allocator), ownAllocator_(0), stack_(stackAllocator, stackCapacity), parseResult_()</div><div class="line"><a name="l02149"></a><span class="lineno"> 2149</span>  {</div><div class="line"><a name="l02150"></a><span class="lineno"> 2150</span>  <span class="keywordflow">if</span> (!allocator_)</div><div class="line"><a name="l02151"></a><span class="lineno"> 2151</span>  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>  }</div><div class="line"><a name="l02153"></a><span class="lineno"> 2153</span> </div><div class="line"><a name="l02154"></a><span class="lineno"> 2154</span> <span class="preprocessor">#if RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l02155"></a><span class="lineno"> 2155</span> <span class="comment"> //! Move constructor in C++11</span></div><div class="line"><a name="l02156"></a><span class="lineno"> 2156</span> <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>&& rhs) RAPIDJSON_NOEXCEPT</div><div class="line"><a name="l02157"></a><span class="lineno"> 2157</span>  : ValueType(std::forward<ValueType>(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>  allocator_(rhs.allocator_),</div><div class="line"><a name="l02159"></a><span class="lineno"> 2159</span>  ownAllocator_(rhs.ownAllocator_),</div><div class="line"><a name="l02160"></a><span class="lineno"> 2160</span>  stack_(std::move(rhs.stack_)),</div><div class="line"><a name="l02161"></a><span class="lineno"> 2161</span>  parseResult_(rhs.parseResult_)</div><div class="line"><a name="l02162"></a><span class="lineno"> 2162</span>  {</div><div class="line"><a name="l02163"></a><span class="lineno"> 2163</span>  rhs.allocator_ = 0;</div><div class="line"><a name="l02164"></a><span class="lineno"> 2164</span>  rhs.ownAllocator_ = 0;</div><div class="line"><a name="l02165"></a><span class="lineno"> 2165</span>  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>  }</div><div class="line"><a name="l02167"></a><span class="lineno"> 2167</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l02168"></a><span class="lineno"> 2168</span> </div><div class="line"><a name="l02169"></a><span class="lineno"> 2169</span>  ~<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>  Destroy();</div><div class="line"><a name="l02171"></a><span class="lineno"> 2171</span>  }</div><div class="line"><a name="l02172"></a><span class="lineno"> 2172</span> </div><div class="line"><a name="l02173"></a><span class="lineno"> 2173</span> <span class="preprocessor">#if RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l02174"></a><span class="lineno"> 2174</span> <span class="comment"> //! Move assignment in C++11</span></div><div class="line"><a name="l02175"></a><span class="lineno"> 2175</span> <span class="comment"></span> <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>& operator=(<a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>&& rhs) RAPIDJSON_NOEXCEPT</div><div class="line"><a name="l02176"></a><span class="lineno"> 2176</span>  {</div><div class="line"><a name="l02177"></a><span class="lineno"> 2177</span>  <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>  <span class="comment">// attempt to call GenericValue's templated assignment operator.</span></div><div class="line"><a name="l02179"></a><span class="lineno"> 2179</span>  ValueType::operator=(std::forward<ValueType>(rhs));</div><div class="line"><a name="l02180"></a><span class="lineno"> 2180</span> </div><div class="line"><a name="l02181"></a><span class="lineno"> 2181</span>  <span class="comment">// Calling the destructor here would prematurely call stack_'s destructor</span></div><div class="line"><a name="l02182"></a><span class="lineno"> 2182</span>  Destroy();</div><div class="line"><a name="l02183"></a><span class="lineno"> 2183</span> </div><div class="line"><a name="l02184"></a><span class="lineno"> 2184</span>  allocator_ = rhs.allocator_;</div><div class="line"><a name="l02185"></a><span class="lineno"> 2185</span>  ownAllocator_ = rhs.ownAllocator_;</div><div class="line"><a name="l02186"></a><span class="lineno"> 2186</span>  stack_ = std::move(rhs.stack_);</div><div class="line"><a name="l02187"></a><span class="lineno"> 2187</span>  parseResult_ = rhs.parseResult_;</div><div class="line"><a name="l02188"></a><span class="lineno"> 2188</span> </div><div class="line"><a name="l02189"></a><span class="lineno"> 2189</span>  rhs.allocator_ = 0;</div><div class="line"><a name="l02190"></a><span class="lineno"> 2190</span>  rhs.ownAllocator_ = 0;</div><div class="line"><a name="l02191"></a><span class="lineno"> 2191</span>  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> </div><div class="line"><a name="l02193"></a><span class="lineno"> 2193</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l02194"></a><span class="lineno"> 2194</span>  }</div><div class="line"><a name="l02195"></a><span class="lineno"> 2195</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l02196"></a><span class="lineno"> 2196</span> <span class="comment"></span></div><div class="line"><a name="l02197"></a><span class="lineno"> 2197</span> <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> <span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l02199"></a><span class="lineno"> 2199</span> <span class="comment"> \param rhs Another document.</span></div><div class="line"><a name="l02200"></a><span class="lineno"> 2200</span> <span class="comment"> \note Constant complexity.</span></div><div class="line"><a name="l02201"></a><span class="lineno"> 2201</span> <span class="comment"> \see GenericValue::Swap</span></div><div class="line"><a name="l02202"></a><span class="lineno"> 2202</span> <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>  <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>& <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>& rhs) RAPIDJSON_NOEXCEPT {</div><div class="line"><a name="l02204"></a><span class="lineno"> 2204</span>  ValueType::Swap(rhs);</div><div class="line"><a name="l02205"></a><span class="lineno"> 2205</span>  stack_.Swap(rhs.stack_);</div><div class="line"><a name="l02206"></a><span class="lineno"> 2206</span>  internal::Swap(allocator_, rhs.allocator_);</div><div class="line"><a name="l02207"></a><span class="lineno"> 2207</span>  internal::Swap(ownAllocator_, rhs.ownAllocator_);</div><div class="line"><a name="l02208"></a><span class="lineno"> 2208</span>  internal::Swap(parseResult_, rhs.parseResult_);</div><div class="line"><a name="l02209"></a><span class="lineno"> 2209</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l02210"></a><span class="lineno"> 2210</span>  }</div><div class="line"><a name="l02211"></a><span class="lineno"> 2211</span> </div><div class="line"><a name="l02212"></a><span class="lineno"> 2212</span>  <span class="comment">// Allow Swap with ValueType.</span></div><div class="line"><a name="l02213"></a><span class="lineno"> 2213</span>  <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>  <span class="keyword">using</span> ValueType::Swap;</div><div class="line"><a name="l02215"></a><span class="lineno"> 2215</span> <span class="comment"></span></div><div class="line"><a name="l02216"></a><span class="lineno"> 2216</span> <span class="comment"> //! free-standing swap function helper</span></div><div class="line"><a name="l02217"></a><span class="lineno"> 2217</span> <span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l02218"></a><span class="lineno"> 2218</span> <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> <span class="comment"> \code</span></div><div class="line"><a name="l02220"></a><span class="lineno"> 2220</span> <span class="comment"> void swap(MyClass& a, MyClass& b) {</span></div><div class="line"><a name="l02221"></a><span class="lineno"> 2221</span> <span class="comment"> using std::swap;</span></div><div class="line"><a name="l02222"></a><span class="lineno"> 2222</span> <span class="comment"> swap(a.doc, b.doc);</span></div><div class="line"><a name="l02223"></a><span class="lineno"> 2223</span> <span class="comment"> // ...</span></div><div class="line"><a name="l02224"></a><span class="lineno"> 2224</span> <span class="comment"> }</span></div><div class="line"><a name="l02225"></a><span class="lineno"> 2225</span> <span class="comment"> \endcode</span></div><div class="line"><a name="l02226"></a><span class="lineno"> 2226</span> <span class="comment"> \see Swap()</span></div><div class="line"><a name="l02227"></a><span class="lineno"> 2227</span> <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>  <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>& a, <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>& b) RAPIDJSON_NOEXCEPT { a.Swap(b); }</div><div class="line"><a name="l02229"></a><span class="lineno"> 2229</span> <span class="comment"></span></div><div class="line"><a name="l02230"></a><span class="lineno"> 2230</span> <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> <span class="comment"></span><span class="comment"> /*! \tparam Generator A functor with <tt>bool f(Handler)</tt> prototype.</span></div><div class="line"><a name="l02232"></a><span class="lineno"> 2232</span> <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> <span class="comment"> \return The document itself for fluent API.</span></div><div class="line"><a name="l02234"></a><span class="lineno"> 2234</span> <span class="comment"> */</span></div><div class="line"><a name="l02235"></a><span class="lineno"> 2235</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> Generator></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>  <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>& <a class="code" href="classrapidjson_1_1_generic_document.html#a63e18887979da500ece6f0bd10d29b64">Populate</a>(Generator& g) {</div><div class="line"><a name="l02237"></a><span class="lineno"> 2237</span>  ClearStackOnExit scope(*<span class="keyword">this</span>);</div><div class="line"><a name="l02238"></a><span class="lineno"> 2238</span>  <span class="keywordflow">if</span> (g(*<span class="keyword">this</span>)) {</div><div class="line"><a name="l02239"></a><span class="lineno"> 2239</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>(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>  ValueType::operator=(*stack_.template Pop<ValueType>(1));<span class="comment">// Move value from stack to document</span></div><div class="line"><a name="l02241"></a><span class="lineno"> 2241</span>  }</div><div class="line"><a name="l02242"></a><span class="lineno"> 2242</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l02243"></a><span class="lineno"> 2243</span>  }</div><div class="line"><a name="l02244"></a><span class="lineno"> 2244</span> <span class="comment"></span></div><div class="line"><a name="l02245"></a><span class="lineno"> 2245</span> <span class="comment"> //!@name Parse from stream</span></div><div class="line"><a name="l02246"></a><span class="lineno"> 2246</span> <span class="comment"> //!@{</span></div><div class="line"><a name="l02247"></a><span class="lineno"> 2247</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l02248"></a><span class="lineno"> 2248</span> <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> <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> <span class="comment"> \tparam SourceEncoding Encoding of input stream</span></div><div class="line"><a name="l02251"></a><span class="lineno"> 2251</span> <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> <span class="comment"> \param is Input stream to be parsed.</span></div><div class="line"><a name="l02253"></a><span class="lineno"> 2253</span> <span class="comment"> \return The document itself for fluent API.</span></div><div class="line"><a name="l02254"></a><span class="lineno"> 2254</span> <span class="comment"> */</span></div><div class="line"><a name="l02255"></a><span class="lineno"> 2255</span>  <span class="keyword">template</span> <<span class="keywordtype">unsigned</span> parseFlags, <span class="keyword">typename</span> SourceEncoding, <span class="keyword">typename</span> InputStream></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>  <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>& <a class="code" href="classrapidjson_1_1_generic_document.html#a3ae97682cf04685c7db9d89ebc399b85">ParseStream</a>(InputStream& is) {</div><div class="line"><a name="l02257"></a><span class="lineno"> 2257</span>  <a class="code" href="classrapidjson_1_1_generic_reader.html">GenericReader<SourceEncoding, Encoding, StackAllocator></a> reader(</div><div class="line"><a name="l02258"></a><span class="lineno"> 2258</span>  stack_.HasAllocator() ? &stack_.GetAllocator() : 0);</div><div class="line"><a name="l02259"></a><span class="lineno"> 2259</span>  ClearStackOnExit scope(*<span class="keyword">this</span>);</div><div class="line"><a name="l02260"></a><span class="lineno"> 2260</span>  parseResult_ = reader.template Parse<parseFlags>(is, *<span class="keyword">this</span>);</div><div class="line"><a name="l02261"></a><span class="lineno"> 2261</span>  <span class="keywordflow">if</span> (parseResult_) {</div><div class="line"><a name="l02262"></a><span class="lineno"> 2262</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>(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>  ValueType::operator=(*stack_.template Pop<ValueType>(1));<span class="comment">// Move value from stack to document</span></div><div class="line"><a name="l02264"></a><span class="lineno"> 2264</span>  }</div><div class="line"><a name="l02265"></a><span class="lineno"> 2265</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l02266"></a><span class="lineno"> 2266</span>  }</div><div class="line"><a name="l02267"></a><span class="lineno"> 2267</span> <span class="comment"></span></div><div class="line"><a name="l02268"></a><span class="lineno"> 2268</span> <span class="comment"> //! Parse JSON text from an input stream</span></div><div class="line"><a name="l02269"></a><span class="lineno"> 2269</span> <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> <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> <span class="comment"> \param is Input stream to be parsed.</span></div><div class="line"><a name="l02272"></a><span class="lineno"> 2272</span> <span class="comment"> \return The document itself for fluent API.</span></div><div class="line"><a name="l02273"></a><span class="lineno"> 2273</span> <span class="comment"> */</span></div><div class="line"><a name="l02274"></a><span class="lineno"> 2274</span>  <span class="keyword">template</span> <<span class="keywordtype">unsigned</span> parseFlags, <span class="keyword">typename</span> InputStream></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>  <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>& <a class="code" href="classrapidjson_1_1_generic_document.html#ae4ee7d86b8c906c83dbe15e57eb6ac6a">ParseStream</a>(InputStream& is) {</div><div class="line"><a name="l02276"></a><span class="lineno"> 2276</span>  <span class="keywordflow">return</span> ParseStream<parseFlags, Encoding, InputStream>(is);</div><div class="line"><a name="l02277"></a><span class="lineno"> 2277</span>  }</div><div class="line"><a name="l02278"></a><span class="lineno"> 2278</span> <span class="comment"></span></div><div class="line"><a name="l02279"></a><span class="lineno"> 2279</span> <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> <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> <span class="comment"> \param is Input stream to be parsed.</span></div><div class="line"><a name="l02282"></a><span class="lineno"> 2282</span> <span class="comment"> \return The document itself for fluent API.</span></div><div class="line"><a name="l02283"></a><span class="lineno"> 2283</span> <span class="comment"> */</span></div><div class="line"><a name="l02284"></a><span class="lineno"> 2284</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> InputStream></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>  <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>& <a class="code" href="classrapidjson_1_1_generic_document.html#acf96a3c7fd61486d049c701b1fe5d414">ParseStream</a>(InputStream& is) {</div><div class="line"><a name="l02286"></a><span class="lineno"> 2286</span>  <span class="keywordflow">return</span> ParseStream<kParseDefaultFlags, Encoding, InputStream>(is);</div><div class="line"><a name="l02287"></a><span class="lineno"> 2287</span>  }<span class="comment"></span></div><div class="line"><a name="l02288"></a><span class="lineno"> 2288</span> <span class="comment"> //!@}</span></div><div class="line"><a name="l02289"></a><span class="lineno"> 2289</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l02290"></a><span class="lineno"> 2290</span> <span class="comment"> //!@name Parse in-place from mutable string</span></div><div class="line"><a name="l02291"></a><span class="lineno"> 2291</span> <span class="comment"> //!@{</span></div><div class="line"><a name="l02292"></a><span class="lineno"> 2292</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l02293"></a><span class="lineno"> 2293</span> <span class="comment"> //! Parse JSON text from a mutable string</span></div><div class="line"><a name="l02294"></a><span class="lineno"> 2294</span> <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> <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> <span class="comment"> \return The document itself for fluent API.</span></div><div class="line"><a name="l02297"></a><span class="lineno"> 2297</span> <span class="comment"> */</span></div><div class="line"><a name="l02298"></a><span class="lineno"> 2298</span>  <span class="keyword">template</span> <<span class="keywordtype">unsigned</span> parseFlags></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>  <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>& <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>  <a class="code" href="structrapidjson_1_1_generic_insitu_string_stream.html">GenericInsituStringStream<Encoding></a> s(str);</div><div class="line"><a name="l02301"></a><span class="lineno"> 2301</span>  <span class="keywordflow">return</span> ParseStream<parseFlags | kParseInsituFlag>(s);</div><div class="line"><a name="l02302"></a><span class="lineno"> 2302</span>  }</div><div class="line"><a name="l02303"></a><span class="lineno"> 2303</span> <span class="comment"></span></div><div class="line"><a name="l02304"></a><span class="lineno"> 2304</span> <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> <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> <span class="comment"> \return The document itself for fluent API.</span></div><div class="line"><a name="l02307"></a><span class="lineno"> 2307</span> <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>  <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>& <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>  <span class="keywordflow">return</span> ParseInsitu<kParseDefaultFlags>(str);</div><div class="line"><a name="l02310"></a><span class="lineno"> 2310</span>  }<span class="comment"></span></div><div class="line"><a name="l02311"></a><span class="lineno"> 2311</span> <span class="comment"> //!@}</span></div><div class="line"><a name="l02312"></a><span class="lineno"> 2312</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l02313"></a><span class="lineno"> 2313</span> <span class="comment"> //!@name Parse from read-only string</span></div><div class="line"><a name="l02314"></a><span class="lineno"> 2314</span> <span class="comment"> //!@{</span></div><div class="line"><a name="l02315"></a><span class="lineno"> 2315</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l02316"></a><span class="lineno"> 2316</span> <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> <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> <span class="comment"> \tparam SourceEncoding Transcoding from input Encoding</span></div><div class="line"><a name="l02319"></a><span class="lineno"> 2319</span> <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> <span class="comment"> */</span></div><div class="line"><a name="l02321"></a><span class="lineno"> 2321</span>  <span class="keyword">template</span> <<span class="keywordtype">unsigned</span> parseFlags, <span class="keyword">typename</span> SourceEncoding></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>  <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>& <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>  <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 & <a class="code" href="namespacerapidjson.html#a81379eb4e94a0386d71d15fda882ebc9a02748971d6ea0c5e22c69b8aa7f344ea">kParseInsituFlag</a>));</div><div class="line"><a name="l02324"></a><span class="lineno"> 2324</span>  <a class="code" href="structrapidjson_1_1_generic_string_stream.html">GenericStringStream<SourceEncoding></a> s(str);</div><div class="line"><a name="l02325"></a><span class="lineno"> 2325</span>  <span class="keywordflow">return</span> ParseStream<parseFlags, SourceEncoding>(s);</div><div class="line"><a name="l02326"></a><span class="lineno"> 2326</span>  }</div><div class="line"><a name="l02327"></a><span class="lineno"> 2327</span> <span class="comment"></span></div><div class="line"><a name="l02328"></a><span class="lineno"> 2328</span> <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> <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> <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> <span class="comment"> */</span></div><div class="line"><a name="l02332"></a><span class="lineno"> 2332</span>  <span class="keyword">template</span> <<span class="keywordtype">unsigned</span> parseFlags></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>  <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>& <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>  <span class="keywordflow">return</span> Parse<parseFlags, Encoding>(str);</div><div class="line"><a name="l02335"></a><span class="lineno"> 2335</span>  }</div><div class="line"><a name="l02336"></a><span class="lineno"> 2336</span> <span class="comment"></span></div><div class="line"><a name="l02337"></a><span class="lineno"> 2337</span> <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> <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> <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>  <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>& <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>  <span class="keywordflow">return</span> Parse<kParseDefaultFlags>(str);</div><div class="line"><a name="l02342"></a><span class="lineno"> 2342</span>  }</div><div class="line"><a name="l02343"></a><span class="lineno"> 2343</span> </div><div class="line"><a name="l02344"></a><span class="lineno"> 2344</span>  <span class="keyword">template</span> <<span class="keywordtype">unsigned</span> parseFlags, <span class="keyword">typename</span> SourceEncoding></div><div class="line"><a name="l02345"></a><span class="lineno"> 2345</span>  <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>& 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>  <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 & <a class="code" href="namespacerapidjson.html#a81379eb4e94a0386d71d15fda882ebc9a02748971d6ea0c5e22c69b8aa7f344ea">kParseInsituFlag</a>));</div><div class="line"><a name="l02347"></a><span class="lineno"> 2347</span>  <a class="code" href="structrapidjson_1_1_memory_stream.html">MemoryStream</a> ms(reinterpret_cast<const char*>(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>  <a class="code" href="classrapidjson_1_1_encoded_input_stream.html">EncodedInputStream<SourceEncoding, MemoryStream></a> is(ms);</div><div class="line"><a name="l02349"></a><span class="lineno"> 2349</span>  ParseStream<parseFlags, SourceEncoding>(is);</div><div class="line"><a name="l02350"></a><span class="lineno"> 2350</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l02351"></a><span class="lineno"> 2351</span>  }</div><div class="line"><a name="l02352"></a><span class="lineno"> 2352</span> </div><div class="line"><a name="l02353"></a><span class="lineno"> 2353</span>  <span class="keyword">template</span> <<span class="keywordtype">unsigned</span> parseFlags></div><div class="line"><a name="l02354"></a><span class="lineno"> 2354</span>  <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>& 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>  <span class="keywordflow">return</span> Parse<parseFlags, Encoding>(str, length);</div><div class="line"><a name="l02356"></a><span class="lineno"> 2356</span>  }</div><div class="line"><a name="l02357"></a><span class="lineno"> 2357</span>  </div><div class="line"><a name="l02358"></a><span class="lineno"> 2358</span>  <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>& 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>  <span class="keywordflow">return</span> Parse<kParseDefaultFlags>(str, length);</div><div class="line"><a name="l02360"></a><span class="lineno"> 2360</span>  }</div><div class="line"><a name="l02361"></a><span class="lineno"> 2361</span> </div><div class="line"><a name="l02362"></a><span class="lineno"> 2362</span> <span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l02363"></a><span class="lineno"> 2363</span>  <span class="keyword">template</span> <<span class="keywordtype">unsigned</span> parseFlags, <span class="keyword">typename</span> SourceEncoding></div><div class="line"><a name="l02364"></a><span class="lineno"> 2364</span>  <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>& Parse(<span class="keyword">const</span> std::basic_string<typename SourceEncoding::Ch>& str) {</div><div class="line"><a name="l02365"></a><span class="lineno"> 2365</span>  <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>  <span class="keywordflow">return</span> Parse<parseFlags, SourceEncoding>(str.c_str());</div><div class="line"><a name="l02367"></a><span class="lineno"> 2367</span>  }</div><div class="line"><a name="l02368"></a><span class="lineno"> 2368</span> </div><div class="line"><a name="l02369"></a><span class="lineno"> 2369</span>  <span class="keyword">template</span> <<span class="keywordtype">unsigned</span> parseFlags></div><div class="line"><a name="l02370"></a><span class="lineno"> 2370</span>  <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>& Parse(<span class="keyword">const</span> std::basic_string<Ch>& str) {</div><div class="line"><a name="l02371"></a><span class="lineno"> 2371</span>  <span class="keywordflow">return</span> Parse<parseFlags, Encoding>(str.c_str());</div><div class="line"><a name="l02372"></a><span class="lineno"> 2372</span>  }</div><div class="line"><a name="l02373"></a><span class="lineno"> 2373</span> </div><div class="line"><a name="l02374"></a><span class="lineno"> 2374</span>  <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>& Parse(<span class="keyword">const</span> std::basic_string<Ch>& str) {</div><div class="line"><a name="l02375"></a><span class="lineno"> 2375</span>  <span class="keywordflow">return</span> Parse<kParseDefaultFlags>(str);</div><div class="line"><a name="l02376"></a><span class="lineno"> 2376</span>  }</div><div class="line"><a name="l02377"></a><span class="lineno"> 2377</span> <span class="preprocessor">#endif // RAPIDJSON_HAS_STDSTRING </span></div><div class="line"><a name="l02378"></a><span class="lineno"> 2378</span> <span class="comment"></span></div><div class="line"><a name="l02379"></a><span class="lineno"> 2379</span> <span class="comment"> //!@}</span></div><div class="line"><a name="l02380"></a><span class="lineno"> 2380</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l02381"></a><span class="lineno"> 2381</span> <span class="comment"> //!@name Handling parse errors</span></div><div class="line"><a name="l02382"></a><span class="lineno"> 2382</span> <span class="comment"> //!@{</span></div><div class="line"><a name="l02383"></a><span class="lineno"> 2383</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l02384"></a><span class="lineno"> 2384</span> <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> <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> <span class="comment"></span></div><div class="line"><a name="l02387"></a><span class="lineno"> 2387</span> <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> <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> <span class="comment"></span></div><div class="line"><a name="l02390"></a><span class="lineno"> 2390</span> <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> <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> <span class="comment"></span></div><div class="line"><a name="l02393"></a><span class="lineno"> 2393</span> <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> <span class="comment"></span><span class="preprocessor">#ifndef __clang // -Wdocumentation</span></div><div class="line"><a name="l02395"></a><span class="lineno"> 2395</span> <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> <span class="comment"></span></div><div class="line"><a name="l02397"></a><span class="lineno"> 2397</span> <span class="comment"> \code</span></div><div class="line"><a name="l02398"></a><span class="lineno"> 2398</span> <span class="comment"> Document doc;</span></div><div class="line"><a name="l02399"></a><span class="lineno"> 2399</span> <span class="comment"> ParseResult ok = doc.Parse(json);</span></div><div class="line"><a name="l02400"></a><span class="lineno"> 2400</span> <span class="comment"> if (!ok)</span></div><div class="line"><a name="l02401"></a><span class="lineno"> 2401</span> <span class="comment"> printf( "JSON parse error: %s (%u)\n", GetParseError_En(ok.Code()), ok.Offset());</span></div><div class="line"><a name="l02402"></a><span class="lineno"> 2402</span> <span class="comment"> \endcode</span></div><div class="line"><a name="l02403"></a><span class="lineno"> 2403</span> <span class="comment"> */</span></div><div class="line"><a name="l02404"></a><span class="lineno"> 2404</span> <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>  <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> <span class="comment"> //!@}</span></div><div class="line"><a name="l02407"></a><span class="lineno"> 2407</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l02408"></a><span class="lineno"> 2408</span> <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> <span class="comment"></span> Allocator& <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>  <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>  <span class="keywordflow">return</span> *allocator_;</div><div class="line"><a name="l02412"></a><span class="lineno"> 2412</span>  }</div><div class="line"><a name="l02413"></a><span class="lineno"> 2413</span> <span class="comment"></span></div><div class="line"><a name="l02414"></a><span class="lineno"> 2414</span> <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> <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> </div><div class="line"><a name="l02417"></a><span class="lineno"> 2417</span> <span class="keyword">private</span>:</div><div class="line"><a name="l02418"></a><span class="lineno"> 2418</span>  <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>  <span class="keyword">struct </span>ClearStackOnExit {</div><div class="line"><a name="l02420"></a><span class="lineno"> 2420</span>  <span class="keyword">explicit</span> ClearStackOnExit(<a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>& d) : d_(d) {}</div><div class="line"><a name="l02421"></a><span class="lineno"> 2421</span>  ~ClearStackOnExit() { d_.ClearStack(); }</div><div class="line"><a name="l02422"></a><span class="lineno"> 2422</span>  <span class="keyword">private</span>:</div><div class="line"><a name="l02423"></a><span class="lineno"> 2423</span>  ClearStackOnExit(<span class="keyword">const</span> ClearStackOnExit&);</div><div class="line"><a name="l02424"></a><span class="lineno"> 2424</span>  ClearStackOnExit& operator=(<span class="keyword">const</span> ClearStackOnExit&);</div><div class="line"><a name="l02425"></a><span class="lineno"> 2425</span>  <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>& d_;</div><div class="line"><a name="l02426"></a><span class="lineno"> 2426</span>  };</div><div class="line"><a name="l02427"></a><span class="lineno"> 2427</span> </div><div class="line"><a name="l02428"></a><span class="lineno"> 2428</span>  <span class="comment">// callers of the following private Handler functions</span></div><div class="line"><a name="l02429"></a><span class="lineno"> 2429</span>  <span class="comment">// template <typename,typename,typename> friend class GenericReader; // for parsing</span></div><div class="line"><a name="l02430"></a><span class="lineno"> 2430</span>  <span class="keyword">template</span> <<span class="keyword">typename</span>, <span class="keyword">typename</span>> <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> </div><div class="line"><a name="l02432"></a><span class="lineno"> 2432</span> <span class="keyword">public</span>:</div><div class="line"><a name="l02433"></a><span class="lineno"> 2433</span>  <span class="comment">// Implementation of Handler</span></div><div class="line"><a name="l02434"></a><span class="lineno"> 2434</span>  <span class="keywordtype">bool</span> Null() { <span class="keyword">new</span> (stack_.template Push<ValueType>()) ValueType(); <span class="keywordflow">return</span> <span class="keyword">true</span>; }</div><div class="line"><a name="l02435"></a><span class="lineno"> 2435</span>  <span class="keywordtype">bool</span> Bool(<span class="keywordtype">bool</span> b) { <span class="keyword">new</span> (stack_.template Push<ValueType>()) 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>  <span class="keywordtype">bool</span> Int(<span class="keywordtype">int</span> i) { <span class="keyword">new</span> (stack_.template Push<ValueType>()) 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>  <span class="keywordtype">bool</span> Uint(<span class="keywordtype">unsigned</span> i) { <span class="keyword">new</span> (stack_.template Push<ValueType>()) 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>  <span class="keywordtype">bool</span> Int64(int64_t i) { <span class="keyword">new</span> (stack_.template Push<ValueType>()) 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>  <span class="keywordtype">bool</span> Uint64(uint64_t i) { <span class="keyword">new</span> (stack_.template Push<ValueType>()) 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>  <span class="keywordtype">bool</span> Double(<span class="keywordtype">double</span> d) { <span class="keyword">new</span> (stack_.template Push<ValueType>()) 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> </div><div class="line"><a name="l02442"></a><span class="lineno"> 2442</span>  <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>  <span class="keywordflow">if</span> (copy) </div><div class="line"><a name="l02444"></a><span class="lineno"> 2444</span>  <span class="keyword">new</span> (stack_.template Push<ValueType>()) ValueType(str, length, GetAllocator());</div><div class="line"><a name="l02445"></a><span class="lineno"> 2445</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l02446"></a><span class="lineno"> 2446</span>  <span class="keyword">new</span> (stack_.template Push<ValueType>()) ValueType(str, length);</div><div class="line"><a name="l02447"></a><span class="lineno"> 2447</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l02448"></a><span class="lineno"> 2448</span>  }</div><div class="line"><a name="l02449"></a><span class="lineno"> 2449</span> </div><div class="line"><a name="l02450"></a><span class="lineno"> 2450</span>  <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>  <span class="keywordflow">if</span> (copy) </div><div class="line"><a name="l02452"></a><span class="lineno"> 2452</span>  <span class="keyword">new</span> (stack_.template Push<ValueType>()) ValueType(str, length, GetAllocator());</div><div class="line"><a name="l02453"></a><span class="lineno"> 2453</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l02454"></a><span class="lineno"> 2454</span>  <span class="keyword">new</span> (stack_.template Push<ValueType>()) ValueType(str, length);</div><div class="line"><a name="l02455"></a><span class="lineno"> 2455</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l02456"></a><span class="lineno"> 2456</span>  }</div><div class="line"><a name="l02457"></a><span class="lineno"> 2457</span> </div><div class="line"><a name="l02458"></a><span class="lineno"> 2458</span>  <span class="keywordtype">bool</span> StartObject() { <span class="keyword">new</span> (stack_.template Push<ValueType>()) 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>  </div><div class="line"><a name="l02460"></a><span class="lineno"> 2460</span>  <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> </div><div class="line"><a name="l02462"></a><span class="lineno"> 2462</span>  <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>  <span class="keyword">typename</span> <a class="code" href="structrapidjson_1_1_generic_member.html">ValueType::Member</a>* members = stack_.template Pop<typename ValueType::Member>(memberCount);</div><div class="line"><a name="l02464"></a><span class="lineno"> 2464</span>  stack_.template Top<ValueType>()->SetObjectRaw(members, memberCount, GetAllocator());</div><div class="line"><a name="l02465"></a><span class="lineno"> 2465</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l02466"></a><span class="lineno"> 2466</span>  }</div><div class="line"><a name="l02467"></a><span class="lineno"> 2467</span> </div><div class="line"><a name="l02468"></a><span class="lineno"> 2468</span>  <span class="keywordtype">bool</span> StartArray() { <span class="keyword">new</span> (stack_.template Push<ValueType>()) 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>  </div><div class="line"><a name="l02470"></a><span class="lineno"> 2470</span>  <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>  ValueType* elements = stack_.template Pop<ValueType>(elementCount);</div><div class="line"><a name="l02472"></a><span class="lineno"> 2472</span>  stack_.template Top<ValueType>()->SetArrayRaw(elements, elementCount, GetAllocator());</div><div class="line"><a name="l02473"></a><span class="lineno"> 2473</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l02474"></a><span class="lineno"> 2474</span>  }</div><div class="line"><a name="l02475"></a><span class="lineno"> 2475</span> </div><div class="line"><a name="l02476"></a><span class="lineno"> 2476</span> <span class="keyword">private</span>:<span class="comment"></span></div><div class="line"><a name="l02477"></a><span class="lineno"> 2477</span> <span class="comment"> //! Prohibit copying</span></div><div class="line"><a name="l02478"></a><span class="lineno"> 2478</span> <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>&);<span class="comment"></span></div><div class="line"><a name="l02479"></a><span class="lineno"> 2479</span> <span class="comment"> //! Prohibit assignment</span></div><div class="line"><a name="l02480"></a><span class="lineno"> 2480</span> <span class="comment"></span> <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>& operator=(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>&);</div><div class="line"><a name="l02481"></a><span class="lineno"> 2481</span> </div><div class="line"><a name="l02482"></a><span class="lineno"> 2482</span>  <span class="keywordtype">void</span> ClearStack() {</div><div class="line"><a name="l02483"></a><span class="lineno"> 2483</span>  <span class="keywordflow">if</span> (Allocator::kNeedFree)</div><div class="line"><a name="l02484"></a><span class="lineno"> 2484</span>  <span class="keywordflow">while</span> (stack_.GetSize() > 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>  (stack_.template Pop<ValueType>(1))->~ValueType();</div><div class="line"><a name="l02486"></a><span class="lineno"> 2486</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l02487"></a><span class="lineno"> 2487</span>  stack_.Clear();</div><div class="line"><a name="l02488"></a><span class="lineno"> 2488</span>  stack_.ShrinkToFit();</div><div class="line"><a name="l02489"></a><span class="lineno"> 2489</span>  }</div><div class="line"><a name="l02490"></a><span class="lineno"> 2490</span> </div><div class="line"><a name="l02491"></a><span class="lineno"> 2491</span>  <span class="keywordtype">void</span> Destroy() {</div><div class="line"><a name="l02492"></a><span class="lineno"> 2492</span>  <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>  }</div><div class="line"><a name="l02494"></a><span class="lineno"> 2494</span> </div><div class="line"><a name="l02495"></a><span class="lineno"> 2495</span>  <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>  Allocator* allocator_;</div><div class="line"><a name="l02497"></a><span class="lineno"> 2497</span>  Allocator* ownAllocator_;</div><div class="line"><a name="l02498"></a><span class="lineno"> 2498</span>  internal::Stack<StackAllocator> stack_;</div><div class="line"><a name="l02499"></a><span class="lineno"> 2499</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> parseResult_;</div><div class="line"><a name="l02500"></a><span class="lineno"> 2500</span> };</div><div class="line"><a name="l02501"></a><span class="lineno"> 2501</span> <span class="comment"></span></div><div class="line"><a name="l02502"></a><span class="lineno"> 2502</span> <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> <span class="comment"></span><span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument<UTF8<></a> > <a class="code" href="namespacerapidjson.html#ace11b5b575baf1cccd5ba5f8586dcdc8">Document</a>;</div><div class="line"><a name="l02504"></a><span class="lineno"> 2504</span> <span class="comment"></span></div><div class="line"><a name="l02505"></a><span class="lineno"> 2505</span> <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> <span class="comment"></span><span class="comment">/*!</span></div><div class="line"><a name="l02507"></a><span class="lineno"> 2507</span> <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> <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> <span class="comment">*/</span></div><div class="line"><a name="l02510"></a><span class="lineno"> 2510</span> <span class="keyword">template</span> <<span class="keywordtype">bool</span> Const, <span class="keyword">typename</span> ValueT></div><div class="line"><a name="l02511"></a><span class="lineno"> 2511</span> <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> <span class="keyword">public</span>:</div><div class="line"><a name="l02513"></a><span class="lineno"> 2513</span>  <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_array.html">GenericArray<true, ValueT></a> ConstArray;</div><div class="line"><a name="l02514"></a><span class="lineno"> 2514</span>  <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_array.html">GenericArray<false, ValueT></a> Array;</div><div class="line"><a name="l02515"></a><span class="lineno"> 2515</span>  <span class="keyword">typedef</span> ValueT PlainType;</div><div class="line"><a name="l02516"></a><span class="lineno"> 2516</span>  <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">internal::MaybeAddConst<Const,PlainType>::Type</a> ValueType;</div><div class="line"><a name="l02517"></a><span class="lineno"> 2517</span>  <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>  <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>  <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>  <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> </div><div class="line"><a name="l02522"></a><span class="lineno"> 2522</span>  <span class="keyword">template</span> <<span class="keyword">typename</span>, <span class="keyword">typename</span>></div><div class="line"><a name="l02523"></a><span class="lineno"> 2523</span>  <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> </div><div class="line"><a name="l02525"></a><span class="lineno"> 2525</span>  <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>& rhs) : value_(rhs.value_) {}</div><div class="line"><a name="l02526"></a><span class="lineno"> 2526</span>  <a class="code" href="classrapidjson_1_1_generic_array.html">GenericArray</a>& operator=(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_array.html">GenericArray</a>& 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>  ~<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> </div><div class="line"><a name="l02529"></a><span class="lineno"> 2529</span>  <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>  <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>  <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>  <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>  ValueType& 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>  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>  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>  <a class="code" href="classrapidjson_1_1_generic_array.html">GenericArray</a> Reserve(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> newCapacity, AllocatorType &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>  <a class="code" href="classrapidjson_1_1_generic_array.html">GenericArray</a> PushBack(ValueType& value, AllocatorType& 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> <span class="preprocessor">#if RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l02539"></a><span class="lineno"> 2539</span>  <a class="code" href="classrapidjson_1_1_generic_array.html">GenericArray</a> PushBack(ValueType&& value, AllocatorType& 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> <span class="preprocessor">#endif // RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l02541"></a><span class="lineno"> 2541</span>  <a class="code" href="classrapidjson_1_1_generic_array.html">GenericArray</a> PushBack(StringRefType value, AllocatorType& 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>  <span class="keyword">template</span> <<span class="keyword">typename</span> T> RAPIDJSON_DISABLEIF_RETURN((internal::OrExpr<internal::IsPointer<T>, internal::IsGenericValue<T> >), (<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_array.html">GenericArray</a>&)) PushBack(T value, AllocatorType& 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>  <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>  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>  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> </div><div class="line"><a name="l02547"></a><span class="lineno"> 2547</span> <span class="preprocessor">#if RAPIDJSON_HAS_CXX11_RANGE_FOR</span></div><div class="line"><a name="l02548"></a><span class="lineno"> 2548</span>  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>  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> <span class="preprocessor">#endif</span></div><div class="line"><a name="l02551"></a><span class="lineno"> 2551</span> </div><div class="line"><a name="l02552"></a><span class="lineno"> 2552</span> <span class="keyword">private</span>:</div><div class="line"><a name="l02553"></a><span class="lineno"> 2553</span>  <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>  <a class="code" href="classrapidjson_1_1_generic_array.html">GenericArray</a>(ValueType& value) : value_(value) {}</div><div class="line"><a name="l02555"></a><span class="lineno"> 2555</span>  ValueType& value_;</div><div class="line"><a name="l02556"></a><span class="lineno"> 2556</span> };</div><div class="line"><a name="l02557"></a><span class="lineno"> 2557</span> <span class="comment"></span></div><div class="line"><a name="l02558"></a><span class="lineno"> 2558</span> <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> <span class="comment"></span><span class="comment">/*!</span></div><div class="line"><a name="l02560"></a><span class="lineno"> 2560</span> <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> <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> <span class="comment">*/</span></div><div class="line"><a name="l02563"></a><span class="lineno"> 2563</span> <span class="keyword">template</span> <<span class="keywordtype">bool</span> Const, <span class="keyword">typename</span> ValueT></div><div class="line"><a name="l02564"></a><span class="lineno"> 2564</span> <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> <span class="keyword">public</span>:</div><div class="line"><a name="l02566"></a><span class="lineno"> 2566</span>  <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject<true, ValueT></a> ConstObject;</div><div class="line"><a name="l02567"></a><span class="lineno"> 2567</span>  <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject<false, ValueT></a> Object;</div><div class="line"><a name="l02568"></a><span class="lineno"> 2568</span>  <span class="keyword">typedef</span> ValueT PlainType;</div><div class="line"><a name="l02569"></a><span class="lineno"> 2569</span>  <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">internal::MaybeAddConst<Const,PlainType>::Type</a> ValueType;</div><div class="line"><a name="l02570"></a><span class="lineno"> 2570</span>  <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">GenericMemberIterator<Const, typename ValueT::EncodingType, typename ValueT::AllocatorType></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>  <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">GenericMemberIterator<true, typename ValueT::EncodingType, typename ValueT::AllocatorType></a> ConstMemberIterator;</div><div class="line"><a name="l02572"></a><span class="lineno"> 2572</span>  <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>  <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>  <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>  <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> </div><div class="line"><a name="l02577"></a><span class="lineno"> 2577</span>  <span class="keyword">template</span> <<span class="keyword">typename</span>, <span class="keyword">typename</span>></div><div class="line"><a name="l02578"></a><span class="lineno"> 2578</span>  <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> </div><div class="line"><a name="l02580"></a><span class="lineno"> 2580</span>  <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>& rhs) : value_(rhs.value_) {}</div><div class="line"><a name="l02581"></a><span class="lineno"> 2581</span>  <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject</a>& operator=(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject</a>& 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>  ~<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> </div><div class="line"><a name="l02584"></a><span class="lineno"> 2584</span>  <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>  <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>  <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>  <span class="keyword">template</span> <<span class="keyword">typename</span> T> ValueType& 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>  <span class="keyword">template</span> <<span class="keyword">typename</span> SourceAllocator> ValueType& operator[](<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue<EncodingType, SourceAllocator></a>& 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> <span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l02590"></a><span class="lineno"> 2590</span>  ValueType& operator[](<span class="keyword">const</span> std::basic_string<Ch>& 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> <span class="preprocessor">#endif</span></div><div class="line"><a name="l02592"></a><span class="lineno"> 2592</span>  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>  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>  <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject</a> MemberReserve(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> newCapacity, AllocatorType &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>  <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> <span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l02597"></a><span class="lineno"> 2597</span>  <span class="keywordtype">bool</span> HasMember(<span class="keyword">const</span> std::basic_string<Ch>& 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> <span class="preprocessor">#endif</span></div><div class="line"><a name="l02599"></a><span class="lineno"> 2599</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> SourceAllocator> <span class="keywordtype">bool</span> HasMember(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue<EncodingType, SourceAllocator></a>& 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>  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>  <span class="keyword">template</span> <<span class="keyword">typename</span> SourceAllocator> MemberIterator FindMember(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue<EncodingType, SourceAllocator></a>& 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> <span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l02603"></a><span class="lineno"> 2603</span>  MemberIterator FindMember(<span class="keyword">const</span> std::basic_string<Ch>& 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> <span class="preprocessor">#endif</span></div><div class="line"><a name="l02605"></a><span class="lineno"> 2605</span>  <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject</a> AddMember(ValueType& name, ValueType& value, AllocatorType& 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>  <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject</a> AddMember(ValueType& name, StringRefType value, AllocatorType& 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> <span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l02608"></a><span class="lineno"> 2608</span>  <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject</a> AddMember(ValueType& name, std::basic_string<Ch>& value, AllocatorType& 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> <span class="preprocessor">#endif</span></div><div class="line"><a name="l02610"></a><span class="lineno"> 2610</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T> RAPIDJSON_DISABLEIF_RETURN((internal::OrExpr<internal::IsPointer<T>, internal::IsGenericValue<T> >), (ValueType&)) AddMember(ValueType& name, T value, AllocatorType& 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> <span class="preprocessor">#if RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l02612"></a><span class="lineno"> 2612</span>  <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject</a> AddMember(ValueType&& name, ValueType&& value, AllocatorType& 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>  <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject</a> AddMember(ValueType&& name, ValueType& value, AllocatorType& 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>  <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject</a> AddMember(ValueType& name, ValueType&& value, AllocatorType& 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>  <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject</a> AddMember(StringRefType name, ValueType&& value, AllocatorType& 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> <span class="preprocessor">#endif // RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l02617"></a><span class="lineno"> 2617</span>  <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject</a> AddMember(StringRefType name, ValueType& value, AllocatorType& 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>  <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject</a> AddMember(StringRefType name, StringRefType value, AllocatorType& 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>  <span class="keyword">template</span> <<span class="keyword">typename</span> T> RAPIDJSON_DISABLEIF_RETURN((internal::OrExpr<internal::IsPointer<T>, internal::IsGenericValue<T> >), (<a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject</a>)) AddMember(StringRefType name, T value, AllocatorType& 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>  <span class="keywordtype">void</span> RemoveAllMembers() { value_.RemoveAllMembers(); }</div><div class="line"><a name="l02621"></a><span class="lineno"> 2621</span>  <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> <span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l02623"></a><span class="lineno"> 2623</span>  <span class="keywordtype">bool</span> RemoveMember(<span class="keyword">const</span> std::basic_string<Ch>& 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> <span class="preprocessor">#endif</span></div><div class="line"><a name="l02625"></a><span class="lineno"> 2625</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> SourceAllocator> <span class="keywordtype">bool</span> RemoveMember(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue<EncodingType, SourceAllocator></a>& 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>  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>  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>  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>  <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> <span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l02631"></a><span class="lineno"> 2631</span>  <span class="keywordtype">bool</span> EraseMember(<span class="keyword">const</span> std::basic_string<Ch>& 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> <span class="preprocessor">#endif</span></div><div class="line"><a name="l02633"></a><span class="lineno"> 2633</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> SourceAllocator> <span class="keywordtype">bool</span> EraseMember(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue<EncodingType, SourceAllocator></a>& 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> </div><div class="line"><a name="l02635"></a><span class="lineno"> 2635</span> <span class="preprocessor">#if RAPIDJSON_HAS_CXX11_RANGE_FOR</span></div><div class="line"><a name="l02636"></a><span class="lineno"> 2636</span>  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>  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> <span class="preprocessor">#endif</span></div><div class="line"><a name="l02639"></a><span class="lineno"> 2639</span> </div><div class="line"><a name="l02640"></a><span class="lineno"> 2640</span> <span class="keyword">private</span>:</div><div class="line"><a name="l02641"></a><span class="lineno"> 2641</span>  <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>  <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject</a>(ValueType& value) : value_(value) {}</div><div class="line"><a name="l02643"></a><span class="lineno"> 2643</span>  ValueType& value_;</div><div class="line"><a name="l02644"></a><span class="lineno"> 2644</span> };</div><div class="line"><a name="l02645"></a><span class="lineno"> 2645</span> </div><div class="line"><a name="l02646"></a><span class="lineno"> 2646</span> RAPIDJSON_NAMESPACE_END</div><div class="line"><a name="l02647"></a><span class="lineno"> 2647</span> RAPIDJSON_DIAG_POP</div><div class="line"><a name="l02648"></a><span class="lineno"> 2648</span> </div><div class="line"><a name="l02649"></a><span class="lineno"> 2649</span> <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< Encoding, Allocator > 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> <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> <span class="comment">// </span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <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> <span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">// Licensed under the MIT License (the "License"); you may not use this file except</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <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> <span class="comment">//</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">// http://opensource.org/licenses/MIT</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">//</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <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> <span class="comment">// under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR </span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <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> <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> </div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor">#ifndef RAPIDJSON_DOCUMENT_H_</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#define RAPIDJSON_DOCUMENT_H_</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"></span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">/*! \file document.h */</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> </div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include "<a class="code" href="reader_8h.html">reader.h</a>"</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include "internal/meta.h"</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include "internal/strfunc.h"</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include "memorystream.h"</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include "encodedstream.h"</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include <new></span> <span class="comment">// placement new</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include <limits></span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> </div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> RAPIDJSON_DIAG_PUSH</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#ifdef __clang__</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> RAPIDJSON_DIAG_OFF(padded)</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> 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> RAPIDJSON_DIAG_OFF(c++98-compat)</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#elif defined(_MSC_VER)</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> 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> RAPIDJSON_DIAG_OFF(4244) <span class="comment">// conversion from kXxxFlags to 'uint16_t', possible loss of data</span></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> </div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="preprocessor">#ifdef __GNUC__</span></div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span> RAPIDJSON_DIAG_OFF(effc++)</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="preprocessor">#endif // __GNUC__</span></div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span> </div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="preprocessor">#ifndef RAPIDJSON_NOMEMBERITERATORCLASS</span></div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="preprocessor">#include <iterator></span> <span class="comment">// std::random_access_iterator_tag</span></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span> </div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="preprocessor">#if RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="preprocessor">#include <utility></span> <span class="comment">// std::move</span></div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span> </div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span> RAPIDJSON_NAMESPACE_BEGIN</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span> </div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="comment">// Forward declaration.</span></div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="keyword">template</span> <<span class="keyword">typename</span> Encoding, <span class="keyword">typename</span> Allocator></div><div class="line"><a name="l00054"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html"> 54</a></span> <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> </div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="keyword">template</span> <<span class="keyword">typename</span> Encoding, <span class="keyword">typename</span> Allocator, <span class="keyword">typename</span> StackAllocator></div><div class="line"><a name="l00057"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_document.html"> 57</a></span> <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> <span class="comment"></span></div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <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> <span class="comment"></span><span class="comment">/*!</span></div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <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> <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> <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> <span class="comment">*/</span></div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="keyword">template</span> <<span class="keyword">typename</span> Encoding, <span class="keyword">typename</span> Allocator> </div><div class="line"><a name="l00066"></a><span class="lineno"><a class="line" href="structrapidjson_1_1_generic_member.html"> 66</a></span> <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>  <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue<Encoding, Allocator></a> <a class="code" href="structrapidjson_1_1_generic_member.html#ae820eaa74b415a9073f3f3855f6c6607">name</a>; <span class="comment">//!< 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> <span class="comment"></span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue<Encoding, Allocator></a> <a class="code" href="structrapidjson_1_1_generic_member.html#a8ffff2076e62d988a070a136da6ffca6">value</a>; <span class="comment">//!< value of member.</span></div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="comment"></span>};</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="comment"></span></div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="comment"></span><span class="comment">// GenericMemberIterator</span></div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span> </div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="preprocessor">#ifndef RAPIDJSON_NOMEMBERITERATORCLASS</span></div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="comment"></span></div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <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> <span class="comment"></span><span class="comment">/*!</span></div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="comment"> \tparam Const Is this a constant iterator?</span></div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <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> <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> <span class="comment"></span></div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <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> <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> <span class="comment"></span></div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <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> <span class="comment"> conversions from iterator values to \c NULL,</span></div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="comment"> e.g. from GenericValue::FindMember.</span></div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <span class="comment"></span></div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <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> <span class="comment"> pointer-based implementation, if your platform doesn't provide</span></div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="comment"> the C++ <iterator> header.</span></div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="comment"></span></div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <span class="comment"> \see GenericMember, GenericValue::MemberIterator, GenericValue::ConstMemberIterator</span></div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span> <span class="comment"> */</span></div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <span class="keyword">template</span> <<span class="keywordtype">bool</span> Const, <span class="keyword">typename</span> Encoding, <span class="keyword">typename</span> Allocator></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> <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> </div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a><Encoding,Allocator>;</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  <span class="keyword">template</span> <<span class="keywordtype">bool</span>, <span class="keyword">typename</span>, <span class="keyword">typename</span>> <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> </div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  <span class="keyword">typedef</span> <a class="code" href="structrapidjson_1_1_generic_member.html">GenericMember<Encoding,Allocator></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>  <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">internal::MaybeAddConst<Const,PlainType>::Type</a> ValueType;</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span> </div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <span class="keyword">public</span>:<span class="comment"></span></div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <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> <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> <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> <span class="comment"></span> <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">GenericMemberIterator<true,Encoding,Allocator></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> <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> <span class="comment"></span> <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">GenericMemberIterator<false,Encoding,Allocator></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> <span class="comment"></span></div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <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> <span class="comment"> //@{</span></div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <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>  <span class="keyword">typedef</span> ValueType * pointer;</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  <span class="keyword">typedef</span> ValueType & reference;</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  <span class="keyword">typedef</span> std::ptrdiff_t difference_type;</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  <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> <span class="comment"> //@}</span></div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <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> <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> <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> <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> <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> <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> <span class="comment"></span></div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span> <span class="comment"> //! Default constructor (singular value)</span></div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span> <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> <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> <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>  <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> <span class="comment"></span></div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span> <span class="comment"> //! Iterator conversions to more const</span></div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span> <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> <span class="comment"></span></div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <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> <span class="comment"> that is "less const". Especially, creating a non-constant iterator</span></div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span> <span class="comment"> from a constant iterator are disabled:</span></div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span> <span class="comment"> \li const -> non-const (not ok)</span></div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span> <span class="comment"> \li const -> const (ok)</span></div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span> <span class="comment"> \li non-const -> const (ok)</span></div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span> <span class="comment"> \li non-const -> non-const (ok)</span></div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span> <span class="comment"></span></div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span> <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> <span class="comment"> constructor effectively defines a regular copy-constructor.</span></div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span> <span class="comment"> Otherwise, the copy constructor is implicitly defined.</span></div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span> <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>  <a class="code" href="classrapidjson_1_1_generic_member_iterator.html#aa30ffef74b3f4978b403024d81b484e4">GenericMemberIterator</a>(<span class="keyword">const</span> NonConstIterator & it) : ptr_(it.ptr_) {}</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  Iterator& operator=(<span class="keyword">const</span> NonConstIterator & 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> <span class="comment"></span></div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span> <span class="comment"> //! @name stepping</span></div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span> <span class="comment"></span><span class="comment"> //@{</span></div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span> <span class="comment"></span> Iterator& 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>  Iterator& 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>  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>  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> <span class="comment"> //@}</span></div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span> <span class="comment"> //! @name increment/decrement</span></div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span> <span class="comment"></span><span class="comment"> //@{</span></div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span> <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>  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> </div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  Iterator& 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>  Iterator& 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> <span class="comment"> //@}</span></div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span> <span class="comment"> //! @name relations</span></div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span> <span class="comment"></span><span class="comment"> //@{</span></div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span> <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>  <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>  <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="l00175"></a><span class="lineno"> 175</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>  <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>  <span class="keywordtype">bool</span> operator> (ConstIterator that)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> ptr_ > that.ptr_; }<span class="comment"></span></div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span> <span class="comment"> //@}</span></div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span> <span class="comment"> //! @name dereference</span></div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span> <span class="comment"></span><span class="comment"> //@{</span></div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span> <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>  Pointer operator->()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> ptr_; }</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  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> <span class="comment"> //@}</span></div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span> <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> <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> </div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span> <span class="keyword">private</span>:<span class="comment"></span></div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span> <span class="comment"> //! Internal constructor from plain pointer</span></div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span> <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> </div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  Pointer ptr_; <span class="comment">//!< raw pointer</span></div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span> <span class="comment"></span>};</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span> </div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span> <span class="preprocessor">#else // RAPIDJSON_NOMEMBERITERATORCLASS</span></div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span> </div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span> <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> </div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span> <span class="keyword">template</span> <<span class="keywordtype">bool</span> Const, <span class="keyword">typename</span> Encoding, <span class="keyword">typename</span> Allocator></div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span> <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> <span class="comment"></span></div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span> <span class="comment">//! non-const GenericMemberIterator</span></div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span> <span class="comment"></span><span class="keyword">template</span> <<span class="keyword">typename</span> Encoding, <span class="keyword">typename</span> Allocator></div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span> <span class="keyword">struct </span><a class="code" href="classrapidjson_1_1_generic_member_iterator.html">GenericMemberIterator</a><false,Encoding,Allocator> {<span class="comment"></span></div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span> <span class="comment"> //! use plain pointer as iterator type</span></div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span> <span class="comment"></span> <span class="keyword">typedef</span> <a class="code" href="structrapidjson_1_1_generic_member.html">GenericMember<Encoding,Allocator></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> };<span class="comment"></span></div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span> <span class="comment">//! const GenericMemberIterator</span></div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span> <span class="comment"></span><span class="keyword">template</span> <<span class="keyword">typename</span> Encoding, <span class="keyword">typename</span> Allocator></div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span> <span class="keyword">struct </span><a class="code" href="classrapidjson_1_1_generic_member_iterator.html">GenericMemberIterator</a><true,Encoding,Allocator> {<span class="comment"></span></div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span> <span class="comment"> //! use plain const pointer as iterator type</span></div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span> <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<Encoding,Allocator></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> };</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span> </div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span> <span class="preprocessor">#endif // RAPIDJSON_NOMEMBERITERATORCLASS</span></div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span> <span class="comment"></span></div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span> <span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span> <span class="comment"></span><span class="comment">// GenericStringRef</span></div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span> <span class="comment"></span></div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span> <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> <span class="comment"></span><span class="comment">/*!</span></div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span> <span class="comment"> \tparam CharType character type of the string</span></div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span> <span class="comment"></span></div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span> <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> <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> <span class="comment"> character arrays.</span></div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span> <span class="comment"></span></div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span> <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> <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> <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> <span class="comment"> of the associated GenericValue.</span></div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span> <span class="comment"></span></div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span> <span class="comment"> \b Example</span></div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span> <span class="comment"> \code</span></div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span> <span class="comment"> Value v("foo"); // ok, no need to copy & calculate length</span></div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span> <span class="comment"> const char foo[] = "foo";</span></div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span> <span class="comment"> v.SetString(foo); // ok</span></div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span> <span class="comment"></span></div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span> <span class="comment"> const char* bar = foo;</span></div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span> <span class="comment"> // Value x(bar); // not ok, can't rely on bar's lifetime</span></div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span> <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> <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> <span class="comment"> \endcode</span></div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span> <span class="comment"></span></div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span> <span class="comment"> \see StringRef, GenericValue::SetString</span></div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span> <span class="comment">*/</span></div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span> <span class="keyword">template</span><<span class="keyword">typename</span> CharType></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> <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>  <span class="keyword">typedef</span> CharType <a class="code" href="structrapidjson_1_1_generic_string_ref.html#aa2a8eccae3d7eb14c30bc21afb7d6fba">Ch</a>; <span class="comment">//!< character type of the string</span></div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span> <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> <span class="comment"></span><span class="preprocessor">#ifndef __clang__ // -Wdocumentation</span></div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span> <span class="comment"> /*!</span></div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span> <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> <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> <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> <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> <span class="comment"> characters.</span></div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span> <span class="comment"></span></div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span> <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> <span class="comment"></span></div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span> <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> <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> <span class="comment"></span></div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span> <span class="comment"> \post \ref s == str</span></div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span> <span class="comment"></span></div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span> <span class="comment"> \note Constant complexity.</span></div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span> <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> <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> <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> <span class="comment"> \c snprintf are excluded from consideration.</span></div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span> <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> <span class="comment"> GenericValue instead.</span></div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span> <span class="comment"> */</span></div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  <span class="keyword">template</span><SizeType N></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>  <a class="code" href="structrapidjson_1_1_generic_string_ref.html#acd4d5ebac2b610ce647356aa52998002">GenericStringRef</a>(<span class="keyword">const</span> CharType (&str)[N]) RAPIDJSON_NOEXCEPT</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  : s(str), length(N-1) {}</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span> <span class="comment"></span></div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span> <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> <span class="comment"></span><span class="preprocessor">#ifndef __clang__ // -Wdocumentation</span></div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span> <span class="comment"> /*!</span></div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span> <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> <span class="comment"> a constant string pointer.</span></div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span> <span class="comment"></span></div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span> <span class="comment"> \see StringRef(const CharType*)</span></div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span> <span class="comment"></span></div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span> <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> <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> <span class="comment"></span></div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span> <span class="comment"> \post \ref s == str</span></div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span> <span class="comment"></span></div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span> <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> <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> <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> <span class="comment"> \c snprintf are excluded from consideration.</span></div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span> <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> <span class="comment"> GenericValue instead.</span></div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span> <span class="comment"> */</span></div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span> <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>  <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>  : s(str), length(NotNullStrLen(str)) {}</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span> <span class="comment"></span></div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span> <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> <span class="comment"></span><span class="preprocessor">#ifndef __clang__ // -Wdocumentation</span></div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span> <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> <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> <span class="comment"></span></div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span> <span class="comment"> \post \ref s == str && \ref length == len</span></div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span> <span class="comment"> \note Constant complexity.</span></div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span> <span class="comment"> */</span></div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span> <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>  <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>  : 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> </div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  <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>& 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> <span class="comment"></span></div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span> <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> <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> </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>  <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">//!< 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> <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">//!< length of the string (excluding the trailing NULL terminator)</span></div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span> <span class="comment"></span></div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span> <span class="keyword">private</span>:</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  <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>  <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>  <span class="keywordflow">return</span> internal::StrLen(str);</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  }</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span> <span class="comment"></span></div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span> <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> <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> <span class="comment"></span></div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span> <span class="comment"> //! Disallow construction from non-const array</span></div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span> <span class="comment"></span> <span class="keyword">template</span><SizeType N></div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>  <a class="code" href="structrapidjson_1_1_generic_string_ref.html">GenericStringRef</a>(CharType (&str)[N]) <span class="comment">/* = delete */</span>;<span class="comment"></span></div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span> <span class="comment"> //! Copy assignment operator not permitted - immutable type</span></div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span> <span class="comment"></span> <a class="code" href="structrapidjson_1_1_generic_string_ref.html">GenericStringRef</a>& operator=(<span class="keyword">const</span> <a class="code" href="structrapidjson_1_1_generic_string_ref.html">GenericStringRef</a>& rhs) <span class="comment">/* = delete */</span>;</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span> };</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span> </div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span> <span class="keyword">template</span><<span class="keyword">typename</span> CharType></div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span> <span class="keyword">const</span> CharType <a class="code" href="structrapidjson_1_1_generic_string_ref.html">GenericStringRef<CharType>::emptyString</a>[] = { CharType() };</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span> <span class="comment"></span></div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span> <span class="comment">//! Mark a character pointer as constant string</span></div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span> <span class="comment"></span><span class="comment">/*! Mark a plain character pointer as a "string literal". This function</span></div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span> <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> <span class="comment"> value in a JSON GenericValue object, if the string's lifetime is known</span></div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span> <span class="comment"> to be valid long enough.</span></div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span> <span class="comment"> \tparam CharType Character type of the string</span></div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span> <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> <span class="comment"> \return GenericStringRef string reference object</span></div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span> <span class="comment"> \relatesalso GenericStringRef</span></div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span> <span class="comment"></span></div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span> <span class="comment"> \see GenericValue::GenericValue(StringRefType), GenericValue::operator=(StringRefType), GenericValue::SetString(StringRefType), GenericValue::PushBack(StringRefType, Allocator&), GenericValue::AddMember</span></div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span> <span class="comment">*/</span></div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span> <span class="keyword">template</span><<span class="keyword">typename</span> CharType></div><div class="line"><a name="l00358"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#aa6b9fd9f6aa49405a574c362ba9af6b5"> 358</a></span> <span class="keyword">inline</span> <a class="code" href="structrapidjson_1_1_generic_string_ref.html">GenericStringRef<CharType></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>  <span class="keywordflow">return</span> <a class="code" href="structrapidjson_1_1_generic_string_ref.html">GenericStringRef<CharType></a>(str);</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span> }</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span> <span class="comment"></span></div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span> <span class="comment">//! Mark a character pointer as constant string</span></div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span> <span class="comment"></span><span class="comment">/*! Mark a plain character pointer as a "string literal". This function</span></div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span> <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> <span class="comment"> value in a JSON GenericValue object, if the string's lifetime is known</span></div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span> <span class="comment"> to be valid long enough.</span></div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span> <span class="comment"></span></div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span> <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> <span class="comment"> supports string containing null characters.</span></div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span> <span class="comment"></span></div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span> <span class="comment"> \tparam CharType character type of the string</span></div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span> <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> <span class="comment"> \param length The length of source string.</span></div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span> <span class="comment"> \return GenericStringRef string reference object</span></div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span> <span class="comment"> \relatesalso GenericStringRef</span></div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span> <span class="comment">*/</span></div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span> <span class="keyword">template</span><<span class="keyword">typename</span> CharType></div><div class="line"><a name="l00378"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#a578c51ab574a50a9c760b9da7c7562f2"> 378</a></span> <span class="keyword">inline</span> <a class="code" href="structrapidjson_1_1_generic_string_ref.html">GenericStringRef<CharType></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>  <span class="keywordflow">return</span> <a class="code" href="structrapidjson_1_1_generic_string_ref.html">GenericStringRef<CharType></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> }</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span> </div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span> <span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span> <span class="comment">//! Mark a string object as constant string</span></div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span> <span class="comment"></span><span class="comment">/*! Mark a string object (e.g. \c std::string) as a "string literal".</span></div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span> <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> <span class="comment"> value in a JSON GenericValue object, if the string's lifetime is known</span></div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span> <span class="comment"> to be valid long enough.</span></div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span> <span class="comment"></span></div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span> <span class="comment"> \tparam CharType character type of the string</span></div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span> <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> <span class="comment"> \return GenericStringRef string reference object</span></div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span> <span class="comment"> \relatesalso GenericStringRef</span></div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span> <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> <span class="comment">*/</span></div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span> <span class="keyword">template</span><<span class="keyword">typename</span> CharType></div><div class="line"><a name="l00396"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#af94951529a5d51e8c4e6e770bb707c1f"> 396</a></span> <span class="keyword">inline</span> <a class="code" href="structrapidjson_1_1_generic_string_ref.html">GenericStringRef<CharType></a> <a class="code" href="namespacerapidjson.html#af94951529a5d51e8c4e6e770bb707c1f">StringRef</a>(<span class="keyword">const</span> std::basic_string<CharType>& str) {</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>  <span class="keywordflow">return</span> <a class="code" href="structrapidjson_1_1_generic_string_ref.html">GenericStringRef<CharType></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> }</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span> <span class="comment"></span></div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span> <span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span> <span class="comment"></span><span class="comment">// GenericValue type traits</span></div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span> <span class="keyword">namespace </span>internal {</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span> </div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span> <span class="keyword">template</span> <<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>></div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span> <span class="keyword">struct </span>IsGenericValueImpl : FalseType {};</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span> </div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span> <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> <span class="keyword">template</span> <<span class="keyword">typename</span> T> <span class="keyword">struct </span>IsGenericValueImpl<T, typename Void<typename T::EncodingType><a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">::Type</a>, typename Void<typename T::AllocatorType><a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">::Type</a>></div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>  : IsBaseOf<GenericValue<typename T::EncodingType, typename T::AllocatorType>, T><a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">::Type</a> {};</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span> </div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span> <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> <span class="keyword">template</span> <<span class="keyword">typename</span> T> <span class="keyword">struct </span>IsGenericValue : IsGenericValueImpl<T><a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">::Type</a> {};</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span> </div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span> } <span class="comment">// namespace internal</span></div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span> <span class="comment"></span></div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span> <span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span> <span class="comment"></span><span class="comment">// TypeHelper</span></div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span> </div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span> <span class="keyword">namespace </span>internal {</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span> </div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span> <span class="keyword">template</span> <<span class="keyword">typename</span> ValueType, <span class="keyword">typename</span> T></div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span> <span class="keyword">struct </span>TypeHelper {};</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span> </div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span> <span class="keyword">template</span><<span class="keyword">typename</span> ValueType> </div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span> <span class="keyword">struct </span>TypeHelper<ValueType, bool> {</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>  <span class="keyword">static</span> <span class="keywordtype">bool</span> Is(<span class="keyword">const</span> ValueType& v) { <span class="keywordflow">return</span> v.IsBool(); }</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>  <span class="keyword">static</span> <span class="keywordtype">bool</span> Get(<span class="keyword">const</span> ValueType& v) { <span class="keywordflow">return</span> v.GetBool(); }</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>  <span class="keyword">static</span> ValueType& Set(ValueType& 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>  <span class="keyword">static</span> ValueType& Set(ValueType& v, <span class="keywordtype">bool</span> data, <span class="keyword">typename</span> ValueType::AllocatorType&) { <span class="keywordflow">return</span> v.SetBool(data); }</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span> };</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span> </div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span> <span class="keyword">template</span><<span class="keyword">typename</span> ValueType> </div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span> <span class="keyword">struct </span>TypeHelper<ValueType, int> {</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>  <span class="keyword">static</span> <span class="keywordtype">bool</span> Is(<span class="keyword">const</span> ValueType& v) { <span class="keywordflow">return</span> v.IsInt(); }</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>  <span class="keyword">static</span> <span class="keywordtype">int</span> Get(<span class="keyword">const</span> ValueType& v) { <span class="keywordflow">return</span> v.GetInt(); }</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>  <span class="keyword">static</span> ValueType& Set(ValueType& 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>  <span class="keyword">static</span> ValueType& Set(ValueType& v, <span class="keywordtype">int</span> data, <span class="keyword">typename</span> ValueType::AllocatorType&) { <span class="keywordflow">return</span> v.SetInt(data); }</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span> };</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span> </div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span> <span class="keyword">template</span><<span class="keyword">typename</span> ValueType> </div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span> <span class="keyword">struct </span>TypeHelper<ValueType, unsigned> {</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>  <span class="keyword">static</span> <span class="keywordtype">bool</span> Is(<span class="keyword">const</span> ValueType& v) { <span class="keywordflow">return</span> v.IsUint(); }</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>  <span class="keyword">static</span> <span class="keywordtype">unsigned</span> Get(<span class="keyword">const</span> ValueType& v) { <span class="keywordflow">return</span> v.GetUint(); }</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>  <span class="keyword">static</span> ValueType& Set(ValueType& 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>  <span class="keyword">static</span> ValueType& Set(ValueType& v, <span class="keywordtype">unsigned</span> data, <span class="keyword">typename</span> ValueType::AllocatorType&) { <span class="keywordflow">return</span> v.SetUint(data); }</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span> };</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span> </div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span> <span class="preprocessor">#ifdef _MSC_VER</span></div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span> <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> <span class="keyword">template</span><<span class="keyword">typename</span> ValueType></div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span> <span class="keyword">struct </span>TypeHelper<ValueType, long> {</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>  <span class="keyword">static</span> <span class="keywordtype">bool</span> Is(<span class="keyword">const</span> ValueType& v) { <span class="keywordflow">return</span> v.IsInt(); }</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>  <span class="keyword">static</span> <span class="keywordtype">long</span> Get(<span class="keyword">const</span> ValueType& v) { <span class="keywordflow">return</span> v.GetInt(); }</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>  <span class="keyword">static</span> ValueType& Set(ValueType& 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>  <span class="keyword">static</span> ValueType& Set(ValueType& v, <span class="keywordtype">long</span> data, <span class="keyword">typename</span> ValueType::AllocatorType&) { <span class="keywordflow">return</span> v.SetInt(data); }</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span> };</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span> </div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span> <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> <span class="keyword">template</span><<span class="keyword">typename</span> ValueType></div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span> <span class="keyword">struct </span>TypeHelper<ValueType, unsigned long> {</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>  <span class="keyword">static</span> <span class="keywordtype">bool</span> Is(<span class="keyword">const</span> ValueType& v) { <span class="keywordflow">return</span> v.IsUint(); }</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>  <span class="keyword">static</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> Get(<span class="keyword">const</span> ValueType& v) { <span class="keywordflow">return</span> v.GetUint(); }</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>  <span class="keyword">static</span> ValueType& Set(ValueType& 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>  <span class="keyword">static</span> ValueType& Set(ValueType& v, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> data, <span class="keyword">typename</span> ValueType::AllocatorType&) { <span class="keywordflow">return</span> v.SetUint(data); }</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span> };</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span> </div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span> <span class="keyword">template</span><<span class="keyword">typename</span> ValueType> </div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span> <span class="keyword">struct </span>TypeHelper<ValueType, int64_t> {</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>  <span class="keyword">static</span> <span class="keywordtype">bool</span> Is(<span class="keyword">const</span> ValueType& v) { <span class="keywordflow">return</span> v.IsInt64(); }</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>  <span class="keyword">static</span> int64_t Get(<span class="keyword">const</span> ValueType& v) { <span class="keywordflow">return</span> v.GetInt64(); }</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>  <span class="keyword">static</span> ValueType& Set(ValueType& 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>  <span class="keyword">static</span> ValueType& Set(ValueType& v, int64_t data, <span class="keyword">typename</span> ValueType::AllocatorType&) { <span class="keywordflow">return</span> v.SetInt64(data); }</div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span> };</div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span> </div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span> <span class="keyword">template</span><<span class="keyword">typename</span> ValueType> </div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span> <span class="keyword">struct </span>TypeHelper<ValueType, uint64_t> {</div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>  <span class="keyword">static</span> <span class="keywordtype">bool</span> Is(<span class="keyword">const</span> ValueType& v) { <span class="keywordflow">return</span> v.IsUint64(); }</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>  <span class="keyword">static</span> uint64_t Get(<span class="keyword">const</span> ValueType& v) { <span class="keywordflow">return</span> v.GetUint64(); }</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>  <span class="keyword">static</span> ValueType& Set(ValueType& 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>  <span class="keyword">static</span> ValueType& Set(ValueType& v, uint64_t data, <span class="keyword">typename</span> ValueType::AllocatorType&) { <span class="keywordflow">return</span> v.SetUint64(data); }</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span> };</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span> </div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span> <span class="keyword">template</span><<span class="keyword">typename</span> ValueType> </div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span> <span class="keyword">struct </span>TypeHelper<ValueType, double> {</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>  <span class="keyword">static</span> <span class="keywordtype">bool</span> Is(<span class="keyword">const</span> ValueType& v) { <span class="keywordflow">return</span> v.IsDouble(); }</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>  <span class="keyword">static</span> <span class="keywordtype">double</span> Get(<span class="keyword">const</span> ValueType& v) { <span class="keywordflow">return</span> v.GetDouble(); }</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>  <span class="keyword">static</span> ValueType& Set(ValueType& 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>  <span class="keyword">static</span> ValueType& Set(ValueType& v, <span class="keywordtype">double</span> data, <span class="keyword">typename</span> ValueType::AllocatorType&) { <span class="keywordflow">return</span> v.SetDouble(data); }</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span> };</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span> </div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span> <span class="keyword">template</span><<span class="keyword">typename</span> ValueType> </div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span> <span class="keyword">struct </span>TypeHelper<ValueType, float> {</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>  <span class="keyword">static</span> <span class="keywordtype">bool</span> Is(<span class="keyword">const</span> ValueType& v) { <span class="keywordflow">return</span> v.IsFloat(); }</div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>  <span class="keyword">static</span> <span class="keywordtype">float</span> Get(<span class="keyword">const</span> ValueType& v) { <span class="keywordflow">return</span> v.GetFloat(); }</div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>  <span class="keyword">static</span> ValueType& Set(ValueType& 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>  <span class="keyword">static</span> ValueType& Set(ValueType& v, <span class="keywordtype">float</span> data, <span class="keyword">typename</span> ValueType::AllocatorType&) { <span class="keywordflow">return</span> v.SetFloat(data); }</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span> };</div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span> </div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span> <span class="keyword">template</span><<span class="keyword">typename</span> ValueType> </div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span> <span class="keyword">struct </span>TypeHelper<ValueType, const typename ValueType::Ch*> {</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>  <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>  <span class="keyword">static</span> <span class="keywordtype">bool</span> Is(<span class="keyword">const</span> ValueType& v) { <span class="keywordflow">return</span> v.IsString(); }</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>  <span class="keyword">static</span> StringType Get(<span class="keyword">const</span> ValueType& v) { <span class="keywordflow">return</span> v.GetString(); }</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>  <span class="keyword">static</span> ValueType& Set(ValueType& 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>  <span class="keyword">static</span> ValueType& Set(ValueType& v, <span class="keyword">const</span> StringType data, <span class="keyword">typename</span> ValueType::AllocatorType& a) { <span class="keywordflow">return</span> v.SetString(data, a); }</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span> };</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span> </div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span> <span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span> <span class="keyword">template</span><<span class="keyword">typename</span> ValueType> </div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span> <span class="keyword">struct </span>TypeHelper<ValueType, std::basic_string<typename ValueType::Ch> > {</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>  <span class="keyword">typedef</span> std::basic_string<typename ValueType::Ch> StringType;</div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>  <span class="keyword">static</span> <span class="keywordtype">bool</span> Is(<span class="keyword">const</span> ValueType& v) { <span class="keywordflow">return</span> v.IsString(); }</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>  <span class="keyword">static</span> StringType Get(<span class="keyword">const</span> ValueType& v) { <span class="keywordflow">return</span> StringType(v.GetString(), v.GetStringLength()); }</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>  <span class="keyword">static</span> ValueType& Set(ValueType& v, <span class="keyword">const</span> StringType& data, <span class="keyword">typename</span> ValueType::AllocatorType& a) { <span class="keywordflow">return</span> v.SetString(data, a); }</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span> };</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span> </div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span> <span class="keyword">template</span><<span class="keyword">typename</span> ValueType> </div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span> <span class="keyword">struct </span>TypeHelper<ValueType, typename ValueType::Array> {</div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>  <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>  <span class="keyword">static</span> <span class="keywordtype">bool</span> Is(<span class="keyword">const</span> ValueType& v) { <span class="keywordflow">return</span> v.IsArray(); }</div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>  <span class="keyword">static</span> ArrayType Get(ValueType& v) { <span class="keywordflow">return</span> v.GetArray(); }</div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>  <span class="keyword">static</span> ValueType& Set(ValueType& v, ArrayType data) { <span class="keywordflow">return</span> v = data; }</div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>  <span class="keyword">static</span> ValueType& Set(ValueType& v, ArrayType data, <span class="keyword">typename</span> ValueType::AllocatorType&) { <span class="keywordflow">return</span> v = data; }</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span> };</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span> </div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span> <span class="keyword">template</span><<span class="keyword">typename</span> ValueType> </div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span> <span class="keyword">struct </span>TypeHelper<ValueType, typename ValueType::ConstArray> {</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>  <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>  <span class="keyword">static</span> <span class="keywordtype">bool</span> Is(<span class="keyword">const</span> ValueType& v) { <span class="keywordflow">return</span> v.IsArray(); }</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>  <span class="keyword">static</span> ArrayType Get(<span class="keyword">const</span> ValueType& v) { <span class="keywordflow">return</span> v.GetArray(); }</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span> };</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span> </div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span> <span class="keyword">template</span><<span class="keyword">typename</span> ValueType> </div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span> <span class="keyword">struct </span>TypeHelper<ValueType, typename ValueType::Object> {</div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>  <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>  <span class="keyword">static</span> <span class="keywordtype">bool</span> Is(<span class="keyword">const</span> ValueType& v) { <span class="keywordflow">return</span> v.IsObject(); }</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>  <span class="keyword">static</span> ObjectType Get(ValueType& v) { <span class="keywordflow">return</span> v.GetObject(); }</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>  <span class="keyword">static</span> ValueType& Set(ValueType& v, ObjectType data) { <span class="keywordflow">return</span> v = data; }</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>  <span class="keyword">static</span> ValueType& Set(ValueType& v, ObjectType data, <span class="keyword">typename</span> ValueType::AllocatorType&) { <span class="keywordflow">return</span> v = data; }</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span> };</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span> </div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span> <span class="keyword">template</span><<span class="keyword">typename</span> ValueType> </div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span> <span class="keyword">struct </span>TypeHelper<ValueType, typename ValueType::ConstObject> {</div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>  <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>  <span class="keyword">static</span> <span class="keywordtype">bool</span> Is(<span class="keyword">const</span> ValueType& v) { <span class="keywordflow">return</span> v.IsObject(); }</div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>  <span class="keyword">static</span> ObjectType Get(<span class="keyword">const</span> ValueType& v) { <span class="keywordflow">return</span> v.GetObject(); }</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span> };</div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span> </div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span> } <span class="comment">// namespace internal</span></div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span> </div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span> <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> <span class="keyword">template</span> <<span class="keywordtype">bool</span>, <span class="keyword">typename</span>> <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> <span class="keyword">template</span> <<span class="keywordtype">bool</span>, <span class="keyword">typename</span>> <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> <span class="comment"></span></div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span> <span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span> <span class="comment"></span><span class="comment">// GenericValue</span></div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span> <span class="comment"></span></div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span> <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> <span class="comment"></span><span class="comment">/*!</span></div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span> <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> <span class="comment"> these types.</span></div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span> <span class="comment"></span></div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span> <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> <span class="comment"></span></div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span> <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> <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> <span class="comment">*/</span></div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span> <span class="keyword">template</span> <<span class="keyword">typename</span> Encoding, <span class="keyword">typename</span> Allocator = MemoryPoolAllocator<> > </div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span> <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> <span class="keyword">public</span>:<span class="comment"></span></div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span> <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> <span class="comment"></span> <span class="keyword">typedef</span> <a class="code" href="structrapidjson_1_1_generic_member.html">GenericMember<Encoding, Allocator></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>  <span class="keyword">typedef</span> Encoding <a class="code" href="classrapidjson_1_1_generic_value.html#a05906384808645a2e798d29a9b2d441d">EncodingType</a>; <span class="comment">//!< 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> <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">//!< 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> <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">//!< 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> <span class="comment"></span> <span class="keyword">typedef</span> <a class="code" href="structrapidjson_1_1_generic_string_ref.html">GenericStringRef<Ch></a> <a class="code" href="classrapidjson_1_1_generic_value.html#a559eb9cea54364a35518b02f6d74f379">StringRefType</a>; <span class="comment">//!< 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> <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<false,Encoding,Allocator>::Iterator</a> <a class="code" href="classrapidjson_1_1_generic_value.html#aca5596987335016c1a7c2a9467baf80b">MemberIterator</a>; <span class="comment">//!< 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> <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<true,Encoding,Allocator>::Iterator</a> <a class="code" href="classrapidjson_1_1_generic_value.html#a6cd2b09795c48d2892bebc0ae350d51f">ConstMemberIterator</a>; <span class="comment">//!< 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> <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">//!< 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> <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">//!< 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> <span class="comment"></span> <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue<Encoding, Allocator></a> <a class="code" href="classrapidjson_1_1_generic_value.html#ad2935191ab28c2c2e472b739a9d58202">ValueType</a>; <span class="comment">//!< Value type of itself.</span></div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span> <span class="comment"></span> <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_array.html">GenericArray<false, ValueType></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>  <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_array.html">GenericArray<true, ValueType></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>  <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject<false, ValueType></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>  <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject<true, ValueType></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> <span class="comment"></span></div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span> <span class="comment"> //!@name Constructors and destructor.</span></div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span> <span class="comment"></span><span class="comment"> //@{</span></div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span> <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> <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> </div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span> <span class="preprocessor">#if RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span> <span class="comment"> //! Move constructor in C++11</span></div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span> <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>&& rhs) RAPIDJSON_NOEXCEPT : data_(rhs.data_) {</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>  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>  }</div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span> </div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span> <span class="keyword">private</span>:<span class="comment"></span></div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span> <span class="comment"> //! Copy constructor is not permitted.</span></div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span> <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>& rhs);</div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span> </div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span> <span class="preprocessor">#if RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span> <span class="comment"> //! Moving from a GenericDocument is not permitted.</span></div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span> <span class="comment"></span> <span class="keyword">template</span> <<span class="keyword">typename</span> StackAllocator></div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>  <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(<a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument<Encoding,Allocator,StackAllocator></a>&& rhs);</div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span> <span class="comment"></span></div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span> <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> <span class="comment"></span> <span class="keyword">template</span> <<span class="keyword">typename</span> StackAllocator></div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>  <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& operator=(<a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument<Encoding,Allocator,StackAllocator></a>&& rhs);</div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span> </div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span> <span class="comment"></span></div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span> <span class="comment"> //! Constructor with JSON value type.</span></div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span> <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> <span class="comment"> \param type Type of the value.</span></div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span> <span class="comment"> \note Default content for number is zero.</span></div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span> <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>  <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>  <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>  kNullFlag, kFalseFlag, kTrueFlag, kObjectFlag, kArrayFlag, kShortStringFlag,</div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>  kNumberAnyFlag</div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>  };</div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>  <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 >= <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a952871e4326b527154fc8aac1ac1f6ff">kNullType</a> && type <= <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a">kNumberType</a>);</div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>  data_.f.flags = defaultFlags[type];</div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span> </div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>  <span class="comment">// Use ShortString to store empty string.</span></div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>  <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>  data_.ss.SetLength(0);</div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span>  }</div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span> <span class="comment"></span></div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span> <span class="comment"> //! Explicit copy constructor (with allocator)</span></div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span> <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> <span class="comment"> \tparam SourceAllocator allocator of \c rhs</span></div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span> <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> <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> <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> <span class="comment"> \see CopyFrom()</span></div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span> <span class="comment"> */</span></div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> SourceAllocator></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>  <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<Encoding,SourceAllocator></a>& rhs, Allocator& 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>  <span class="keywordflow">switch</span> (rhs.GetType()) {</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>  <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>  <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>  Member* lm = <span class="keyword">reinterpret_cast<</span>Member*<span class="keyword">></span>(allocator.Malloc(count * <span class="keyword">sizeof</span>(Member)));</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>  <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="structrapidjson_1_1_generic_member.html">GenericValue<Encoding,SourceAllocator>::Member</a>* rm = rhs.GetMembersPointer();</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>  <span class="keywordflow">for</span> (<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> i = 0; i < count; i++) {</div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span>  <span class="keyword">new</span> (&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>  <span class="keyword">new</span> (&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>  }</div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>  data_.f.flags = kObjectFlag;</div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span>  data_.o.size = data_.o.capacity = count;</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>  SetMembersPointer(lm);</div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>  }</div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span>  <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>  <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>  <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>* le = <span class="keyword">reinterpret_cast<</span><a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>*<span class="keyword">></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>  <span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue<Encoding,SourceAllocator></a>* re = rhs.GetElementsPointer();</div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span>  <span class="keywordflow">for</span> (<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> i = 0; i < count; i++)</div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span>  <span class="keyword">new</span> (&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>  data_.f.flags = kArrayFlag;</div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>  data_.a.size = data_.a.capacity = count;</div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>  SetElementsPointer(le);</div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span>  }</div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00672"></a><span class="lineno"> 672</span>  <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>  <span class="keywordflow">if</span> (rhs.data_.f.flags == kConstStringFlag && !copyConstStrings) {</div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span>  data_.f.flags = rhs.data_.f.flags;</div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>  data_ = *<span class="keyword">reinterpret_cast<</span><span class="keyword">const </span>Data*<span class="keyword">></span>(&rhs.data_);</div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>  }</div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00678"></a><span class="lineno"> 678</span>  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>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span>  <span class="keywordflow">default</span>:</div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>  data_.f.flags = rhs.data_.f.flags;</div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>  data_ = *<span class="keyword">reinterpret_cast<</span><span class="keyword">const </span>Data*<span class="keyword">></span>(&rhs.data_);</div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>  }</div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>  }</div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span> <span class="comment"></span></div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span> <span class="comment"> //! Constructor for boolean value.</span></div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span> <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> <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> <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> <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> <span class="comment"> */</span></div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span> <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>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span>  <span class="keyword">explicit</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(T b, RAPIDJSON_ENABLEIF((internal::IsSame<bool, T>))) RAPIDJSON_NOEXCEPT <span class="comment">// See #472</span></div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span> <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>  <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> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span>  : data_() {</div><div class="line"><a name="l00700"></a><span class="lineno"> 700</span>  <span class="comment">// safe-guard against failing SFINAE</span></div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span>  <a class="code" href="rapidjson_8h.html#af95188da1d8eb6d4b148fe9ce71cd7c4">RAPIDJSON_STATIC_ASSERT</a>((<a class="code" href="namespacerapidjson.html#aa65fc9fb381b2cbc54f98673eadd6505">internal::IsSame<bool,T>::Value</a>));</div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>  data_.f.flags = b ? kTrueFlag : kFalseFlag;</div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span>  }</div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span> <span class="comment"></span></div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span> <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> <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>  data_.n.i64 = i;</div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span>  data_.f.flags = (i >= 0) ? (kNumberIntFlag | kUintFlag | kUint64Flag) : kNumberIntFlag;</div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span>  }</div><div class="line"><a name="l00710"></a><span class="lineno"> 710</span> <span class="comment"></span></div><div class="line"><a name="l00711"></a><span class="lineno"> 711</span> <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> <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>  data_.n.u64 = u; </div><div class="line"><a name="l00714"></a><span class="lineno"> 714</span>  data_.f.flags = (u & 0x80000000) ? kNumberUintFlag : (kNumberUintFlag | kIntFlag | kInt64Flag);</div><div class="line"><a name="l00715"></a><span class="lineno"> 715</span>  }</div><div class="line"><a name="l00716"></a><span class="lineno"> 716</span> <span class="comment"></span></div><div class="line"><a name="l00717"></a><span class="lineno"> 717</span> <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> <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>  data_.n.i64 = i64;</div><div class="line"><a name="l00720"></a><span class="lineno"> 720</span>  data_.f.flags = kNumberInt64Flag;</div><div class="line"><a name="l00721"></a><span class="lineno"> 721</span>  <span class="keywordflow">if</span> (i64 >= 0) {</div><div class="line"><a name="l00722"></a><span class="lineno"> 722</span>  data_.f.flags |= kNumberUint64Flag;</div><div class="line"><a name="l00723"></a><span class="lineno"> 723</span>  <span class="keywordflow">if</span> (!(static_cast<uint64_t>(i64) & <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>  data_.f.flags |= kUintFlag;</div><div class="line"><a name="l00725"></a><span class="lineno"> 725</span>  <span class="keywordflow">if</span> (!(static_cast<uint64_t>(i64) & <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>  data_.f.flags |= kIntFlag;</div><div class="line"><a name="l00727"></a><span class="lineno"> 727</span>  }</div><div class="line"><a name="l00728"></a><span class="lineno"> 728</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (i64 >= static_cast<int64_t>(<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>  data_.f.flags |= kIntFlag;</div><div class="line"><a name="l00730"></a><span class="lineno"> 730</span>  }</div><div class="line"><a name="l00731"></a><span class="lineno"> 731</span> <span class="comment"></span></div><div class="line"><a name="l00732"></a><span class="lineno"> 732</span> <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> <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>  data_.n.u64 = u64;</div><div class="line"><a name="l00735"></a><span class="lineno"> 735</span>  data_.f.flags = kNumberUint64Flag;</div><div class="line"><a name="l00736"></a><span class="lineno"> 736</span>  <span class="keywordflow">if</span> (!(u64 & <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>  data_.f.flags |= kInt64Flag;</div><div class="line"><a name="l00738"></a><span class="lineno"> 738</span>  <span class="keywordflow">if</span> (!(u64 & <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>  data_.f.flags |= kUintFlag;</div><div class="line"><a name="l00740"></a><span class="lineno"> 740</span>  <span class="keywordflow">if</span> (!(u64 & <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>  data_.f.flags |= kIntFlag;</div><div class="line"><a name="l00742"></a><span class="lineno"> 742</span>  }</div><div class="line"><a name="l00743"></a><span class="lineno"> 743</span> <span class="comment"></span></div><div class="line"><a name="l00744"></a><span class="lineno"> 744</span> <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> <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> <span class="comment"></span></div><div class="line"><a name="l00747"></a><span class="lineno"> 747</span> <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> <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<</span><span class="keywordtype">double</span><span class="keyword">></span>(f); data_.f.flags = kNumberDoubleFlag; }</div><div class="line"><a name="l00749"></a><span class="lineno"> 749</span> <span class="comment"></span></div><div class="line"><a name="l00750"></a><span class="lineno"> 750</span> <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> <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> <span class="comment"></span></div><div class="line"><a name="l00753"></a><span class="lineno"> 753</span> <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> <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> <span class="comment"></span></div><div class="line"><a name="l00756"></a><span class="lineno"> 756</span> <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> <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& 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> <span class="comment"></span></div><div class="line"><a name="l00759"></a><span class="lineno"> 759</span> <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> <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& 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> </div><div class="line"><a name="l00762"></a><span class="lineno"> 762</span> <span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l00763"></a><span class="lineno"> 763</span> <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> <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> <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>  <a class="code" href="classrapidjson_1_1_generic_value.html#a852788b35257762cd8d6c4bf5c5d77bc">GenericValue</a>(<span class="keyword">const</span> std::basic_string<Ch>& s, Allocator& 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> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00768"></a><span class="lineno"> 768</span> <span class="comment"></span></div><div class="line"><a name="l00769"></a><span class="lineno"> 769</span> <span class="comment"> //! Constructor for Array.</span></div><div class="line"><a name="l00770"></a><span class="lineno"> 770</span> <span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l00771"></a><span class="lineno"> 771</span> <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> <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> <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> <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>  <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>  a.value_.data_ = Data();</div><div class="line"><a name="l00777"></a><span class="lineno"> 777</span>  a.value_.data_.f.flags = kArrayFlag;</div><div class="line"><a name="l00778"></a><span class="lineno"> 778</span>  }</div><div class="line"><a name="l00779"></a><span class="lineno"> 779</span> <span class="comment"></span></div><div class="line"><a name="l00780"></a><span class="lineno"> 780</span> <span class="comment"> //! Constructor for Object.</span></div><div class="line"><a name="l00781"></a><span class="lineno"> 781</span> <span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l00782"></a><span class="lineno"> 782</span> <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> <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> <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> <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>  <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>  o.value_.data_ = Data();</div><div class="line"><a name="l00788"></a><span class="lineno"> 788</span>  o.value_.data_.f.flags = kObjectFlag;</div><div class="line"><a name="l00789"></a><span class="lineno"> 789</span>  }</div><div class="line"><a name="l00790"></a><span class="lineno"> 790</span> <span class="comment"></span></div><div class="line"><a name="l00791"></a><span class="lineno"> 791</span> <span class="comment"> //! Destructor.</span></div><div class="line"><a name="l00792"></a><span class="lineno"> 792</span> <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> <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>  <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>  <span class="keywordflow">if</span> (Allocator::kNeedFree) { <span class="comment">// Shortcut by Allocator's trait</span></div><div class="line"><a name="l00796"></a><span class="lineno"> 796</span>  <span class="keywordflow">switch</span>(data_.f.flags) {</div><div class="line"><a name="l00797"></a><span class="lineno"> 797</span>  <span class="keywordflow">case</span> kArrayFlag:</div><div class="line"><a name="l00798"></a><span class="lineno"> 798</span>  {</div><div class="line"><a name="l00799"></a><span class="lineno"> 799</span>  <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>  <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>  v->~GenericValue();</div><div class="line"><a name="l00802"></a><span class="lineno"> 802</span>  Allocator::Free(e);</div><div class="line"><a name="l00803"></a><span class="lineno"> 803</span>  }</div><div class="line"><a name="l00804"></a><span class="lineno"> 804</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00805"></a><span class="lineno"> 805</span> </div><div class="line"><a name="l00806"></a><span class="lineno"> 806</span>  <span class="keywordflow">case</span> kObjectFlag:</div><div class="line"><a name="l00807"></a><span class="lineno"> 807</span>  <span class="keywordflow">for</span> (MemberIterator m = MemberBegin(); m != MemberEnd(); ++m)</div><div class="line"><a name="l00808"></a><span class="lineno"> 808</span>  m->~Member();</div><div class="line"><a name="l00809"></a><span class="lineno"> 809</span>  Allocator::Free(GetMembersPointer());</div><div class="line"><a name="l00810"></a><span class="lineno"> 810</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00811"></a><span class="lineno"> 811</span> </div><div class="line"><a name="l00812"></a><span class="lineno"> 812</span>  <span class="keywordflow">case</span> kCopyStringFlag:</div><div class="line"><a name="l00813"></a><span class="lineno"> 813</span>  Allocator::Free(const_cast<Ch*>(GetStringPointer()));</div><div class="line"><a name="l00814"></a><span class="lineno"> 814</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00815"></a><span class="lineno"> 815</span> </div><div class="line"><a name="l00816"></a><span class="lineno"> 816</span>  <span class="keywordflow">default</span>:</div><div class="line"><a name="l00817"></a><span class="lineno"> 817</span>  <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>  }</div><div class="line"><a name="l00819"></a><span class="lineno"> 819</span>  }</div><div class="line"><a name="l00820"></a><span class="lineno"> 820</span>  }</div><div class="line"><a name="l00821"></a><span class="lineno"> 821</span> <span class="comment"></span></div><div class="line"><a name="l00822"></a><span class="lineno"> 822</span> <span class="comment"> //@}</span></div><div class="line"><a name="l00823"></a><span class="lineno"> 823</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00824"></a><span class="lineno"> 824</span> <span class="comment"> //!@name Assignment operators</span></div><div class="line"><a name="l00825"></a><span class="lineno"> 825</span> <span class="comment"></span><span class="comment"> //@{</span></div><div class="line"><a name="l00826"></a><span class="lineno"> 826</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00827"></a><span class="lineno"> 827</span> <span class="comment"> //! Assignment with move semantics.</span></div><div class="line"><a name="l00828"></a><span class="lineno"> 828</span> <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> <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>  <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& <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>& rhs) RAPIDJSON_NOEXCEPT {</div><div class="line"><a name="l00831"></a><span class="lineno"> 831</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#ga5dc14176a9e71ace282404b0bcda57a1">RAPIDJSON_LIKELY</a>(<span class="keyword">this</span> != &rhs)) {</div><div class="line"><a name="l00832"></a><span class="lineno"> 832</span>  this->~<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>  RawAssign(rhs);</div><div class="line"><a name="l00834"></a><span class="lineno"> 834</span>  }</div><div class="line"><a name="l00835"></a><span class="lineno"> 835</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00836"></a><span class="lineno"> 836</span>  }</div><div class="line"><a name="l00837"></a><span class="lineno"> 837</span> </div><div class="line"><a name="l00838"></a><span class="lineno"> 838</span> <span class="preprocessor">#if RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l00839"></a><span class="lineno"> 839</span> <span class="comment"> //! Move assignment in C++11</span></div><div class="line"><a name="l00840"></a><span class="lineno"> 840</span> <span class="comment"></span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& operator=(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&& rhs) RAPIDJSON_NOEXCEPT {</div><div class="line"><a name="l00841"></a><span class="lineno"> 841</span>  <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>  }</div><div class="line"><a name="l00843"></a><span class="lineno"> 843</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00844"></a><span class="lineno"> 844</span> <span class="comment"></span></div><div class="line"><a name="l00845"></a><span class="lineno"> 845</span> <span class="comment"> //! Assignment of constant string reference (no copy)</span></div><div class="line"><a name="l00846"></a><span class="lineno"> 846</span> <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> <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> <span class="comment"> \see GenericStringRef, operator=(T)</span></div><div class="line"><a name="l00849"></a><span class="lineno"> 849</span> <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>  <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& <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>  <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>  <span class="keywordflow">return</span> *<span class="keyword">this</span> = s;</div><div class="line"><a name="l00853"></a><span class="lineno"> 853</span>  }</div><div class="line"><a name="l00854"></a><span class="lineno"> 854</span> <span class="comment"></span></div><div class="line"><a name="l00855"></a><span class="lineno"> 855</span> <span class="comment"> //! Assignment with primitive types.</span></div><div class="line"><a name="l00856"></a><span class="lineno"> 856</span> <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> <span class="comment"> \param value The value to be assigned.</span></div><div class="line"><a name="l00858"></a><span class="lineno"> 858</span> <span class="comment"></span></div><div class="line"><a name="l00859"></a><span class="lineno"> 859</span> <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> <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> <span class="comment"> referencing character strings with insufficient lifetime, use</span></div><div class="line"><a name="l00862"></a><span class="lineno"> 862</span> <span class="comment"> \ref SetString(const Ch*, Allocator&) (for copying) or</span></div><div class="line"><a name="l00863"></a><span class="lineno"> 863</span> <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> <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> <span class="comment"> use \ref SetBool() instead.</span></div><div class="line"><a name="l00866"></a><span class="lineno"> 866</span> <span class="comment"> */</span></div><div class="line"><a name="l00867"></a><span class="lineno"> 867</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div><div class="line"><a name="l00868"></a><span class="lineno"> 868</span>  RAPIDJSON_DISABLEIF_RETURN((internal::IsPointer<T>), (<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&))</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>  operator=(T value) {</div><div class="line"><a name="l00870"></a><span class="lineno"> 870</span>  <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>  <span class="keywordflow">return</span> *<span class="keyword">this</span> = v;</div><div class="line"><a name="l00872"></a><span class="lineno"> 872</span>  }</div><div class="line"><a name="l00873"></a><span class="lineno"> 873</span> <span class="comment"></span></div><div class="line"><a name="l00874"></a><span class="lineno"> 874</span> <span class="comment"> //! Deep-copy assignment from Value</span></div><div class="line"><a name="l00875"></a><span class="lineno"> 875</span> <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> <span class="comment"> \tparam SourceAllocator Allocator type of \c rhs</span></div><div class="line"><a name="l00877"></a><span class="lineno"> 877</span> <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> <span class="comment"> \param allocator Allocator to use for copying</span></div><div class="line"><a name="l00879"></a><span class="lineno"> 879</span> <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> <span class="comment"> */</span></div><div class="line"><a name="l00881"></a><span class="lineno"> 881</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> SourceAllocator></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>  <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& <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<Encoding, SourceAllocator></a>& rhs, Allocator& 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>  <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<void*>(<span class="keyword">this</span>) != static_cast<void const*>(&rhs));</div><div class="line"><a name="l00884"></a><span class="lineno"> 884</span>  this->~<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>  <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>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00887"></a><span class="lineno"> 887</span>  }</div><div class="line"><a name="l00888"></a><span class="lineno"> 888</span> <span class="comment"></span></div><div class="line"><a name="l00889"></a><span class="lineno"> 889</span> <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> <span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l00891"></a><span class="lineno"> 891</span> <span class="comment"> \param other Another value.</span></div><div class="line"><a name="l00892"></a><span class="lineno"> 892</span> <span class="comment"> \note Constant complexity.</span></div><div class="line"><a name="l00893"></a><span class="lineno"> 893</span> <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>  <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& <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>& other) RAPIDJSON_NOEXCEPT {</div><div class="line"><a name="l00895"></a><span class="lineno"> 895</span>  <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>  temp.RawAssign(*<span class="keyword">this</span>);</div><div class="line"><a name="l00897"></a><span class="lineno"> 897</span>  RawAssign(other);</div><div class="line"><a name="l00898"></a><span class="lineno"> 898</span>  other.RawAssign(temp);</div><div class="line"><a name="l00899"></a><span class="lineno"> 899</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00900"></a><span class="lineno"> 900</span>  }</div><div class="line"><a name="l00901"></a><span class="lineno"> 901</span> <span class="comment"></span></div><div class="line"><a name="l00902"></a><span class="lineno"> 902</span> <span class="comment"> //! free-standing swap function helper</span></div><div class="line"><a name="l00903"></a><span class="lineno"> 903</span> <span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l00904"></a><span class="lineno"> 904</span> <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> <span class="comment"> \code</span></div><div class="line"><a name="l00906"></a><span class="lineno"> 906</span> <span class="comment"> void swap(MyClass& a, MyClass& b) {</span></div><div class="line"><a name="l00907"></a><span class="lineno"> 907</span> <span class="comment"> using std::swap;</span></div><div class="line"><a name="l00908"></a><span class="lineno"> 908</span> <span class="comment"> swap(a.value, b.value);</span></div><div class="line"><a name="l00909"></a><span class="lineno"> 909</span> <span class="comment"> // ...</span></div><div class="line"><a name="l00910"></a><span class="lineno"> 910</span> <span class="comment"> }</span></div><div class="line"><a name="l00911"></a><span class="lineno"> 911</span> <span class="comment"> \endcode</span></div><div class="line"><a name="l00912"></a><span class="lineno"> 912</span> <span class="comment"> \see Swap()</span></div><div class="line"><a name="l00913"></a><span class="lineno"> 913</span> <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>  <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>& a, <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& b) RAPIDJSON_NOEXCEPT { a.Swap(b); }</div><div class="line"><a name="l00915"></a><span class="lineno"> 915</span> <span class="comment"></span></div><div class="line"><a name="l00916"></a><span class="lineno"> 916</span> <span class="comment"> //! Prepare Value for move semantics</span></div><div class="line"><a name="l00917"></a><span class="lineno"> 917</span> <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>  <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& <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> <span class="comment"> //@}</span></div><div class="line"><a name="l00920"></a><span class="lineno"> 920</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00921"></a><span class="lineno"> 921</span> <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> <span class="comment"></span><span class="comment"> //@{</span></div><div class="line"><a name="l00923"></a><span class="lineno"> 923</span> <span class="comment"></span><span class="comment"> //! Equal-to operator</span></div><div class="line"><a name="l00924"></a><span class="lineno"> 924</span> <span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l00925"></a><span class="lineno"> 925</span> <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> <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> <span class="comment"> */</span></div><div class="line"><a name="l00928"></a><span class="lineno"> 928</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> SourceAllocator></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>  <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<Encoding, SourceAllocator></a>& rhs)<span class="keyword"> const </span>{</div><div class="line"><a name="l00930"></a><span class="lineno"> 930</span>  <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue<Encoding, SourceAllocator></a> RhsType;</div><div class="line"><a name="l00931"></a><span class="lineno"> 931</span>  <span class="keywordflow">if</span> (GetType() != rhs.GetType())</div><div class="line"><a name="l00932"></a><span class="lineno"> 932</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00933"></a><span class="lineno"> 933</span> </div><div class="line"><a name="l00934"></a><span class="lineno"> 934</span>  <span class="keywordflow">switch</span> (GetType()) {</div><div class="line"><a name="l00935"></a><span class="lineno"> 935</span>  <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>  <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>  <span class="keywordflow">return</span> <span class="keyword">false</span>; </div><div class="line"><a name="l00938"></a><span class="lineno"> 938</span>  <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>  <span class="keyword">typename</span> RhsType::ConstMemberIterator rhsMemberItr = rhs.<a class="code" href="classrapidjson_1_1_generic_value.html#ad22fdeac87ec6c370dd43075d3586811">FindMember</a>(lhsMemberItr->name);</div><div class="line"><a name="l00940"></a><span class="lineno"> 940</span>  <span class="keywordflow">if</span> (rhsMemberItr == rhs.<a class="code" href="classrapidjson_1_1_generic_value.html#a34ee3d75a7aa308043fb34b0743bfe7c">MemberEnd</a>() || lhsMemberItr->value != rhsMemberItr->value)</div><div class="line"><a name="l00941"></a><span class="lineno"> 941</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00942"></a><span class="lineno"> 942</span>  }</div><div class="line"><a name="l00943"></a><span class="lineno"> 943</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00944"></a><span class="lineno"> 944</span>  </div><div class="line"><a name="l00945"></a><span class="lineno"> 945</span>  <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>  <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>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00948"></a><span class="lineno"> 948</span>  <span class="keywordflow">for</span> (<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> i = 0; i < data_.a.size; i++)</div><div class="line"><a name="l00949"></a><span class="lineno"> 949</span>  <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>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00951"></a><span class="lineno"> 951</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00952"></a><span class="lineno"> 952</span> </div><div class="line"><a name="l00953"></a><span class="lineno"> 953</span>  <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>  <span class="keywordflow">return</span> StringEqual(rhs);</div><div class="line"><a name="l00955"></a><span class="lineno"> 955</span> </div><div class="line"><a name="l00956"></a><span class="lineno"> 956</span>  <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>  <span class="keywordflow">if</span> (IsDouble() || rhs.IsDouble()) {</div><div class="line"><a name="l00958"></a><span class="lineno"> 958</span>  <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>  <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>  <span class="keywordflow">return</span> a >= b && a <= b; <span class="comment">// Prevent -Wfloat-equal</span></div><div class="line"><a name="l00961"></a><span class="lineno"> 961</span>  }</div><div class="line"><a name="l00962"></a><span class="lineno"> 962</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00963"></a><span class="lineno"> 963</span>  <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> </div><div class="line"><a name="l00965"></a><span class="lineno"> 965</span>  <span class="keywordflow">default</span>:</div><div class="line"><a name="l00966"></a><span class="lineno"> 966</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00967"></a><span class="lineno"> 967</span>  }</div><div class="line"><a name="l00968"></a><span class="lineno"> 968</span>  }</div><div class="line"><a name="l00969"></a><span class="lineno"> 969</span> <span class="comment"></span></div><div class="line"><a name="l00970"></a><span class="lineno"> 970</span> <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> <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> </div><div class="line"><a name="l00973"></a><span class="lineno"> 973</span> <span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l00974"></a><span class="lineno"> 974</span> <span class="comment"> //! Equal-to operator with string object</span></div><div class="line"><a name="l00975"></a><span class="lineno"> 975</span> <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> <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>  <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<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="l00978"></a><span class="lineno"> 978</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00979"></a><span class="lineno"> 979</span> <span class="comment"></span></div><div class="line"><a name="l00980"></a><span class="lineno"> 980</span> <span class="comment"> //! Equal-to operator with primitive types</span></div><div class="line"><a name="l00981"></a><span class="lineno"> 981</span> <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> <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>  <span class="keyword">template</span> <<span class="keyword">typename</span> T> RAPIDJSON_DISABLEIF_RETURN((internal::OrExpr<internal::IsPointer<T>,internal::IsGenericValue<T> >), (<span class="keywordtype">bool</span>)) <a class="code" href="classrapidjson_1_1_generic_value.html#aaddbbbb35cd783f209f889cf8dea9570">operator==</a>(<span class="keyword">const</span> T& 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> <span class="comment"></span></div><div class="line"><a name="l00985"></a><span class="lineno"> 985</span> <span class="comment"> //! Not-equal-to operator</span></div><div class="line"><a name="l00986"></a><span class="lineno"> 986</span> <span class="comment"></span><span class="comment"> /*! \return !(*this == rhs)</span></div><div class="line"><a name="l00987"></a><span class="lineno"> 987</span> <span class="comment"> */</span></div><div class="line"><a name="l00988"></a><span class="lineno"> 988</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> SourceAllocator></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>  <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<Encoding, SourceAllocator></a>& 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> <span class="comment"></span></div><div class="line"><a name="l00991"></a><span class="lineno"> 991</span> <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> <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> <span class="comment"></span></div><div class="line"><a name="l00994"></a><span class="lineno"> 994</span> <span class="comment"> //! Not-equal-to operator with arbitrary types</span></div><div class="line"><a name="l00995"></a><span class="lineno"> 995</span> <span class="comment"></span><span class="comment"> /*! \return !(*this == rhs)</span></div><div class="line"><a name="l00996"></a><span class="lineno"> 996</span> <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>  <span class="keyword">template</span> <<span class="keyword">typename</span> T> RAPIDJSON_DISABLEIF_RETURN((internal::IsGenericValue<T>), (<span class="keywordtype">bool</span>)) <a class="code" href="classrapidjson_1_1_generic_value.html#ae6fe0576ff0336f6e2b09fe32f3ff809">operator!=</a>(<span class="keyword">const</span> T& 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> <span class="comment"></span></div><div class="line"><a name="l00999"></a><span class="lineno"> 999</span> <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> <span class="comment"></span><span class="comment"> /*! \return (rhs == lhs)</span></div><div class="line"><a name="l01001"></a><span class="lineno"> 1001</span> <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>  <span class="keyword">template</span> <<span class="keyword">typename</span> T> <span class="keyword">friend</span> RAPIDJSON_DISABLEIF_RETURN((internal::IsGenericValue<T>), (<span class="keywordtype">bool</span>)) <a class="code" href="classrapidjson_1_1_generic_value.html#aaa465706fda1e1ef4513ce877e0b4b69">operator==</a>(<span class="keyword">const</span> T& lhs, <span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& rhs) { <span class="keywordflow">return</span> rhs == lhs; }</div><div class="line"><a name="l01003"></a><span class="lineno"> 1003</span> <span class="comment"></span></div><div class="line"><a name="l01004"></a><span class="lineno"> 1004</span> <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> <span class="comment"></span><span class="comment"> /*! \return !(rhs == lhs)</span></div><div class="line"><a name="l01006"></a><span class="lineno"> 1006</span> <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>  <span class="keyword">template</span> <<span class="keyword">typename</span> T> <span class="keyword">friend</span> RAPIDJSON_DISABLEIF_RETURN((internal::IsGenericValue<T>), (<span class="keywordtype">bool</span>)) <a class="code" href="classrapidjson_1_1_generic_value.html#ae08898bef949f217f0e5d28e19f05992">operator!=</a>(<span class="keyword">const</span> T& lhs, <span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& 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> <span class="comment"> //@}</span></div><div class="line"><a name="l01009"></a><span class="lineno"> 1009</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l01010"></a><span class="lineno"> 1010</span> <span class="comment"> //!@name Type</span></div><div class="line"><a name="l01011"></a><span class="lineno"> 1011</span> <span class="comment"></span><span class="comment"> //@{</span></div><div class="line"><a name="l01012"></a><span class="lineno"> 1012</span> <span class="comment"></span></div><div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>  <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<</span><a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">Type</a><span class="keyword">></span>(data_.f.flags & kTypeMask); }</div><div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>  <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>  <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>  <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>  <span class="keywordtype">bool</span> IsBool()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (data_.f.flags & kBoolFlag) != 0; }</div><div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>  <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>  <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>  <span class="keywordtype">bool</span> IsNumber()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (data_.f.flags & kNumberFlag) != 0; }</div><div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>  <span class="keywordtype">bool</span> IsInt()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (data_.f.flags & kIntFlag) != 0; }</div><div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>  <span class="keywordtype">bool</span> IsUint()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (data_.f.flags & kUintFlag) != 0; }</div><div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>  <span class="keywordtype">bool</span> IsInt64()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (data_.f.flags & kInt64Flag) != 0; }</div><div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>  <span class="keywordtype">bool</span> IsUint64()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (data_.f.flags & kUint64Flag) != 0; }</div><div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>  <span class="keywordtype">bool</span> IsDouble()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (data_.f.flags & kDoubleFlag) != 0; }</div><div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>  <span class="keywordtype">bool</span> IsString()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (data_.f.flags & kStringFlag) != 0; }</div><div class="line"><a name="l01027"></a><span class="lineno"> 1027</span> </div><div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>  <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>  <span class="keywordtype">bool</span> IsLosslessDouble()<span class="keyword"> const </span>{</div><div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>  <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>  <span class="keywordflow">if</span> (IsUint64()) {</div><div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>  uint64_t u = GetUint64();</div><div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>  <span class="keyword">volatile</span> <span class="keywordtype">double</span> d = <span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>(u);</div><div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>  <span class="keywordflow">return</span> (d >= 0.0)</div><div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>  && (d < static_cast<double>((std::numeric_limits<uint64_t>::max)()))</div><div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>  && (u == <span class="keyword">static_cast<</span>uint64_t<span class="keyword">></span>(d));</div><div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>  }</div><div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>  <span class="keywordflow">if</span> (IsInt64()) {</div><div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>  int64_t i = GetInt64();</div><div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>  <span class="keyword">volatile</span> <span class="keywordtype">double</span> d = <span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>(i);</div><div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>  <span class="keywordflow">return</span> (d >= static_cast<double>((std::numeric_limits<int64_t>::min)()))</div><div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>  && (d < static_cast<double>((std::numeric_limits<int64_t>::max)()))</div><div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>  && (i == static_cast<int64_t>(d));</div><div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>  }</div><div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>  <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>  }</div><div class="line"><a name="l01047"></a><span class="lineno"> 1047</span> </div><div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>  <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>  <span class="keywordtype">bool</span> IsFloat()<span class="keyword"> const </span>{</div><div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>  <span class="keywordflow">if</span> ((data_.f.flags & kDoubleFlag) == 0)</div><div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>  <span class="keywordtype">double</span> d = GetDouble();</div><div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>  <span class="keywordflow">return</span> d >= -3.4028234e38 && d <= 3.4028234e38;</div><div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>  }</div><div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>  <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>  <span class="keywordtype">bool</span> IsLosslessFloat()<span class="keyword"> const </span>{</div><div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>  <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>  <span class="keywordtype">double</span> a = GetDouble();</div><div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>  <span class="keywordflow">if</span> (a < static_cast<double>(-(std::numeric_limits<float>::max)())</div><div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>  || a > static_cast<double>((std::numeric_limits<float>::max)()))</div><div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>  <span class="keywordtype">double</span> b = <span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>(<span class="keyword">static_cast<</span><span class="keywordtype">float</span><span class="keyword">></span>(a));</div><div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>  <span class="keywordflow">return</span> a >= b && a <= b; <span class="comment">// Prevent -Wfloat-equal</span></div><div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>  }</div><div class="line"><a name="l01065"></a><span class="lineno"> 1065</span> <span class="comment"></span></div><div class="line"><a name="l01066"></a><span class="lineno"> 1066</span> <span class="comment"> //@}</span></div><div class="line"><a name="l01067"></a><span class="lineno"> 1067</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l01068"></a><span class="lineno"> 1068</span> <span class="comment"> //!@name Null</span></div><div class="line"><a name="l01069"></a><span class="lineno"> 1069</span> <span class="comment"></span><span class="comment"> //@{</span></div><div class="line"><a name="l01070"></a><span class="lineno"> 1070</span> <span class="comment"></span></div><div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>  <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& SetNull() { this->~<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> <span class="comment"></span></div><div class="line"><a name="l01073"></a><span class="lineno"> 1073</span> <span class="comment"> //@}</span></div><div class="line"><a name="l01074"></a><span class="lineno"> 1074</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l01075"></a><span class="lineno"> 1075</span> <span class="comment"> //!@name Bool</span></div><div class="line"><a name="l01076"></a><span class="lineno"> 1076</span> <span class="comment"></span><span class="comment"> //@{</span></div><div class="line"><a name="l01077"></a><span class="lineno"> 1077</span> <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>  <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> <span class="comment"> //!< Set boolean value</span></div><div class="line"><a name="l01080"></a><span class="lineno"> 1080</span> <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>  <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& <a class="code" href="classrapidjson_1_1_generic_value.html#a5623c9039977ca0daf394e5c12f10c2d">SetBool</a>(<span class="keywordtype">bool</span> b) { this->~<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> <span class="comment"></span></div><div class="line"><a name="l01083"></a><span class="lineno"> 1083</span> <span class="comment"> //@}</span></div><div class="line"><a name="l01084"></a><span class="lineno"> 1084</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l01085"></a><span class="lineno"> 1085</span> <span class="comment"> //!@name Object</span></div><div class="line"><a name="l01086"></a><span class="lineno"> 1086</span> <span class="comment"></span><span class="comment"> //@{</span></div><div class="line"><a name="l01087"></a><span class="lineno"> 1087</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l01088"></a><span class="lineno"> 1088</span> <span class="comment"> //! Set this value as an empty object.</span></div><div class="line"><a name="l01089"></a><span class="lineno"> 1089</span> <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>  <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& <a class="code" href="classrapidjson_1_1_generic_value.html#a7cb3cbaefe4fb99aaf9f155fb4ee039b">SetObject</a>() { this->~<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> <span class="comment"></span></div><div class="line"><a name="l01092"></a><span class="lineno"> 1092</span> <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> <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> <span class="comment"></span></div><div class="line"><a name="l01095"></a><span class="lineno"> 1095</span> <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> <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> <span class="comment"></span></div><div class="line"><a name="l01098"></a><span class="lineno"> 1098</span> <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> <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> <span class="comment"></span></div><div class="line"><a name="l01101"></a><span class="lineno"> 1101</span> <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> <span class="comment"></span><span class="comment"> /*! \pre IsObject() == true</span></div><div class="line"><a name="l01103"></a><span class="lineno"> 1103</span> <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> <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> <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> <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> <span class="comment"> A better approach is to use FindMember().</span></div><div class="line"><a name="l01108"></a><span class="lineno"> 1108</span> <span class="comment"> \note Linear time complexity.</span></div><div class="line"><a name="l01109"></a><span class="lineno"> 1109</span> <span class="comment"> */</span></div><div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></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>  RAPIDJSON_DISABLEIF_RETURN((internal::NotExpr<internal::IsSame<<span class="keyword">typename</span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">internal::RemoveConst<T>::Type</a>, Ch> >),(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&)) <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>  <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>  <span class="keywordflow">return</span> (*<span class="keyword">this</span>)[n];</div><div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>  }</div><div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div><div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>  RAPIDJSON_DISABLEIF_RETURN((internal::NotExpr<internal::IsSame<<span class="keyword">typename</span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">internal::RemoveConst<T>::Type</a>, Ch> >),(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&)) operator[](T* name)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">const_cast<</span><a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&<span class="keyword">></span>(*this)[name]; }</div><div class="line"><a name="l01117"></a><span class="lineno"> 1117</span> <span class="comment"></span></div><div class="line"><a name="l01118"></a><span class="lineno"> 1118</span> <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> <span class="comment"></span><span class="comment"> /*! \pre IsObject() == true</span></div><div class="line"><a name="l01120"></a><span class="lineno"> 1120</span> <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> <span class="comment"></span></div><div class="line"><a name="l01122"></a><span class="lineno"> 1122</span> <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> <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> <span class="comment"></span></div><div class="line"><a name="l01125"></a><span class="lineno"> 1125</span> <span class="comment"> \note Linear time complexity.</span></div><div class="line"><a name="l01126"></a><span class="lineno"> 1126</span> <span class="comment"> */</span></div><div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> SourceAllocator></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>  <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& <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<Encoding, SourceAllocator></a>& name) {</div><div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>  <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>  <span class="keywordflow">if</span> (member != MemberEnd())</div><div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>  <span class="keywordflow">return</span> member->value;</div><div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>  <span class="keywordflow">else</span> {</div><div class="line"><a name="l01133"></a><span class="lineno"> 1133</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>(<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> </div><div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>  <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>  <span class="comment">// static GenericValue NullValue;</span></div><div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>  <span class="comment">// return NullValue;</span></div><div class="line"><a name="l01138"></a><span class="lineno"> 1138</span> </div><div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>  <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>  <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>  <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>  }</div><div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>  }</div><div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> SourceAllocator></div><div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>  <span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& operator[](<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue<Encoding, SourceAllocator></a>& name)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">const_cast<</span><a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&<span class="keyword">></span>(*this)[name]; }</div><div class="line"><a name="l01146"></a><span class="lineno"> 1146</span> </div><div class="line"><a name="l01147"></a><span class="lineno"> 1147</span> <span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l01148"></a><span class="lineno"> 1148</span> <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> <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#a4d337239ee3e2096462f6a36b9ab0811">operator[]</a>(<span class="keyword">const</span> std::basic_string<Ch>& 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>  <span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& operator[](<span class="keyword">const</span> std::basic_string<Ch>& 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> <span class="preprocessor">#endif</span></div><div class="line"><a name="l01152"></a><span class="lineno"> 1152</span> <span class="comment"></span></div><div class="line"><a name="l01153"></a><span class="lineno"> 1153</span> <span class="comment"> //! Const member iterator</span></div><div class="line"><a name="l01154"></a><span class="lineno"> 1154</span> <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>  <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> <span class="comment"> //! Const \em past-the-end member iterator</span></div><div class="line"><a name="l01157"></a><span class="lineno"> 1157</span> <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>  <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> <span class="comment"> //! Member iterator</span></div><div class="line"><a name="l01160"></a><span class="lineno"> 1160</span> <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>  <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> <span class="comment"> //! \em Past-the-end member iterator</span></div><div class="line"><a name="l01163"></a><span class="lineno"> 1163</span> <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>  <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> <span class="comment"></span></div><div class="line"><a name="l01166"></a><span class="lineno"> 1166</span> <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> <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> <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> <span class="comment"> \return The value itself for fluent API.</span></div><div class="line"><a name="l01170"></a><span class="lineno"> 1170</span> <span class="comment"> \note Linear time complexity.</span></div><div class="line"><a name="l01171"></a><span class="lineno"> 1171</span> <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>  <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& <a class="code" href="classrapidjson_1_1_generic_value.html#a9131d6e49ac5a6bf8000d851381e4a25">MemberReserve</a>(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> newCapacity, Allocator &allocator) {</div><div class="line"><a name="l01173"></a><span class="lineno"> 1173</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());</div><div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>  <span class="keywordflow">if</span> (newCapacity > data_.o.capacity) {</div><div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>  SetMembersPointer(reinterpret_cast<Member*>(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>  data_.o.capacity = newCapacity;</div><div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>  }</div><div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>  }</div><div class="line"><a name="l01180"></a><span class="lineno"> 1180</span> <span class="comment"></span></div><div class="line"><a name="l01181"></a><span class="lineno"> 1181</span> <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> <span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l01183"></a><span class="lineno"> 1183</span> <span class="comment"> \param name Member name to be searched.</span></div><div class="line"><a name="l01184"></a><span class="lineno"> 1184</span> <span class="comment"> \pre IsObject() == true</span></div><div class="line"><a name="l01185"></a><span class="lineno"> 1185</span> <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> <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> <span class="comment"> \note Linear time complexity.</span></div><div class="line"><a name="l01188"></a><span class="lineno"> 1188</span> <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>  <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> </div><div class="line"><a name="l01191"></a><span class="lineno"> 1191</span> <span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l01192"></a><span class="lineno"> 1192</span> <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> <span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l01194"></a><span class="lineno"> 1194</span> <span class="comment"> \param name Member name to be searched.</span></div><div class="line"><a name="l01195"></a><span class="lineno"> 1195</span> <span class="comment"> \pre IsObject() == true</span></div><div class="line"><a name="l01196"></a><span class="lineno"> 1196</span> <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> <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> <span class="comment"> \note Linear time complexity.</span></div><div class="line"><a name="l01199"></a><span class="lineno"> 1199</span> <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>  <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<Ch>& 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> <span class="preprocessor">#endif</span></div><div class="line"><a name="l01202"></a><span class="lineno"> 1202</span> <span class="comment"></span></div><div class="line"><a name="l01203"></a><span class="lineno"> 1203</span> <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> <span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l01205"></a><span class="lineno"> 1205</span> <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> <span class="comment"> \param name Member name to be searched.</span></div><div class="line"><a name="l01207"></a><span class="lineno"> 1207</span> <span class="comment"> \pre IsObject() == true</span></div><div class="line"><a name="l01208"></a><span class="lineno"> 1208</span> <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> <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> <span class="comment"> \note Linear time complexity.</span></div><div class="line"><a name="l01211"></a><span class="lineno"> 1211</span> <span class="comment"> */</span></div><div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> SourceAllocator></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>  <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<Encoding, SourceAllocator></a>& 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> <span class="comment"></span></div><div class="line"><a name="l01215"></a><span class="lineno"> 1215</span> <span class="comment"> //! Find member by name.</span></div><div class="line"><a name="l01216"></a><span class="lineno"> 1216</span> <span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l01217"></a><span class="lineno"> 1217</span> <span class="comment"> \param name Member name to be searched.</span></div><div class="line"><a name="l01218"></a><span class="lineno"> 1218</span> <span class="comment"> \pre IsObject() == true</span></div><div class="line"><a name="l01219"></a><span class="lineno"> 1219</span> <span class="comment"> \return Iterator to member, if it exists.</span></div><div class="line"><a name="l01220"></a><span class="lineno"> 1220</span> <span class="comment"> Otherwise returns \ref MemberEnd().</span></div><div class="line"><a name="l01221"></a><span class="lineno"> 1221</span> <span class="comment"></span></div><div class="line"><a name="l01222"></a><span class="lineno"> 1222</span> <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> <span class="comment"> the requested member doesn't exist. For consistency with e.g.</span></div><div class="line"><a name="l01224"></a><span class="lineno"> 1224</span> <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> <span class="comment"> \note Linear time complexity.</span></div><div class="line"><a name="l01226"></a><span class="lineno"> 1226</span> <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>  <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>  <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>  <span class="keywordflow">return</span> FindMember(n);</div><div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>  }</div><div class="line"><a name="l01231"></a><span class="lineno"> 1231</span> </div><div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>  <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<</span><a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&<span class="keyword">></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> <span class="comment"></span></div><div class="line"><a name="l01234"></a><span class="lineno"> 1234</span> <span class="comment"> //! Find member by name.</span></div><div class="line"><a name="l01235"></a><span class="lineno"> 1235</span> <span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l01236"></a><span class="lineno"> 1236</span> <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> <span class="comment"> \param name Member name to be searched.</span></div><div class="line"><a name="l01238"></a><span class="lineno"> 1238</span> <span class="comment"> \pre IsObject() == true</span></div><div class="line"><a name="l01239"></a><span class="lineno"> 1239</span> <span class="comment"> \return Iterator to member, if it exists.</span></div><div class="line"><a name="l01240"></a><span class="lineno"> 1240</span> <span class="comment"> Otherwise returns \ref MemberEnd().</span></div><div class="line"><a name="l01241"></a><span class="lineno"> 1241</span> <span class="comment"></span></div><div class="line"><a name="l01242"></a><span class="lineno"> 1242</span> <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> <span class="comment"> the requested member doesn't exist. For consistency with e.g.</span></div><div class="line"><a name="l01244"></a><span class="lineno"> 1244</span> <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> <span class="comment"> \note Linear time complexity.</span></div><div class="line"><a name="l01246"></a><span class="lineno"> 1246</span> <span class="comment"> */</span></div><div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> SourceAllocator></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>  <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<Encoding, SourceAllocator></a>& name) {</div><div class="line"><a name="l01249"></a><span class="lineno"> 1249</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());</div><div class="line"><a name="l01250"></a><span class="lineno"> 1250</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>(name.IsString());</div><div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>  <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>  <span class="keywordflow">for</span> ( ; member != MemberEnd(); ++member)</div><div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>  <span class="keywordflow">if</span> (name.StringEqual(member->name))</div><div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>  <span class="keywordflow">return</span> member;</div><div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>  }</div><div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> SourceAllocator> <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<Encoding, SourceAllocator></a>& name)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">const_cast<</span><a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&<span class="keyword">></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> </div><div class="line"><a name="l01259"></a><span class="lineno"> 1259</span> <span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l01260"></a><span class="lineno"> 1260</span> <span class="comment"> //! Find member by string object name.</span></div><div class="line"><a name="l01261"></a><span class="lineno"> 1261</span> <span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l01262"></a><span class="lineno"> 1262</span> <span class="comment"> \param name Member name to be searched.</span></div><div class="line"><a name="l01263"></a><span class="lineno"> 1263</span> <span class="comment"> \pre IsObject() == true</span></div><div class="line"><a name="l01264"></a><span class="lineno"> 1264</span> <span class="comment"> \return Iterator to member, if it exists.</span></div><div class="line"><a name="l01265"></a><span class="lineno"> 1265</span> <span class="comment"> Otherwise returns \ref MemberEnd().</span></div><div class="line"><a name="l01266"></a><span class="lineno"> 1266</span> <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>  <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<Ch>& 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>  <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">ConstMemberIterator</a> FindMember(<span class="keyword">const</span> std::basic_string<Ch>& 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> <span class="preprocessor">#endif</span></div><div class="line"><a name="l01270"></a><span class="lineno"> 1270</span> <span class="comment"></span></div><div class="line"><a name="l01271"></a><span class="lineno"> 1271</span> <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> <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> <span class="comment"> \param value Value of any type.</span></div><div class="line"><a name="l01274"></a><span class="lineno"> 1274</span> <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> <span class="comment"> \return The value itself for fluent API.</span></div><div class="line"><a name="l01276"></a><span class="lineno"> 1276</span> <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> <span class="comment"> \pre IsObject() && name.IsString()</span></div><div class="line"><a name="l01278"></a><span class="lineno"> 1278</span> <span class="comment"> \post name.IsNull() && value.IsNull()</span></div><div class="line"><a name="l01279"></a><span class="lineno"> 1279</span> <span class="comment"> \note Amortized Constant time complexity.</span></div><div class="line"><a name="l01280"></a><span class="lineno"> 1280</span> <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>  <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& <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>& name, <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& value, Allocator& allocator) {</div><div class="line"><a name="l01282"></a><span class="lineno"> 1282</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());</div><div class="line"><a name="l01283"></a><span class="lineno"> 1283</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>(name.IsString());</div><div class="line"><a name="l01284"></a><span class="lineno"> 1284</span> </div><div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>  ObjectData& o = data_.o;</div><div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>  <span class="keywordflow">if</span> (o.size >= o.capacity)</div><div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>  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>  <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>  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>  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>  o.size++;</div><div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>  }</div><div class="line"><a name="l01294"></a><span class="lineno"> 1294</span> <span class="comment"></span></div><div class="line"><a name="l01295"></a><span class="lineno"> 1295</span> <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> <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> <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> <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> <span class="comment"> \return The value itself for fluent API.</span></div><div class="line"><a name="l01300"></a><span class="lineno"> 1300</span> <span class="comment"> \pre IsObject()</span></div><div class="line"><a name="l01301"></a><span class="lineno"> 1301</span> <span class="comment"> \note This overload is needed to avoid clashes with the generic primitive type AddMember(GenericValue&,T,Allocator&) overload below.</span></div><div class="line"><a name="l01302"></a><span class="lineno"> 1302</span> <span class="comment"> \note Amortized Constant time complexity.</span></div><div class="line"><a name="l01303"></a><span class="lineno"> 1303</span> <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>  <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& <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>& name, <a class="code" href="structrapidjson_1_1_generic_string_ref.html">StringRefType</a> value, Allocator& allocator) {</div><div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>  <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>  <span class="keywordflow">return</span> AddMember(name, v, allocator);</div><div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>  }</div><div class="line"><a name="l01308"></a><span class="lineno"> 1308</span> </div><div class="line"><a name="l01309"></a><span class="lineno"> 1309</span> <span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l01310"></a><span class="lineno"> 1310</span> <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> <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> <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> <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> <span class="comment"> \return The value itself for fluent API.</span></div><div class="line"><a name="l01315"></a><span class="lineno"> 1315</span> <span class="comment"> \pre IsObject()</span></div><div class="line"><a name="l01316"></a><span class="lineno"> 1316</span> <span class="comment"> \note This overload is needed to avoid clashes with the generic primitive type AddMember(GenericValue&,T,Allocator&) overload below.</span></div><div class="line"><a name="l01317"></a><span class="lineno"> 1317</span> <span class="comment"> \note Amortized Constant time complexity.</span></div><div class="line"><a name="l01318"></a><span class="lineno"> 1318</span> <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>  <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& <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>& name, std::basic_string<Ch>& value, Allocator& allocator) {</div><div class="line"><a name="l01320"></a><span class="lineno"> 1320</span>  <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>  <span class="keywordflow">return</span> AddMember(name, v, allocator);</div><div class="line"><a name="l01322"></a><span class="lineno"> 1322</span>  }</div><div class="line"><a name="l01323"></a><span class="lineno"> 1323</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l01324"></a><span class="lineno"> 1324</span> <span class="comment"></span></div><div class="line"><a name="l01325"></a><span class="lineno"> 1325</span> <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> <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> <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> <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> <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> <span class="comment"> \return The value itself for fluent API.</span></div><div class="line"><a name="l01331"></a><span class="lineno"> 1331</span> <span class="comment"> \pre IsObject()</span></div><div class="line"><a name="l01332"></a><span class="lineno"> 1332</span> <span class="comment"></span></div><div class="line"><a name="l01333"></a><span class="lineno"> 1333</span> <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> <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> <span class="comment"> referencing character strings with insufficient lifetime, use</span></div><div class="line"><a name="l01336"></a><span class="lineno"> 1336</span> <span class="comment"> \ref AddMember(StringRefType, GenericValue&, Allocator&) or \ref</span></div><div class="line"><a name="l01337"></a><span class="lineno"> 1337</span> <span class="comment"> AddMember(StringRefType, StringRefType, Allocator&).</span></div><div class="line"><a name="l01338"></a><span class="lineno"> 1338</span> <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> <span class="comment"> use an explicit cast instead, if needed.</span></div><div class="line"><a name="l01340"></a><span class="lineno"> 1340</span> <span class="comment"> \note Amortized Constant time complexity.</span></div><div class="line"><a name="l01341"></a><span class="lineno"> 1341</span> <span class="comment"> */</span></div><div class="line"><a name="l01342"></a><span class="lineno"> 1342</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div><div class="line"><a name="l01343"></a><span class="lineno"> 1343</span>  RAPIDJSON_DISABLEIF_RETURN((internal::OrExpr<internal::IsPointer<T>, internal::IsGenericValue<T> >), (<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&))</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>  AddMember(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& name, T value, Allocator& allocator) {</div><div class="line"><a name="l01345"></a><span class="lineno"> 1345</span>  <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>  <span class="keywordflow">return</span> AddMember(name, v, allocator);</div><div class="line"><a name="l01347"></a><span class="lineno"> 1347</span>  }</div><div class="line"><a name="l01348"></a><span class="lineno"> 1348</span> </div><div class="line"><a name="l01349"></a><span class="lineno"> 1349</span> <span class="preprocessor">#if RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l01350"></a><span class="lineno"> 1350</span>  <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& AddMember(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&& name, <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&& value, Allocator& allocator) {</div><div class="line"><a name="l01351"></a><span class="lineno"> 1351</span>  <span class="keywordflow">return</span> AddMember(name, value, allocator);</div><div class="line"><a name="l01352"></a><span class="lineno"> 1352</span>  }</div><div class="line"><a name="l01353"></a><span class="lineno"> 1353</span>  <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& AddMember(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&& name, <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& value, Allocator& allocator) {</div><div class="line"><a name="l01354"></a><span class="lineno"> 1354</span>  <span class="keywordflow">return</span> AddMember(name, value, allocator);</div><div class="line"><a name="l01355"></a><span class="lineno"> 1355</span>  }</div><div class="line"><a name="l01356"></a><span class="lineno"> 1356</span>  <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& AddMember(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& name, <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&& value, Allocator& allocator) {</div><div class="line"><a name="l01357"></a><span class="lineno"> 1357</span>  <span class="keywordflow">return</span> AddMember(name, value, allocator);</div><div class="line"><a name="l01358"></a><span class="lineno"> 1358</span>  }</div><div class="line"><a name="l01359"></a><span class="lineno"> 1359</span>  <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& 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>&& value, Allocator& allocator) {</div><div class="line"><a name="l01360"></a><span class="lineno"> 1360</span>  <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>  <span class="keywordflow">return</span> AddMember(n, value, allocator);</div><div class="line"><a name="l01362"></a><span class="lineno"> 1362</span>  }</div><div class="line"><a name="l01363"></a><span class="lineno"> 1363</span> <span class="preprocessor">#endif // RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l01364"></a><span class="lineno"> 1364</span> </div><div class="line"><a name="l01365"></a><span class="lineno"> 1365</span> <span class="comment"></span></div><div class="line"><a name="l01366"></a><span class="lineno"> 1366</span> <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> <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> <span class="comment"> \param value Value of any type.</span></div><div class="line"><a name="l01369"></a><span class="lineno"> 1369</span> <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> <span class="comment"> \return The value itself for fluent API.</span></div><div class="line"><a name="l01371"></a><span class="lineno"> 1371</span> <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> <span class="comment"> \pre IsObject()</span></div><div class="line"><a name="l01373"></a><span class="lineno"> 1373</span> <span class="comment"> \post value.IsNull()</span></div><div class="line"><a name="l01374"></a><span class="lineno"> 1374</span> <span class="comment"> \note Amortized Constant time complexity.</span></div><div class="line"><a name="l01375"></a><span class="lineno"> 1375</span> <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>  <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& <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>& value, Allocator& allocator) {</div><div class="line"><a name="l01377"></a><span class="lineno"> 1377</span>  <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>  <span class="keywordflow">return</span> AddMember(n, value, allocator);</div><div class="line"><a name="l01379"></a><span class="lineno"> 1379</span>  }</div><div class="line"><a name="l01380"></a><span class="lineno"> 1380</span> <span class="comment"></span></div><div class="line"><a name="l01381"></a><span class="lineno"> 1381</span> <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> <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> <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> <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> <span class="comment"> \return The value itself for fluent API.</span></div><div class="line"><a name="l01386"></a><span class="lineno"> 1386</span> <span class="comment"> \pre IsObject()</span></div><div class="line"><a name="l01387"></a><span class="lineno"> 1387</span> <span class="comment"> \note This overload is needed to avoid clashes with the generic primitive type AddMember(StringRefType,T,Allocator&) overload below.</span></div><div class="line"><a name="l01388"></a><span class="lineno"> 1388</span> <span class="comment"> \note Amortized Constant time complexity.</span></div><div class="line"><a name="l01389"></a><span class="lineno"> 1389</span> <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>  <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& <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& allocator) {</div><div class="line"><a name="l01391"></a><span class="lineno"> 1391</span>  <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>  <span class="keywordflow">return</span> AddMember(name, v, allocator);</div><div class="line"><a name="l01393"></a><span class="lineno"> 1393</span>  }</div><div class="line"><a name="l01394"></a><span class="lineno"> 1394</span> <span class="comment"></span></div><div class="line"><a name="l01395"></a><span class="lineno"> 1395</span> <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> <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> <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> <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> <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> <span class="comment"> \return The value itself for fluent API.</span></div><div class="line"><a name="l01401"></a><span class="lineno"> 1401</span> <span class="comment"> \pre IsObject()</span></div><div class="line"><a name="l01402"></a><span class="lineno"> 1402</span> <span class="comment"></span></div><div class="line"><a name="l01403"></a><span class="lineno"> 1403</span> <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> <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> <span class="comment"> referencing character strings with insufficient lifetime, use</span></div><div class="line"><a name="l01406"></a><span class="lineno"> 1406</span> <span class="comment"> \ref AddMember(StringRefType, GenericValue&, Allocator&) or \ref</span></div><div class="line"><a name="l01407"></a><span class="lineno"> 1407</span> <span class="comment"> AddMember(StringRefType, StringRefType, Allocator&).</span></div><div class="line"><a name="l01408"></a><span class="lineno"> 1408</span> <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> <span class="comment"> use an explicit cast instead, if needed.</span></div><div class="line"><a name="l01410"></a><span class="lineno"> 1410</span> <span class="comment"> \note Amortized Constant time complexity.</span></div><div class="line"><a name="l01411"></a><span class="lineno"> 1411</span> <span class="comment"> */</span></div><div class="line"><a name="l01412"></a><span class="lineno"> 1412</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div><div class="line"><a name="l01413"></a><span class="lineno"> 1413</span>  RAPIDJSON_DISABLEIF_RETURN((internal::OrExpr<internal::IsPointer<T>, internal::IsGenericValue<T> >), (<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&))</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>  AddMember(<a class="code" href="structrapidjson_1_1_generic_string_ref.html">StringRefType</a> name, T value, Allocator& allocator) {</div><div class="line"><a name="l01415"></a><span class="lineno"> 1415</span>  <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>  <span class="keywordflow">return</span> AddMember(n, value, allocator);</div><div class="line"><a name="l01417"></a><span class="lineno"> 1417</span>  }</div><div class="line"><a name="l01418"></a><span class="lineno"> 1418</span> <span class="comment"></span></div><div class="line"><a name="l01419"></a><span class="lineno"> 1419</span> <span class="comment"> //! Remove all members in the object.</span></div><div class="line"><a name="l01420"></a><span class="lineno"> 1420</span> <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> <span class="comment"> \note Linear time complexity.</span></div><div class="line"><a name="l01422"></a><span class="lineno"> 1422</span> <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>  <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>  <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>  <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>  m->~Member();</div><div class="line"><a name="l01427"></a><span class="lineno"> 1427</span>  data_.o.size = 0;</div><div class="line"><a name="l01428"></a><span class="lineno"> 1428</span>  }</div><div class="line"><a name="l01429"></a><span class="lineno"> 1429</span> <span class="comment"></span></div><div class="line"><a name="l01430"></a><span class="lineno"> 1430</span> <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> <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> <span class="comment"> \return Whether the member existed.</span></div><div class="line"><a name="l01433"></a><span class="lineno"> 1433</span> <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> <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> <span class="comment"> relative order of the remaining members.</span></div><div class="line"><a name="l01436"></a><span class="lineno"> 1436</span> <span class="comment"> \note Linear time complexity.</span></div><div class="line"><a name="l01437"></a><span class="lineno"> 1437</span> <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>  <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>  <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>  <span class="keywordflow">return</span> RemoveMember(n);</div><div class="line"><a name="l01441"></a><span class="lineno"> 1441</span>  }</div><div class="line"><a name="l01442"></a><span class="lineno"> 1442</span> </div><div class="line"><a name="l01443"></a><span class="lineno"> 1443</span> <span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l01444"></a><span class="lineno"> 1444</span>  <span class="keywordtype">bool</span> RemoveMember(<span class="keyword">const</span> std::basic_string<Ch>& 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> <span class="preprocessor">#endif</span></div><div class="line"><a name="l01446"></a><span class="lineno"> 1446</span> </div><div class="line"><a name="l01447"></a><span class="lineno"> 1447</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> SourceAllocator></div><div class="line"><a name="l01448"></a><span class="lineno"> 1448</span>  <span class="keywordtype">bool</span> RemoveMember(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue<Encoding, SourceAllocator></a>& name) {</div><div class="line"><a name="l01449"></a><span class="lineno"> 1449</span>  <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>  <span class="keywordflow">if</span> (m != MemberEnd()) {</div><div class="line"><a name="l01451"></a><span class="lineno"> 1451</span>  RemoveMember(m);</div><div class="line"><a name="l01452"></a><span class="lineno"> 1452</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l01453"></a><span class="lineno"> 1453</span>  }</div><div class="line"><a name="l01454"></a><span class="lineno"> 1454</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l01455"></a><span class="lineno"> 1455</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01456"></a><span class="lineno"> 1456</span>  }</div><div class="line"><a name="l01457"></a><span class="lineno"> 1457</span> <span class="comment"></span></div><div class="line"><a name="l01458"></a><span class="lineno"> 1458</span> <span class="comment"> //! Remove a member in object by iterator.</span></div><div class="line"><a name="l01459"></a><span class="lineno"> 1459</span> <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> <span class="comment"> \return the new iterator after removal.</span></div><div class="line"><a name="l01461"></a><span class="lineno"> 1461</span> <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> <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> <span class="comment"> relative order of the remaining members.</span></div><div class="line"><a name="l01464"></a><span class="lineno"> 1464</span> <span class="comment"> \note Constant time complexity.</span></div><div class="line"><a name="l01465"></a><span class="lineno"> 1465</span> <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>  <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>  <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>  <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 > 0);</div><div class="line"><a name="l01469"></a><span class="lineno"> 1469</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>(GetMembersPointer() != 0);</div><div class="line"><a name="l01470"></a><span class="lineno"> 1470</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>(m >= MemberBegin() && m < MemberEnd());</div><div class="line"><a name="l01471"></a><span class="lineno"> 1471</span> </div><div class="line"><a name="l01472"></a><span class="lineno"> 1472</span>  <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>  <span class="keywordflow">if</span> (data_.o.size > 1 && m != last)</div><div class="line"><a name="l01474"></a><span class="lineno"> 1474</span>  *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>  <span class="keywordflow">else</span></div><div class="line"><a name="l01476"></a><span class="lineno"> 1476</span>  m->~Member(); <span class="comment">// Only one left, just destroy</span></div><div class="line"><a name="l01477"></a><span class="lineno"> 1477</span>  --data_.o.size;</div><div class="line"><a name="l01478"></a><span class="lineno"> 1478</span>  <span class="keywordflow">return</span> m;</div><div class="line"><a name="l01479"></a><span class="lineno"> 1479</span>  }</div><div class="line"><a name="l01480"></a><span class="lineno"> 1480</span> <span class="comment"></span></div><div class="line"><a name="l01481"></a><span class="lineno"> 1481</span> <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> <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> <span class="comment"> \pre IsObject() == true && \ref MemberBegin() <= \c pos < \ref MemberEnd()</span></div><div class="line"><a name="l01484"></a><span class="lineno"> 1484</span> <span class="comment"> \return Iterator following the removed element.</span></div><div class="line"><a name="l01485"></a><span class="lineno"> 1485</span> <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> <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> <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> <span class="comment"> \note Linear time complexity.</span></div><div class="line"><a name="l01489"></a><span class="lineno"> 1489</span> <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>  <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>  <span class="keywordflow">return</span> EraseMember(pos, pos +1);</div><div class="line"><a name="l01492"></a><span class="lineno"> 1492</span>  }</div><div class="line"><a name="l01493"></a><span class="lineno"> 1493</span> <span class="comment"></span></div><div class="line"><a name="l01494"></a><span class="lineno"> 1494</span> <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> <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> <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> <span class="comment"> \pre IsObject() == true && \ref MemberBegin() <= \c first <= \c last <= \ref MemberEnd()</span></div><div class="line"><a name="l01498"></a><span class="lineno"> 1498</span> <span class="comment"> \return Iterator following the last removed element.</span></div><div class="line"><a name="l01499"></a><span class="lineno"> 1499</span> <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> <span class="comment"> members.</span></div><div class="line"><a name="l01501"></a><span class="lineno"> 1501</span> <span class="comment"> \note Linear time complexity.</span></div><div class="line"><a name="l01502"></a><span class="lineno"> 1502</span> <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>  <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>  <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>  <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 > 0);</div><div class="line"><a name="l01506"></a><span class="lineno"> 1506</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>(GetMembersPointer() != 0);</div><div class="line"><a name="l01507"></a><span class="lineno"> 1507</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>(first >= MemberBegin());</div><div class="line"><a name="l01508"></a><span class="lineno"> 1508</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>(first <= last);</div><div class="line"><a name="l01509"></a><span class="lineno"> 1509</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>(last <= MemberEnd());</div><div class="line"><a name="l01510"></a><span class="lineno"> 1510</span> </div><div class="line"><a name="l01511"></a><span class="lineno"> 1511</span>  <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>  <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>  itr->~Member();</div><div class="line"><a name="l01514"></a><span class="lineno"> 1514</span>  std::memmove(static_cast<void*>(&*pos), &*last, static_cast<size_t>(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>  data_.o.size -= <span class="keyword">static_cast<</span><a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a><span class="keyword">></span>(last - first);</div><div class="line"><a name="l01516"></a><span class="lineno"> 1516</span>  <span class="keywordflow">return</span> pos;</div><div class="line"><a name="l01517"></a><span class="lineno"> 1517</span>  }</div><div class="line"><a name="l01518"></a><span class="lineno"> 1518</span> <span class="comment"></span></div><div class="line"><a name="l01519"></a><span class="lineno"> 1519</span> <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> <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> <span class="comment"> \return Whether the member existed.</span></div><div class="line"><a name="l01522"></a><span class="lineno"> 1522</span> <span class="comment"> \note Linear time complexity.</span></div><div class="line"><a name="l01523"></a><span class="lineno"> 1523</span> <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>  <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>  <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>  <span class="keywordflow">return</span> EraseMember(n);</div><div class="line"><a name="l01527"></a><span class="lineno"> 1527</span>  }</div><div class="line"><a name="l01528"></a><span class="lineno"> 1528</span> </div><div class="line"><a name="l01529"></a><span class="lineno"> 1529</span> <span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l01530"></a><span class="lineno"> 1530</span>  <span class="keywordtype">bool</span> EraseMember(<span class="keyword">const</span> std::basic_string<Ch>& 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> <span class="preprocessor">#endif</span></div><div class="line"><a name="l01532"></a><span class="lineno"> 1532</span> </div><div class="line"><a name="l01533"></a><span class="lineno"> 1533</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> SourceAllocator></div><div class="line"><a name="l01534"></a><span class="lineno"> 1534</span>  <span class="keywordtype">bool</span> EraseMember(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue<Encoding, SourceAllocator></a>& name) {</div><div class="line"><a name="l01535"></a><span class="lineno"> 1535</span>  <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>  <span class="keywordflow">if</span> (m != MemberEnd()) {</div><div class="line"><a name="l01537"></a><span class="lineno"> 1537</span>  EraseMember(m);</div><div class="line"><a name="l01538"></a><span class="lineno"> 1538</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l01539"></a><span class="lineno"> 1539</span>  }</div><div class="line"><a name="l01540"></a><span class="lineno"> 1540</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l01541"></a><span class="lineno"> 1541</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01542"></a><span class="lineno"> 1542</span>  }</div><div class="line"><a name="l01543"></a><span class="lineno"> 1543</span> </div><div class="line"><a name="l01544"></a><span class="lineno"> 1544</span>  <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>  <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> <span class="comment"></span></div><div class="line"><a name="l01547"></a><span class="lineno"> 1547</span> <span class="comment"> //@}</span></div><div class="line"><a name="l01548"></a><span class="lineno"> 1548</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l01549"></a><span class="lineno"> 1549</span> <span class="comment"> //!@name Array</span></div><div class="line"><a name="l01550"></a><span class="lineno"> 1550</span> <span class="comment"></span><span class="comment"> //@{</span></div><div class="line"><a name="l01551"></a><span class="lineno"> 1551</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l01552"></a><span class="lineno"> 1552</span> <span class="comment"> //! Set this value as an empty array.</span></div><div class="line"><a name="l01553"></a><span class="lineno"> 1553</span> <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>  <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& <a class="code" href="classrapidjson_1_1_generic_value.html#a25069c76d045b058e54835d8c467c789">SetArray</a>() { this->~<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> <span class="comment"></span></div><div class="line"><a name="l01556"></a><span class="lineno"> 1556</span> <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> <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> <span class="comment"></span></div><div class="line"><a name="l01559"></a><span class="lineno"> 1559</span> <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> <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> <span class="comment"></span></div><div class="line"><a name="l01562"></a><span class="lineno"> 1562</span> <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> <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> <span class="comment"></span></div><div class="line"><a name="l01565"></a><span class="lineno"> 1565</span> <span class="comment"> //! Remove all elements in the array.</span></div><div class="line"><a name="l01566"></a><span class="lineno"> 1566</span> <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> <span class="comment"> \note Linear time complexity.</span></div><div class="line"><a name="l01568"></a><span class="lineno"> 1568</span> <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>  <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>  <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>  <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>  <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>  v->~GenericValue();</div><div class="line"><a name="l01574"></a><span class="lineno"> 1574</span>  data_.a.size = 0;</div><div class="line"><a name="l01575"></a><span class="lineno"> 1575</span>  }</div><div class="line"><a name="l01576"></a><span class="lineno"> 1576</span> <span class="comment"></span></div><div class="line"><a name="l01577"></a><span class="lineno"> 1577</span> <span class="comment"> //! Get an element from array by index.</span></div><div class="line"><a name="l01578"></a><span class="lineno"> 1578</span> <span class="comment"></span><span class="comment"> /*! \pre IsArray() == true</span></div><div class="line"><a name="l01579"></a><span class="lineno"> 1579</span> <span class="comment"> \param index Zero-based index of element.</span></div><div class="line"><a name="l01580"></a><span class="lineno"> 1580</span> <span class="comment"> \see operator[](T*)</span></div><div class="line"><a name="l01581"></a><span class="lineno"> 1581</span> <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>  <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& <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>  <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>  <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 < data_.a.size);</div><div class="line"><a name="l01585"></a><span class="lineno"> 1585</span>  <span class="keywordflow">return</span> GetElementsPointer()[index];</div><div class="line"><a name="l01586"></a><span class="lineno"> 1586</span>  }</div><div class="line"><a name="l01587"></a><span class="lineno"> 1587</span>  <span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& 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<</span><a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&<span class="keyword">></span>(*this)[index]; }</div><div class="line"><a name="l01588"></a><span class="lineno"> 1588</span> <span class="comment"></span></div><div class="line"><a name="l01589"></a><span class="lineno"> 1589</span> <span class="comment"> //! Element iterator</span></div><div class="line"><a name="l01590"></a><span class="lineno"> 1590</span> <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>  <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> <span class="comment"> //! \em Past-the-end element iterator</span></div><div class="line"><a name="l01593"></a><span class="lineno"> 1593</span> <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>  <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> <span class="comment"> //! Constant element iterator</span></div><div class="line"><a name="l01596"></a><span class="lineno"> 1596</span> <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>  <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<</span><a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&<span class="keyword">></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> <span class="comment"> //! Constant \em past-the-end element iterator</span></div><div class="line"><a name="l01599"></a><span class="lineno"> 1599</span> <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>  <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<</span><a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&<span class="keyword">></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> <span class="comment"></span></div><div class="line"><a name="l01602"></a><span class="lineno"> 1602</span> <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> <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> <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> <span class="comment"> \return The value itself for fluent API.</span></div><div class="line"><a name="l01606"></a><span class="lineno"> 1606</span> <span class="comment"> \note Linear time complexity.</span></div><div class="line"><a name="l01607"></a><span class="lineno"> 1607</span> <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>  <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& <a class="code" href="classrapidjson_1_1_generic_value.html#a17971ba2bcd4eb1716098fdfe9182386">Reserve</a>(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> newCapacity, Allocator &allocator) {</div><div class="line"><a name="l01609"></a><span class="lineno"> 1609</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());</div><div class="line"><a name="l01610"></a><span class="lineno"> 1610</span>  <span class="keywordflow">if</span> (newCapacity > data_.a.capacity) {</div><div class="line"><a name="l01611"></a><span class="lineno"> 1611</span>  SetElementsPointer(reinterpret_cast<GenericValue*>(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>  data_.a.capacity = newCapacity;</div><div class="line"><a name="l01613"></a><span class="lineno"> 1613</span>  }</div><div class="line"><a name="l01614"></a><span class="lineno"> 1614</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l01615"></a><span class="lineno"> 1615</span>  }</div><div class="line"><a name="l01616"></a><span class="lineno"> 1616</span> <span class="comment"></span></div><div class="line"><a name="l01617"></a><span class="lineno"> 1617</span> <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> <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> <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> <span class="comment"> \pre IsArray() == true</span></div><div class="line"><a name="l01621"></a><span class="lineno"> 1621</span> <span class="comment"> \post value.IsNull() == true</span></div><div class="line"><a name="l01622"></a><span class="lineno"> 1622</span> <span class="comment"> \return The value itself for fluent API.</span></div><div class="line"><a name="l01623"></a><span class="lineno"> 1623</span> <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> <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> <span class="comment"> \note Amortized constant time complexity.</span></div><div class="line"><a name="l01626"></a><span class="lineno"> 1626</span> <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>  <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& <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>& value, Allocator& allocator) {</div><div class="line"><a name="l01628"></a><span class="lineno"> 1628</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());</div><div class="line"><a name="l01629"></a><span class="lineno"> 1629</span>  <span class="keywordflow">if</span> (data_.a.size >= data_.a.capacity)</div><div class="line"><a name="l01630"></a><span class="lineno"> 1630</span>  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>  GetElementsPointer()[data_.a.size++].RawAssign(value);</div><div class="line"><a name="l01632"></a><span class="lineno"> 1632</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l01633"></a><span class="lineno"> 1633</span>  }</div><div class="line"><a name="l01634"></a><span class="lineno"> 1634</span> </div><div class="line"><a name="l01635"></a><span class="lineno"> 1635</span> <span class="preprocessor">#if RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l01636"></a><span class="lineno"> 1636</span>  <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& PushBack(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&& value, Allocator& allocator) {</div><div class="line"><a name="l01637"></a><span class="lineno"> 1637</span>  <span class="keywordflow">return</span> PushBack(value, allocator);</div><div class="line"><a name="l01638"></a><span class="lineno"> 1638</span>  }</div><div class="line"><a name="l01639"></a><span class="lineno"> 1639</span> <span class="preprocessor">#endif // RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l01640"></a><span class="lineno"> 1640</span> <span class="comment"></span></div><div class="line"><a name="l01641"></a><span class="lineno"> 1641</span> <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> <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> <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> <span class="comment"> \pre IsArray() == true</span></div><div class="line"><a name="l01645"></a><span class="lineno"> 1645</span> <span class="comment"> \return The value itself for fluent API.</span></div><div class="line"><a name="l01646"></a><span class="lineno"> 1646</span> <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> <span class="comment"> \note Amortized constant time complexity.</span></div><div class="line"><a name="l01648"></a><span class="lineno"> 1648</span> <span class="comment"> \see GenericStringRef</span></div><div class="line"><a name="l01649"></a><span class="lineno"> 1649</span> <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>  <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& <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& allocator) {</div><div class="line"><a name="l01651"></a><span class="lineno"> 1651</span>  <span class="keywordflow">return</span> (*this).template PushBack<StringRefType>(value, allocator);</div><div class="line"><a name="l01652"></a><span class="lineno"> 1652</span>  }</div><div class="line"><a name="l01653"></a><span class="lineno"> 1653</span> <span class="comment"></span></div><div class="line"><a name="l01654"></a><span class="lineno"> 1654</span> <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> <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> <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> <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> <span class="comment"> \pre IsArray() == true</span></div><div class="line"><a name="l01659"></a><span class="lineno"> 1659</span> <span class="comment"> \return The value itself for fluent API.</span></div><div class="line"><a name="l01660"></a><span class="lineno"> 1660</span> <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> <span class="comment"></span></div><div class="line"><a name="l01662"></a><span class="lineno"> 1662</span> <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> <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> <span class="comment"> referencing character strings with insufficient lifetime, use</span></div><div class="line"><a name="l01665"></a><span class="lineno"> 1665</span> <span class="comment"> \ref PushBack(GenericValue&, Allocator&) or \ref</span></div><div class="line"><a name="l01666"></a><span class="lineno"> 1666</span> <span class="comment"> PushBack(StringRefType, Allocator&).</span></div><div class="line"><a name="l01667"></a><span class="lineno"> 1667</span> <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> <span class="comment"> use an explicit cast instead, if needed.</span></div><div class="line"><a name="l01669"></a><span class="lineno"> 1669</span> <span class="comment"> \note Amortized constant time complexity.</span></div><div class="line"><a name="l01670"></a><span class="lineno"> 1670</span> <span class="comment"> */</span></div><div class="line"><a name="l01671"></a><span class="lineno"> 1671</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div><div class="line"><a name="l01672"></a><span class="lineno"> 1672</span>  RAPIDJSON_DISABLEIF_RETURN((internal::OrExpr<internal::IsPointer<T>, internal::IsGenericValue<T> >), (<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&))</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>  PushBack(T value, Allocator& allocator) {</div><div class="line"><a name="l01674"></a><span class="lineno"> 1674</span>  <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>  <span class="keywordflow">return</span> PushBack(v, allocator);</div><div class="line"><a name="l01676"></a><span class="lineno"> 1676</span>  }</div><div class="line"><a name="l01677"></a><span class="lineno"> 1677</span> <span class="comment"></span></div><div class="line"><a name="l01678"></a><span class="lineno"> 1678</span> <span class="comment"> //! Remove the last element in the array.</span></div><div class="line"><a name="l01679"></a><span class="lineno"> 1679</span> <span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l01680"></a><span class="lineno"> 1680</span> <span class="comment"> \note Constant time complexity.</span></div><div class="line"><a name="l01681"></a><span class="lineno"> 1681</span> <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>  <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& <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>  <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>  <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>  GetElementsPointer()[--data_.a.size].~GenericValue();</div><div class="line"><a name="l01686"></a><span class="lineno"> 1686</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l01687"></a><span class="lineno"> 1687</span>  }</div><div class="line"><a name="l01688"></a><span class="lineno"> 1688</span> <span class="comment"></span></div><div class="line"><a name="l01689"></a><span class="lineno"> 1689</span> <span class="comment"> //! Remove an element of array by iterator.</span></div><div class="line"><a name="l01690"></a><span class="lineno"> 1690</span> <span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l01691"></a><span class="lineno"> 1691</span> <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> <span class="comment"> \pre IsArray() == true && \ref Begin() <= \c pos < \ref End()</span></div><div class="line"><a name="l01693"></a><span class="lineno"> 1693</span> <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> <span class="comment"> \note Linear time complexity.</span></div><div class="line"><a name="l01695"></a><span class="lineno"> 1695</span> <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>  <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>  <span class="keywordflow">return</span> Erase(pos, pos + 1);</div><div class="line"><a name="l01698"></a><span class="lineno"> 1698</span>  }</div><div class="line"><a name="l01699"></a><span class="lineno"> 1699</span> <span class="comment"></span></div><div class="line"><a name="l01700"></a><span class="lineno"> 1700</span> <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> <span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l01702"></a><span class="lineno"> 1702</span> <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> <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> <span class="comment"> \pre IsArray() == true && \ref Begin() <= \c first <= \c last <= \ref End()</span></div><div class="line"><a name="l01705"></a><span class="lineno"> 1705</span> <span class="comment"> \return Iterator following the last removed element.</span></div><div class="line"><a name="l01706"></a><span class="lineno"> 1706</span> <span class="comment"> \note Linear time complexity.</span></div><div class="line"><a name="l01707"></a><span class="lineno"> 1707</span> <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>  <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>  <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>  <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 > 0);</div><div class="line"><a name="l01711"></a><span class="lineno"> 1711</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>(GetElementsPointer() != 0);</div><div class="line"><a name="l01712"></a><span class="lineno"> 1712</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>(first >= Begin());</div><div class="line"><a name="l01713"></a><span class="lineno"> 1713</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>(first <= last);</div><div class="line"><a name="l01714"></a><span class="lineno"> 1714</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>(last <= End());</div><div class="line"><a name="l01715"></a><span class="lineno"> 1715</span>  <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>  <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>  itr-><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>  std::memmove(static_cast<void*>(pos), last, static_cast<size_t>(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>  data_.a.size -= <span class="keyword">static_cast<</span><a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a><span class="keyword">></span>(last - first);</div><div class="line"><a name="l01720"></a><span class="lineno"> 1720</span>  <span class="keywordflow">return</span> pos;</div><div class="line"><a name="l01721"></a><span class="lineno"> 1721</span>  }</div><div class="line"><a name="l01722"></a><span class="lineno"> 1722</span> </div><div class="line"><a name="l01723"></a><span class="lineno"> 1723</span>  <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>  <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> <span class="comment"></span></div><div class="line"><a name="l01726"></a><span class="lineno"> 1726</span> <span class="comment"> //@}</span></div><div class="line"><a name="l01727"></a><span class="lineno"> 1727</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l01728"></a><span class="lineno"> 1728</span> <span class="comment"> //!@name Number</span></div><div class="line"><a name="l01729"></a><span class="lineno"> 1729</span> <span class="comment"></span><span class="comment"> //@{</span></div><div class="line"><a name="l01730"></a><span class="lineno"> 1730</span> <span class="comment"></span></div><div class="line"><a name="l01731"></a><span class="lineno"> 1731</span>  <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 & kIntFlag); <span class="keywordflow">return</span> data_.n.i.i; }</div><div class="line"><a name="l01732"></a><span class="lineno"> 1732</span>  <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 & kUintFlag); <span class="keywordflow">return</span> data_.n.u.u; }</div><div class="line"><a name="l01733"></a><span class="lineno"> 1733</span>  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 & kInt64Flag); <span class="keywordflow">return</span> data_.n.i64; }</div><div class="line"><a name="l01734"></a><span class="lineno"> 1734</span>  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 & kUint64Flag); <span class="keywordflow">return</span> data_.n.u64; }</div><div class="line"><a name="l01735"></a><span class="lineno"> 1735</span> <span class="comment"></span></div><div class="line"><a name="l01736"></a><span class="lineno"> 1736</span> <span class="comment"> //! Get the value as double type.</span></div><div class="line"><a name="l01737"></a><span class="lineno"> 1737</span> <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> <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>  <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>  <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>  <span class="keywordflow">if</span> ((data_.f.flags & 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>  <span class="keywordflow">if</span> ((data_.f.flags & kIntFlag) != 0) <span class="keywordflow">return</span> data_.n.i.i; <span class="comment">// int -> double</span></div><div class="line"><a name="l01743"></a><span class="lineno"> 1743</span>  <span class="keywordflow">if</span> ((data_.f.flags & kUintFlag) != 0) <span class="keywordflow">return</span> data_.n.u.u; <span class="comment">// unsigned -> double</span></div><div class="line"><a name="l01744"></a><span class="lineno"> 1744</span>  <span class="keywordflow">if</span> ((data_.f.flags & kInt64Flag) != 0) <span class="keywordflow">return</span> <span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>(data_.n.i64); <span class="comment">// int64_t -> double (may lose precision)</span></div><div class="line"><a name="l01745"></a><span class="lineno"> 1745</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 & kUint64Flag) != 0); <span class="keywordflow">return</span> <span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>(data_.n.u64); <span class="comment">// uint64_t -> double (may lose precision)</span></div><div class="line"><a name="l01746"></a><span class="lineno"> 1746</span>  }</div><div class="line"><a name="l01747"></a><span class="lineno"> 1747</span> <span class="comment"></span></div><div class="line"><a name="l01748"></a><span class="lineno"> 1748</span> <span class="comment"> //! Get the value as float type.</span></div><div class="line"><a name="l01749"></a><span class="lineno"> 1749</span> <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> <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>  <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>  <span class="keywordflow">return</span> <span class="keyword">static_cast<</span><span class="keywordtype">float</span><span class="keyword">></span>(GetDouble());</div><div class="line"><a name="l01753"></a><span class="lineno"> 1753</span>  }</div><div class="line"><a name="l01754"></a><span class="lineno"> 1754</span> </div><div class="line"><a name="l01755"></a><span class="lineno"> 1755</span>  <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& SetInt(<span class="keywordtype">int</span> i) { this->~<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>  <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& SetUint(<span class="keywordtype">unsigned</span> u) { this->~<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>  <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& SetInt64(int64_t i64) { this->~<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>  <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& SetUint64(uint64_t u64) { this->~<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>  <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& SetDouble(<span class="keywordtype">double</span> d) { this->~<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>  <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& SetFloat(<span class="keywordtype">float</span> f) { this->~<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<double>(f)); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l01761"></a><span class="lineno"> 1761</span> <span class="comment"></span></div><div class="line"><a name="l01762"></a><span class="lineno"> 1762</span> <span class="comment"> //@}</span></div><div class="line"><a name="l01763"></a><span class="lineno"> 1763</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l01764"></a><span class="lineno"> 1764</span> <span class="comment"> //!@name String</span></div><div class="line"><a name="l01765"></a><span class="lineno"> 1765</span> <span class="comment"></span><span class="comment"> //@{</span></div><div class="line"><a name="l01766"></a><span class="lineno"> 1766</span> <span class="comment"></span></div><div class="line"><a name="l01767"></a><span class="lineno"> 1767</span>  <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 & kInlineStrFlag) ? data_.ss.str : GetStringPointer(); }</div><div class="line"><a name="l01768"></a><span class="lineno"> 1768</span> <span class="comment"></span></div><div class="line"><a name="l01769"></a><span class="lineno"> 1769</span> <span class="comment"> //! Get the length of string.</span></div><div class="line"><a name="l01770"></a><span class="lineno"> 1770</span> <span class="comment"></span><span class="comment"> /*! Since rapidjson permits "\\u0000" 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> <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>  <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 & kInlineStrFlag) ? (data_.ss.GetLength()) : data_.s.length); }</div><div class="line"><a name="l01773"></a><span class="lineno"> 1773</span> <span class="comment"></span></div><div class="line"><a name="l01774"></a><span class="lineno"> 1774</span> <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> <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> <span class="comment"> \param s source string pointer. </span></div><div class="line"><a name="l01777"></a><span class="lineno"> 1777</span> <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> <span class="comment"> \return The value itself for fluent API.</span></div><div class="line"><a name="l01779"></a><span class="lineno"> 1779</span> <span class="comment"> \post IsString() == true && GetString() == s && GetStringLength() == length</span></div><div class="line"><a name="l01780"></a><span class="lineno"> 1780</span> <span class="comment"> \see SetString(StringRefType)</span></div><div class="line"><a name="l01781"></a><span class="lineno"> 1781</span> <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>  <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& <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> <span class="comment"></span></div><div class="line"><a name="l01784"></a><span class="lineno"> 1784</span> <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> <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> <span class="comment"> \return The value itself for fluent API.</span></div><div class="line"><a name="l01787"></a><span class="lineno"> 1787</span> <span class="comment"> \post IsString() == true && GetString() == s && GetStringLength() == s.length</span></div><div class="line"><a name="l01788"></a><span class="lineno"> 1788</span> <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>  <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& <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->~<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> <span class="comment"></span></div><div class="line"><a name="l01791"></a><span class="lineno"> 1791</span> <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> <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> <span class="comment"> \param s source string. </span></div><div class="line"><a name="l01794"></a><span class="lineno"> 1794</span> <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> <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> <span class="comment"> \return The value itself for fluent API.</span></div><div class="line"><a name="l01797"></a><span class="lineno"> 1797</span> <span class="comment"> \post IsString() == true && GetString() != s && strcmp(GetString(),s) == 0 && GetStringLength() == length</span></div><div class="line"><a name="l01798"></a><span class="lineno"> 1798</span> <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>  <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& <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& 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> <span class="comment"></span></div><div class="line"><a name="l01801"></a><span class="lineno"> 1801</span> <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> <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> <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> <span class="comment"> \return The value itself for fluent API.</span></div><div class="line"><a name="l01805"></a><span class="lineno"> 1805</span> <span class="comment"> \post IsString() == true && GetString() != s && strcmp(GetString(),s) == 0 && GetStringLength() == length</span></div><div class="line"><a name="l01806"></a><span class="lineno"> 1806</span> <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>  <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& <a class="code" href="classrapidjson_1_1_generic_value.html#ab4babf200cac2dacb412a3ea279ddf5b">SetString</a>(<span class="keyword">const</span> Ch* s, Allocator& 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> <span class="comment"></span></div><div class="line"><a name="l01809"></a><span class="lineno"> 1809</span> <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> <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> <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> <span class="comment"> \return The value itself for fluent API.</span></div><div class="line"><a name="l01813"></a><span class="lineno"> 1813</span> <span class="comment"> \post IsString() == true && GetString() != s.s && strcmp(GetString(),s) == 0 && GetStringLength() == length</span></div><div class="line"><a name="l01814"></a><span class="lineno"> 1814</span> <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>  <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& <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& allocator) { this->~<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> </div><div class="line"><a name="l01817"></a><span class="lineno"> 1817</span> <span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l01818"></a><span class="lineno"> 1818</span> <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> <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> <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> <span class="comment"> \return The value itself for fluent API.</span></div><div class="line"><a name="l01822"></a><span class="lineno"> 1822</span> <span class="comment"> \post IsString() == true && GetString() != s.data() && strcmp(GetString(),s.data() == 0 && GetStringLength() == s.size()</span></div><div class="line"><a name="l01823"></a><span class="lineno"> 1823</span> <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> <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>  <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& <a class="code" href="classrapidjson_1_1_generic_value.html#a3e930bffb40a78e570e3deef461f0532">SetString</a>(<span class="keyword">const</span> std::basic_string<Ch>& s, Allocator& 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> <span class="preprocessor">#endif</span></div><div class="line"><a name="l01827"></a><span class="lineno"> 1827</span> <span class="comment"></span></div><div class="line"><a name="l01828"></a><span class="lineno"> 1828</span> <span class="comment"> //@}</span></div><div class="line"><a name="l01829"></a><span class="lineno"> 1829</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l01830"></a><span class="lineno"> 1830</span> <span class="comment"> //!@name Array</span></div><div class="line"><a name="l01831"></a><span class="lineno"> 1831</span> <span class="comment"></span><span class="comment"> //@{</span></div><div class="line"><a name="l01832"></a><span class="lineno"> 1832</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l01833"></a><span class="lineno"> 1833</span> <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> <span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l01835"></a><span class="lineno"> 1835</span> <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<Ch></span></div><div class="line"><a name="l01836"></a><span class="lineno"> 1836</span> <span class="comment"> */</span></div><div class="line"><a name="l01837"></a><span class="lineno"> 1837</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></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>  <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<ValueType, T>::Is(*<span class="keyword">this</span>); }</div><div class="line"><a name="l01839"></a><span class="lineno"> 1839</span> </div><div class="line"><a name="l01840"></a><span class="lineno"> 1840</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div><div class="line"><a name="l01841"></a><span class="lineno"> 1841</span>  T Get()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> internal::TypeHelper<ValueType, T>::Get(*<span class="keyword">this</span>); }</div><div class="line"><a name="l01842"></a><span class="lineno"> 1842</span> </div><div class="line"><a name="l01843"></a><span class="lineno"> 1843</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div><div class="line"><a name="l01844"></a><span class="lineno"> 1844</span>  T Get() { <span class="keywordflow">return</span> internal::TypeHelper<ValueType, T>::Get(*<span class="keyword">this</span>); }</div><div class="line"><a name="l01845"></a><span class="lineno"> 1845</span> </div><div class="line"><a name="l01846"></a><span class="lineno"> 1846</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T></div><div class="line"><a name="l01847"></a><span class="lineno"> 1847</span>  <a class="code" href="classrapidjson_1_1_generic_value.html">ValueType</a>& Set(<span class="keyword">const</span> T& data) { <span class="keywordflow">return</span> internal::TypeHelper<ValueType, T>::Set(*<span class="keyword">this</span>, data); }</div><div class="line"><a name="l01848"></a><span class="lineno"> 1848</span> </div><div class="line"><a name="l01849"></a><span class="lineno"> 1849</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T></div><div class="line"><a name="l01850"></a><span class="lineno"> 1850</span>  <a class="code" href="classrapidjson_1_1_generic_value.html">ValueType</a>& Set(<span class="keyword">const</span> T& data, <a class="code" href="classrapidjson_1_1_allocator.html">AllocatorType</a>& allocator) { <span class="keywordflow">return</span> internal::TypeHelper<ValueType, T>::Set(*<span class="keyword">this</span>, data, allocator); }</div><div class="line"><a name="l01851"></a><span class="lineno"> 1851</span> <span class="comment"></span></div><div class="line"><a name="l01852"></a><span class="lineno"> 1852</span> <span class="comment"> //@}</span></div><div class="line"><a name="l01853"></a><span class="lineno"> 1853</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l01854"></a><span class="lineno"> 1854</span> <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> <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> <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> <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> <span class="comment"> \tparam Handler type of handler.</span></div><div class="line"><a name="l01859"></a><span class="lineno"> 1859</span> <span class="comment"> \param handler An object implementing concept Handler.</span></div><div class="line"><a name="l01860"></a><span class="lineno"> 1860</span> <span class="comment"> */</span></div><div class="line"><a name="l01861"></a><span class="lineno"> 1861</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> Handler></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>  <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>& handler)<span class="keyword"> const </span>{</div><div class="line"><a name="l01863"></a><span class="lineno"> 1863</span>  <span class="keywordflow">switch</span>(GetType()) {</div><div class="line"><a name="l01864"></a><span class="lineno"> 1864</span>  <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>  <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>  <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> </div><div class="line"><a name="l01868"></a><span class="lineno"> 1868</span>  <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>  <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>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01871"></a><span class="lineno"> 1871</span>  <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>  <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->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>  <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->name.GetString(), m->name.GetStringLength(), (m->name.data_.f.flags & kCopyFlag) != 0)))</div><div class="line"><a name="l01874"></a><span class="lineno"> 1874</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01875"></a><span class="lineno"> 1875</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>(!m->value.Accept(handler)))</div><div class="line"><a name="l01876"></a><span class="lineno"> 1876</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01877"></a><span class="lineno"> 1877</span>  }</div><div class="line"><a name="l01878"></a><span class="lineno"> 1878</span>  <span class="keywordflow">return</span> handler.EndObject(data_.o.size);</div><div class="line"><a name="l01879"></a><span class="lineno"> 1879</span> </div><div class="line"><a name="l01880"></a><span class="lineno"> 1880</span>  <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>  <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>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01883"></a><span class="lineno"> 1883</span>  <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>  <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->Accept(handler)))</div><div class="line"><a name="l01885"></a><span class="lineno"> 1885</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01886"></a><span class="lineno"> 1886</span>  <span class="keywordflow">return</span> handler.EndArray(data_.a.size);</div><div class="line"><a name="l01887"></a><span class="lineno"> 1887</span>  </div><div class="line"><a name="l01888"></a><span class="lineno"> 1888</span>  <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>  <span class="keywordflow">return</span> handler.String(GetString(), GetStringLength(), (data_.f.flags & kCopyFlag) != 0);</div><div class="line"><a name="l01890"></a><span class="lineno"> 1890</span>  </div><div class="line"><a name="l01891"></a><span class="lineno"> 1891</span>  <span class="keywordflow">default</span>:</div><div class="line"><a name="l01892"></a><span class="lineno"> 1892</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>(GetType() == <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a">kNumberType</a>);</div><div class="line"><a name="l01893"></a><span class="lineno"> 1893</span>  <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>  <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>  <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>  <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>  <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>  }</div><div class="line"><a name="l01899"></a><span class="lineno"> 1899</span>  }</div><div class="line"><a name="l01900"></a><span class="lineno"> 1900</span> </div><div class="line"><a name="l01901"></a><span class="lineno"> 1901</span> <span class="keyword">private</span>:</div><div class="line"><a name="l01902"></a><span class="lineno"> 1902</span>  <span class="keyword">template</span> <<span class="keyword">typename</span>, <span class="keyword">typename</span>> <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>  <span class="keyword">template</span> <<span class="keyword">typename</span>, <span class="keyword">typename</span>, <span class="keyword">typename</span>> <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> </div><div class="line"><a name="l01905"></a><span class="lineno"> 1905</span>  <span class="keyword">enum</span> {</div><div class="line"><a name="l01906"></a><span class="lineno"> 1906</span>  kBoolFlag = 0x0008,</div><div class="line"><a name="l01907"></a><span class="lineno"> 1907</span>  kNumberFlag = 0x0010,</div><div class="line"><a name="l01908"></a><span class="lineno"> 1908</span>  kIntFlag = 0x0020,</div><div class="line"><a name="l01909"></a><span class="lineno"> 1909</span>  kUintFlag = 0x0040,</div><div class="line"><a name="l01910"></a><span class="lineno"> 1910</span>  kInt64Flag = 0x0080,</div><div class="line"><a name="l01911"></a><span class="lineno"> 1911</span>  kUint64Flag = 0x0100,</div><div class="line"><a name="l01912"></a><span class="lineno"> 1912</span>  kDoubleFlag = 0x0200,</div><div class="line"><a name="l01913"></a><span class="lineno"> 1913</span>  kStringFlag = 0x0400,</div><div class="line"><a name="l01914"></a><span class="lineno"> 1914</span>  kCopyFlag = 0x0800,</div><div class="line"><a name="l01915"></a><span class="lineno"> 1915</span>  kInlineStrFlag = 0x1000,</div><div class="line"><a name="l01916"></a><span class="lineno"> 1916</span> </div><div class="line"><a name="l01917"></a><span class="lineno"> 1917</span>  <span class="comment">// Initial flags of different types.</span></div><div class="line"><a name="l01918"></a><span class="lineno"> 1918</span>  kNullFlag = <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a952871e4326b527154fc8aac1ac1f6ff">kNullType</a>,</div><div class="line"><a name="l01919"></a><span class="lineno"> 1919</span>  kTrueFlag = <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a80d9f25b083abce45edbfdd3ba006c8e">kTrueType</a> | kBoolFlag,</div><div class="line"><a name="l01920"></a><span class="lineno"> 1920</span>  kFalseFlag = <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a9f2e7047832dce1029551b5de0f05607">kFalseType</a> | kBoolFlag,</div><div class="line"><a name="l01921"></a><span class="lineno"> 1921</span>  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>  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>  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>  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>  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>  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>  kConstStringFlag = <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4ad6379da3dc04b83a591992bfb9fabba7">kStringType</a> | kStringFlag,</div><div class="line"><a name="l01928"></a><span class="lineno"> 1928</span>  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>  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>  kObjectFlag = <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4acf030b422a32c3647c7c5973bd4dd0a9">kObjectType</a>,</div><div class="line"><a name="l01931"></a><span class="lineno"> 1931</span>  kArrayFlag = <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a058c622e1e7d59419ae58b895cbce468">kArrayType</a>,</div><div class="line"><a name="l01932"></a><span class="lineno"> 1932</span> </div><div class="line"><a name="l01933"></a><span class="lineno"> 1933</span>  kTypeMask = 0x07</div><div class="line"><a name="l01934"></a><span class="lineno"> 1934</span>  };</div><div class="line"><a name="l01935"></a><span class="lineno"> 1935</span> </div><div class="line"><a name="l01936"></a><span class="lineno"> 1936</span>  <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>  <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> </div><div class="line"><a name="l01939"></a><span class="lineno"> 1939</span>  <span class="keyword">struct </span>Flag {</div><div class="line"><a name="l01940"></a><span class="lineno"> 1940</span> <span class="preprocessor">#if RAPIDJSON_48BITPOINTER_OPTIMIZATION</span></div><div class="line"><a name="l01941"></a><span class="lineno"> 1941</span>  <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> <span class="preprocessor">#elif RAPIDJSON_64BIT</span></div><div class="line"><a name="l01943"></a><span class="lineno"> 1943</span>  <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> <span class="preprocessor">#else</span></div><div class="line"><a name="l01945"></a><span class="lineno"> 1945</span>  <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> <span class="preprocessor">#endif</span></div><div class="line"><a name="l01947"></a><span class="lineno"> 1947</span>  uint16_t flags;</div><div class="line"><a name="l01948"></a><span class="lineno"> 1948</span>  };</div><div class="line"><a name="l01949"></a><span class="lineno"> 1949</span> </div><div class="line"><a name="l01950"></a><span class="lineno"> 1950</span>  <span class="keyword">struct </span>String {</div><div class="line"><a name="l01951"></a><span class="lineno"> 1951</span>  <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> length;</div><div class="line"><a name="l01952"></a><span class="lineno"> 1952</span>  <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> hashcode; <span class="comment">//!< reserved</span></div><div class="line"><a name="l01953"></a><span class="lineno"> 1953</span> <span class="comment"></span> <span class="keyword">const</span> Ch* str;</div><div class="line"><a name="l01954"></a><span class="lineno"> 1954</span>  }; <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> </div><div class="line"><a name="l01956"></a><span class="lineno"> 1956</span>  <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>  <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>  <span class="comment">// string in the last character str[LenPos] by storing "MaxSize - length" there. If the string</span></div><div class="line"><a name="l01959"></a><span class="lineno"> 1959</span>  <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>  <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>  <span class="comment">// "MaxSize - str[LenPos]".</span></div><div class="line"><a name="l01962"></a><span class="lineno"> 1962</span>  <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>  <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>  <span class="keyword">struct </span>ShortString {</div><div class="line"><a name="l01965"></a><span class="lineno"> 1965</span>  <span class="keyword">enum</span> { MaxChars = <span class="keyword">sizeof</span>(<span class="keyword">static_cast<</span>Flag*<span class="keyword">></span>(0)->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>  Ch str[MaxChars];</div><div class="line"><a name="l01967"></a><span class="lineno"> 1967</span> </div><div class="line"><a name="l01968"></a><span class="lineno"> 1968</span>  <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 >= len); }</div><div class="line"><a name="l01969"></a><span class="lineno"> 1969</span>  <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<</span>Ch<span class="keyword">></span>(MaxSize - len); }</div><div class="line"><a name="l01970"></a><span class="lineno"> 1970</span>  <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<</span><a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a><span class="keyword">></span>(MaxSize - str[LenPos]); }</div><div class="line"><a name="l01971"></a><span class="lineno"> 1971</span>  }; <span class="comment">// at most as many bytes as "String" above => 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> </div><div class="line"><a name="l01973"></a><span class="lineno"> 1973</span>  <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>  <span class="keyword">union </span>Number {</div><div class="line"><a name="l01975"></a><span class="lineno"> 1975</span> <span class="preprocessor">#if RAPIDJSON_ENDIAN == RAPIDJSON_LITTLEENDIAN</span></div><div class="line"><a name="l01976"></a><span class="lineno"> 1976</span>  <span class="keyword">struct </span>I {</div><div class="line"><a name="l01977"></a><span class="lineno"> 1977</span>  <span class="keywordtype">int</span> i;</div><div class="line"><a name="l01978"></a><span class="lineno"> 1978</span>  <span class="keywordtype">char</span> padding[4];</div><div class="line"><a name="l01979"></a><span class="lineno"> 1979</span>  }i;</div><div class="line"><a name="l01980"></a><span class="lineno"> 1980</span>  <span class="keyword">struct </span>U {</div><div class="line"><a name="l01981"></a><span class="lineno"> 1981</span>  <span class="keywordtype">unsigned</span> u;</div><div class="line"><a name="l01982"></a><span class="lineno"> 1982</span>  <span class="keywordtype">char</span> padding2[4];</div><div class="line"><a name="l01983"></a><span class="lineno"> 1983</span>  }u;</div><div class="line"><a name="l01984"></a><span class="lineno"> 1984</span> <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>  <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>  <span class="keywordtype">char</span> padding[4];</div><div class="line"><a name="l01987"></a><span class="lineno"> 1987</span>  <span class="keywordtype">int</span> i;</div><div class="line"><a name="l01988"></a><span class="lineno"> 1988</span>  }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>  <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>  <span class="keywordtype">char</span> padding2[4];</div><div class="line"><a name="l01991"></a><span class="lineno"> 1991</span>  <span class="keywordtype">unsigned</span> u;</div><div class="line"><a name="l01992"></a><span class="lineno"> 1992</span>  }u;</div><div class="line"><a name="l01993"></a><span class="lineno"> 1993</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l01994"></a><span class="lineno"> 1994</span>  int64_t i64;</div><div class="line"><a name="l01995"></a><span class="lineno"> 1995</span>  uint64_t u64;</div><div class="line"><a name="l01996"></a><span class="lineno"> 1996</span>  <span class="keywordtype">double</span> d;</div><div class="line"><a name="l01997"></a><span class="lineno"> 1997</span>  }; <span class="comment">// 8 bytes</span></div><div class="line"><a name="l01998"></a><span class="lineno"> 1998</span> </div><div class="line"><a name="l01999"></a><span class="lineno"> 1999</span>  <span class="keyword">struct </span>ObjectData {</div><div class="line"><a name="l02000"></a><span class="lineno"> 2000</span>  <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> size;</div><div class="line"><a name="l02001"></a><span class="lineno"> 2001</span>  <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> capacity;</div><div class="line"><a name="l02002"></a><span class="lineno"> 2002</span>  <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>  }; <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> </div><div class="line"><a name="l02005"></a><span class="lineno"> 2005</span>  <span class="keyword">struct </span>ArrayData {</div><div class="line"><a name="l02006"></a><span class="lineno"> 2006</span>  <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> size;</div><div class="line"><a name="l02007"></a><span class="lineno"> 2007</span>  <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> capacity;</div><div class="line"><a name="l02008"></a><span class="lineno"> 2008</span>  <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>  }; <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> </div><div class="line"><a name="l02011"></a><span class="lineno"> 2011</span>  <span class="keyword">union </span>Data {</div><div class="line"><a name="l02012"></a><span class="lineno"> 2012</span>  String s;</div><div class="line"><a name="l02013"></a><span class="lineno"> 2013</span>  ShortString ss;</div><div class="line"><a name="l02014"></a><span class="lineno"> 2014</span>  Number n;</div><div class="line"><a name="l02015"></a><span class="lineno"> 2015</span>  ObjectData o;</div><div class="line"><a name="l02016"></a><span class="lineno"> 2016</span>  ArrayData a;</div><div class="line"><a name="l02017"></a><span class="lineno"> 2017</span>  Flag f;</div><div class="line"><a name="l02018"></a><span class="lineno"> 2018</span>  }; <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> </div><div class="line"><a name="l02020"></a><span class="lineno"> 2020</span>  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>  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>  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>  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>  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>  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> </div><div class="line"><a name="l02027"></a><span class="lineno"> 2027</span>  <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>  <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& allocator) {</div><div class="line"><a name="l02029"></a><span class="lineno"> 2029</span>  data_.f.flags = kArrayFlag;</div><div class="line"><a name="l02030"></a><span class="lineno"> 2030</span>  <span class="keywordflow">if</span> (count) {</div><div class="line"><a name="l02031"></a><span class="lineno"> 2031</span>  <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>* e = <span class="keyword">static_cast<</span><a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>*<span class="keyword">></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>  SetElementsPointer(e);</div><div class="line"><a name="l02033"></a><span class="lineno"> 2033</span>  std::memcpy(static_cast<void*>(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>  }</div><div class="line"><a name="l02035"></a><span class="lineno"> 2035</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l02036"></a><span class="lineno"> 2036</span>  SetElementsPointer(0);</div><div class="line"><a name="l02037"></a><span class="lineno"> 2037</span>  data_.a.size = data_.a.capacity = count;</div><div class="line"><a name="l02038"></a><span class="lineno"> 2038</span>  }</div><div class="line"><a name="l02039"></a><span class="lineno"> 2039</span> <span class="comment"></span></div><div class="line"><a name="l02040"></a><span class="lineno"> 2040</span> <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> <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& allocator) {</div><div class="line"><a name="l02042"></a><span class="lineno"> 2042</span>  data_.f.flags = kObjectFlag;</div><div class="line"><a name="l02043"></a><span class="lineno"> 2043</span>  <span class="keywordflow">if</span> (count) {</div><div class="line"><a name="l02044"></a><span class="lineno"> 2044</span>  <a class="code" href="structrapidjson_1_1_generic_member.html">Member</a>* m = <span class="keyword">static_cast<</span><a class="code" href="structrapidjson_1_1_generic_member.html">Member</a>*<span class="keyword">></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>  SetMembersPointer(m);</div><div class="line"><a name="l02046"></a><span class="lineno"> 2046</span>  std::memcpy(static_cast<void*>(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>  }</div><div class="line"><a name="l02048"></a><span class="lineno"> 2048</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l02049"></a><span class="lineno"> 2049</span>  SetMembersPointer(0);</div><div class="line"><a name="l02050"></a><span class="lineno"> 2050</span>  data_.o.size = data_.o.capacity = count;</div><div class="line"><a name="l02051"></a><span class="lineno"> 2051</span>  }</div><div class="line"><a name="l02052"></a><span class="lineno"> 2052</span> <span class="comment"></span></div><div class="line"><a name="l02053"></a><span class="lineno"> 2053</span> <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> <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>  data_.f.flags = kConstStringFlag;</div><div class="line"><a name="l02056"></a><span class="lineno"> 2056</span>  SetStringPointer(s);</div><div class="line"><a name="l02057"></a><span class="lineno"> 2057</span>  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>  }</div><div class="line"><a name="l02059"></a><span class="lineno"> 2059</span> <span class="comment"></span></div><div class="line"><a name="l02060"></a><span class="lineno"> 2060</span> <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> <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& allocator) {</div><div class="line"><a name="l02062"></a><span class="lineno"> 2062</span>  Ch* str = 0;</div><div class="line"><a name="l02063"></a><span class="lineno"> 2063</span>  <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>  data_.f.flags = kShortStringFlag;</div><div class="line"><a name="l02065"></a><span class="lineno"> 2065</span>  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>  str = data_.ss.str;</div><div class="line"><a name="l02067"></a><span class="lineno"> 2067</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l02068"></a><span class="lineno"> 2068</span>  data_.f.flags = kCopyStringFlag;</div><div class="line"><a name="l02069"></a><span class="lineno"> 2069</span>  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>  str = <span class="keyword">static_cast<</span>Ch *<span class="keyword">></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>  SetStringPointer(str);</div><div class="line"><a name="l02072"></a><span class="lineno"> 2072</span>  }</div><div class="line"><a name="l02073"></a><span class="lineno"> 2073</span>  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>  str[s.<a class="code" href="structrapidjson_1_1_generic_string_ref.html#ae223535ec20edf0c1db44a40b7735111">length</a>] = <span class="charliteral">'\0'</span>;</div><div class="line"><a name="l02075"></a><span class="lineno"> 2075</span>  }</div><div class="line"><a name="l02076"></a><span class="lineno"> 2076</span> <span class="comment"></span></div><div class="line"><a name="l02077"></a><span class="lineno"> 2077</span> <span class="comment"> //! Assignment without calling destructor</span></div><div class="line"><a name="l02078"></a><span class="lineno"> 2078</span> <span class="comment"></span> <span class="keywordtype">void</span> RawAssign(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>& rhs) RAPIDJSON_NOEXCEPT {</div><div class="line"><a name="l02079"></a><span class="lineno"> 2079</span>  data_ = rhs.data_;</div><div class="line"><a name="l02080"></a><span class="lineno"> 2080</span>  <span class="comment">// data_.f.flags = rhs.data_.f.flags;</span></div><div class="line"><a name="l02081"></a><span class="lineno"> 2081</span>  rhs.data_.f.flags = kNullFlag;</div><div class="line"><a name="l02082"></a><span class="lineno"> 2082</span>  }</div><div class="line"><a name="l02083"></a><span class="lineno"> 2083</span> </div><div class="line"><a name="l02084"></a><span class="lineno"> 2084</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> SourceAllocator></div><div class="line"><a name="l02085"></a><span class="lineno"> 2085</span>  <span class="keywordtype">bool</span> StringEqual(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue<Encoding, SourceAllocator></a>& rhs)<span class="keyword"> const </span>{</div><div class="line"><a name="l02086"></a><span class="lineno"> 2086</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());</div><div class="line"><a name="l02087"></a><span class="lineno"> 2087</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>(rhs.IsString());</div><div class="line"><a name="l02088"></a><span class="lineno"> 2088</span> </div><div class="line"><a name="l02089"></a><span class="lineno"> 2089</span>  <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>  <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>  <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> </div><div class="line"><a name="l02093"></a><span class="lineno"> 2093</span>  <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>  <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>  <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> </div><div class="line"><a name="l02097"></a><span class="lineno"> 2097</span>  <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>  }</div><div class="line"><a name="l02099"></a><span class="lineno"> 2099</span> </div><div class="line"><a name="l02100"></a><span class="lineno"> 2100</span>  Data data_;</div><div class="line"><a name="l02101"></a><span class="lineno"> 2101</span> };</div><div class="line"><a name="l02102"></a><span class="lineno"> 2102</span> <span class="comment"></span></div><div class="line"><a name="l02103"></a><span class="lineno"> 2103</span> <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> <span class="comment"></span><span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue<UTF8<></a> > <a class="code" href="namespacerapidjson.html#aa65fc9fb381b2cbc54f98673eadd6505">Value</a>;</div><div class="line"><a name="l02105"></a><span class="lineno"> 2105</span> <span class="comment"></span></div><div class="line"><a name="l02106"></a><span class="lineno"> 2106</span> <span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l02107"></a><span class="lineno"> 2107</span> <span class="comment"></span><span class="comment">// GenericDocument </span></div><div class="line"><a name="l02108"></a><span class="lineno"> 2108</span> <span class="comment"></span></div><div class="line"><a name="l02109"></a><span class="lineno"> 2109</span> <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> <span class="comment"></span><span class="comment">/*!</span></div><div class="line"><a name="l02111"></a><span class="lineno"> 2111</span> <span class="comment"> \note implements Handler concept</span></div><div class="line"><a name="l02112"></a><span class="lineno"> 2112</span> <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> <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> <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> <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> <span class="comment">*/</span></div><div class="line"><a name="l02117"></a><span class="lineno"> 2117</span> <span class="keyword">template</span> <<span class="keyword">typename</span> Encoding, <span class="keyword">typename</span> Allocator = MemoryPoolAllocator<>, <span class="keyword">typename</span> StackAllocator = CrtAllocator></div><div class="line"><a name="l02118"></a><span class="lineno"> 2118</span> <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><Encoding, Allocator> {</div><div class="line"><a name="l02119"></a><span class="lineno"> 2119</span> <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>  <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">//!< 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> <span class="comment"></span> <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue<Encoding, Allocator></a> <a class="code" href="classrapidjson_1_1_generic_document.html#a41bbec044c421e870a9d355075d741bc">ValueType</a>; <span class="comment">//!< 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> <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">//!< Allocator type from template parameter.</span></div><div class="line"><a name="l02123"></a><span class="lineno"> 2123</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l02124"></a><span class="lineno"> 2124</span> <span class="comment"> //! Constructor</span></div><div class="line"><a name="l02125"></a><span class="lineno"> 2125</span> <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> <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> <span class="comment"> \param allocator Optional allocator for allocating memory.</span></div><div class="line"><a name="l02128"></a><span class="lineno"> 2128</span> <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> <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> <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>  <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>  <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a><Encoding, Allocator>(type), allocator_(allocator), ownAllocator_(0), stack_(stackAllocator, stackCapacity), parseResult_()</div><div class="line"><a name="l02133"></a><span class="lineno"> 2133</span>  {</div><div class="line"><a name="l02134"></a><span class="lineno"> 2134</span>  <span class="keywordflow">if</span> (!allocator_)</div><div class="line"><a name="l02135"></a><span class="lineno"> 2135</span>  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>  }</div><div class="line"><a name="l02137"></a><span class="lineno"> 2137</span> <span class="comment"></span></div><div class="line"><a name="l02138"></a><span class="lineno"> 2138</span> <span class="comment"> //! Constructor</span></div><div class="line"><a name="l02139"></a><span class="lineno"> 2139</span> <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> <span class="comment"> \param allocator Optional allocator for allocating memory.</span></div><div class="line"><a name="l02141"></a><span class="lineno"> 2141</span> <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> <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> <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>  <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>  allocator_(allocator), ownAllocator_(0), stack_(stackAllocator, stackCapacity), parseResult_()</div><div class="line"><a name="l02146"></a><span class="lineno"> 2146</span>  {</div><div class="line"><a name="l02147"></a><span class="lineno"> 2147</span>  <span class="keywordflow">if</span> (!allocator_)</div><div class="line"><a name="l02148"></a><span class="lineno"> 2148</span>  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>  }</div><div class="line"><a name="l02150"></a><span class="lineno"> 2150</span> </div><div class="line"><a name="l02151"></a><span class="lineno"> 2151</span> <span class="preprocessor">#if RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l02152"></a><span class="lineno"> 2152</span> <span class="comment"> //! Move constructor in C++11</span></div><div class="line"><a name="l02153"></a><span class="lineno"> 2153</span> <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>&& rhs) RAPIDJSON_NOEXCEPT</div><div class="line"><a name="l02154"></a><span class="lineno"> 2154</span>  : ValueType(std::forward<ValueType>(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>  allocator_(rhs.allocator_),</div><div class="line"><a name="l02156"></a><span class="lineno"> 2156</span>  ownAllocator_(rhs.ownAllocator_),</div><div class="line"><a name="l02157"></a><span class="lineno"> 2157</span>  stack_(std::move(rhs.stack_)),</div><div class="line"><a name="l02158"></a><span class="lineno"> 2158</span>  parseResult_(rhs.parseResult_)</div><div class="line"><a name="l02159"></a><span class="lineno"> 2159</span>  {</div><div class="line"><a name="l02160"></a><span class="lineno"> 2160</span>  rhs.allocator_ = 0;</div><div class="line"><a name="l02161"></a><span class="lineno"> 2161</span>  rhs.ownAllocator_ = 0;</div><div class="line"><a name="l02162"></a><span class="lineno"> 2162</span>  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>  }</div><div class="line"><a name="l02164"></a><span class="lineno"> 2164</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l02165"></a><span class="lineno"> 2165</span> </div><div class="line"><a name="l02166"></a><span class="lineno"> 2166</span>  ~<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>  Destroy();</div><div class="line"><a name="l02168"></a><span class="lineno"> 2168</span>  }</div><div class="line"><a name="l02169"></a><span class="lineno"> 2169</span> </div><div class="line"><a name="l02170"></a><span class="lineno"> 2170</span> <span class="preprocessor">#if RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l02171"></a><span class="lineno"> 2171</span> <span class="comment"> //! Move assignment in C++11</span></div><div class="line"><a name="l02172"></a><span class="lineno"> 2172</span> <span class="comment"></span> <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>& operator=(<a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>&& rhs) RAPIDJSON_NOEXCEPT</div><div class="line"><a name="l02173"></a><span class="lineno"> 2173</span>  {</div><div class="line"><a name="l02174"></a><span class="lineno"> 2174</span>  <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>  <span class="comment">// attempt to call GenericValue's templated assignment operator.</span></div><div class="line"><a name="l02176"></a><span class="lineno"> 2176</span>  ValueType::operator=(std::forward<ValueType>(rhs));</div><div class="line"><a name="l02177"></a><span class="lineno"> 2177</span> </div><div class="line"><a name="l02178"></a><span class="lineno"> 2178</span>  <span class="comment">// Calling the destructor here would prematurely call stack_'s destructor</span></div><div class="line"><a name="l02179"></a><span class="lineno"> 2179</span>  Destroy();</div><div class="line"><a name="l02180"></a><span class="lineno"> 2180</span> </div><div class="line"><a name="l02181"></a><span class="lineno"> 2181</span>  allocator_ = rhs.allocator_;</div><div class="line"><a name="l02182"></a><span class="lineno"> 2182</span>  ownAllocator_ = rhs.ownAllocator_;</div><div class="line"><a name="l02183"></a><span class="lineno"> 2183</span>  stack_ = std::move(rhs.stack_);</div><div class="line"><a name="l02184"></a><span class="lineno"> 2184</span>  parseResult_ = rhs.parseResult_;</div><div class="line"><a name="l02185"></a><span class="lineno"> 2185</span> </div><div class="line"><a name="l02186"></a><span class="lineno"> 2186</span>  rhs.allocator_ = 0;</div><div class="line"><a name="l02187"></a><span class="lineno"> 2187</span>  rhs.ownAllocator_ = 0;</div><div class="line"><a name="l02188"></a><span class="lineno"> 2188</span>  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> </div><div class="line"><a name="l02190"></a><span class="lineno"> 2190</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l02191"></a><span class="lineno"> 2191</span>  }</div><div class="line"><a name="l02192"></a><span class="lineno"> 2192</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l02193"></a><span class="lineno"> 2193</span> <span class="comment"></span></div><div class="line"><a name="l02194"></a><span class="lineno"> 2194</span> <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> <span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l02196"></a><span class="lineno"> 2196</span> <span class="comment"> \param rhs Another document.</span></div><div class="line"><a name="l02197"></a><span class="lineno"> 2197</span> <span class="comment"> \note Constant complexity.</span></div><div class="line"><a name="l02198"></a><span class="lineno"> 2198</span> <span class="comment"> \see GenericValue::Swap</span></div><div class="line"><a name="l02199"></a><span class="lineno"> 2199</span> <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>  <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>& <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>& rhs) RAPIDJSON_NOEXCEPT {</div><div class="line"><a name="l02201"></a><span class="lineno"> 2201</span>  ValueType::Swap(rhs);</div><div class="line"><a name="l02202"></a><span class="lineno"> 2202</span>  stack_.Swap(rhs.stack_);</div><div class="line"><a name="l02203"></a><span class="lineno"> 2203</span>  internal::Swap(allocator_, rhs.allocator_);</div><div class="line"><a name="l02204"></a><span class="lineno"> 2204</span>  internal::Swap(ownAllocator_, rhs.ownAllocator_);</div><div class="line"><a name="l02205"></a><span class="lineno"> 2205</span>  internal::Swap(parseResult_, rhs.parseResult_);</div><div class="line"><a name="l02206"></a><span class="lineno"> 2206</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l02207"></a><span class="lineno"> 2207</span>  }</div><div class="line"><a name="l02208"></a><span class="lineno"> 2208</span> </div><div class="line"><a name="l02209"></a><span class="lineno"> 2209</span>  <span class="comment">// Allow Swap with ValueType.</span></div><div class="line"><a name="l02210"></a><span class="lineno"> 2210</span>  <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>  <span class="keyword">using</span> ValueType::Swap;</div><div class="line"><a name="l02212"></a><span class="lineno"> 2212</span> <span class="comment"></span></div><div class="line"><a name="l02213"></a><span class="lineno"> 2213</span> <span class="comment"> //! free-standing swap function helper</span></div><div class="line"><a name="l02214"></a><span class="lineno"> 2214</span> <span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l02215"></a><span class="lineno"> 2215</span> <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> <span class="comment"> \code</span></div><div class="line"><a name="l02217"></a><span class="lineno"> 2217</span> <span class="comment"> void swap(MyClass& a, MyClass& b) {</span></div><div class="line"><a name="l02218"></a><span class="lineno"> 2218</span> <span class="comment"> using std::swap;</span></div><div class="line"><a name="l02219"></a><span class="lineno"> 2219</span> <span class="comment"> swap(a.doc, b.doc);</span></div><div class="line"><a name="l02220"></a><span class="lineno"> 2220</span> <span class="comment"> // ...</span></div><div class="line"><a name="l02221"></a><span class="lineno"> 2221</span> <span class="comment"> }</span></div><div class="line"><a name="l02222"></a><span class="lineno"> 2222</span> <span class="comment"> \endcode</span></div><div class="line"><a name="l02223"></a><span class="lineno"> 2223</span> <span class="comment"> \see Swap()</span></div><div class="line"><a name="l02224"></a><span class="lineno"> 2224</span> <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>  <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>& a, <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>& b) RAPIDJSON_NOEXCEPT { a.Swap(b); }</div><div class="line"><a name="l02226"></a><span class="lineno"> 2226</span> <span class="comment"></span></div><div class="line"><a name="l02227"></a><span class="lineno"> 2227</span> <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> <span class="comment"></span><span class="comment"> /*! \tparam Generator A functor with <tt>bool f(Handler)</tt> prototype.</span></div><div class="line"><a name="l02229"></a><span class="lineno"> 2229</span> <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> <span class="comment"> \return The document itself for fluent API.</span></div><div class="line"><a name="l02231"></a><span class="lineno"> 2231</span> <span class="comment"> */</span></div><div class="line"><a name="l02232"></a><span class="lineno"> 2232</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> Generator></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>  <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>& <a class="code" href="classrapidjson_1_1_generic_document.html#a63e18887979da500ece6f0bd10d29b64">Populate</a>(Generator& g) {</div><div class="line"><a name="l02234"></a><span class="lineno"> 2234</span>  ClearStackOnExit scope(*<span class="keyword">this</span>);</div><div class="line"><a name="l02235"></a><span class="lineno"> 2235</span>  <span class="keywordflow">if</span> (g(*<span class="keyword">this</span>)) {</div><div class="line"><a name="l02236"></a><span class="lineno"> 2236</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>(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>  ValueType::operator=(*stack_.template Pop<ValueType>(1));<span class="comment">// Move value from stack to document</span></div><div class="line"><a name="l02238"></a><span class="lineno"> 2238</span>  }</div><div class="line"><a name="l02239"></a><span class="lineno"> 2239</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l02240"></a><span class="lineno"> 2240</span>  }</div><div class="line"><a name="l02241"></a><span class="lineno"> 2241</span> <span class="comment"></span></div><div class="line"><a name="l02242"></a><span class="lineno"> 2242</span> <span class="comment"> //!@name Parse from stream</span></div><div class="line"><a name="l02243"></a><span class="lineno"> 2243</span> <span class="comment"> //!@{</span></div><div class="line"><a name="l02244"></a><span class="lineno"> 2244</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l02245"></a><span class="lineno"> 2245</span> <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> <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> <span class="comment"> \tparam SourceEncoding Encoding of input stream</span></div><div class="line"><a name="l02248"></a><span class="lineno"> 2248</span> <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> <span class="comment"> \param is Input stream to be parsed.</span></div><div class="line"><a name="l02250"></a><span class="lineno"> 2250</span> <span class="comment"> \return The document itself for fluent API.</span></div><div class="line"><a name="l02251"></a><span class="lineno"> 2251</span> <span class="comment"> */</span></div><div class="line"><a name="l02252"></a><span class="lineno"> 2252</span>  <span class="keyword">template</span> <<span class="keywordtype">unsigned</span> parseFlags, <span class="keyword">typename</span> SourceEncoding, <span class="keyword">typename</span> InputStream></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>  <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>& <a class="code" href="classrapidjson_1_1_generic_document.html#a3ae97682cf04685c7db9d89ebc399b85">ParseStream</a>(InputStream& is) {</div><div class="line"><a name="l02254"></a><span class="lineno"> 2254</span>  <a class="code" href="classrapidjson_1_1_generic_reader.html">GenericReader<SourceEncoding, Encoding, StackAllocator></a> reader(</div><div class="line"><a name="l02255"></a><span class="lineno"> 2255</span>  stack_.HasAllocator() ? &stack_.GetAllocator() : 0);</div><div class="line"><a name="l02256"></a><span class="lineno"> 2256</span>  ClearStackOnExit scope(*<span class="keyword">this</span>);</div><div class="line"><a name="l02257"></a><span class="lineno"> 2257</span>  parseResult_ = reader.template Parse<parseFlags>(is, *<span class="keyword">this</span>);</div><div class="line"><a name="l02258"></a><span class="lineno"> 2258</span>  <span class="keywordflow">if</span> (parseResult_) {</div><div class="line"><a name="l02259"></a><span class="lineno"> 2259</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>(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>  ValueType::operator=(*stack_.template Pop<ValueType>(1));<span class="comment">// Move value from stack to document</span></div><div class="line"><a name="l02261"></a><span class="lineno"> 2261</span>  }</div><div class="line"><a name="l02262"></a><span class="lineno"> 2262</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l02263"></a><span class="lineno"> 2263</span>  }</div><div class="line"><a name="l02264"></a><span class="lineno"> 2264</span> <span class="comment"></span></div><div class="line"><a name="l02265"></a><span class="lineno"> 2265</span> <span class="comment"> //! Parse JSON text from an input stream</span></div><div class="line"><a name="l02266"></a><span class="lineno"> 2266</span> <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> <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> <span class="comment"> \param is Input stream to be parsed.</span></div><div class="line"><a name="l02269"></a><span class="lineno"> 2269</span> <span class="comment"> \return The document itself for fluent API.</span></div><div class="line"><a name="l02270"></a><span class="lineno"> 2270</span> <span class="comment"> */</span></div><div class="line"><a name="l02271"></a><span class="lineno"> 2271</span>  <span class="keyword">template</span> <<span class="keywordtype">unsigned</span> parseFlags, <span class="keyword">typename</span> InputStream></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>  <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>& <a class="code" href="classrapidjson_1_1_generic_document.html#ae4ee7d86b8c906c83dbe15e57eb6ac6a">ParseStream</a>(InputStream& is) {</div><div class="line"><a name="l02273"></a><span class="lineno"> 2273</span>  <span class="keywordflow">return</span> ParseStream<parseFlags, Encoding, InputStream>(is);</div><div class="line"><a name="l02274"></a><span class="lineno"> 2274</span>  }</div><div class="line"><a name="l02275"></a><span class="lineno"> 2275</span> <span class="comment"></span></div><div class="line"><a name="l02276"></a><span class="lineno"> 2276</span> <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> <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> <span class="comment"> \param is Input stream to be parsed.</span></div><div class="line"><a name="l02279"></a><span class="lineno"> 2279</span> <span class="comment"> \return The document itself for fluent API.</span></div><div class="line"><a name="l02280"></a><span class="lineno"> 2280</span> <span class="comment"> */</span></div><div class="line"><a name="l02281"></a><span class="lineno"> 2281</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> InputStream></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>  <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>& <a class="code" href="classrapidjson_1_1_generic_document.html#acf96a3c7fd61486d049c701b1fe5d414">ParseStream</a>(InputStream& is) {</div><div class="line"><a name="l02283"></a><span class="lineno"> 2283</span>  <span class="keywordflow">return</span> ParseStream<kParseDefaultFlags, Encoding, InputStream>(is);</div><div class="line"><a name="l02284"></a><span class="lineno"> 2284</span>  }<span class="comment"></span></div><div class="line"><a name="l02285"></a><span class="lineno"> 2285</span> <span class="comment"> //!@}</span></div><div class="line"><a name="l02286"></a><span class="lineno"> 2286</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l02287"></a><span class="lineno"> 2287</span> <span class="comment"> //!@name Parse in-place from mutable string</span></div><div class="line"><a name="l02288"></a><span class="lineno"> 2288</span> <span class="comment"> //!@{</span></div><div class="line"><a name="l02289"></a><span class="lineno"> 2289</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l02290"></a><span class="lineno"> 2290</span> <span class="comment"> //! Parse JSON text from a mutable string</span></div><div class="line"><a name="l02291"></a><span class="lineno"> 2291</span> <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> <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> <span class="comment"> \return The document itself for fluent API.</span></div><div class="line"><a name="l02294"></a><span class="lineno"> 2294</span> <span class="comment"> */</span></div><div class="line"><a name="l02295"></a><span class="lineno"> 2295</span>  <span class="keyword">template</span> <<span class="keywordtype">unsigned</span> parseFlags></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>  <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>& <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>  <a class="code" href="structrapidjson_1_1_generic_insitu_string_stream.html">GenericInsituStringStream<Encoding></a> s(str);</div><div class="line"><a name="l02298"></a><span class="lineno"> 2298</span>  <span class="keywordflow">return</span> ParseStream<parseFlags | kParseInsituFlag>(s);</div><div class="line"><a name="l02299"></a><span class="lineno"> 2299</span>  }</div><div class="line"><a name="l02300"></a><span class="lineno"> 2300</span> <span class="comment"></span></div><div class="line"><a name="l02301"></a><span class="lineno"> 2301</span> <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> <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> <span class="comment"> \return The document itself for fluent API.</span></div><div class="line"><a name="l02304"></a><span class="lineno"> 2304</span> <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>  <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>& <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>  <span class="keywordflow">return</span> ParseInsitu<kParseDefaultFlags>(str);</div><div class="line"><a name="l02307"></a><span class="lineno"> 2307</span>  }<span class="comment"></span></div><div class="line"><a name="l02308"></a><span class="lineno"> 2308</span> <span class="comment"> //!@}</span></div><div class="line"><a name="l02309"></a><span class="lineno"> 2309</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l02310"></a><span class="lineno"> 2310</span> <span class="comment"> //!@name Parse from read-only string</span></div><div class="line"><a name="l02311"></a><span class="lineno"> 2311</span> <span class="comment"> //!@{</span></div><div class="line"><a name="l02312"></a><span class="lineno"> 2312</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l02313"></a><span class="lineno"> 2313</span> <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> <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> <span class="comment"> \tparam SourceEncoding Transcoding from input Encoding</span></div><div class="line"><a name="l02316"></a><span class="lineno"> 2316</span> <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> <span class="comment"> */</span></div><div class="line"><a name="l02318"></a><span class="lineno"> 2318</span>  <span class="keyword">template</span> <<span class="keywordtype">unsigned</span> parseFlags, <span class="keyword">typename</span> SourceEncoding></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>  <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>& <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>  <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 & <a class="code" href="namespacerapidjson.html#a81379eb4e94a0386d71d15fda882ebc9a02748971d6ea0c5e22c69b8aa7f344ea">kParseInsituFlag</a>));</div><div class="line"><a name="l02321"></a><span class="lineno"> 2321</span>  <a class="code" href="structrapidjson_1_1_generic_string_stream.html">GenericStringStream<SourceEncoding></a> s(str);</div><div class="line"><a name="l02322"></a><span class="lineno"> 2322</span>  <span class="keywordflow">return</span> ParseStream<parseFlags, SourceEncoding>(s);</div><div class="line"><a name="l02323"></a><span class="lineno"> 2323</span>  }</div><div class="line"><a name="l02324"></a><span class="lineno"> 2324</span> <span class="comment"></span></div><div class="line"><a name="l02325"></a><span class="lineno"> 2325</span> <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> <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> <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> <span class="comment"> */</span></div><div class="line"><a name="l02329"></a><span class="lineno"> 2329</span>  <span class="keyword">template</span> <<span class="keywordtype">unsigned</span> parseFlags></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>  <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>& <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>  <span class="keywordflow">return</span> Parse<parseFlags, Encoding>(str);</div><div class="line"><a name="l02332"></a><span class="lineno"> 2332</span>  }</div><div class="line"><a name="l02333"></a><span class="lineno"> 2333</span> <span class="comment"></span></div><div class="line"><a name="l02334"></a><span class="lineno"> 2334</span> <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> <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> <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>  <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>& <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>  <span class="keywordflow">return</span> Parse<kParseDefaultFlags>(str);</div><div class="line"><a name="l02339"></a><span class="lineno"> 2339</span>  }</div><div class="line"><a name="l02340"></a><span class="lineno"> 2340</span> </div><div class="line"><a name="l02341"></a><span class="lineno"> 2341</span>  <span class="keyword">template</span> <<span class="keywordtype">unsigned</span> parseFlags, <span class="keyword">typename</span> SourceEncoding></div><div class="line"><a name="l02342"></a><span class="lineno"> 2342</span>  <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>& 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>  <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 & <a class="code" href="namespacerapidjson.html#a81379eb4e94a0386d71d15fda882ebc9a02748971d6ea0c5e22c69b8aa7f344ea">kParseInsituFlag</a>));</div><div class="line"><a name="l02344"></a><span class="lineno"> 2344</span>  <a class="code" href="structrapidjson_1_1_memory_stream.html">MemoryStream</a> ms(reinterpret_cast<const char*>(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>  <a class="code" href="classrapidjson_1_1_encoded_input_stream.html">EncodedInputStream<SourceEncoding, MemoryStream></a> is(ms);</div><div class="line"><a name="l02346"></a><span class="lineno"> 2346</span>  ParseStream<parseFlags, SourceEncoding>(is);</div><div class="line"><a name="l02347"></a><span class="lineno"> 2347</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l02348"></a><span class="lineno"> 2348</span>  }</div><div class="line"><a name="l02349"></a><span class="lineno"> 2349</span> </div><div class="line"><a name="l02350"></a><span class="lineno"> 2350</span>  <span class="keyword">template</span> <<span class="keywordtype">unsigned</span> parseFlags></div><div class="line"><a name="l02351"></a><span class="lineno"> 2351</span>  <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>& 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>  <span class="keywordflow">return</span> Parse<parseFlags, Encoding>(str, length);</div><div class="line"><a name="l02353"></a><span class="lineno"> 2353</span>  }</div><div class="line"><a name="l02354"></a><span class="lineno"> 2354</span>  </div><div class="line"><a name="l02355"></a><span class="lineno"> 2355</span>  <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>& 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>  <span class="keywordflow">return</span> Parse<kParseDefaultFlags>(str, length);</div><div class="line"><a name="l02357"></a><span class="lineno"> 2357</span>  }</div><div class="line"><a name="l02358"></a><span class="lineno"> 2358</span> </div><div class="line"><a name="l02359"></a><span class="lineno"> 2359</span> <span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l02360"></a><span class="lineno"> 2360</span>  <span class="keyword">template</span> <<span class="keywordtype">unsigned</span> parseFlags, <span class="keyword">typename</span> SourceEncoding></div><div class="line"><a name="l02361"></a><span class="lineno"> 2361</span>  <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>& Parse(<span class="keyword">const</span> std::basic_string<typename SourceEncoding::Ch>& str) {</div><div class="line"><a name="l02362"></a><span class="lineno"> 2362</span>  <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>  <span class="keywordflow">return</span> Parse<parseFlags, SourceEncoding>(str.c_str());</div><div class="line"><a name="l02364"></a><span class="lineno"> 2364</span>  }</div><div class="line"><a name="l02365"></a><span class="lineno"> 2365</span> </div><div class="line"><a name="l02366"></a><span class="lineno"> 2366</span>  <span class="keyword">template</span> <<span class="keywordtype">unsigned</span> parseFlags></div><div class="line"><a name="l02367"></a><span class="lineno"> 2367</span>  <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>& Parse(<span class="keyword">const</span> std::basic_string<Ch>& str) {</div><div class="line"><a name="l02368"></a><span class="lineno"> 2368</span>  <span class="keywordflow">return</span> Parse<parseFlags, Encoding>(str.c_str());</div><div class="line"><a name="l02369"></a><span class="lineno"> 2369</span>  }</div><div class="line"><a name="l02370"></a><span class="lineno"> 2370</span> </div><div class="line"><a name="l02371"></a><span class="lineno"> 2371</span>  <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>& Parse(<span class="keyword">const</span> std::basic_string<Ch>& str) {</div><div class="line"><a name="l02372"></a><span class="lineno"> 2372</span>  <span class="keywordflow">return</span> Parse<kParseDefaultFlags>(str);</div><div class="line"><a name="l02373"></a><span class="lineno"> 2373</span>  }</div><div class="line"><a name="l02374"></a><span class="lineno"> 2374</span> <span class="preprocessor">#endif // RAPIDJSON_HAS_STDSTRING </span></div><div class="line"><a name="l02375"></a><span class="lineno"> 2375</span> <span class="comment"></span></div><div class="line"><a name="l02376"></a><span class="lineno"> 2376</span> <span class="comment"> //!@}</span></div><div class="line"><a name="l02377"></a><span class="lineno"> 2377</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l02378"></a><span class="lineno"> 2378</span> <span class="comment"> //!@name Handling parse errors</span></div><div class="line"><a name="l02379"></a><span class="lineno"> 2379</span> <span class="comment"> //!@{</span></div><div class="line"><a name="l02380"></a><span class="lineno"> 2380</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l02381"></a><span class="lineno"> 2381</span> <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> <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> <span class="comment"></span></div><div class="line"><a name="l02384"></a><span class="lineno"> 2384</span> <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> <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> <span class="comment"></span></div><div class="line"><a name="l02387"></a><span class="lineno"> 2387</span> <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> <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> <span class="comment"></span></div><div class="line"><a name="l02390"></a><span class="lineno"> 2390</span> <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> <span class="comment"></span><span class="preprocessor">#ifndef __clang // -Wdocumentation</span></div><div class="line"><a name="l02392"></a><span class="lineno"> 2392</span> <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> <span class="comment"></span></div><div class="line"><a name="l02394"></a><span class="lineno"> 2394</span> <span class="comment"> \code</span></div><div class="line"><a name="l02395"></a><span class="lineno"> 2395</span> <span class="comment"> Document doc;</span></div><div class="line"><a name="l02396"></a><span class="lineno"> 2396</span> <span class="comment"> ParseResult ok = doc.Parse(json);</span></div><div class="line"><a name="l02397"></a><span class="lineno"> 2397</span> <span class="comment"> if (!ok)</span></div><div class="line"><a name="l02398"></a><span class="lineno"> 2398</span> <span class="comment"> printf( "JSON parse error: %s (%u)\n", GetParseError_En(ok.Code()), ok.Offset());</span></div><div class="line"><a name="l02399"></a><span class="lineno"> 2399</span> <span class="comment"> \endcode</span></div><div class="line"><a name="l02400"></a><span class="lineno"> 2400</span> <span class="comment"> */</span></div><div class="line"><a name="l02401"></a><span class="lineno"> 2401</span> <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>  <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> <span class="comment"> //!@}</span></div><div class="line"><a name="l02404"></a><span class="lineno"> 2404</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l02405"></a><span class="lineno"> 2405</span> <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> <span class="comment"></span> Allocator& <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>  <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>  <span class="keywordflow">return</span> *allocator_;</div><div class="line"><a name="l02409"></a><span class="lineno"> 2409</span>  }</div><div class="line"><a name="l02410"></a><span class="lineno"> 2410</span> <span class="comment"></span></div><div class="line"><a name="l02411"></a><span class="lineno"> 2411</span> <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> <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> </div><div class="line"><a name="l02414"></a><span class="lineno"> 2414</span> <span class="keyword">private</span>:</div><div class="line"><a name="l02415"></a><span class="lineno"> 2415</span>  <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>  <span class="keyword">struct </span>ClearStackOnExit {</div><div class="line"><a name="l02417"></a><span class="lineno"> 2417</span>  <span class="keyword">explicit</span> ClearStackOnExit(<a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>& d) : d_(d) {}</div><div class="line"><a name="l02418"></a><span class="lineno"> 2418</span>  ~ClearStackOnExit() { d_.ClearStack(); }</div><div class="line"><a name="l02419"></a><span class="lineno"> 2419</span>  <span class="keyword">private</span>:</div><div class="line"><a name="l02420"></a><span class="lineno"> 2420</span>  ClearStackOnExit(<span class="keyword">const</span> ClearStackOnExit&);</div><div class="line"><a name="l02421"></a><span class="lineno"> 2421</span>  ClearStackOnExit& operator=(<span class="keyword">const</span> ClearStackOnExit&);</div><div class="line"><a name="l02422"></a><span class="lineno"> 2422</span>  <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>& d_;</div><div class="line"><a name="l02423"></a><span class="lineno"> 2423</span>  };</div><div class="line"><a name="l02424"></a><span class="lineno"> 2424</span> </div><div class="line"><a name="l02425"></a><span class="lineno"> 2425</span>  <span class="comment">// callers of the following private Handler functions</span></div><div class="line"><a name="l02426"></a><span class="lineno"> 2426</span>  <span class="comment">// template <typename,typename,typename> friend class GenericReader; // for parsing</span></div><div class="line"><a name="l02427"></a><span class="lineno"> 2427</span>  <span class="keyword">template</span> <<span class="keyword">typename</span>, <span class="keyword">typename</span>> <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> </div><div class="line"><a name="l02429"></a><span class="lineno"> 2429</span> <span class="keyword">public</span>:</div><div class="line"><a name="l02430"></a><span class="lineno"> 2430</span>  <span class="comment">// Implementation of Handler</span></div><div class="line"><a name="l02431"></a><span class="lineno"> 2431</span>  <span class="keywordtype">bool</span> Null() { <span class="keyword">new</span> (stack_.template Push<ValueType>()) ValueType(); <span class="keywordflow">return</span> <span class="keyword">true</span>; }</div><div class="line"><a name="l02432"></a><span class="lineno"> 2432</span>  <span class="keywordtype">bool</span> Bool(<span class="keywordtype">bool</span> b) { <span class="keyword">new</span> (stack_.template Push<ValueType>()) 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>  <span class="keywordtype">bool</span> Int(<span class="keywordtype">int</span> i) { <span class="keyword">new</span> (stack_.template Push<ValueType>()) 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>  <span class="keywordtype">bool</span> Uint(<span class="keywordtype">unsigned</span> i) { <span class="keyword">new</span> (stack_.template Push<ValueType>()) 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>  <span class="keywordtype">bool</span> Int64(int64_t i) { <span class="keyword">new</span> (stack_.template Push<ValueType>()) 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>  <span class="keywordtype">bool</span> Uint64(uint64_t i) { <span class="keyword">new</span> (stack_.template Push<ValueType>()) 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>  <span class="keywordtype">bool</span> Double(<span class="keywordtype">double</span> d) { <span class="keyword">new</span> (stack_.template Push<ValueType>()) 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> </div><div class="line"><a name="l02439"></a><span class="lineno"> 2439</span>  <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>  <span class="keywordflow">if</span> (copy) </div><div class="line"><a name="l02441"></a><span class="lineno"> 2441</span>  <span class="keyword">new</span> (stack_.template Push<ValueType>()) ValueType(str, length, GetAllocator());</div><div class="line"><a name="l02442"></a><span class="lineno"> 2442</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l02443"></a><span class="lineno"> 2443</span>  <span class="keyword">new</span> (stack_.template Push<ValueType>()) ValueType(str, length);</div><div class="line"><a name="l02444"></a><span class="lineno"> 2444</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l02445"></a><span class="lineno"> 2445</span>  }</div><div class="line"><a name="l02446"></a><span class="lineno"> 2446</span> </div><div class="line"><a name="l02447"></a><span class="lineno"> 2447</span>  <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>  <span class="keywordflow">if</span> (copy) </div><div class="line"><a name="l02449"></a><span class="lineno"> 2449</span>  <span class="keyword">new</span> (stack_.template Push<ValueType>()) ValueType(str, length, GetAllocator());</div><div class="line"><a name="l02450"></a><span class="lineno"> 2450</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l02451"></a><span class="lineno"> 2451</span>  <span class="keyword">new</span> (stack_.template Push<ValueType>()) ValueType(str, length);</div><div class="line"><a name="l02452"></a><span class="lineno"> 2452</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l02453"></a><span class="lineno"> 2453</span>  }</div><div class="line"><a name="l02454"></a><span class="lineno"> 2454</span> </div><div class="line"><a name="l02455"></a><span class="lineno"> 2455</span>  <span class="keywordtype">bool</span> StartObject() { <span class="keyword">new</span> (stack_.template Push<ValueType>()) 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>  </div><div class="line"><a name="l02457"></a><span class="lineno"> 2457</span>  <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> </div><div class="line"><a name="l02459"></a><span class="lineno"> 2459</span>  <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>  <span class="keyword">typename</span> <a class="code" href="structrapidjson_1_1_generic_member.html">ValueType::Member</a>* members = stack_.template Pop<typename ValueType::Member>(memberCount);</div><div class="line"><a name="l02461"></a><span class="lineno"> 2461</span>  stack_.template Top<ValueType>()->SetObjectRaw(members, memberCount, GetAllocator());</div><div class="line"><a name="l02462"></a><span class="lineno"> 2462</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l02463"></a><span class="lineno"> 2463</span>  }</div><div class="line"><a name="l02464"></a><span class="lineno"> 2464</span> </div><div class="line"><a name="l02465"></a><span class="lineno"> 2465</span>  <span class="keywordtype">bool</span> StartArray() { <span class="keyword">new</span> (stack_.template Push<ValueType>()) 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>  </div><div class="line"><a name="l02467"></a><span class="lineno"> 2467</span>  <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>  ValueType* elements = stack_.template Pop<ValueType>(elementCount);</div><div class="line"><a name="l02469"></a><span class="lineno"> 2469</span>  stack_.template Top<ValueType>()->SetArrayRaw(elements, elementCount, GetAllocator());</div><div class="line"><a name="l02470"></a><span class="lineno"> 2470</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l02471"></a><span class="lineno"> 2471</span>  }</div><div class="line"><a name="l02472"></a><span class="lineno"> 2472</span> </div><div class="line"><a name="l02473"></a><span class="lineno"> 2473</span> <span class="keyword">private</span>:<span class="comment"></span></div><div class="line"><a name="l02474"></a><span class="lineno"> 2474</span> <span class="comment"> //! Prohibit copying</span></div><div class="line"><a name="l02475"></a><span class="lineno"> 2475</span> <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>&);<span class="comment"></span></div><div class="line"><a name="l02476"></a><span class="lineno"> 2476</span> <span class="comment"> //! Prohibit assignment</span></div><div class="line"><a name="l02477"></a><span class="lineno"> 2477</span> <span class="comment"></span> <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>& operator=(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>&);</div><div class="line"><a name="l02478"></a><span class="lineno"> 2478</span> </div><div class="line"><a name="l02479"></a><span class="lineno"> 2479</span>  <span class="keywordtype">void</span> ClearStack() {</div><div class="line"><a name="l02480"></a><span class="lineno"> 2480</span>  <span class="keywordflow">if</span> (Allocator::kNeedFree)</div><div class="line"><a name="l02481"></a><span class="lineno"> 2481</span>  <span class="keywordflow">while</span> (stack_.GetSize() > 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>  (stack_.template Pop<ValueType>(1))->~ValueType();</div><div class="line"><a name="l02483"></a><span class="lineno"> 2483</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l02484"></a><span class="lineno"> 2484</span>  stack_.Clear();</div><div class="line"><a name="l02485"></a><span class="lineno"> 2485</span>  stack_.ShrinkToFit();</div><div class="line"><a name="l02486"></a><span class="lineno"> 2486</span>  }</div><div class="line"><a name="l02487"></a><span class="lineno"> 2487</span> </div><div class="line"><a name="l02488"></a><span class="lineno"> 2488</span>  <span class="keywordtype">void</span> Destroy() {</div><div class="line"><a name="l02489"></a><span class="lineno"> 2489</span>  <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>  }</div><div class="line"><a name="l02491"></a><span class="lineno"> 2491</span> </div><div class="line"><a name="l02492"></a><span class="lineno"> 2492</span>  <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>  Allocator* allocator_;</div><div class="line"><a name="l02494"></a><span class="lineno"> 2494</span>  Allocator* ownAllocator_;</div><div class="line"><a name="l02495"></a><span class="lineno"> 2495</span>  internal::Stack<StackAllocator> stack_;</div><div class="line"><a name="l02496"></a><span class="lineno"> 2496</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> parseResult_;</div><div class="line"><a name="l02497"></a><span class="lineno"> 2497</span> };</div><div class="line"><a name="l02498"></a><span class="lineno"> 2498</span> <span class="comment"></span></div><div class="line"><a name="l02499"></a><span class="lineno"> 2499</span> <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> <span class="comment"></span><span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument<UTF8<></a> > <a class="code" href="namespacerapidjson.html#ace11b5b575baf1cccd5ba5f8586dcdc8">Document</a>;</div><div class="line"><a name="l02501"></a><span class="lineno"> 2501</span> <span class="comment"></span></div><div class="line"><a name="l02502"></a><span class="lineno"> 2502</span> <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> <span class="comment"></span><span class="comment">/*!</span></div><div class="line"><a name="l02504"></a><span class="lineno"> 2504</span> <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> <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> <span class="comment">*/</span></div><div class="line"><a name="l02507"></a><span class="lineno"> 2507</span> <span class="keyword">template</span> <<span class="keywordtype">bool</span> Const, <span class="keyword">typename</span> ValueT></div><div class="line"><a name="l02508"></a><span class="lineno"> 2508</span> <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> <span class="keyword">public</span>:</div><div class="line"><a name="l02510"></a><span class="lineno"> 2510</span>  <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_array.html">GenericArray<true, ValueT></a> ConstArray;</div><div class="line"><a name="l02511"></a><span class="lineno"> 2511</span>  <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_array.html">GenericArray<false, ValueT></a> Array;</div><div class="line"><a name="l02512"></a><span class="lineno"> 2512</span>  <span class="keyword">typedef</span> ValueT PlainType;</div><div class="line"><a name="l02513"></a><span class="lineno"> 2513</span>  <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">internal::MaybeAddConst<Const,PlainType>::Type</a> ValueType;</div><div class="line"><a name="l02514"></a><span class="lineno"> 2514</span>  <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>  <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>  <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>  <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> </div><div class="line"><a name="l02519"></a><span class="lineno"> 2519</span>  <span class="keyword">template</span> <<span class="keyword">typename</span>, <span class="keyword">typename</span>></div><div class="line"><a name="l02520"></a><span class="lineno"> 2520</span>  <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> </div><div class="line"><a name="l02522"></a><span class="lineno"> 2522</span>  <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>& rhs) : value_(rhs.value_) {}</div><div class="line"><a name="l02523"></a><span class="lineno"> 2523</span>  <a class="code" href="classrapidjson_1_1_generic_array.html">GenericArray</a>& operator=(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_array.html">GenericArray</a>& 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>  ~<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> </div><div class="line"><a name="l02526"></a><span class="lineno"> 2526</span>  <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>  <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>  <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>  <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>  ValueType& 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>  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>  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>  <a class="code" href="classrapidjson_1_1_generic_array.html">GenericArray</a> Reserve(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> newCapacity, AllocatorType &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>  <a class="code" href="classrapidjson_1_1_generic_array.html">GenericArray</a> PushBack(ValueType& value, AllocatorType& 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> <span class="preprocessor">#if RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l02536"></a><span class="lineno"> 2536</span>  <a class="code" href="classrapidjson_1_1_generic_array.html">GenericArray</a> PushBack(ValueType&& value, AllocatorType& 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> <span class="preprocessor">#endif // RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l02538"></a><span class="lineno"> 2538</span>  <a class="code" href="classrapidjson_1_1_generic_array.html">GenericArray</a> PushBack(StringRefType value, AllocatorType& 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>  <span class="keyword">template</span> <<span class="keyword">typename</span> T> RAPIDJSON_DISABLEIF_RETURN((internal::OrExpr<internal::IsPointer<T>, internal::IsGenericValue<T> >), (<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_array.html">GenericArray</a>&)) PushBack(T value, AllocatorType& 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>  <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>  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>  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> </div><div class="line"><a name="l02544"></a><span class="lineno"> 2544</span> <span class="preprocessor">#if RAPIDJSON_HAS_CXX11_RANGE_FOR</span></div><div class="line"><a name="l02545"></a><span class="lineno"> 2545</span>  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>  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> <span class="preprocessor">#endif</span></div><div class="line"><a name="l02548"></a><span class="lineno"> 2548</span> </div><div class="line"><a name="l02549"></a><span class="lineno"> 2549</span> <span class="keyword">private</span>:</div><div class="line"><a name="l02550"></a><span class="lineno"> 2550</span>  <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>  <a class="code" href="classrapidjson_1_1_generic_array.html">GenericArray</a>(ValueType& value) : value_(value) {}</div><div class="line"><a name="l02552"></a><span class="lineno"> 2552</span>  ValueType& value_;</div><div class="line"><a name="l02553"></a><span class="lineno"> 2553</span> };</div><div class="line"><a name="l02554"></a><span class="lineno"> 2554</span> <span class="comment"></span></div><div class="line"><a name="l02555"></a><span class="lineno"> 2555</span> <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> <span class="comment"></span><span class="comment">/*!</span></div><div class="line"><a name="l02557"></a><span class="lineno"> 2557</span> <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> <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> <span class="comment">*/</span></div><div class="line"><a name="l02560"></a><span class="lineno"> 2560</span> <span class="keyword">template</span> <<span class="keywordtype">bool</span> Const, <span class="keyword">typename</span> ValueT></div><div class="line"><a name="l02561"></a><span class="lineno"> 2561</span> <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> <span class="keyword">public</span>:</div><div class="line"><a name="l02563"></a><span class="lineno"> 2563</span>  <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject<true, ValueT></a> ConstObject;</div><div class="line"><a name="l02564"></a><span class="lineno"> 2564</span>  <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject<false, ValueT></a> Object;</div><div class="line"><a name="l02565"></a><span class="lineno"> 2565</span>  <span class="keyword">typedef</span> ValueT PlainType;</div><div class="line"><a name="l02566"></a><span class="lineno"> 2566</span>  <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">internal::MaybeAddConst<Const,PlainType>::Type</a> ValueType;</div><div class="line"><a name="l02567"></a><span class="lineno"> 2567</span>  <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">GenericMemberIterator<Const, typename ValueT::EncodingType, typename ValueT::AllocatorType></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>  <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">GenericMemberIterator<true, typename ValueT::EncodingType, typename ValueT::AllocatorType></a> ConstMemberIterator;</div><div class="line"><a name="l02569"></a><span class="lineno"> 2569</span>  <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>  <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>  <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>  <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> </div><div class="line"><a name="l02574"></a><span class="lineno"> 2574</span>  <span class="keyword">template</span> <<span class="keyword">typename</span>, <span class="keyword">typename</span>></div><div class="line"><a name="l02575"></a><span class="lineno"> 2575</span>  <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> </div><div class="line"><a name="l02577"></a><span class="lineno"> 2577</span>  <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>& rhs) : value_(rhs.value_) {}</div><div class="line"><a name="l02578"></a><span class="lineno"> 2578</span>  <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject</a>& operator=(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject</a>& 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>  ~<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> </div><div class="line"><a name="l02581"></a><span class="lineno"> 2581</span>  <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>  <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>  <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>  <span class="keyword">template</span> <<span class="keyword">typename</span> T> ValueType& 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>  <span class="keyword">template</span> <<span class="keyword">typename</span> SourceAllocator> ValueType& operator[](<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue<EncodingType, SourceAllocator></a>& 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> <span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l02587"></a><span class="lineno"> 2587</span>  ValueType& operator[](<span class="keyword">const</span> std::basic_string<Ch>& 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> <span class="preprocessor">#endif</span></div><div class="line"><a name="l02589"></a><span class="lineno"> 2589</span>  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>  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>  <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject</a> MemberReserve(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> newCapacity, AllocatorType &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>  <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> <span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l02594"></a><span class="lineno"> 2594</span>  <span class="keywordtype">bool</span> HasMember(<span class="keyword">const</span> std::basic_string<Ch>& 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> <span class="preprocessor">#endif</span></div><div class="line"><a name="l02596"></a><span class="lineno"> 2596</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> SourceAllocator> <span class="keywordtype">bool</span> HasMember(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue<EncodingType, SourceAllocator></a>& 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>  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>  <span class="keyword">template</span> <<span class="keyword">typename</span> SourceAllocator> MemberIterator FindMember(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue<EncodingType, SourceAllocator></a>& 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> <span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l02600"></a><span class="lineno"> 2600</span>  MemberIterator FindMember(<span class="keyword">const</span> std::basic_string<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> <span class="preprocessor">#endif</span></div><div class="line"><a name="l02602"></a><span class="lineno"> 2602</span>  <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject</a> AddMember(ValueType& name, ValueType& value, AllocatorType& 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>  <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject</a> AddMember(ValueType& name, StringRefType value, AllocatorType& 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> <span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l02605"></a><span class="lineno"> 2605</span>  <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject</a> AddMember(ValueType& name, std::basic_string<Ch>& value, AllocatorType& 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> <span class="preprocessor">#endif</span></div><div class="line"><a name="l02607"></a><span class="lineno"> 2607</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T> RAPIDJSON_DISABLEIF_RETURN((internal::OrExpr<internal::IsPointer<T>, internal::IsGenericValue<T> >), (ValueType&)) AddMember(ValueType& name, T value, AllocatorType& 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> <span class="preprocessor">#if RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l02609"></a><span class="lineno"> 2609</span>  <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject</a> AddMember(ValueType&& name, ValueType&& value, AllocatorType& 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>  <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject</a> AddMember(ValueType&& name, ValueType& value, AllocatorType& 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>  <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject</a> AddMember(ValueType& name, ValueType&& value, AllocatorType& 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>  <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject</a> AddMember(StringRefType name, ValueType&& value, AllocatorType& 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> <span class="preprocessor">#endif // RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l02614"></a><span class="lineno"> 2614</span>  <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject</a> AddMember(StringRefType name, ValueType& value, AllocatorType& 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>  <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject</a> AddMember(StringRefType name, StringRefType value, AllocatorType& 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>  <span class="keyword">template</span> <<span class="keyword">typename</span> T> RAPIDJSON_DISABLEIF_RETURN((internal::OrExpr<internal::IsPointer<T>, internal::IsGenericValue<T> >), (<a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject</a>)) AddMember(StringRefType name, T value, AllocatorType& 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>  <span class="keywordtype">void</span> RemoveAllMembers() { value_.RemoveAllMembers(); }</div><div class="line"><a name="l02618"></a><span class="lineno"> 2618</span>  <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> <span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l02620"></a><span class="lineno"> 2620</span>  <span class="keywordtype">bool</span> RemoveMember(<span class="keyword">const</span> std::basic_string<Ch>& 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> <span class="preprocessor">#endif</span></div><div class="line"><a name="l02622"></a><span class="lineno"> 2622</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> SourceAllocator> <span class="keywordtype">bool</span> RemoveMember(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue<EncodingType, SourceAllocator></a>& 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>  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>  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>  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>  <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> <span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l02628"></a><span class="lineno"> 2628</span>  <span class="keywordtype">bool</span> EraseMember(<span class="keyword">const</span> std::basic_string<Ch>& 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> <span class="preprocessor">#endif</span></div><div class="line"><a name="l02630"></a><span class="lineno"> 2630</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> SourceAllocator> <span class="keywordtype">bool</span> EraseMember(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue<EncodingType, SourceAllocator></a>& 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> </div><div class="line"><a name="l02632"></a><span class="lineno"> 2632</span> <span class="preprocessor">#if RAPIDJSON_HAS_CXX11_RANGE_FOR</span></div><div class="line"><a name="l02633"></a><span class="lineno"> 2633</span>  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>  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> <span class="preprocessor">#endif</span></div><div class="line"><a name="l02636"></a><span class="lineno"> 2636</span> </div><div class="line"><a name="l02637"></a><span class="lineno"> 2637</span> <span class="keyword">private</span>:</div><div class="line"><a name="l02638"></a><span class="lineno"> 2638</span>  <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>  <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject</a>(ValueType& value) : value_(value) {}</div><div class="line"><a name="l02640"></a><span class="lineno"> 2640</span>  ValueType& value_;</div><div class="line"><a name="l02641"></a><span class="lineno"> 2641</span> };</div><div class="line"><a name="l02642"></a><span class="lineno"> 2642</span> </div><div class="line"><a name="l02643"></a><span class="lineno"> 2643</span> RAPIDJSON_NAMESPACE_END</div><div class="line"><a name="l02644"></a><span class="lineno"> 2644</span> RAPIDJSON_DIAG_POP</div><div class="line"><a name="l02645"></a><span class="lineno"> 2645</span> </div><div class="line"><a name="l02646"></a><span class="lineno"> 2646</span> <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< Encoding, Allocator > 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 & 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< Encoding, SourceAllocator > &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 & SetString(StringRefType s, Allocator &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< true, Encoding, Allocator > 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 &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< UTF8<> > 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< Ch > &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 & 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< Encoding, SourceAllocator > &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 & SetString(StringRefType s, Allocator &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< true, Encoding, Allocator > 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 &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< UTF8<> > 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< Ch > &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 & ParseStream(InputStream &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 & SetString(const std::basic_string< Ch > &s, Allocator &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 & ParseStream(InputStream &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 & SetString(const std::basic_string< Ch > &s, Allocator &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< Ch > &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 & 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< Ch > 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< Encoding, SourceAllocator > &rhs, Allocator &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 & operator=(GenericValue &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< Ch > &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 & 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< Ch > 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< Encoding, SourceAllocator > &rhs, Allocator &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 & operator=(GenericValue &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< false, Encoding, Allocator > 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< Encoding, SourceAllocator > &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< false, Encoding, Allocator > 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< Encoding, SourceAllocator > &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 &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 &lhs, const GenericValue &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 &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 &lhs, const GenericValue &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< CharType > StringRef(const std::basic_string< CharType > &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 & 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 & Reserve(SizeType newCapacity, Allocator &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 & 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< CharType > StringRef(const std::basic_string< CharType > &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 & 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 & Reserve(SizeType newCapacity, Allocator &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 & 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 &a, GenericValue &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 & AddMember(StringRefType name, StringRefType value, Allocator &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 & AddMember(GenericValue &name, std::basic_string< Ch > &value, Allocator &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 & operator[](const std::basic_string< Ch > &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 & operator[](const GenericValue< Encoding, SourceAllocator > &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 & SetString(const Ch *s, SizeType length, Allocator &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 & 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 & 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< Ch > &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 & AddMember(GenericValue &name, GenericValue &value, Allocator &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 &a, GenericValue &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 & AddMember(StringRefType name, StringRefType value, Allocator &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 & AddMember(GenericValue &name, std::basic_string< Ch > &value, Allocator &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 & operator[](const std::basic_string< Ch > &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 & operator[](const GenericValue< Encoding, SourceAllocator > &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 & SetString(const Ch *s, SizeType length, Allocator &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 & 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 & 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< Ch > &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 & AddMember(GenericValue &name, GenericValue &value, Allocator &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 & ParseStream(InputStream &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< Encoding, SourceAllocator > &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 & 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 &lhs, const GenericValue &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 & 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 & PushBack(GenericValue &value, Allocator &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 & 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 & Swap(GenericValue &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(&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< Ch > &s, Allocator &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 & ParseStream(InputStream &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< Encoding, SourceAllocator > &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 & 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 &lhs, const GenericValue &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 & 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 & PushBack(GenericValue &value, Allocator &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 & 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 & Swap(GenericValue &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(&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< Ch > &s, Allocator &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< false, Encoding, Allocator >::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< Encoding, Allocator > 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 &a, GenericDocument &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< Encoding, Allocator > 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< false, Encoding, Allocator >::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< Encoding, Allocator > 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 &a, GenericDocument &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< Encoding, Allocator > 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 & 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< Encoding, Allocator > 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 & MemberReserve(SizeType newCapacity, Allocator &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 & ParseStream(InputStream &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 & 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 & 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 &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 & 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< UTF8<> > 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 & Swap(GenericDocument &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 & 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< Encoding, Allocator > 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 & MemberReserve(SizeType newCapacity, Allocator &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 & ParseStream(InputStream &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 & 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 & 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 &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 & 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< UTF8<> > 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 & Swap(GenericDocument &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 & Populate(Generator &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 & 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 & Populate(Generator &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 & 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 &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 & CopyFrom(const GenericValue< Encoding, SourceAllocator > &rhs, Allocator &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 & 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 & SetString(const Ch *s, Allocator &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 &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< true, Encoding, Allocator >::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 & AddMember(GenericValue &name, StringRefType value, Allocator &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< Encoding, Allocator > 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 & PushBack(StringRefType value, Allocator &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 & AddMember(StringRefType name, GenericValue &value, Allocator &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 &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 & CopyFrom(const GenericValue< Encoding, SourceAllocator > &rhs, Allocator &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 & 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 & SetString(const Ch *s, Allocator &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 &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< true, Encoding, Allocator >::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 & AddMember(GenericValue &name, StringRefType value, Allocator &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< Encoding, Allocator > 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 & PushBack(StringRefType value, Allocator &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 & AddMember(StringRefType name, GenericValue &value, Allocator &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 &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< Encoding, SourceAllocator > &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 & 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 &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< Encoding, SourceAllocator > &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 & 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> <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> <span class="comment">// </span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <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> <span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">// Licensed under the MIT License (the "License"); you may not use this file except</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <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> <span class="comment">//</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">// http://opensource.org/licenses/MIT</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">//</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <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> <span class="comment">// under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR </span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <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> <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> </div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor">#ifndef RAPIDJSON_FWD_H_</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#define RAPIDJSON_FWD_H_</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> </div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#include "<a class="code" href="rapidjson_8h.html">rapidjson.h</a>"</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> </div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> RAPIDJSON_NAMESPACE_BEGIN</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> </div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="comment">// encodings.h</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> </div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="keyword">template</span><<span class="keyword">typename</span> CharType> <span class="keyword">struct </span>UTF8;</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="keyword">template</span><<span class="keyword">typename</span> CharType> <span class="keyword">struct </span>UTF16;</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="keyword">template</span><<span class="keyword">typename</span> CharType> <span class="keyword">struct </span>UTF16BE;</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="keyword">template</span><<span class="keyword">typename</span> CharType> <span class="keyword">struct </span>UTF16LE;</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="keyword">template</span><<span class="keyword">typename</span> CharType> <span class="keyword">struct </span>UTF32;</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="keyword">template</span><<span class="keyword">typename</span> CharType> <span class="keyword">struct </span>UTF32BE;</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="keyword">template</span><<span class="keyword">typename</span> CharType> <span class="keyword">struct </span>UTF32LE;</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="keyword">template</span><<span class="keyword">typename</span> CharType> <span class="keyword">struct </span>ASCII;</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="keyword">template</span><<span class="keyword">typename</span> CharType> <span class="keyword">struct </span>AutoUTF;</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> </div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="keyword">template</span><<span class="keyword">typename</span> SourceEncoding, <span class="keyword">typename</span> TargetEncoding></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="keyword">struct </span>Transcoder;</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span> </div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="comment">// allocators.h</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="keyword">class </span>CrtAllocator;</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span> </div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="keyword">template</span> <<span class="keyword">typename</span> BaseAllocator></div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="keyword">class </span>MemoryPoolAllocator;</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span> </div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="comment">// stream.h</span></div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span> </div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="keyword">template</span> <<span class="keyword">typename</span> Encoding></div><div class="line"><a name="l00047"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#a021f77051e9f85188fc2f71ff5a15ebc"> 47</a></span> <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> </div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="keyword">typedef</span> <a class="code" href="structrapidjson_1_1_generic_string_stream.html">GenericStringStream<UTF8<char></a> > <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> </div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="keyword">template</span> <<span class="keyword">typename</span> Encoding></div><div class="line"><a name="l00052"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#a64e957c8d9d7cd15b193ffc31410038e"> 52</a></span> <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> </div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="keyword">typedef</span> <a class="code" href="structrapidjson_1_1_generic_insitu_string_stream.html">GenericInsituStringStream<UTF8<char></a> > <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> </div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="comment">// stringbuffer.h</span></div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span> </div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="keyword">template</span> <<span class="keyword">typename</span> Encoding, <span class="keyword">typename</span> Allocator></div><div class="line"><a name="l00059"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#ac0765ea91f41539645c4b78689d03f21"> 59</a></span> <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> </div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_string_buffer.html">GenericStringBuffer<UTF8<char></a>, <a class="code" href="classrapidjson_1_1_crt_allocator.html">CrtAllocator</a>> <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> </div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="comment">// filereadstream.h</span></div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span> </div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <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> </div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="comment">// filewritestream.h</span></div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span> </div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <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> </div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="comment">// memorybuffer.h</span></div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span> </div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="keyword">template</span> <<span class="keyword">typename</span> Allocator></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> <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> </div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="keyword">typedef</span> <a class="code" href="structrapidjson_1_1_generic_memory_buffer.html">GenericMemoryBuffer<CrtAllocator></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> </div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="comment">// memorystream.h</span></div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span> </div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <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> </div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="comment">// reader.h</span></div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span> </div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <span class="keyword">template</span><<span class="keyword">typename</span> Encoding, <span class="keyword">typename</span> Derived></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> <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> </div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="keyword">template</span> <<span class="keyword">typename</span> SourceEncoding, <span class="keyword">typename</span> TargetEncoding, <span class="keyword">typename</span> StackAllocator></div><div class="line"><a name="l00088"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#ad5310edd1226f5b3ea82dc0d4d3740c6"> 88</a></span> <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> </div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_reader.html">GenericReader<UTF8<char></a>, <a class="code" href="structrapidjson_1_1_u_t_f8.html">UTF8<char></a>, <a class="code" href="classrapidjson_1_1_crt_allocator.html">CrtAllocator</a>> <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> </div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="comment">// writer.h</span></div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span> </div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span> <span class="keyword">template</span><<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></div><div class="line"><a name="l00095"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_writer.html"> 95</a></span> <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> </div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <span class="comment">// prettywriter.h</span></div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span> </div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span> <span class="keyword">template</span><<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></div><div class="line"><a name="l00100"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_pretty_writer.html"> 100</a></span> <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> </div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <span class="comment">// document.h</span></div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span> </div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <span class="keyword">template</span> <<span class="keyword">typename</span> Encoding, <span class="keyword">typename</span> Allocator> </div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <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> </div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <span class="keyword">template</span> <<span class="keywordtype">bool</span> Const, <span class="keyword">typename</span> Encoding, <span class="keyword">typename</span> Allocator></div><div class="line"><a name="l00108"></a><span class="lineno"> 108</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="l00109"></a><span class="lineno"> 109</span> </div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <span class="keyword">template</span><<span class="keyword">typename</span> CharType></div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <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> </div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <span class="keyword">template</span> <<span class="keyword">typename</span> Encoding, <span class="keyword">typename</span> Allocator> </div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <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> </div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue<UTF8<char></a>, <a class="code" href="classrapidjson_1_1_memory_pool_allocator.html">MemoryPoolAllocator<CrtAllocator></a> > <a class="code" href="namespacerapidjson.html#aa65fc9fb381b2cbc54f98673eadd6505">Value</a>;</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span> </div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span> <span class="keyword">template</span> <<span class="keyword">typename</span> Encoding, <span class="keyword">typename</span> Allocator, <span class="keyword">typename</span> StackAllocator></div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span> <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> </div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument<UTF8<char></a>, <a class="code" href="classrapidjson_1_1_memory_pool_allocator.html">MemoryPoolAllocator<CrtAllocator></a>, <a class="code" href="classrapidjson_1_1_crt_allocator.html">CrtAllocator</a>> <a class="code" href="namespacerapidjson.html#ace11b5b575baf1cccd5ba5f8586dcdc8">Document</a>;</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span> </div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <span class="comment">// pointer.h</span></div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span> </div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span> <span class="keyword">template</span> <<span class="keyword">typename</span> ValueType, <span class="keyword">typename</span> Allocator></div><div class="line"><a name="l00126"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#a080910f74d2f5046e6724280159cf374"> 126</a></span> <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> </div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span> <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_pointer.html">GenericPointer<Value, CrtAllocator></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> </div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span> <span class="comment">// schema.h</span></div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span> </div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <span class="keyword">template</span> <<span class="keyword">typename</span> SchemaDocumentType></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> <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> </div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <span class="keyword">template</span> <<span class="keyword">typename</span> ValueT, <span class="keyword">typename</span> Allocator></div><div class="line"><a name="l00136"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#a52bbb5d64d1319495089e1713a0653cf"> 136</a></span> <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> </div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_schema_document.html">GenericSchemaDocument<Value, CrtAllocator></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> <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_i_generic_remote_schema_document_provider.html">IGenericRemoteSchemaDocumentProvider<SchemaDocument></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> </div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span> <span class="keyword">template</span> <</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  <span class="keyword">typename</span> SchemaDocumentType,</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  <span class="keyword">typename</span> OutputHandler,</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  <span class="keyword">typename</span> StateAllocator></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> <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> </div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span> <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_schema_validator.html">GenericSchemaValidator<SchemaDocument, BaseReaderHandler<UTF8<char></a>, <span class="keywordtype">void</span>>, <a class="code" href="classrapidjson_1_1_crt_allocator.html">CrtAllocator</a>> <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> </div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span> RAPIDJSON_NAMESPACE_END</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span> </div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span> <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< UTF8<> > 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< UTF8<> > 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< UTF8<> > 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< UTF8<> > 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 </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)   (x)</td></tr> <tr class="memdesc:ga6a2b1695c13e77ae425e3cbac980ccb5"><td class="mdescLeft"> </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"> </td></tr> +<tr class="memitem:ga2b2a0d9143aa4fb31205a85b34c43952"><td class="memItemLeft" align="right" valign="top">#define </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)   <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"> </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"> </td></tr> <tr class="memitem:ga77005e892e6601599beaf421b0395c31"><td class="memItemLeft" align="right" valign="top">#define </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>   kParseNoFlags</td></tr> <tr class="memdesc:ga77005e892e6601599beaf421b0395c31"><td class="mdescLeft"> </td><td class="mdescRight">User-defined kParseDefaultFlags definition. <a href="#ga77005e892e6601599beaf421b0395c31">更多...</a><br /></td></tr> <tr class="separator:ga77005e892e6601599beaf421b0395c31"><td class="memSeparator" colspan="2"> </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">◆ </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"> </td> + <td class="paramname">x</td><td>)</td> + <td>   <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">◆ </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> <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> <span class="comment">// </span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <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> <span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">// Licensed under the MIT License (the "License"); you may not use this file except</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <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> <span class="comment">//</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">// http://opensource.org/licenses/MIT</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">//</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <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> <span class="comment">// under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR </span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <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> <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> </div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor">#ifndef RAPIDJSON_IEEE754_</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#define RAPIDJSON_IEEE754_</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> </div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#include "../rapidjson.h"</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> </div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> RAPIDJSON_NAMESPACE_BEGIN</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="keyword">namespace </span>internal {</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="keyword">class </span>Double {</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  Double() {}</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  Double(<span class="keywordtype">double</span> d) : d_(d) {}</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  Double(uint64_t u) : u_(u) {}</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <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>  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> </div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <span class="keywordtype">double</span> NextPositiveDouble()<span class="keyword"> const </span>{</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</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>(!Sign());</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <span class="keywordflow">return</span> Double(u_ + 1).Value();</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  }</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span> </div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  <span class="keywordtype">bool</span> Sign()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (u_ & kSignMask) != 0; }</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  uint64_t Significand()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> u_ & kSignificandMask; }</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <span class="keywordtype">int</span> Exponent()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(((u_ & kExponentMask) >> kSignificandSize) - kExponentBias); }</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span> </div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <span class="keywordtype">bool</span> IsNan()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (u_ & kExponentMask) == kExponentMask && Significand() != 0; }</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <span class="keywordtype">bool</span> IsInf()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (u_ & kExponentMask) == kExponentMask && Significand() == 0; }</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <span class="keywordtype">bool</span> IsNanOrInf()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (u_ & kExponentMask) == kExponentMask; }</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <span class="keywordtype">bool</span> IsNormal()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (u_ & kExponentMask) != 0 || Significand() == 0; }</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keywordtype">bool</span> IsZero()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (u_ & (kExponentMask | kSignificandMask)) == 0; }</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span> </div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  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>  <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>  uint64_t ToBias()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (u_ & kSignMask) ? ~u_ + 1 : u_ | kSignMask; }</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span> </div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <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>  <span class="keywordflow">if</span> (order >= -1021)</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <span class="keywordflow">return</span> 53;</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (order <= -1074)</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <span class="keywordflow">return</span> order + 1074;</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  }</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span> </div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="keyword">private</span>:</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <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>  <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>  <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>  <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>  <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>  <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>  <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> </div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <span class="keyword">union </span>{</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="keywordtype">double</span> d_;</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  uint64_t u_;</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  };</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span> };</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span> </div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span> } <span class="comment">// namespace internal</span></div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span> RAPIDJSON_NAMESPACE_END</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span> </div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <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< UTF8<> > 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> <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> <span class="comment">// </span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <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> <span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">// Licensed under the MIT License (the "License"); you may not use this file except</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <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> <span class="comment">//</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">// http://opensource.org/licenses/MIT</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">//</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <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> <span class="comment">// under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR </span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <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> <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> </div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor">#ifndef RAPIDJSON_IEEE754_</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#define RAPIDJSON_IEEE754_</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> </div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#include "../rapidjson.h"</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> </div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> RAPIDJSON_NAMESPACE_BEGIN</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="keyword">namespace </span>internal {</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="keyword">class </span>Double {</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  Double() {}</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  Double(<span class="keywordtype">double</span> d) : d_(d) {}</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  Double(uint64_t u) : u_(u) {}</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <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>  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> </div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <span class="keywordtype">double</span> NextPositiveDouble()<span class="keyword"> const </span>{</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</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>(!Sign());</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <span class="keywordflow">return</span> Double(u_ + 1).Value();</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  }</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span> </div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  <span class="keywordtype">bool</span> Sign()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (u_ & kSignMask) != 0; }</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  uint64_t Significand()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> u_ & kSignificandMask; }</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <span class="keywordtype">int</span> Exponent()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(((u_ & kExponentMask) >> kSignificandSize) - kExponentBias); }</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span> </div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <span class="keywordtype">bool</span> IsNan()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (u_ & kExponentMask) == kExponentMask && Significand() != 0; }</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <span class="keywordtype">bool</span> IsInf()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (u_ & kExponentMask) == kExponentMask && Significand() == 0; }</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <span class="keywordtype">bool</span> IsNanOrInf()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (u_ & kExponentMask) == kExponentMask; }</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <span class="keywordtype">bool</span> IsNormal()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (u_ & kExponentMask) != 0 || Significand() == 0; }</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keywordtype">bool</span> IsZero()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (u_ & (kExponentMask | kSignificandMask)) == 0; }</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span> </div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  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>  <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>  uint64_t ToBias()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (u_ & kSignMask) ? ~u_ + 1 : u_ | kSignMask; }</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span> </div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <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>  <span class="keywordflow">if</span> (order >= -1021)</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <span class="keywordflow">return</span> 53;</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (order <= -1074)</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <span class="keywordflow">return</span> order + 1074;</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  }</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span> </div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="keyword">private</span>:</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <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>  <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>  <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>  <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>  <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>  <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>  <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> </div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <span class="keyword">union </span>{</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="keywordtype">double</span> d_;</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  uint64_t u_;</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  };</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span> };</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span> </div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span> } <span class="comment">// namespace internal</span></div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span> RAPIDJSON_NAMESPACE_END</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span> </div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <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< UTF8<> > 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> <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> <span class="comment">// </span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <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> <span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">// Licensed under the MIT License (the "License"); you may not use this file except</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <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> <span class="comment">//</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">// http://opensource.org/licenses/MIT</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">//</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <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> <span class="comment">// under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR </span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <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> <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> </div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor">#ifndef RAPIDJSON_INTERNAL_META_H_</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#define RAPIDJSON_INTERNAL_META_H_</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> </div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#include "../rapidjson.h"</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> </div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#ifdef __GNUC__</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> RAPIDJSON_DIAG_PUSH</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> RAPIDJSON_DIAG_OFF(effc++)</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> </div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#if defined(_MSC_VER) && !defined(__clang__)</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> RAPIDJSON_DIAG_PUSH</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> RAPIDJSON_DIAG_OFF(6334)</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> </div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#if RAPIDJSON_HAS_CXX11_TYPETRAITS</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include <type_traits></span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> </div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="comment">//@cond RAPIDJSON_INTERNAL</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> RAPIDJSON_NAMESPACE_BEGIN</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="keyword">namespace </span>internal {</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> </div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <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> <span class="keyword">template</span> <<span class="keyword">typename</span> T> <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> <span class="comment"></span></div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="comment"></span><span class="comment">// BoolType, TrueType, FalseType</span></div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="comment">//</span></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="keyword">template</span> <<span class="keywordtype">bool</span> Cond> <span class="keyword">struct </span>BoolType {</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <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>  <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> };</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="keyword">typedef</span> BoolType<true> TrueType;</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="keyword">typedef</span> BoolType<false> FalseType;</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span> </div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="comment"></span></div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <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> <span class="comment">//</span></div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span> </div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="keyword">template</span> <<span class="keywordtype">bool</span> C> <span class="keyword">struct </span>SelectIfImpl { <span class="keyword">template</span> <<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2> <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> <span class="keyword">template</span> <> <span class="keyword">struct </span>SelectIfImpl<false> { <span class="keyword">template</span> <<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2> <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> <span class="keyword">template</span> <<span class="keywordtype">bool</span> C, <span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2> <span class="keyword">struct </span>SelectIfCond : SelectIfImpl<C>::template Apply<T1,T2> {};</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="keyword">template</span> <<span class="keyword">typename</span> C, <span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2> <span class="keyword">struct </span>SelectIf : SelectIfCond<C::Value, T1, T2> {};</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span> </div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="keyword">template</span> <<span class="keywordtype">bool</span> Cond1, <span class="keywordtype">bool</span> Cond2> <span class="keyword">struct </span>AndExprCond : FalseType {};</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="keyword">template</span> <> <span class="keyword">struct </span>AndExprCond<true, true> : TrueType {};</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="keyword">template</span> <<span class="keywordtype">bool</span> Cond1, <span class="keywordtype">bool</span> Cond2> <span class="keyword">struct </span>OrExprCond : TrueType {};</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="keyword">template</span> <> <span class="keyword">struct </span>OrExprCond<false, false> : FalseType {};</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span> </div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="keyword">template</span> <<span class="keyword">typename</span> C> <span class="keyword">struct </span>BoolExpr : SelectIf<C,TrueType,FalseType><a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">::Type</a> {};</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="keyword">template</span> <<span class="keyword">typename</span> C> <span class="keyword">struct </span>NotExpr : SelectIf<C,FalseType,TrueType><a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">::Type</a> {};</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="keyword">template</span> <<span class="keyword">typename</span> C1, <span class="keyword">typename</span> C2> <span class="keyword">struct </span>AndExpr : AndExprCond<C1::Value, C2::Value><a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">::Type</a> {};</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="keyword">template</span> <<span class="keyword">typename</span> C1, <span class="keyword">typename</span> C2> <span class="keyword">struct </span>OrExpr : OrExprCond<C1::Value, C2::Value><a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">::Type</a> {};</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span> </div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="comment"></span></div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="comment"></span><span class="comment">// AddConst, MaybeAddConst, RemoveConst</span></div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="keyword">template</span> <<span class="keyword">typename</span> T> <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> <span class="keyword">template</span> <<span class="keywordtype">bool</span> Constify, <span class="keyword">typename</span> T> <span class="keyword">struct </span>MaybeAddConst : SelectIfCond<Constify, const T, T> {};</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="keyword">template</span> <<span class="keyword">typename</span> T> <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> <span class="keyword">template</span> <<span class="keyword">typename</span> T> <span class="keyword">struct </span>RemoveConst<const T> { <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> </div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="comment"></span></div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <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> <span class="comment">//</span></div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="keyword">template</span> <<span class="keyword">typename</span> T, <span class="keyword">typename</span> U> <span class="keyword">struct </span>IsSame : FalseType {};</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <span class="keyword">template</span> <<span class="keyword">typename</span> T> <span class="keyword">struct </span>IsSame<T, T> : TrueType {};</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span> </div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="keyword">template</span> <<span class="keyword">typename</span> T> <span class="keyword">struct </span>IsConst : FalseType {};</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="keyword">template</span> <<span class="keyword">typename</span> T> <span class="keyword">struct </span>IsConst<const T> : TrueType {};</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span> </div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="keyword">template</span> <<span class="keyword">typename</span> CT, <span class="keyword">typename</span> T></div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="keyword">struct </span>IsMoreConst</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  : AndExpr<IsSame<typename RemoveConst<CT>::Type, typename RemoveConst<T>::Type>,</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  BoolType<IsConst<CT>::Value >= IsConst<T>::Value> ><a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">::Type</a> {};</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span> </div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span> <span class="keyword">template</span> <<span class="keyword">typename</span> T> <span class="keyword">struct </span>IsPointer : FalseType {};</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <span class="keyword">template</span> <<span class="keyword">typename</span> T> <span class="keyword">struct </span>IsPointer<T*> : TrueType {};</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <span class="comment"></span></div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="comment"></span><span class="comment">// IsBaseOf</span></div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span> <span class="comment">//</span></div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span> <span class="preprocessor">#if RAPIDJSON_HAS_CXX11_TYPETRAITS</span></div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span> </div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <span class="keyword">template</span> <<span class="keyword">typename</span> B, <span class="keyword">typename</span> D> <span class="keyword">struct </span>IsBaseOf</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  : BoolType< ::std::is_base_of<B,D>::value> {};</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span> </div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <span class="preprocessor">#else // simplified version adopted from Boost</span></div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span> </div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <span class="keyword">template</span><<span class="keyword">typename</span> B, <span class="keyword">typename</span> D> <span class="keyword">struct </span>IsBaseOfImpl {</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  <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>  <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> </div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  <span class="keyword">typedef</span> char (&Yes)[1];</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <span class="keyword">typedef</span> char (&No) [2];</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span> </div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <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>  <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> </div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  <span class="keyword">struct </span>Host {</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  <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>  <span class="keyword">operator</span> <span class="keyword">const</span> D*();</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  };</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span> </div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  <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> };</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span> </div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span> <span class="keyword">template</span> <<span class="keyword">typename</span> B, <span class="keyword">typename</span> D> <span class="keyword">struct </span>IsBaseOf</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  : OrExpr<IsSame<B, D>, BoolExpr<IsBaseOfImpl<B, D> > ><a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">::Type</a> {};</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span> </div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span> <span class="preprocessor">#endif // RAPIDJSON_HAS_CXX11_TYPETRAITS</span></div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span> </div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <span class="comment"></span></div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <span class="comment">//////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span> <span class="comment"></span><span class="comment">// EnableIf / DisableIf</span></div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span> <span class="comment">//</span></div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <span class="keyword">template</span> <<span class="keywordtype">bool</span> Condition, <span class="keyword">typename</span> T = <span class="keywordtype">void</span>> <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> <span class="keyword">template</span> <<span class="keyword">typename</span> T> <span class="keyword">struct </span>EnableIfCond<false, T> { <span class="comment">/* empty */</span> };</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span> </div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <span class="keyword">template</span> <<span class="keywordtype">bool</span> Condition, <span class="keyword">typename</span> T = <span class="keywordtype">void</span>> <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> <span class="keyword">template</span> <<span class="keyword">typename</span> T> <span class="keyword">struct </span>DisableIfCond<true, T> { <span class="comment">/* empty */</span> };</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span> </div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span> <span class="keyword">template</span> <<span class="keyword">typename</span> Condition, <span class="keyword">typename</span> T = <span class="keywordtype">void</span>></div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span> <span class="keyword">struct </span>EnableIf : EnableIfCond<Condition::Value, T> {};</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span> </div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span> <span class="keyword">template</span> <<span class="keyword">typename</span> Condition, <span class="keyword">typename</span> T = <span class="keywordtype">void</span>></div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span> <span class="keyword">struct </span>DisableIf : DisableIfCond<Condition::Value, T> {};</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span> </div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span> <span class="comment">// SFINAE helpers</span></div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span> <span class="keyword">struct </span>SfinaeTag {};</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span> <span class="keyword">template</span> <<span class="keyword">typename</span> T> <span class="keyword">struct </span>RemoveSfinaeTag;</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span> <span class="keyword">template</span> <<span class="keyword">typename</span> T> <span class="keyword">struct </span>RemoveSfinaeTag<SfinaeTag&(*)(T)> { <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> </div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span> <span class="preprocessor">#define RAPIDJSON_REMOVEFPTR_(type) \</span></div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span> <span class="preprocessor"> typename ::RAPIDJSON_NAMESPACE::internal::RemoveSfinaeTag \</span></div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span> <span class="preprocessor"> < ::RAPIDJSON_NAMESPACE::internal::SfinaeTag&(*) type>::Type</span></div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span> </div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span> <span class="preprocessor">#define RAPIDJSON_ENABLEIF(cond) \</span></div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span> <span class="preprocessor"> typename ::RAPIDJSON_NAMESPACE::internal::EnableIf \</span></div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span> <span class="preprocessor"> <RAPIDJSON_REMOVEFPTR_(cond)>::Type * = NULL</span></div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span> </div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span> <span class="preprocessor">#define RAPIDJSON_DISABLEIF(cond) \</span></div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span> <span class="preprocessor"> typename ::RAPIDJSON_NAMESPACE::internal::DisableIf \</span></div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span> <span class="preprocessor"> <RAPIDJSON_REMOVEFPTR_(cond)>::Type * = NULL</span></div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span> </div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span> <span class="preprocessor">#define RAPIDJSON_ENABLEIF_RETURN(cond,returntype) \</span></div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span> <span class="preprocessor"> typename ::RAPIDJSON_NAMESPACE::internal::EnableIf \</span></div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span> <span class="preprocessor"> <RAPIDJSON_REMOVEFPTR_(cond), \</span></div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span> <span class="preprocessor"> RAPIDJSON_REMOVEFPTR_(returntype)>::Type</span></div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span> </div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span> <span class="preprocessor">#define RAPIDJSON_DISABLEIF_RETURN(cond,returntype) \</span></div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span> <span class="preprocessor"> typename ::RAPIDJSON_NAMESPACE::internal::DisableIf \</span></div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span> <span class="preprocessor"> <RAPIDJSON_REMOVEFPTR_(cond), \</span></div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span> <span class="preprocessor"> RAPIDJSON_REMOVEFPTR_(returntype)>::Type</span></div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span> </div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span> } <span class="comment">// namespace internal</span></div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span> RAPIDJSON_NAMESPACE_END</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span> <span class="comment">//@endcond</span></div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span> </div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span> <span class="preprocessor">#if defined(_MSC_VER) && !defined(__clang__)</span></div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span> RAPIDJSON_DIAG_POP</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span> </div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span> <span class="preprocessor">#ifdef __GNUC__</span></div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span> RAPIDJSON_DIAG_POP</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span> </div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span> <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< UTF8<> > 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> <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> <span class="comment">// </span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <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> <span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">// Licensed under the MIT License (the "License"); you may not use this file except</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <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> <span class="comment">//</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">// http://opensource.org/licenses/MIT</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">//</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <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> <span class="comment">// under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR </span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <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> <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> </div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor">#ifndef RAPIDJSON_INTERNAL_META_H_</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#define RAPIDJSON_INTERNAL_META_H_</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> </div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#include "../rapidjson.h"</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> </div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#ifdef __GNUC__</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> RAPIDJSON_DIAG_PUSH</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> RAPIDJSON_DIAG_OFF(effc++)</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> </div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#if defined(_MSC_VER) && !defined(__clang__)</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> RAPIDJSON_DIAG_PUSH</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> RAPIDJSON_DIAG_OFF(6334)</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> </div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#if RAPIDJSON_HAS_CXX11_TYPETRAITS</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include <type_traits></span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> </div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="comment">//@cond RAPIDJSON_INTERNAL</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> RAPIDJSON_NAMESPACE_BEGIN</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="keyword">namespace </span>internal {</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> </div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <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> <span class="keyword">template</span> <<span class="keyword">typename</span> T> <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> <span class="comment"></span></div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="comment"></span><span class="comment">// BoolType, TrueType, FalseType</span></div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="comment">//</span></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="keyword">template</span> <<span class="keywordtype">bool</span> Cond> <span class="keyword">struct </span>BoolType {</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <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>  <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> };</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="keyword">typedef</span> BoolType<true> TrueType;</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="keyword">typedef</span> BoolType<false> FalseType;</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span> </div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="comment"></span></div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <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> <span class="comment">//</span></div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span> </div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="keyword">template</span> <<span class="keywordtype">bool</span> C> <span class="keyword">struct </span>SelectIfImpl { <span class="keyword">template</span> <<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2> <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> <span class="keyword">template</span> <> <span class="keyword">struct </span>SelectIfImpl<false> { <span class="keyword">template</span> <<span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2> <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> <span class="keyword">template</span> <<span class="keywordtype">bool</span> C, <span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2> <span class="keyword">struct </span>SelectIfCond : SelectIfImpl<C>::template Apply<T1,T2> {};</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="keyword">template</span> <<span class="keyword">typename</span> C, <span class="keyword">typename</span> T1, <span class="keyword">typename</span> T2> <span class="keyword">struct </span>SelectIf : SelectIfCond<C::Value, T1, T2> {};</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span> </div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="keyword">template</span> <<span class="keywordtype">bool</span> Cond1, <span class="keywordtype">bool</span> Cond2> <span class="keyword">struct </span>AndExprCond : FalseType {};</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="keyword">template</span> <> <span class="keyword">struct </span>AndExprCond<true, true> : TrueType {};</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="keyword">template</span> <<span class="keywordtype">bool</span> Cond1, <span class="keywordtype">bool</span> Cond2> <span class="keyword">struct </span>OrExprCond : TrueType {};</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="keyword">template</span> <> <span class="keyword">struct </span>OrExprCond<false, false> : FalseType {};</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span> </div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="keyword">template</span> <<span class="keyword">typename</span> C> <span class="keyword">struct </span>BoolExpr : SelectIf<C,TrueType,FalseType><a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">::Type</a> {};</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="keyword">template</span> <<span class="keyword">typename</span> C> <span class="keyword">struct </span>NotExpr : SelectIf<C,FalseType,TrueType><a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">::Type</a> {};</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="keyword">template</span> <<span class="keyword">typename</span> C1, <span class="keyword">typename</span> C2> <span class="keyword">struct </span>AndExpr : AndExprCond<C1::Value, C2::Value><a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">::Type</a> {};</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="keyword">template</span> <<span class="keyword">typename</span> C1, <span class="keyword">typename</span> C2> <span class="keyword">struct </span>OrExpr : OrExprCond<C1::Value, C2::Value><a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">::Type</a> {};</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span> </div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="comment"></span></div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="comment"></span><span class="comment">// AddConst, MaybeAddConst, RemoveConst</span></div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="keyword">template</span> <<span class="keyword">typename</span> T> <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> <span class="keyword">template</span> <<span class="keywordtype">bool</span> Constify, <span class="keyword">typename</span> T> <span class="keyword">struct </span>MaybeAddConst : SelectIfCond<Constify, const T, T> {};</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="keyword">template</span> <<span class="keyword">typename</span> T> <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> <span class="keyword">template</span> <<span class="keyword">typename</span> T> <span class="keyword">struct </span>RemoveConst<const T> { <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> </div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="comment"></span></div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <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> <span class="comment">//</span></div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="keyword">template</span> <<span class="keyword">typename</span> T, <span class="keyword">typename</span> U> <span class="keyword">struct </span>IsSame : FalseType {};</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <span class="keyword">template</span> <<span class="keyword">typename</span> T> <span class="keyword">struct </span>IsSame<T, T> : TrueType {};</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span> </div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="keyword">template</span> <<span class="keyword">typename</span> T> <span class="keyword">struct </span>IsConst : FalseType {};</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="keyword">template</span> <<span class="keyword">typename</span> T> <span class="keyword">struct </span>IsConst<const T> : TrueType {};</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span> </div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="keyword">template</span> <<span class="keyword">typename</span> CT, <span class="keyword">typename</span> T></div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="keyword">struct </span>IsMoreConst</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  : AndExpr<IsSame<typename RemoveConst<CT>::Type, typename RemoveConst<T>::Type>,</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  BoolType<IsConst<CT>::Value >= IsConst<T>::Value> ><a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">::Type</a> {};</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span> </div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span> <span class="keyword">template</span> <<span class="keyword">typename</span> T> <span class="keyword">struct </span>IsPointer : FalseType {};</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <span class="keyword">template</span> <<span class="keyword">typename</span> T> <span class="keyword">struct </span>IsPointer<T*> : TrueType {};</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <span class="comment"></span></div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="comment"></span><span class="comment">// IsBaseOf</span></div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span> <span class="comment">//</span></div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span> <span class="preprocessor">#if RAPIDJSON_HAS_CXX11_TYPETRAITS</span></div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span> </div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <span class="keyword">template</span> <<span class="keyword">typename</span> B, <span class="keyword">typename</span> D> <span class="keyword">struct </span>IsBaseOf</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  : BoolType< ::std::is_base_of<B,D>::value> {};</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span> </div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <span class="preprocessor">#else // simplified version adopted from Boost</span></div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span> </div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <span class="keyword">template</span><<span class="keyword">typename</span> B, <span class="keyword">typename</span> D> <span class="keyword">struct </span>IsBaseOfImpl {</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  <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>  <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> </div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  <span class="keyword">typedef</span> char (&Yes)[1];</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <span class="keyword">typedef</span> char (&No) [2];</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span> </div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <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>  <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> </div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  <span class="keyword">struct </span>Host {</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  <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>  <span class="keyword">operator</span> <span class="keyword">const</span> D*();</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  };</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span> </div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  <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> };</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span> </div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span> <span class="keyword">template</span> <<span class="keyword">typename</span> B, <span class="keyword">typename</span> D> <span class="keyword">struct </span>IsBaseOf</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  : OrExpr<IsSame<B, D>, BoolExpr<IsBaseOfImpl<B, D> > ><a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">::Type</a> {};</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span> </div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span> <span class="preprocessor">#endif // RAPIDJSON_HAS_CXX11_TYPETRAITS</span></div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span> </div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <span class="comment"></span></div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <span class="comment">//////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span> <span class="comment"></span><span class="comment">// EnableIf / DisableIf</span></div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span> <span class="comment">//</span></div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <span class="keyword">template</span> <<span class="keywordtype">bool</span> Condition, <span class="keyword">typename</span> T = <span class="keywordtype">void</span>> <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> <span class="keyword">template</span> <<span class="keyword">typename</span> T> <span class="keyword">struct </span>EnableIfCond<false, T> { <span class="comment">/* empty */</span> };</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span> </div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <span class="keyword">template</span> <<span class="keywordtype">bool</span> Condition, <span class="keyword">typename</span> T = <span class="keywordtype">void</span>> <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> <span class="keyword">template</span> <<span class="keyword">typename</span> T> <span class="keyword">struct </span>DisableIfCond<true, T> { <span class="comment">/* empty */</span> };</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span> </div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span> <span class="keyword">template</span> <<span class="keyword">typename</span> Condition, <span class="keyword">typename</span> T = <span class="keywordtype">void</span>></div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span> <span class="keyword">struct </span>EnableIf : EnableIfCond<Condition::Value, T> {};</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span> </div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span> <span class="keyword">template</span> <<span class="keyword">typename</span> Condition, <span class="keyword">typename</span> T = <span class="keywordtype">void</span>></div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span> <span class="keyword">struct </span>DisableIf : DisableIfCond<Condition::Value, T> {};</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span> </div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span> <span class="comment">// SFINAE helpers</span></div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span> <span class="keyword">struct </span>SfinaeTag {};</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span> <span class="keyword">template</span> <<span class="keyword">typename</span> T> <span class="keyword">struct </span>RemoveSfinaeTag;</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span> <span class="keyword">template</span> <<span class="keyword">typename</span> T> <span class="keyword">struct </span>RemoveSfinaeTag<SfinaeTag&(*)(T)> { <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> </div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span> <span class="preprocessor">#define RAPIDJSON_REMOVEFPTR_(type) \</span></div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span> <span class="preprocessor"> typename ::RAPIDJSON_NAMESPACE::internal::RemoveSfinaeTag \</span></div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span> <span class="preprocessor"> < ::RAPIDJSON_NAMESPACE::internal::SfinaeTag&(*) type>::Type</span></div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span> </div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span> <span class="preprocessor">#define RAPIDJSON_ENABLEIF(cond) \</span></div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span> <span class="preprocessor"> typename ::RAPIDJSON_NAMESPACE::internal::EnableIf \</span></div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span> <span class="preprocessor"> <RAPIDJSON_REMOVEFPTR_(cond)>::Type * = NULL</span></div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span> </div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span> <span class="preprocessor">#define RAPIDJSON_DISABLEIF(cond) \</span></div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span> <span class="preprocessor"> typename ::RAPIDJSON_NAMESPACE::internal::DisableIf \</span></div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span> <span class="preprocessor"> <RAPIDJSON_REMOVEFPTR_(cond)>::Type * = NULL</span></div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span> </div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span> <span class="preprocessor">#define RAPIDJSON_ENABLEIF_RETURN(cond,returntype) \</span></div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span> <span class="preprocessor"> typename ::RAPIDJSON_NAMESPACE::internal::EnableIf \</span></div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span> <span class="preprocessor"> <RAPIDJSON_REMOVEFPTR_(cond), \</span></div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span> <span class="preprocessor"> RAPIDJSON_REMOVEFPTR_(returntype)>::Type</span></div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span> </div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span> <span class="preprocessor">#define RAPIDJSON_DISABLEIF_RETURN(cond,returntype) \</span></div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span> <span class="preprocessor"> typename ::RAPIDJSON_NAMESPACE::internal::DisableIf \</span></div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span> <span class="preprocessor"> <RAPIDJSON_REMOVEFPTR_(cond), \</span></div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span> <span class="preprocessor"> RAPIDJSON_REMOVEFPTR_(returntype)>::Type</span></div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span> </div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span> } <span class="comment">// namespace internal</span></div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span> RAPIDJSON_NAMESPACE_END</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span> <span class="comment">//@endcond</span></div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span> </div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span> <span class="preprocessor">#if defined(_MSC_VER) && !defined(__clang__)</span></div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span> RAPIDJSON_DIAG_POP</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span> </div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span> <span class="preprocessor">#ifdef __GNUC__</span></div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span> RAPIDJSON_DIAG_POP</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span> </div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span> <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< UTF8<> > 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 & GetWithDefault(ValueType &root, const std::basic_string< Ch > &defaultValue, typename ValueType::AllocatorType &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 & Set(ValueType &root, const std::basic_string< Ch > &value, typename ValueType::AllocatorType &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 & GetWithDefault(GenericDocument< EncodingType, typename ValueType::AllocatorType, stackAllocator > &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 &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 & Create(GenericDocument< EncodingType, typename ValueType::AllocatorType, stackAllocator > &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 &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 & operator=(const GenericPointer &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 & Set(GenericDocument< EncodingType, typename ValueType::AllocatorType, stackAllocator > &document, const std::basic_string< Ch > &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 & GetWithDefault(ValueType &root, const Ch *defaultValue, typename ValueType::AllocatorType &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< Ch > &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 & Swap(GenericDocument< EncodingType, typename ValueType::AllocatorType, stackAllocator > &document, ValueType &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 &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 & 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 & 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 & Set(ValueType &root, const ValueType &value, typename ValueType::AllocatorType &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 &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< 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: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 & Create(ValueType &root, typename ValueType::AllocatorType &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> <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> <span class="comment">// </span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <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> <span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">// Licensed under the MIT License (the "License"); you may not use this file except</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <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> <span class="comment">//</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">// http://opensource.org/licenses/MIT</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">//</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <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> <span class="comment">// under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR </span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <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> <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> </div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor">#ifndef RAPIDJSON_PRETTYWRITER_H_</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#define RAPIDJSON_PRETTYWRITER_H_</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> </div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#include "writer.h"</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> </div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#ifdef __GNUC__</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> RAPIDJSON_DIAG_PUSH</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> RAPIDJSON_DIAG_OFF(effc++)</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> </div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#if defined(__clang__)</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> RAPIDJSON_DIAG_PUSH</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> RAPIDJSON_DIAG_OFF(c++98-compat)</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> </div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> RAPIDJSON_NAMESPACE_BEGIN</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="comment"></span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="comment">//! Combination of PrettyWriter format flags.</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="comment"></span><span class="comment">/*! \see PrettyWriter::SetFormatOptions</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <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> <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>  <a class="code" href="namespacerapidjson.html#a084b31753ef2edefdeca8a5374eccc4ba8164b0d4993439856171585b9cf3adc0">kFormatDefault</a> = 0, <span class="comment">//!< 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> <span class="comment"></span> <a class="code" href="namespacerapidjson.html#a084b31753ef2edefdeca8a5374eccc4ba64b0f8a37ab3125118682046ff06500f">kFormatSingleLineArray</a> = 1 <span class="comment">//!< Format arrays on a single line.</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="comment"></span>};</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="comment"></span></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="comment">//! Writer with indentation and spacing.</span></div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="comment"></span><span class="comment">/*!</span></div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="comment"> \tparam OutputStream Type of output os.</span></div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="comment"> \tparam SourceEncoding Encoding of source string.</span></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="comment"> \tparam TargetEncoding Encoding of output stream.</span></div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <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> <span class="comment">*/</span></div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="keyword">template</span><<span class="keyword">typename</span> OutputStream, <span class="keyword">typename</span> SourceEncoding = UTF8<>, <span class="keyword">typename</span> TargetEncoding = UTF8<>, <span class="keyword">typename</span> StackAllocator = CrtAllocator, <span class="keywordtype">unsigned</span> writeFlags = kWriteDefaultFlags></div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <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><OutputStream, SourceEncoding, TargetEncoding, StackAllocator, writeFlags> {</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_writer.html">Writer<OutputStream, SourceEncoding, TargetEncoding, StackAllocator, writeFlags></a> Base;</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <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> <span class="comment"></span></div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="comment"> //! Constructor</span></div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <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> <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> <span class="comment"> \param levelDepth Initial capacity of stack.</span></div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <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>  <span class="keyword">explicit</span> <a class="code" href="classrapidjson_1_1_pretty_writer.html#a688d7ebf5c8015e423b7a970afc8e0a0">PrettyWriter</a>(OutputStream& 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>  Base(os, allocator, levelDepth), indentChar_(<span class="stringliteral">' '</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> </div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span> </div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <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>  Base(allocator, levelDepth), indentChar_(<span class="charliteral">' '</span>), indentCharCount_(4) {}</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span> </div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="preprocessor">#if RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <a class="code" href="classrapidjson_1_1_pretty_writer.html">PrettyWriter</a>(<a class="code" href="classrapidjson_1_1_pretty_writer.html">PrettyWriter</a>&& rhs) :</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  Base(std::forward<PrettyWriter>(rhs)), indentChar_(rhs.indentChar_), indentCharCount_(rhs.indentCharCount_), formatOptions_(rhs.formatOptions_) {}</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="comment"></span></div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="comment"> //! Set custom indentation.</span></div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="comment"></span><span class="comment"> /*! \param indentChar Character for indentation. Must be whitespace character (' ', '\\t', '\\n', '\\r').</span></div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <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> <span class="comment"> \note The default indentation is 4 spaces.</span></div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <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>  <a class="code" href="classrapidjson_1_1_pretty_writer.html">PrettyWriter</a>& <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>  <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">' '</span> || indentChar == <span class="charliteral">'\t'</span> || indentChar == <span class="charliteral">'\n'</span> || indentChar == <span class="charliteral">'\r'</span>);</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  indentChar_ = indentChar;</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  indentCharCount_ = indentCharCount;</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  }</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="comment"></span></div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="comment"> //! Set pretty writer formatting options.</span></div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <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> <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>  <a class="code" href="classrapidjson_1_1_pretty_writer.html">PrettyWriter</a>& <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>  formatOptions_ = options;</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  }</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="comment"></span></div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="comment"> /*! @name Implementation of Handler</span></div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="comment"> \see Handler</span></div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="comment"> */</span><span class="comment"></span></div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <span class="comment"> //@{</span></div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span> <span class="comment"></span></div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  <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>  <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>  <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>  <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>  <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>  <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>  <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> </div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  <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>  <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>  (void)copy;</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  PrettyPrefix(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a">kNumberType</a>);</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  <span class="keywordflow">return</span> Base::EndValue(Base::WriteString(str, length));</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  }</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span> </div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  <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>  <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>  (void)copy;</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  PrettyPrefix(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4ad6379da3dc04b83a591992bfb9fabba7">kStringType</a>);</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <span class="keywordflow">return</span> Base::EndValue(Base::WriteString(str, length));</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  }</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span> </div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span> <span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  <span class="keywordtype">bool</span> String(<span class="keyword">const</span> std::basic_string<Ch>& str) {</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  <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>  }</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span> </div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  <span class="keywordtype">bool</span> StartObject() {</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  PrettyPrefix(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4acf030b422a32c3647c7c5973bd4dd0a9">kObjectType</a>);</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  <span class="keyword">new</span> (Base::level_stack_.template Push<typename Base::Level>()) <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>  <span class="keywordflow">return</span> Base::WriteStartObject();</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  }</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span> </div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  <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> </div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  <span class="keywordtype">bool</span> Key(<span class="keyword">const</span> std::basic_string<Ch>& str) {</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  <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>  }</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  </div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  <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>  (void)memberCount;</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</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>(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>)); <span class="comment">// not inside an Object</span></div><div class="line"><a name="l00140"></a><span class="lineno"> 140</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>(!Base::level_stack_.<span class="keyword">template</span> Top<typename Base::Level>()->inArray); <span class="comment">// currently inside an Array, not Object</span></div><div class="line"><a name="l00141"></a><span class="lineno"> 141</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>(0 == Base::level_stack_.<span class="keyword">template</span> Top<typename Base::Level>()->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>  </div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  <span class="keywordtype">bool</span> empty = Base::level_stack_.template Pop<typename Base::Level>(1)->valueCount == 0;</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span> </div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  <span class="keywordflow">if</span> (!empty) {</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  Base::os_->Put(<span class="charliteral">'\n'</span>);</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  WriteIndent();</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  }</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  <span class="keywordtype">bool</span> ret = Base::EndValue(Base::WriteEndObject());</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  (void)ret;</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</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>(ret == <span class="keyword">true</span>);</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  <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>  Base::Flush();</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  }</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span> </div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  <span class="keywordtype">bool</span> StartArray() {</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  PrettyPrefix(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a058c622e1e7d59419ae58b895cbce468">kArrayType</a>);</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  <span class="keyword">new</span> (Base::level_stack_.template Push<typename Base::Level>()) <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>  <span class="keywordflow">return</span> Base::WriteStartArray();</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  }</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span> </div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  <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>  (void)memberCount;</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</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>(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>));</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</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>(Base::level_stack_.<span class="keyword">template</span> Top<typename Base::Level>()->inArray);</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  <span class="keywordtype">bool</span> empty = Base::level_stack_.template Pop<typename Base::Level>(1)->valueCount == 0;</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span> </div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  <span class="keywordflow">if</span> (!empty && !(formatOptions_ & <a class="code" href="namespacerapidjson.html#a084b31753ef2edefdeca8a5374eccc4ba64b0f8a37ab3125118682046ff06500f">kFormatSingleLineArray</a>)) {</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  Base::os_->Put(<span class="charliteral">'\n'</span>);</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  WriteIndent();</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  }</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  <span class="keywordtype">bool</span> ret = Base::EndValue(Base::WriteEndArray());</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  (void)ret;</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</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>(ret == <span class="keyword">true</span>);</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  <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>  Base::Flush();</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  }</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span> <span class="comment"></span></div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span> <span class="comment"> //@}</span></div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span> <span class="comment"> /*! @name Convenience extensions */</span><span class="comment"></span></div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span> <span class="comment"> //@{</span></div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span> <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> <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>  <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> <span class="comment"></span></div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span> <span class="comment"> //@}</span></div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span> <span class="comment"> //! Write a raw JSON value.</span></div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span> <span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span> <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> <span class="comment"></span></div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span> <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> <span class="comment"> \param length Length of the json.</span></div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span> <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> <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> <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>  <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>  <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>  PrettyPrefix(type);</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  <span class="keywordflow">return</span> Base::EndValue(Base::WriteRawValue(json, length));</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  }</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span> </div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span> <span class="keyword">protected</span>:</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  <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>  (void)type;</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  <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>  <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<typename Base::Level>();</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span> </div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  <span class="keywordflow">if</span> (level-><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>  <span class="keywordflow">if</span> (level-><a class="code" href="structrapidjson_1_1_writer_1_1_level.html#a5d17bdfa9ded5de72f5f91175cc3e36b">valueCount</a> > 0) {</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  Base::os_->Put(<span class="charliteral">','</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>  <span class="keywordflow">if</span> (formatOptions_ & <a class="code" href="namespacerapidjson.html#a084b31753ef2edefdeca8a5374eccc4ba64b0f8a37ab3125118682046ff06500f">kFormatSingleLineArray</a>)</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  Base::os_->Put(<span class="charliteral">' '</span>);</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  }</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span> </div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  <span class="keywordflow">if</span> (!(formatOptions_ & <a class="code" href="namespacerapidjson.html#a084b31753ef2edefdeca8a5374eccc4ba64b0f8a37ab3125118682046ff06500f">kFormatSingleLineArray</a>)) {</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  Base::os_->Put(<span class="charliteral">'\n'</span>);</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  WriteIndent();</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  }</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  }</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  <span class="keywordflow">else</span> { <span class="comment">// in object</span></div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  <span class="keywordflow">if</span> (level-><a class="code" href="structrapidjson_1_1_writer_1_1_level.html#a5d17bdfa9ded5de72f5f91175cc3e36b">valueCount</a> > 0) {</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  <span class="keywordflow">if</span> (level-><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>  Base::os_->Put(<span class="charliteral">','</span>);</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  Base::os_->Put(<span class="charliteral">'\n'</span>);</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  }</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  <span class="keywordflow">else</span> {</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  Base::os_->Put(<span class="charliteral">':'</span>);</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  Base::os_->Put(<span class="charliteral">' '</span>);</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  }</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  }</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  Base::os_->Put(<span class="charliteral">'\n'</span>);</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span> </div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  <span class="keywordflow">if</span> (level-><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>  WriteIndent();</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  }</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  <span class="keywordflow">if</span> (!level-><a class="code" href="structrapidjson_1_1_writer_1_1_level.html#a59255e3b1d371161f7c894503cfd6bec">inArray</a> && level-><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>  <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's in object, then even number should be a name</span></div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  level-><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>  }</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  <span class="keywordflow">else</span> {</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</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>(!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>  Base::hasRoot_ = <span class="keyword">true</span>;</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>  }</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  }</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span> </div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  <span class="keywordtype">void</span> WriteIndent() {</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>  <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>  <a class="code" href="namespacerapidjson.html#a1ac13bac5976fc06587e00fc0bcfb32a">PutN</a>(*Base::os_, static_cast<typename OutputStream::Ch>(indentChar_), count);</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>  }</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span> </div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  Ch indentChar_;</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  <span class="keywordtype">unsigned</span> indentCharCount_;</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  <a class="code" href="namespacerapidjson.html#a084b31753ef2edefdeca8a5374eccc4b">PrettyFormatOptions</a> formatOptions_;</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span> </div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span> <span class="keyword">private</span>:</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  <span class="comment">// Prohibit copy constructor & assignment operator.</span></div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  <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>&);</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  <a class="code" href="classrapidjson_1_1_pretty_writer.html">PrettyWriter</a>& operator=(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_pretty_writer.html">PrettyWriter</a>&);</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span> };</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span> </div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span> RAPIDJSON_NAMESPACE_END</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span> </div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span> <span class="preprocessor">#if defined(__clang__)</span></div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span> RAPIDJSON_DIAG_POP</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span> </div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span> <span class="preprocessor">#ifdef __GNUC__</span></div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span> RAPIDJSON_DIAG_POP</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span> </div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span> <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> <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> <span class="comment">// </span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <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> <span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">// Licensed under the MIT License (the "License"); you may not use this file except</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <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> <span class="comment">//</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">// http://opensource.org/licenses/MIT</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">//</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <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> <span class="comment">// under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR </span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <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> <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> </div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor">#ifndef RAPIDJSON_PRETTYWRITER_H_</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#define RAPIDJSON_PRETTYWRITER_H_</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> </div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#include "writer.h"</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> </div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#ifdef __GNUC__</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> RAPIDJSON_DIAG_PUSH</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> RAPIDJSON_DIAG_OFF(effc++)</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> </div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#if defined(__clang__)</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> RAPIDJSON_DIAG_PUSH</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> RAPIDJSON_DIAG_OFF(c++98-compat)</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> </div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> RAPIDJSON_NAMESPACE_BEGIN</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="comment"></span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="comment">//! Combination of PrettyWriter format flags.</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="comment"></span><span class="comment">/*! \see PrettyWriter::SetFormatOptions</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <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> <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>  <a class="code" href="namespacerapidjson.html#a084b31753ef2edefdeca8a5374eccc4ba8164b0d4993439856171585b9cf3adc0">kFormatDefault</a> = 0, <span class="comment">//!< 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> <span class="comment"></span> <a class="code" href="namespacerapidjson.html#a084b31753ef2edefdeca8a5374eccc4ba64b0f8a37ab3125118682046ff06500f">kFormatSingleLineArray</a> = 1 <span class="comment">//!< Format arrays on a single line.</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="comment"></span>};</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="comment"></span></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="comment">//! Writer with indentation and spacing.</span></div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="comment"></span><span class="comment">/*!</span></div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="comment"> \tparam OutputStream Type of output os.</span></div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="comment"> \tparam SourceEncoding Encoding of source string.</span></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="comment"> \tparam TargetEncoding Encoding of output stream.</span></div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <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> <span class="comment">*/</span></div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="keyword">template</span><<span class="keyword">typename</span> OutputStream, <span class="keyword">typename</span> SourceEncoding = UTF8<>, <span class="keyword">typename</span> TargetEncoding = UTF8<>, <span class="keyword">typename</span> StackAllocator = CrtAllocator, <span class="keywordtype">unsigned</span> writeFlags = kWriteDefaultFlags></div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <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><OutputStream, SourceEncoding, TargetEncoding, StackAllocator, writeFlags> {</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_writer.html">Writer<OutputStream, SourceEncoding, TargetEncoding, StackAllocator, writeFlags></a> Base;</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <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> <span class="comment"></span></div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="comment"> //! Constructor</span></div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <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> <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> <span class="comment"> \param levelDepth Initial capacity of stack.</span></div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <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>  <span class="keyword">explicit</span> <a class="code" href="classrapidjson_1_1_pretty_writer.html#a688d7ebf5c8015e423b7a970afc8e0a0">PrettyWriter</a>(OutputStream& 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>  Base(os, allocator, levelDepth), indentChar_(<span class="stringliteral">' '</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> </div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span> </div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <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>  Base(allocator, levelDepth), indentChar_(<span class="charliteral">' '</span>), indentCharCount_(4) {}</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span> </div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="preprocessor">#if RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <a class="code" href="classrapidjson_1_1_pretty_writer.html">PrettyWriter</a>(<a class="code" href="classrapidjson_1_1_pretty_writer.html">PrettyWriter</a>&& rhs) :</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  Base(std::forward<PrettyWriter>(rhs)), indentChar_(rhs.indentChar_), indentCharCount_(rhs.indentCharCount_), formatOptions_(rhs.formatOptions_) {}</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="comment"></span></div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="comment"> //! Set custom indentation.</span></div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="comment"></span><span class="comment"> /*! \param indentChar Character for indentation. Must be whitespace character (' ', '\\t', '\\n', '\\r').</span></div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <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> <span class="comment"> \note The default indentation is 4 spaces.</span></div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <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>  <a class="code" href="classrapidjson_1_1_pretty_writer.html">PrettyWriter</a>& <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>  <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">' '</span> || indentChar == <span class="charliteral">'\t'</span> || indentChar == <span class="charliteral">'\n'</span> || indentChar == <span class="charliteral">'\r'</span>);</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  indentChar_ = indentChar;</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  indentCharCount_ = indentCharCount;</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  }</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="comment"></span></div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="comment"> //! Set pretty writer formatting options.</span></div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <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> <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>  <a class="code" href="classrapidjson_1_1_pretty_writer.html">PrettyWriter</a>& <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>  formatOptions_ = options;</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  }</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="comment"></span></div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="comment"> /*! @name Implementation of Handler</span></div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="comment"> \see Handler</span></div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="comment"> */</span><span class="comment"></span></div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <span class="comment"> //@{</span></div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span> <span class="comment"></span></div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  <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>  <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>  <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>  <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>  <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>  <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>  <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> </div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  <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>  <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>  (void)copy;</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  PrettyPrefix(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a">kNumberType</a>);</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  <span class="keywordflow">return</span> Base::EndValue(Base::WriteString(str, length));</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  }</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span> </div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  <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>  <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>  (void)copy;</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  PrettyPrefix(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4ad6379da3dc04b83a591992bfb9fabba7">kStringType</a>);</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <span class="keywordflow">return</span> Base::EndValue(Base::WriteString(str, length));</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  }</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span> </div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span> <span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  <span class="keywordtype">bool</span> String(<span class="keyword">const</span> std::basic_string<Ch>& str) {</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  <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>  }</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span> </div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  <span class="keywordtype">bool</span> StartObject() {</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  PrettyPrefix(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4acf030b422a32c3647c7c5973bd4dd0a9">kObjectType</a>);</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  <span class="keyword">new</span> (Base::level_stack_.template Push<typename Base::Level>()) <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>  <span class="keywordflow">return</span> Base::WriteStartObject();</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  }</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span> </div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  <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> </div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  <span class="keywordtype">bool</span> Key(<span class="keyword">const</span> std::basic_string<Ch>& str) {</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  <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>  }</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  </div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  <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>  (void)memberCount;</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</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>(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>)); <span class="comment">// not inside an Object</span></div><div class="line"><a name="l00140"></a><span class="lineno"> 140</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>(!Base::level_stack_.<span class="keyword">template</span> Top<typename Base::Level>()->inArray); <span class="comment">// currently inside an Array, not Object</span></div><div class="line"><a name="l00141"></a><span class="lineno"> 141</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>(0 == Base::level_stack_.<span class="keyword">template</span> Top<typename Base::Level>()->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>  </div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  <span class="keywordtype">bool</span> empty = Base::level_stack_.template Pop<typename Base::Level>(1)->valueCount == 0;</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span> </div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  <span class="keywordflow">if</span> (!empty) {</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  Base::os_->Put(<span class="charliteral">'\n'</span>);</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  WriteIndent();</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  }</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  <span class="keywordtype">bool</span> ret = Base::EndValue(Base::WriteEndObject());</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  (void)ret;</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</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>(ret == <span class="keyword">true</span>);</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  <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>  Base::Flush();</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  }</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span> </div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  <span class="keywordtype">bool</span> StartArray() {</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  PrettyPrefix(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a058c622e1e7d59419ae58b895cbce468">kArrayType</a>);</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  <span class="keyword">new</span> (Base::level_stack_.template Push<typename Base::Level>()) <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>  <span class="keywordflow">return</span> Base::WriteStartArray();</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  }</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span> </div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  <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>  (void)memberCount;</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</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>(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>));</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</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>(Base::level_stack_.<span class="keyword">template</span> Top<typename Base::Level>()->inArray);</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  <span class="keywordtype">bool</span> empty = Base::level_stack_.template Pop<typename Base::Level>(1)->valueCount == 0;</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span> </div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  <span class="keywordflow">if</span> (!empty && !(formatOptions_ & <a class="code" href="namespacerapidjson.html#a084b31753ef2edefdeca8a5374eccc4ba64b0f8a37ab3125118682046ff06500f">kFormatSingleLineArray</a>)) {</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  Base::os_->Put(<span class="charliteral">'\n'</span>);</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  WriteIndent();</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  }</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  <span class="keywordtype">bool</span> ret = Base::EndValue(Base::WriteEndArray());</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  (void)ret;</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</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>(ret == <span class="keyword">true</span>);</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  <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>  Base::Flush();</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  }</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span> <span class="comment"></span></div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span> <span class="comment"> //@}</span></div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span> <span class="comment"> /*! @name Convenience extensions */</span><span class="comment"></span></div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span> <span class="comment"> //@{</span></div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span> <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> <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>  <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> <span class="comment"></span></div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span> <span class="comment"> //@}</span></div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span> <span class="comment"> //! Write a raw JSON value.</span></div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span> <span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span> <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> <span class="comment"></span></div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span> <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> <span class="comment"> \param length Length of the json.</span></div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span> <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> <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> <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>  <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>  <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>  PrettyPrefix(type);</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  <span class="keywordflow">return</span> Base::EndValue(Base::WriteRawValue(json, length));</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  }</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span> </div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span> <span class="keyword">protected</span>:</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  <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>  (void)type;</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  <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>  <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<typename Base::Level>();</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span> </div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  <span class="keywordflow">if</span> (level-><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>  <span class="keywordflow">if</span> (level-><a class="code" href="structrapidjson_1_1_writer_1_1_level.html#a5d17bdfa9ded5de72f5f91175cc3e36b">valueCount</a> > 0) {</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  Base::os_->Put(<span class="charliteral">','</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>  <span class="keywordflow">if</span> (formatOptions_ & <a class="code" href="namespacerapidjson.html#a084b31753ef2edefdeca8a5374eccc4ba64b0f8a37ab3125118682046ff06500f">kFormatSingleLineArray</a>)</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  Base::os_->Put(<span class="charliteral">' '</span>);</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  }</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span> </div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  <span class="keywordflow">if</span> (!(formatOptions_ & <a class="code" href="namespacerapidjson.html#a084b31753ef2edefdeca8a5374eccc4ba64b0f8a37ab3125118682046ff06500f">kFormatSingleLineArray</a>)) {</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  Base::os_->Put(<span class="charliteral">'\n'</span>);</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  WriteIndent();</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  }</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  }</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  <span class="keywordflow">else</span> { <span class="comment">// in object</span></div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  <span class="keywordflow">if</span> (level-><a class="code" href="structrapidjson_1_1_writer_1_1_level.html#a5d17bdfa9ded5de72f5f91175cc3e36b">valueCount</a> > 0) {</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  <span class="keywordflow">if</span> (level-><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>  Base::os_->Put(<span class="charliteral">','</span>);</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  Base::os_->Put(<span class="charliteral">'\n'</span>);</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  }</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  <span class="keywordflow">else</span> {</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  Base::os_->Put(<span class="charliteral">':'</span>);</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  Base::os_->Put(<span class="charliteral">' '</span>);</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  }</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  }</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  Base::os_->Put(<span class="charliteral">'\n'</span>);</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span> </div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  <span class="keywordflow">if</span> (level-><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>  WriteIndent();</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  }</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  <span class="keywordflow">if</span> (!level-><a class="code" href="structrapidjson_1_1_writer_1_1_level.html#a59255e3b1d371161f7c894503cfd6bec">inArray</a> && level-><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>  <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's in object, then even number should be a name</span></div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  level-><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>  }</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  <span class="keywordflow">else</span> {</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</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>(!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>  Base::hasRoot_ = <span class="keyword">true</span>;</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>  }</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  }</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span> </div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  <span class="keywordtype">void</span> WriteIndent() {</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>  <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>  <a class="code" href="namespacerapidjson.html#a1ac13bac5976fc06587e00fc0bcfb32a">PutN</a>(*Base::os_, static_cast<typename OutputStream::Ch>(indentChar_), count);</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>  }</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span> </div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  Ch indentChar_;</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  <span class="keywordtype">unsigned</span> indentCharCount_;</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  <a class="code" href="namespacerapidjson.html#a084b31753ef2edefdeca8a5374eccc4b">PrettyFormatOptions</a> formatOptions_;</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span> </div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span> <span class="keyword">private</span>:</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  <span class="comment">// Prohibit copy constructor & assignment operator.</span></div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  <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>&);</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  <a class="code" href="classrapidjson_1_1_pretty_writer.html">PrettyWriter</a>& operator=(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_pretty_writer.html">PrettyWriter</a>&);</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span> };</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span> </div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span> RAPIDJSON_NAMESPACE_END</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span> </div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span> <span class="preprocessor">#if defined(__clang__)</span></div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span> RAPIDJSON_DIAG_POP</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span> </div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span> <span class="preprocessor">#ifdef __GNUC__</span></div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span> RAPIDJSON_DIAG_POP</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span> </div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span> <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 &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 & 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 &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 & 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 </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)   (x)</td></tr> <tr class="memdesc:ga6a2b1695c13e77ae425e3cbac980ccb5"><td class="mdescLeft"> </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"> </td></tr> -<tr class="memitem:a2b2a0d9143aa4fb31205a85b34c43952"><td class="memItemLeft" align="right" valign="top"><a id="a2b2a0d9143aa4fb31205a85b34c43952"></a> -#define </td><td class="memItemRight" valign="bottom"><b>RAPIDJSON_NOEXCEPT_ASSERT</b>(x)   <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"> </td></tr> +<tr class="memitem:ga2b2a0d9143aa4fb31205a85b34c43952"><td class="memItemLeft" align="right" valign="top">#define </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)   <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"> </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"> </td></tr> <tr class="memitem:abdc7cd7902748ffe6626d71c59a73c3b"><td class="memItemLeft" align="right" valign="top"><a id="abdc7cd7902748ffe6626d71c59a73c3b"></a> #define </td><td class="memItemRight" valign="bottom"><a class="el" href="rapidjson_8h.html#abdc7cd7902748ffe6626d71c59a73c3b">RAPIDJSON_NEW</a>(TypeName)   new TypeName</td></tr> <tr class="memdesc:abdc7cd7902748ffe6626d71c59a73c3b"><td class="mdescLeft"> </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> <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> <span class="comment">// </span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <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> <span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">// Licensed under the MIT License (the "License"); you may not use this file except</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <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> <span class="comment">//</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">// http://opensource.org/licenses/MIT</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">//</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <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> <span class="comment">// under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR </span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <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> <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> </div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor">#ifndef RAPIDJSON_RAPIDJSON_H_</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#define RAPIDJSON_RAPIDJSON_H_</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"></span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">/*!\file rapidjson.h</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment"> \brief common definitions and configuration</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="comment"> </span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment"> \see RAPIDJSON_CONFIG</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="comment"> */</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment"></span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="comment">/*! \defgroup RAPIDJSON_CONFIG RapidJSON configuration</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="comment"> \brief Configuration macros for library features</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="comment"></span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <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> <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> <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> <span class="comment"> preprocessor macros at compile-time.</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="comment"></span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <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> <span class="comment"></span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <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> <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> <span class="comment"> different translation units of a single application.</span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="comment"> */</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="preprocessor">#include <cstdlib></span> <span class="comment">// malloc(), realloc(), free(), size_t</span></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="preprocessor">#include <cstring></span> <span class="comment">// memset(), memcpy(), memmove(), memcmp()</span></div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="comment"></span></div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="comment"></span><span class="comment">// RAPIDJSON_VERSION_STRING</span></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="comment">//</span></div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <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> <span class="comment">//</span></div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="comment"></span></div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="comment">//!@cond RAPIDJSON_HIDDEN_FROM_DOXYGEN</span></div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="comment"></span><span class="comment">// token stringification</span></div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <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> <span class="preprocessor">#define RAPIDJSON_DO_STRINGIFY(x) #x</span></div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span> </div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="comment">// token concatenation</span></div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <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> <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> <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> <span class="comment">//!@endcond</span></div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="comment">/*! \def RAPIDJSON_MAJOR_VERSION</span></div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="comment"> \ingroup RAPIDJSON_CONFIG</span></div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="comment"> \brief Major version of RapidJSON in integer.</span></div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="comment">*/</span><span class="comment"></span></div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="comment">/*! \def RAPIDJSON_MINOR_VERSION</span></div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="comment"> \ingroup RAPIDJSON_CONFIG</span></div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="comment"> \brief Minor version of RapidJSON in integer.</span></div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="comment">*/</span><span class="comment"></span></div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="comment">/*! \def RAPIDJSON_PATCH_VERSION</span></div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="comment"> \ingroup RAPIDJSON_CONFIG</span></div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="comment"> \brief Patch version of RapidJSON in integer.</span></div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="comment">*/</span><span class="comment"></span></div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="comment">/*! \def RAPIDJSON_VERSION_STRING</span></div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="comment"> \ingroup RAPIDJSON_CONFIG</span></div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="comment"> \brief Version of RapidJSON in "<major>.<minor>.<patch>" string format.</span></div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <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> <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> <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> <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> <span class="preprocessor">#define RAPIDJSON_VERSION_STRING \</span></div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <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> <span class="comment"></span></div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <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> <span class="comment">/*! \def RAPIDJSON_NAMESPACE</span></div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <span class="comment"> \ingroup RAPIDJSON_CONFIG</span></div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="comment"> \brief provide custom rapidjson namespace</span></div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="comment"></span></div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="comment"> In order to avoid symbol clashes and/or "One Definition Rule" errors</span></div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <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> <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> <span class="comment"> namespace.</span></div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="comment"></span></div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <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> <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> <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> <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> <span class="comment"></span></div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <span class="comment"> \code</span></div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="comment"> // in some .cpp file</span></div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span> <span class="comment"> #define RAPIDJSON_NAMESPACE my::rapidjson</span></div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span> <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> <span class="comment"> #define RAPIDJSON_NAMESPACE_END } }</span></div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <span class="comment"> #include "rapidjson/..."</span></div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="comment"> \endcode</span></div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <span class="comment"></span></div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <span class="comment"> \see rapidjson</span></div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <span class="comment"> */</span><span class="comment"></span></div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <span class="comment">/*! \def RAPIDJSON_NAMESPACE_BEGIN</span></div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <span class="comment"> \ingroup RAPIDJSON_CONFIG</span></div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span> <span class="comment"> \brief provide custom rapidjson namespace (opening expression)</span></div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <span class="comment"> \see RAPIDJSON_NAMESPACE</span></div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <span class="comment">*/</span><span class="comment"></span></div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <span class="comment">/*! \def RAPIDJSON_NAMESPACE_END</span></div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <span class="comment"> \ingroup RAPIDJSON_CONFIG</span></div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="comment"> \brief provide custom rapidjson namespace (closing expression)</span></div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="comment"> \see RAPIDJSON_NAMESPACE</span></div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <span class="comment">*/</span></div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span> <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> <span class="preprocessor">#define RAPIDJSON_NAMESPACE rapidjson</span></div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <span class="preprocessor">#ifndef RAPIDJSON_NAMESPACE_BEGIN</span></div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <span class="preprocessor">#define RAPIDJSON_NAMESPACE_BEGIN namespace RAPIDJSON_NAMESPACE {</span></div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <span class="preprocessor">#ifndef RAPIDJSON_NAMESPACE_END</span></div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span> <span class="preprocessor">#define RAPIDJSON_NAMESPACE_END }</span></div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span> <span class="comment"></span></div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span> <span class="comment"></span><span class="comment">// RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span> </div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span> <span class="preprocessor">#ifndef RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <span class="preprocessor">#ifdef RAPIDJSON_DOXYGEN_RUNNING</span></div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <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> <span class="preprocessor">#else</span></div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span> <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> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span> <span class="comment">/*! \def RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span> <span class="comment"> \ingroup RAPIDJSON_CONFIG</span></div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <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> <span class="comment"></span></div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span> <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> <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> <span class="comment"> for construction and comparison.</span></div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span> <span class="comment"></span></div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span> <span class="comment"> \hideinitializer</span></div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span> <span class="comment">*/</span></div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span> <span class="preprocessor">#endif // !defined(RAPIDJSON_HAS_STDSTRING)</span></div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span> </div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span> <span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span> <span class="preprocessor">#include <string></span></div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span> <span class="preprocessor">#endif // RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span> <span class="comment"></span></div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span> <span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span> <span class="comment"></span><span class="comment">// RAPIDJSON_NO_INT64DEFINE</span></div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span> <span class="comment"></span></div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span> <span class="comment">/*! \def RAPIDJSON_NO_INT64DEFINE</span></div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span> <span class="comment"> \ingroup RAPIDJSON_CONFIG</span></div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span> <span class="comment"> \brief Use external 64-bit integer types.</span></div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span> <span class="comment"></span></div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span> <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> <span class="comment"> to be available at global scope.</span></div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span> <span class="comment"></span></div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span> <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> <span class="comment"> prevent RapidJSON from defining its own types.</span></div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span> <span class="comment">*/</span></div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span> <span class="preprocessor">#ifndef RAPIDJSON_NO_INT64DEFINE</span></div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span> <span class="comment">//!@cond RAPIDJSON_HIDDEN_FROM_DOXYGEN</span></div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span> <span class="comment"></span><span class="preprocessor">#if defined(_MSC_VER) && (_MSC_VER < 1800) // Visual Studio 2013</span></div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span> <span class="preprocessor">#include "msinttypes/stdint.h"</span></div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span> <span class="preprocessor">#include "msinttypes/inttypes.h"</span></div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span> <span class="preprocessor">#else</span></div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span> <span class="comment">// Other compilers should have this.</span></div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span> <span class="preprocessor">#include <stdint.h></span></div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span> <span class="preprocessor">#include <inttypes.h></span></div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span> <span class="comment">//!@endcond</span></div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span> <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> <span class="preprocessor">#define RAPIDJSON_NO_INT64DEFINE</span></div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span> <span class="preprocessor">#endif // RAPIDJSON_NO_INT64TYPEDEF</span></div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span> <span class="comment"></span></div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span> <span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span> <span class="comment"></span><span class="comment">// RAPIDJSON_FORCEINLINE</span></div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span> </div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span> <span class="preprocessor">#ifndef RAPIDJSON_FORCEINLINE</span></div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span> <span class="comment">//!@cond RAPIDJSON_HIDDEN_FROM_DOXYGEN</span></div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span> <span class="comment"></span><span class="preprocessor">#if defined(_MSC_VER) && defined(NDEBUG)</span></div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span> <span class="preprocessor">#define RAPIDJSON_FORCEINLINE __forceinline</span></div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span> <span class="preprocessor">#elif defined(__GNUC__) && __GNUC__ >= 4 && defined(NDEBUG)</span></div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span> <span class="preprocessor">#define RAPIDJSON_FORCEINLINE __attribute__((always_inline))</span></div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span> <span class="preprocessor">#else</span></div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span> <span class="preprocessor">#define RAPIDJSON_FORCEINLINE</span></div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span> <span class="comment">//!@endcond</span></div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span> <span class="comment"></span><span class="preprocessor">#endif // RAPIDJSON_FORCEINLINE</span></div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span> <span class="comment"></span></div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span> <span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span> <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> <span class="preprocessor">#define RAPIDJSON_LITTLEENDIAN 0 </span><span class="comment">//!< 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> <span class="comment"></span>#define RAPIDJSON_BIGENDIAN 1 <span class="comment">//!< Big endian machine</span></div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span> <span class="comment"></span></div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span> <span class="comment">//! Endianness of the machine.</span></div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span> <span class="comment"></span><span class="comment">/*!</span></div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span> <span class="comment"> \def RAPIDJSON_ENDIAN</span></div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span> <span class="comment"> \ingroup RAPIDJSON_CONFIG</span></div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span> <span class="comment"></span></div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span> <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> <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> <span class="comment"> \ref RAPIDJSON_LITTLEENDIAN or \ref RAPIDJSON_BIGENDIAN.</span></div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span> <span class="comment"></span></div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span> <span class="comment"> Default detection implemented with reference to</span></div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span> <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> <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> <span class="comment">*/</span></div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span> <span class="preprocessor">#ifndef RAPIDJSON_ENDIAN</span></div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span> <span class="comment">// Detect with GCC 4.6's macro</span></div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span> <span class="preprocessor"># ifdef __BYTE_ORDER__</span></div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span> <span class="preprocessor"># if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__</span></div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span> <span class="preprocessor"># define RAPIDJSON_ENDIAN RAPIDJSON_LITTLEENDIAN</span></div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span> <span class="preprocessor"># elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__</span></div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span> <span class="preprocessor"># define RAPIDJSON_ENDIAN RAPIDJSON_BIGENDIAN</span></div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span> <span class="preprocessor"># else</span></div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span> <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> <span class="preprocessor"># endif // __BYTE_ORDER__</span></div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span> <span class="comment">// Detect with GLIBC's endian.h</span></div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span> <span class="preprocessor"># elif defined(__GLIBC__)</span></div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span> <span class="preprocessor"># include <endian.h></span></div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span> <span class="preprocessor"># if (__BYTE_ORDER == __LITTLE_ENDIAN)</span></div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span> <span class="preprocessor"># define RAPIDJSON_ENDIAN RAPIDJSON_LITTLEENDIAN</span></div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span> <span class="preprocessor"># elif (__BYTE_ORDER == __BIG_ENDIAN)</span></div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span> <span class="preprocessor"># define RAPIDJSON_ENDIAN RAPIDJSON_BIGENDIAN</span></div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span> <span class="preprocessor"># else</span></div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span> <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> <span class="preprocessor"># endif // __GLIBC__</span></div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span> <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> <span class="preprocessor"># elif defined(_LITTLE_ENDIAN) && !defined(_BIG_ENDIAN)</span></div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span> <span class="preprocessor"># define RAPIDJSON_ENDIAN RAPIDJSON_LITTLEENDIAN</span></div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span> <span class="preprocessor"># elif defined(_BIG_ENDIAN) && !defined(_LITTLE_ENDIAN)</span></div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span> <span class="preprocessor"># define RAPIDJSON_ENDIAN RAPIDJSON_BIGENDIAN</span></div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span> <span class="comment">// Detect with architecture macros</span></div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span> <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> <span class="preprocessor"># define RAPIDJSON_ENDIAN RAPIDJSON_BIGENDIAN</span></div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span> <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> <span class="preprocessor"># define RAPIDJSON_ENDIAN RAPIDJSON_LITTLEENDIAN</span></div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span> <span class="preprocessor"># elif defined(_MSC_VER) && (defined(_M_ARM) || defined(_M_ARM64))</span></div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span> <span class="preprocessor"># define RAPIDJSON_ENDIAN RAPIDJSON_LITTLEENDIAN</span></div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span> <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> <span class="preprocessor"># define RAPIDJSON_ENDIAN</span></div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span> <span class="preprocessor"># else</span></div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span> <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> <span class="preprocessor"># endif</span></div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span> <span class="preprocessor">#endif // RAPIDJSON_ENDIAN</span></div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span> <span class="comment"></span></div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span> <span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span> <span class="comment"></span><span class="comment">// RAPIDJSON_64BIT</span></div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span> <span class="comment"></span></div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span> <span class="comment">//! Whether using 64-bit architecture</span></div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span> <span class="comment"></span><span class="preprocessor">#ifndef RAPIDJSON_64BIT</span></div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span> <span class="preprocessor">#if defined(__LP64__) || (defined(__x86_64__) && defined(__ILP32__)) || defined(_WIN64) || defined(__EMSCRIPTEN__)</span></div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span> <span class="preprocessor">#define RAPIDJSON_64BIT 1</span></div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span> <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> <span class="preprocessor">#define RAPIDJSON_64BIT 0</span></div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span> <span class="preprocessor">#endif // RAPIDJSON_64BIT</span></div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span> <span class="comment"></span></div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span> <span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span> <span class="comment"></span><span class="comment">// RAPIDJSON_ALIGN</span></div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span> <span class="comment"></span></div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span> <span class="comment">//! Data alignment of the machine.</span></div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span> <span class="comment"></span><span class="comment">/*! \ingroup RAPIDJSON_CONFIG</span></div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span> <span class="comment"> \param x pointer to align</span></div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span> <span class="comment"></span></div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span> <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> <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> <span class="comment">*/</span></div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span> <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> <span class="preprocessor">#define RAPIDJSON_ALIGN(x) (((x) + static_cast<size_t>(7u)) & ~static_cast<size_t>(7u))</span></div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span> <span class="comment"></span></div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span> <span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span> <span class="comment"></span><span class="comment">// RAPIDJSON_UINT64_C2</span></div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span> <span class="comment"></span></div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span> <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> <span class="comment"></span><span class="comment">/*!</span></div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span> <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> <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> <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> <span class="comment">*/</span></div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span> <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> <span class="preprocessor">#define RAPIDJSON_UINT64_C2(high32, low32) ((static_cast<uint64_t>(high32) << 32) | static_cast<uint64_t>(low32))</span></div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span> <span class="comment"></span></div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span> <span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span> <span class="comment"></span><span class="comment">// RAPIDJSON_48BITPOINTER_OPTIMIZATION</span></div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span> <span class="comment"></span></div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span> <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> <span class="comment"></span><span class="comment">/*!</span></div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span> <span class="comment"> \ingroup RAPIDJSON_CONFIG</span></div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span> <span class="comment"></span></div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span> <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> <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> <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> <span class="comment">*/</span></div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span> <span class="preprocessor">#ifndef RAPIDJSON_48BITPOINTER_OPTIMIZATION</span></div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span> <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> <span class="preprocessor">#define RAPIDJSON_48BITPOINTER_OPTIMIZATION 1</span></div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span> <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> <span class="preprocessor">#define RAPIDJSON_48BITPOINTER_OPTIMIZATION 0</span></div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span> <span class="preprocessor">#endif // RAPIDJSON_48BITPOINTER_OPTIMIZATION</span></div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span> </div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span> <span class="preprocessor">#if RAPIDJSON_48BITPOINTER_OPTIMIZATION == 1</span></div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span> <span class="preprocessor">#if RAPIDJSON_64BIT != 1</span></div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span> <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> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span> <span class="preprocessor">#define RAPIDJSON_SETPOINTER(type, p, x) (p = reinterpret_cast<type *>((reinterpret_cast<uintptr_t>(p) & static_cast<uintptr_t>(RAPIDJSON_UINT64_C2(0xFFFF0000, 0x00000000))) | reinterpret_cast<uintptr_t>(reinterpret_cast<const void*>(x))))</span></div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span> <span class="preprocessor">#define RAPIDJSON_GETPOINTER(type, p) (reinterpret_cast<type *>(reinterpret_cast<uintptr_t>(p) & static_cast<uintptr_t>(RAPIDJSON_UINT64_C2(0x0000FFFF, 0xFFFFFFFF))))</span></div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span> <span class="preprocessor">#else</span></div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span> <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> <span class="preprocessor">#define RAPIDJSON_GETPOINTER(type, p) (p)</span></div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span> <span class="comment"></span></div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span> <span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span> <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> <span class="comment"></span></div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span> <span class="comment">/*! \def RAPIDJSON_SIMD</span></div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span> <span class="comment"> \ingroup RAPIDJSON_CONFIG</span></div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span> <span class="comment"> \brief Enable SSE2/SSE4.2/Neon optimization.</span></div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span> <span class="comment"></span></div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span> <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> <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> <span class="comment"> or ARM compatible processors.</span></div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span> <span class="comment"></span></div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span> <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> <span class="comment"> \code</span></div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span> <span class="comment"> // Enable SSE2 optimization.</span></div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span> <span class="comment"> #define RAPIDJSON_SSE2</span></div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span> <span class="comment"></span></div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span> <span class="comment"> // Enable SSE4.2 optimization.</span></div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span> <span class="comment"> #define RAPIDJSON_SSE42</span></div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span> <span class="comment"> \endcode</span></div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span> <span class="comment"></span></div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span> <span class="comment"> // Enable ARM Neon optimization.</span></div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span> <span class="comment"> #define RAPIDJSON_NEON</span></div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span> <span class="comment"> \endcode</span></div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span> <span class="comment"></span></div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span> <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> <span class="comment"></span></div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span> <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> <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> <span class="comment">*/</span></div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span> <span class="preprocessor">#if defined(RAPIDJSON_SSE2) || defined(RAPIDJSON_SSE42) \</span></div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span> <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> <span class="preprocessor">#define RAPIDJSON_SIMD</span></div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span> <span class="comment"></span></div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span> <span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span> <span class="comment"></span><span class="comment">// RAPIDJSON_NO_SIZETYPEDEFINE</span></div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span> </div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span> <span class="preprocessor">#ifndef RAPIDJSON_NO_SIZETYPEDEFINE</span></div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span> <span class="comment">/*! \def RAPIDJSON_NO_SIZETYPEDEFINE</span></div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span> <span class="comment"> \ingroup RAPIDJSON_CONFIG</span></div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span> <span class="comment"> \brief User-provided \c SizeType definition.</span></div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span> <span class="comment"></span></div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span> <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> <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> <span class="comment"> before including RapidJSON:</span></div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span> <span class="comment"> \code</span></div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span> <span class="comment"> #define RAPIDJSON_NO_SIZETYPEDEFINE</span></div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span> <span class="comment"> namespace rapidjson { typedef ::std::size_t SizeType; }</span></div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span> <span class="comment"> #include "rapidjson/..."</span></div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span> <span class="comment"> \endcode</span></div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span> <span class="comment"></span></div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span> <span class="comment"> \see rapidjson::SizeType</span></div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span> <span class="comment">*/</span></div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span> <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> <span class="preprocessor">#define RAPIDJSON_NO_SIZETYPEDEFINE</span></div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span> <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> RAPIDJSON_NAMESPACE_BEGIN<span class="comment"></span></div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span> <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> <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> <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> <span class="comment"> \ref RAPIDJSON_NO_SIZETYPEDEFINE.</span></div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span> <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> <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> RAPIDJSON_NAMESPACE_END</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span> </div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span> <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> RAPIDJSON_NAMESPACE_BEGIN</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span> <span class="keyword">using</span> std::size_t;</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span> RAPIDJSON_NAMESPACE_END</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span> <span class="comment"></span></div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span> <span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span> <span class="comment"></span><span class="comment">// RAPIDJSON_ASSERT</span></div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span> <span class="comment"></span></div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span> <span class="comment">//! Assertion.</span></div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span> <span class="comment"></span><span class="comment">/*! \ingroup RAPIDJSON_CONFIG</span></div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span> <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> <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> <span class="comment"></span></div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span> <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> <span class="comment"> \ref RAPIDJSON_ERRORS APIs.</span></div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span> <span class="comment">*/</span></div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span> <span class="preprocessor">#ifndef RAPIDJSON_ASSERT</span></div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span> <span class="preprocessor">#include <cassert></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> <span class="preprocessor">#define RAPIDJSON_ASSERT(x) assert(x)</span></div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span> <span class="preprocessor">#endif // RAPIDJSON_ASSERT</span></div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span> <span class="comment"></span></div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span> <span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span> <span class="comment"></span><span class="comment">// RAPIDJSON_STATIC_ASSERT</span></div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span> </div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span> <span class="comment">// Prefer C++11 static_assert, if available</span></div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span> <span class="preprocessor">#ifndef RAPIDJSON_STATIC_ASSERT</span></div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span> <span class="preprocessor">#if __cplusplus >= 201103L || ( defined(_MSC_VER) && _MSC_VER >= 1800 )</span></div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span> <span class="preprocessor">#define RAPIDJSON_STATIC_ASSERT(x) \</span></div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span> <span class="preprocessor"> static_assert(x, RAPIDJSON_STRINGIFY(x))</span></div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span> <span class="preprocessor">#endif // C++11</span></div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span> <span class="preprocessor">#endif // RAPIDJSON_STATIC_ASSERT</span></div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span> </div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span> <span class="comment">// Adopt C++03 implementation from boost</span></div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span> <span class="preprocessor">#ifndef RAPIDJSON_STATIC_ASSERT</span></div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span> <span class="preprocessor">#ifndef __clang__</span></div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span> <span class="comment">//!@cond RAPIDJSON_HIDDEN_FROM_DOXYGEN</span></div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span> <span class="comment"></span><span class="preprocessor">#endif</span></div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span> RAPIDJSON_NAMESPACE_BEGIN</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span> <span class="keyword">template</span> <<span class="keywordtype">bool</span> x> <span class="keyword">struct </span>STATIC_ASSERTION_FAILURE;</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span> <span class="keyword">template</span> <> <span class="keyword">struct </span>STATIC_ASSERTION_FAILURE<true> { <span class="keyword">enum</span> { value = 1 }; };</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span> <span class="keyword">template</span> <<span class="keywordtype">size_t</span> x> <span class="keyword">struct </span>StaticAssertTest {};</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span> RAPIDJSON_NAMESPACE_END</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span> </div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span> <span class="preprocessor">#if defined(__GNUC__) || defined(__clang__)</span></div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span> <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> <span class="preprocessor">#else</span></div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span> <span class="preprocessor">#define RAPIDJSON_STATIC_ASSERT_UNUSED_ATTRIBUTE </span></div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span> <span class="preprocessor">#ifndef __clang__</span></div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span> <span class="comment">//!@endcond</span></div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span> <span class="comment"></span><span class="preprocessor">#endif</span></div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span> <span class="comment"></span></div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span> <span class="comment">/*! \def RAPIDJSON_STATIC_ASSERT</span></div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span> <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> <span class="comment"> \param x compile-time condition</span></div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span> <span class="comment"> \hideinitializer</span></div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span> <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> <span class="preprocessor">#define RAPIDJSON_STATIC_ASSERT(x) \</span></div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span> <span class="preprocessor"> typedef ::RAPIDJSON_NAMESPACE::StaticAssertTest< \</span></div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span> <span class="preprocessor"> sizeof(::RAPIDJSON_NAMESPACE::STATIC_ASSERTION_FAILURE<bool(x) >)> \</span></div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span> <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> <span class="preprocessor">#endif // RAPIDJSON_STATIC_ASSERT</span></div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span> <span class="comment"></span></div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span> <span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span> <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> <span class="comment"></span></div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span> <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> <span class="comment"></span><span class="comment">/*!</span></div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span> <span class="comment"> \ingroup RAPIDJSON_CONFIG</span></div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span> <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> <span class="comment">*/</span></div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span> <span class="preprocessor">#ifndef RAPIDJSON_LIKELY</span></div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span> <span class="preprocessor">#if defined(__GNUC__) || defined(__clang__)</span></div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span> <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> <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> <span class="preprocessor">#define RAPIDJSON_LIKELY(x) (x)</span></div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span> <span class="comment"></span></div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span> <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> <span class="comment"></span><span class="comment">/*!</span></div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span> <span class="comment"> \ingroup RAPIDJSON_CONFIG</span></div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span> <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> <span class="comment">*/</span></div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span> <span class="preprocessor">#ifndef RAPIDJSON_UNLIKELY</span></div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span> <span class="preprocessor">#if defined(__GNUC__) || defined(__clang__)</span></div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span> <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> <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> <span class="preprocessor">#define RAPIDJSON_UNLIKELY(x) (x)</span></div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span> <span class="comment"></span></div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span> <span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span> <span class="comment"></span><span class="comment">// Helpers</span></div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span> <span class="comment"></span></div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span> <span class="comment">//!@cond RAPIDJSON_HIDDEN_FROM_DOXYGEN</span></div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span> <span class="comment"></span></div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span> <span class="preprocessor">#define RAPIDJSON_MULTILINEMACRO_BEGIN do { </span></div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span> <span class="preprocessor">#define RAPIDJSON_MULTILINEMACRO_END \</span></div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span> <span class="preprocessor">} while((void)0, 0)</span></div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span> </div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span> <span class="comment">// adopted from Boost</span></div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span> <span class="preprocessor">#define RAPIDJSON_VERSION_CODE(x,y,z) \</span></div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span> <span class="preprocessor"> (((x)*100000) + ((y)*100) + (z))</span></div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span> <span class="comment"></span></div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span> <span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span> <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> </div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span> <span class="preprocessor">#if defined(__GNUC__)</span></div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span> <span class="preprocessor">#define RAPIDJSON_GNUC \</span></div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span> <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> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span> </div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span> <span class="preprocessor">#if defined(__clang__) || (defined(RAPIDJSON_GNUC) && RAPIDJSON_GNUC >= RAPIDJSON_VERSION_CODE(4,2,0))</span></div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span> </div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span> <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> <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> <span class="preprocessor">#define RAPIDJSON_DIAG_OFF(x) \</span></div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span> <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> </div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span> <span class="comment">// push/pop support in Clang and GCC>=4.6</span></div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span> <span class="preprocessor">#if defined(__clang__) || (defined(RAPIDJSON_GNUC) && RAPIDJSON_GNUC >= RAPIDJSON_VERSION_CODE(4,6,0))</span></div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span> <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> <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> <span class="preprocessor">#else // GCC >= 4.2, < 4.6</span></div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span> <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> <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> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span> </div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span> <span class="preprocessor">#elif defined(_MSC_VER)</span></div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span> </div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span> <span class="comment">// pragma (MSVC specific)</span></div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span> <span class="preprocessor">#define RAPIDJSON_PRAGMA(x) __pragma(x)</span></div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span> <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> </div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span> <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> <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> <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> </div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span> <span class="preprocessor">#else</span></div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span> </div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span> <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> <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> <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> </div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span> <span class="preprocessor">#endif // RAPIDJSON_DIAG_*</span></div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span> <span class="comment"></span></div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span> <span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span> <span class="comment"></span><span class="comment">// C++11 features</span></div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span> </div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span> <span class="preprocessor">#ifndef RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span> <span class="preprocessor">#if defined(__clang__)</span></div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span> <span class="preprocessor">#if __has_feature(cxx_rvalue_references) && \</span></div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span> <span class="preprocessor"> (defined(_MSC_VER) || defined(_LIBCPP_VERSION) || defined(__GLIBCXX__) && __GLIBCXX__ >= 20080306)</span></div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span> <span class="preprocessor">#define RAPIDJSON_HAS_CXX11_RVALUE_REFS 1</span></div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span> <span class="preprocessor">#else</span></div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span> <span class="preprocessor">#define RAPIDJSON_HAS_CXX11_RVALUE_REFS 0</span></div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span> <span class="preprocessor">#elif (defined(RAPIDJSON_GNUC) && (RAPIDJSON_GNUC >= RAPIDJSON_VERSION_CODE(4,3,0)) && defined(__GXX_EXPERIMENTAL_CXX0X__)) || \</span></div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span> <span class="preprocessor"> (defined(_MSC_VER) && _MSC_VER >= 1600) || \</span></div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span> <span class="preprocessor"> (defined(__SUNPRO_CC) && __SUNPRO_CC >= 0x5140 && defined(__GXX_EXPERIMENTAL_CXX0X__))</span></div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span> </div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span> <span class="preprocessor">#define RAPIDJSON_HAS_CXX11_RVALUE_REFS 1</span></div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span> <span class="preprocessor">#else</span></div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span> <span class="preprocessor">#define RAPIDJSON_HAS_CXX11_RVALUE_REFS 0</span></div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span> <span class="preprocessor">#endif // RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span> </div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span> <span class="preprocessor">#ifndef RAPIDJSON_HAS_CXX11_NOEXCEPT</span></div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span> <span class="preprocessor">#if defined(__clang__)</span></div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span> <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> <span class="preprocessor">#elif (defined(RAPIDJSON_GNUC) && (RAPIDJSON_GNUC >= RAPIDJSON_VERSION_CODE(4,6,0)) && defined(__GXX_EXPERIMENTAL_CXX0X__)) || \</span></div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span> <span class="preprocessor"> (defined(_MSC_VER) && _MSC_VER >= 1900) || \</span></div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span> <span class="preprocessor"> (defined(__SUNPRO_CC) && __SUNPRO_CC >= 0x5140 && defined(__GXX_EXPERIMENTAL_CXX0X__))</span></div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span> <span class="preprocessor">#define RAPIDJSON_HAS_CXX11_NOEXCEPT 1</span></div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span> <span class="preprocessor">#else</span></div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span> <span class="preprocessor">#define RAPIDJSON_HAS_CXX11_NOEXCEPT 0</span></div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span> <span class="preprocessor">#if RAPIDJSON_HAS_CXX11_NOEXCEPT</span></div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span> <span class="preprocessor">#define RAPIDJSON_NOEXCEPT noexcept</span></div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span> <span class="preprocessor">#else</span></div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span> <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> <span class="preprocessor">#endif // RAPIDJSON_HAS_CXX11_NOEXCEPT</span></div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span> </div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span> <span class="comment">// no automatic detection, yet</span></div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span> <span class="preprocessor">#ifndef RAPIDJSON_HAS_CXX11_TYPETRAITS</span></div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span> <span class="preprocessor">#if (defined(_MSC_VER) && _MSC_VER >= 1700)</span></div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span> <span class="preprocessor">#define RAPIDJSON_HAS_CXX11_TYPETRAITS 1</span></div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span> <span class="preprocessor">#else</span></div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span> <span class="preprocessor">#define RAPIDJSON_HAS_CXX11_TYPETRAITS 0</span></div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span> </div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span> <span class="preprocessor">#ifndef RAPIDJSON_HAS_CXX11_RANGE_FOR</span></div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span> <span class="preprocessor">#if defined(__clang__)</span></div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span> <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> <span class="preprocessor">#elif (defined(RAPIDJSON_GNUC) && (RAPIDJSON_GNUC >= RAPIDJSON_VERSION_CODE(4,6,0)) && defined(__GXX_EXPERIMENTAL_CXX0X__)) || \</span></div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span> <span class="preprocessor"> (defined(_MSC_VER) && _MSC_VER >= 1700) || \</span></div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span> <span class="preprocessor"> (defined(__SUNPRO_CC) && __SUNPRO_CC >= 0x5140 && defined(__GXX_EXPERIMENTAL_CXX0X__))</span></div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span> <span class="preprocessor">#define RAPIDJSON_HAS_CXX11_RANGE_FOR 1</span></div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span> <span class="preprocessor">#else</span></div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span> <span class="preprocessor">#define RAPIDJSON_HAS_CXX11_RANGE_FOR 0</span></div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span> <span class="preprocessor">#endif // RAPIDJSON_HAS_CXX11_RANGE_FOR</span></div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span> <span class="comment"></span></div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span> <span class="comment">//!@endcond</span></div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span> <span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span> <span class="comment"></span><span class="comment">// RAPIDJSON_NOEXCEPT_ASSERT</span></div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span> </div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span> <span class="preprocessor">#ifdef RAPIDJSON_ASSERT_THROWS</span></div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span> <span class="preprocessor">#if RAPIDJSON_HAS_CXX11_NOEXCEPT</span></div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span> <span class="preprocessor">#define RAPIDJSON_NOEXCEPT_ASSERT(x)</span></div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span> <span class="preprocessor">#else</span></div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span> <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> <span class="preprocessor">#endif // RAPIDJSON_HAS_CXX11_NOEXCEPT</span></div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span> <span class="preprocessor">#else</span></div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span> <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> <span class="preprocessor">#endif // RAPIDJSON_ASSERT_THROWS</span></div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span> <span class="comment"></span></div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span> <span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span> <span class="comment"></span><span class="comment">// new/delete</span></div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span> </div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span> <span class="preprocessor">#ifndef RAPIDJSON_NEW</span></div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span> <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> <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> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span> <span class="preprocessor">#ifndef RAPIDJSON_DELETE</span></div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span> <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> <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> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span> <span class="comment"></span></div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span> <span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span> <span class="comment"></span><span class="comment">// Type</span></div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span> <span class="comment"></span></div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span> <span class="comment">/*! \namespace rapidjson</span></div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span> <span class="comment"> \brief main RapidJSON namespace</span></div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span> <span class="comment"> \see RAPIDJSON_NAMESPACE</span></div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span> <span class="comment">*/</span></div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span> RAPIDJSON_NAMESPACE_BEGIN</div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span> <span class="comment"></span></div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span> <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> <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>  <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a952871e4326b527154fc8aac1ac1f6ff">kNullType</a> = 0, <span class="comment">//!< null</span></div><div class="line"><a name="l00633"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a9f2e7047832dce1029551b5de0f05607"> 633</a></span> <span class="comment"></span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a9f2e7047832dce1029551b5de0f05607">kFalseType</a> = 1, <span class="comment">//!< false</span></div><div class="line"><a name="l00634"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a80d9f25b083abce45edbfdd3ba006c8e"> 634</a></span> <span class="comment"></span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a80d9f25b083abce45edbfdd3ba006c8e">kTrueType</a> = 2, <span class="comment">//!< true</span></div><div class="line"><a name="l00635"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4acf030b422a32c3647c7c5973bd4dd0a9"> 635</a></span> <span class="comment"></span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4acf030b422a32c3647c7c5973bd4dd0a9">kObjectType</a> = 3, <span class="comment">//!< object</span></div><div class="line"><a name="l00636"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a058c622e1e7d59419ae58b895cbce468"> 636</a></span> <span class="comment"></span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a058c622e1e7d59419ae58b895cbce468">kArrayType</a> = 4, <span class="comment">//!< array </span></div><div class="line"><a name="l00637"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4ad6379da3dc04b83a591992bfb9fabba7"> 637</a></span> <span class="comment"></span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4ad6379da3dc04b83a591992bfb9fabba7">kStringType</a> = 5, <span class="comment">//!< string</span></div><div class="line"><a name="l00638"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a"> 638</a></span> <span class="comment"></span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a">kNumberType</a> = 6 <span class="comment">//!< number</span></div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span> <span class="comment"></span>};</div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span> </div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span> RAPIDJSON_NAMESPACE_END</div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span> </div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span> <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> <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> <span class="comment">// </span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <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> <span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">// Licensed under the MIT License (the "License"); you may not use this file except</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <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> <span class="comment">//</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">// http://opensource.org/licenses/MIT</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">//</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <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> <span class="comment">// under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR </span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <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> <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> </div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor">#ifndef RAPIDJSON_RAPIDJSON_H_</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#define RAPIDJSON_RAPIDJSON_H_</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"></span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">/*!\file rapidjson.h</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment"> \brief common definitions and configuration</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="comment"> </span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment"> \see RAPIDJSON_CONFIG</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="comment"> */</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment"></span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="comment">/*! \defgroup RAPIDJSON_CONFIG RapidJSON configuration</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="comment"> \brief Configuration macros for library features</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="comment"></span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <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> <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> <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> <span class="comment"> preprocessor macros at compile-time.</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="comment"></span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <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> <span class="comment"></span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <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> <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> <span class="comment"> different translation units of a single application.</span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="comment"> */</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="preprocessor">#include <cstdlib></span> <span class="comment">// malloc(), realloc(), free(), size_t</span></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="preprocessor">#include <cstring></span> <span class="comment">// memset(), memcpy(), memmove(), memcmp()</span></div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="comment"></span></div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="comment"></span><span class="comment">// RAPIDJSON_VERSION_STRING</span></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="comment">//</span></div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <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> <span class="comment">//</span></div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="comment"></span></div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="comment">//!@cond RAPIDJSON_HIDDEN_FROM_DOXYGEN</span></div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="comment"></span><span class="comment">// token stringification</span></div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <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> <span class="preprocessor">#define RAPIDJSON_DO_STRINGIFY(x) #x</span></div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span> </div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="comment">// token concatenation</span></div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <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> <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> <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> <span class="comment">//!@endcond</span></div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="comment">/*! \def RAPIDJSON_MAJOR_VERSION</span></div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="comment"> \ingroup RAPIDJSON_CONFIG</span></div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="comment"> \brief Major version of RapidJSON in integer.</span></div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="comment">*/</span><span class="comment"></span></div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="comment">/*! \def RAPIDJSON_MINOR_VERSION</span></div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="comment"> \ingroup RAPIDJSON_CONFIG</span></div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="comment"> \brief Minor version of RapidJSON in integer.</span></div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="comment">*/</span><span class="comment"></span></div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="comment">/*! \def RAPIDJSON_PATCH_VERSION</span></div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="comment"> \ingroup RAPIDJSON_CONFIG</span></div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="comment"> \brief Patch version of RapidJSON in integer.</span></div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="comment">*/</span><span class="comment"></span></div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="comment">/*! \def RAPIDJSON_VERSION_STRING</span></div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="comment"> \ingroup RAPIDJSON_CONFIG</span></div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="comment"> \brief Version of RapidJSON in "<major>.<minor>.<patch>" string format.</span></div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <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> <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> <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> <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> <span class="preprocessor">#define RAPIDJSON_VERSION_STRING \</span></div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <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> <span class="comment"></span></div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <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> <span class="comment">/*! \def RAPIDJSON_NAMESPACE</span></div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <span class="comment"> \ingroup RAPIDJSON_CONFIG</span></div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="comment"> \brief provide custom rapidjson namespace</span></div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="comment"></span></div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="comment"> In order to avoid symbol clashes and/or "One Definition Rule" errors</span></div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <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> <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> <span class="comment"> namespace.</span></div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="comment"></span></div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <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> <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> <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> <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> <span class="comment"></span></div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <span class="comment"> \code</span></div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="comment"> // in some .cpp file</span></div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span> <span class="comment"> #define RAPIDJSON_NAMESPACE my::rapidjson</span></div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span> <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> <span class="comment"> #define RAPIDJSON_NAMESPACE_END } }</span></div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <span class="comment"> #include "rapidjson/..."</span></div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="comment"> \endcode</span></div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <span class="comment"></span></div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <span class="comment"> \see rapidjson</span></div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <span class="comment"> */</span><span class="comment"></span></div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <span class="comment">/*! \def RAPIDJSON_NAMESPACE_BEGIN</span></div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <span class="comment"> \ingroup RAPIDJSON_CONFIG</span></div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span> <span class="comment"> \brief provide custom rapidjson namespace (opening expression)</span></div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <span class="comment"> \see RAPIDJSON_NAMESPACE</span></div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <span class="comment">*/</span><span class="comment"></span></div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <span class="comment">/*! \def RAPIDJSON_NAMESPACE_END</span></div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <span class="comment"> \ingroup RAPIDJSON_CONFIG</span></div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="comment"> \brief provide custom rapidjson namespace (closing expression)</span></div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="comment"> \see RAPIDJSON_NAMESPACE</span></div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <span class="comment">*/</span></div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span> <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> <span class="preprocessor">#define RAPIDJSON_NAMESPACE rapidjson</span></div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <span class="preprocessor">#ifndef RAPIDJSON_NAMESPACE_BEGIN</span></div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <span class="preprocessor">#define RAPIDJSON_NAMESPACE_BEGIN namespace RAPIDJSON_NAMESPACE {</span></div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <span class="preprocessor">#ifndef RAPIDJSON_NAMESPACE_END</span></div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span> <span class="preprocessor">#define RAPIDJSON_NAMESPACE_END }</span></div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span> <span class="comment"></span></div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span> <span class="comment"></span><span class="comment">// RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span> </div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span> <span class="preprocessor">#ifndef RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <span class="preprocessor">#ifdef RAPIDJSON_DOXYGEN_RUNNING</span></div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <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> <span class="preprocessor">#else</span></div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span> <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> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span> <span class="comment">/*! \def RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span> <span class="comment"> \ingroup RAPIDJSON_CONFIG</span></div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <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> <span class="comment"></span></div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span> <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> <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> <span class="comment"> for construction and comparison.</span></div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span> <span class="comment"></span></div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span> <span class="comment"> \hideinitializer</span></div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span> <span class="comment">*/</span></div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span> <span class="preprocessor">#endif // !defined(RAPIDJSON_HAS_STDSTRING)</span></div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span> </div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span> <span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span> <span class="preprocessor">#include <string></span></div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span> <span class="preprocessor">#endif // RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span> <span class="comment"></span></div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span> <span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span> <span class="comment"></span><span class="comment">// RAPIDJSON_NO_INT64DEFINE</span></div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span> <span class="comment"></span></div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span> <span class="comment">/*! \def RAPIDJSON_NO_INT64DEFINE</span></div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span> <span class="comment"> \ingroup RAPIDJSON_CONFIG</span></div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span> <span class="comment"> \brief Use external 64-bit integer types.</span></div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span> <span class="comment"></span></div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span> <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> <span class="comment"> to be available at global scope.</span></div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span> <span class="comment"></span></div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span> <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> <span class="comment"> prevent RapidJSON from defining its own types.</span></div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span> <span class="comment">*/</span></div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span> <span class="preprocessor">#ifndef RAPIDJSON_NO_INT64DEFINE</span></div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span> <span class="comment">//!@cond RAPIDJSON_HIDDEN_FROM_DOXYGEN</span></div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span> <span class="comment"></span><span class="preprocessor">#if defined(_MSC_VER) && (_MSC_VER < 1800) // Visual Studio 2013</span></div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span> <span class="preprocessor">#include "msinttypes/stdint.h"</span></div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span> <span class="preprocessor">#include "msinttypes/inttypes.h"</span></div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span> <span class="preprocessor">#else</span></div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span> <span class="comment">// Other compilers should have this.</span></div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span> <span class="preprocessor">#include <stdint.h></span></div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span> <span class="preprocessor">#include <inttypes.h></span></div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span> <span class="comment">//!@endcond</span></div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span> <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> <span class="preprocessor">#define RAPIDJSON_NO_INT64DEFINE</span></div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span> <span class="preprocessor">#endif // RAPIDJSON_NO_INT64TYPEDEF</span></div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span> <span class="comment"></span></div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span> <span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span> <span class="comment"></span><span class="comment">// RAPIDJSON_FORCEINLINE</span></div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span> </div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span> <span class="preprocessor">#ifndef RAPIDJSON_FORCEINLINE</span></div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span> <span class="comment">//!@cond RAPIDJSON_HIDDEN_FROM_DOXYGEN</span></div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span> <span class="comment"></span><span class="preprocessor">#if defined(_MSC_VER) && defined(NDEBUG)</span></div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span> <span class="preprocessor">#define RAPIDJSON_FORCEINLINE __forceinline</span></div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span> <span class="preprocessor">#elif defined(__GNUC__) && __GNUC__ >= 4 && defined(NDEBUG)</span></div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span> <span class="preprocessor">#define RAPIDJSON_FORCEINLINE __attribute__((always_inline))</span></div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span> <span class="preprocessor">#else</span></div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span> <span class="preprocessor">#define RAPIDJSON_FORCEINLINE</span></div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span> <span class="comment">//!@endcond</span></div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span> <span class="comment"></span><span class="preprocessor">#endif // RAPIDJSON_FORCEINLINE</span></div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span> <span class="comment"></span></div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span> <span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span> <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> <span class="preprocessor">#define RAPIDJSON_LITTLEENDIAN 0 </span><span class="comment">//!< 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> <span class="comment"></span>#define RAPIDJSON_BIGENDIAN 1 <span class="comment">//!< Big endian machine</span></div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span> <span class="comment"></span></div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span> <span class="comment">//! Endianness of the machine.</span></div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span> <span class="comment"></span><span class="comment">/*!</span></div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span> <span class="comment"> \def RAPIDJSON_ENDIAN</span></div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span> <span class="comment"> \ingroup RAPIDJSON_CONFIG</span></div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span> <span class="comment"></span></div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span> <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> <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> <span class="comment"> \ref RAPIDJSON_LITTLEENDIAN or \ref RAPIDJSON_BIGENDIAN.</span></div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span> <span class="comment"></span></div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span> <span class="comment"> Default detection implemented with reference to</span></div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span> <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> <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> <span class="comment">*/</span></div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span> <span class="preprocessor">#ifndef RAPIDJSON_ENDIAN</span></div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span> <span class="comment">// Detect with GCC 4.6's macro</span></div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span> <span class="preprocessor"># ifdef __BYTE_ORDER__</span></div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span> <span class="preprocessor"># if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__</span></div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span> <span class="preprocessor"># define RAPIDJSON_ENDIAN RAPIDJSON_LITTLEENDIAN</span></div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span> <span class="preprocessor"># elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__</span></div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span> <span class="preprocessor"># define RAPIDJSON_ENDIAN RAPIDJSON_BIGENDIAN</span></div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span> <span class="preprocessor"># else</span></div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span> <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> <span class="preprocessor"># endif // __BYTE_ORDER__</span></div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span> <span class="comment">// Detect with GLIBC's endian.h</span></div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span> <span class="preprocessor"># elif defined(__GLIBC__)</span></div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span> <span class="preprocessor"># include <endian.h></span></div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span> <span class="preprocessor"># if (__BYTE_ORDER == __LITTLE_ENDIAN)</span></div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span> <span class="preprocessor"># define RAPIDJSON_ENDIAN RAPIDJSON_LITTLEENDIAN</span></div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span> <span class="preprocessor"># elif (__BYTE_ORDER == __BIG_ENDIAN)</span></div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span> <span class="preprocessor"># define RAPIDJSON_ENDIAN RAPIDJSON_BIGENDIAN</span></div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span> <span class="preprocessor"># else</span></div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span> <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> <span class="preprocessor"># endif // __GLIBC__</span></div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span> <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> <span class="preprocessor"># elif defined(_LITTLE_ENDIAN) && !defined(_BIG_ENDIAN)</span></div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span> <span class="preprocessor"># define RAPIDJSON_ENDIAN RAPIDJSON_LITTLEENDIAN</span></div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span> <span class="preprocessor"># elif defined(_BIG_ENDIAN) && !defined(_LITTLE_ENDIAN)</span></div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span> <span class="preprocessor"># define RAPIDJSON_ENDIAN RAPIDJSON_BIGENDIAN</span></div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span> <span class="comment">// Detect with architecture macros</span></div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span> <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> <span class="preprocessor"># define RAPIDJSON_ENDIAN RAPIDJSON_BIGENDIAN</span></div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span> <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> <span class="preprocessor"># define RAPIDJSON_ENDIAN RAPIDJSON_LITTLEENDIAN</span></div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span> <span class="preprocessor"># elif defined(_MSC_VER) && (defined(_M_ARM) || defined(_M_ARM64))</span></div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span> <span class="preprocessor"># define RAPIDJSON_ENDIAN RAPIDJSON_LITTLEENDIAN</span></div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span> <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> <span class="preprocessor"># define RAPIDJSON_ENDIAN</span></div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span> <span class="preprocessor"># else</span></div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span> <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> <span class="preprocessor"># endif</span></div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span> <span class="preprocessor">#endif // RAPIDJSON_ENDIAN</span></div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span> <span class="comment"></span></div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span> <span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span> <span class="comment"></span><span class="comment">// RAPIDJSON_64BIT</span></div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span> <span class="comment"></span></div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span> <span class="comment">//! Whether using 64-bit architecture</span></div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span> <span class="comment"></span><span class="preprocessor">#ifndef RAPIDJSON_64BIT</span></div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span> <span class="preprocessor">#if defined(__LP64__) || (defined(__x86_64__) && defined(__ILP32__)) || defined(_WIN64) || defined(__EMSCRIPTEN__)</span></div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span> <span class="preprocessor">#define RAPIDJSON_64BIT 1</span></div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span> <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> <span class="preprocessor">#define RAPIDJSON_64BIT 0</span></div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span> <span class="preprocessor">#endif // RAPIDJSON_64BIT</span></div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span> <span class="comment"></span></div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span> <span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span> <span class="comment"></span><span class="comment">// RAPIDJSON_ALIGN</span></div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span> <span class="comment"></span></div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span> <span class="comment">//! Data alignment of the machine.</span></div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span> <span class="comment"></span><span class="comment">/*! \ingroup RAPIDJSON_CONFIG</span></div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span> <span class="comment"> \param x pointer to align</span></div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span> <span class="comment"></span></div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span> <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> <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> <span class="comment">*/</span></div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span> <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> <span class="preprocessor">#define RAPIDJSON_ALIGN(x) (((x) + static_cast<size_t>(7u)) & ~static_cast<size_t>(7u))</span></div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span> <span class="comment"></span></div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span> <span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span> <span class="comment"></span><span class="comment">// RAPIDJSON_UINT64_C2</span></div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span> <span class="comment"></span></div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span> <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> <span class="comment"></span><span class="comment">/*!</span></div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span> <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> <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> <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> <span class="comment">*/</span></div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span> <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> <span class="preprocessor">#define RAPIDJSON_UINT64_C2(high32, low32) ((static_cast<uint64_t>(high32) << 32) | static_cast<uint64_t>(low32))</span></div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span> <span class="comment"></span></div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span> <span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span> <span class="comment"></span><span class="comment">// RAPIDJSON_48BITPOINTER_OPTIMIZATION</span></div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span> <span class="comment"></span></div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span> <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> <span class="comment"></span><span class="comment">/*!</span></div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span> <span class="comment"> \ingroup RAPIDJSON_CONFIG</span></div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span> <span class="comment"></span></div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span> <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> <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> <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> <span class="comment">*/</span></div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span> <span class="preprocessor">#ifndef RAPIDJSON_48BITPOINTER_OPTIMIZATION</span></div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span> <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> <span class="preprocessor">#define RAPIDJSON_48BITPOINTER_OPTIMIZATION 1</span></div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span> <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> <span class="preprocessor">#define RAPIDJSON_48BITPOINTER_OPTIMIZATION 0</span></div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span> <span class="preprocessor">#endif // RAPIDJSON_48BITPOINTER_OPTIMIZATION</span></div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span> </div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span> <span class="preprocessor">#if RAPIDJSON_48BITPOINTER_OPTIMIZATION == 1</span></div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span> <span class="preprocessor">#if RAPIDJSON_64BIT != 1</span></div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span> <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> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span> <span class="preprocessor">#define RAPIDJSON_SETPOINTER(type, p, x) (p = reinterpret_cast<type *>((reinterpret_cast<uintptr_t>(p) & static_cast<uintptr_t>(RAPIDJSON_UINT64_C2(0xFFFF0000, 0x00000000))) | reinterpret_cast<uintptr_t>(reinterpret_cast<const void*>(x))))</span></div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span> <span class="preprocessor">#define RAPIDJSON_GETPOINTER(type, p) (reinterpret_cast<type *>(reinterpret_cast<uintptr_t>(p) & static_cast<uintptr_t>(RAPIDJSON_UINT64_C2(0x0000FFFF, 0xFFFFFFFF))))</span></div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span> <span class="preprocessor">#else</span></div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span> <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> <span class="preprocessor">#define RAPIDJSON_GETPOINTER(type, p) (p)</span></div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span> <span class="comment"></span></div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span> <span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span> <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> <span class="comment"></span></div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span> <span class="comment">/*! \def RAPIDJSON_SIMD</span></div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span> <span class="comment"> \ingroup RAPIDJSON_CONFIG</span></div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span> <span class="comment"> \brief Enable SSE2/SSE4.2/Neon optimization.</span></div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span> <span class="comment"></span></div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span> <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> <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> <span class="comment"> or ARM compatible processors.</span></div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span> <span class="comment"></span></div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span> <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> <span class="comment"> \code</span></div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span> <span class="comment"> // Enable SSE2 optimization.</span></div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span> <span class="comment"> #define RAPIDJSON_SSE2</span></div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span> <span class="comment"></span></div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span> <span class="comment"> // Enable SSE4.2 optimization.</span></div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span> <span class="comment"> #define RAPIDJSON_SSE42</span></div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span> <span class="comment"> \endcode</span></div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span> <span class="comment"></span></div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span> <span class="comment"> // Enable ARM Neon optimization.</span></div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span> <span class="comment"> #define RAPIDJSON_NEON</span></div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span> <span class="comment"> \endcode</span></div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span> <span class="comment"></span></div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span> <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> <span class="comment"></span></div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span> <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> <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> <span class="comment">*/</span></div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span> <span class="preprocessor">#if defined(RAPIDJSON_SSE2) || defined(RAPIDJSON_SSE42) \</span></div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span> <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> <span class="preprocessor">#define RAPIDJSON_SIMD</span></div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span> <span class="comment"></span></div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span> <span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span> <span class="comment"></span><span class="comment">// RAPIDJSON_NO_SIZETYPEDEFINE</span></div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span> </div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span> <span class="preprocessor">#ifndef RAPIDJSON_NO_SIZETYPEDEFINE</span></div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span> <span class="comment">/*! \def RAPIDJSON_NO_SIZETYPEDEFINE</span></div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span> <span class="comment"> \ingroup RAPIDJSON_CONFIG</span></div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span> <span class="comment"> \brief User-provided \c SizeType definition.</span></div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span> <span class="comment"></span></div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span> <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> <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> <span class="comment"> before including RapidJSON:</span></div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span> <span class="comment"> \code</span></div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span> <span class="comment"> #define RAPIDJSON_NO_SIZETYPEDEFINE</span></div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span> <span class="comment"> namespace rapidjson { typedef ::std::size_t SizeType; }</span></div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span> <span class="comment"> #include "rapidjson/..."</span></div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span> <span class="comment"> \endcode</span></div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span> <span class="comment"></span></div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span> <span class="comment"> \see rapidjson::SizeType</span></div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span> <span class="comment">*/</span></div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span> <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> <span class="preprocessor">#define RAPIDJSON_NO_SIZETYPEDEFINE</span></div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span> <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> RAPIDJSON_NAMESPACE_BEGIN<span class="comment"></span></div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span> <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> <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> <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> <span class="comment"> \ref RAPIDJSON_NO_SIZETYPEDEFINE.</span></div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span> <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> <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> RAPIDJSON_NAMESPACE_END</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span> </div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span> <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> RAPIDJSON_NAMESPACE_BEGIN</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span> <span class="keyword">using</span> std::size_t;</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span> RAPIDJSON_NAMESPACE_END</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span> <span class="comment"></span></div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span> <span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span> <span class="comment"></span><span class="comment">// RAPIDJSON_ASSERT</span></div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span> <span class="comment"></span></div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span> <span class="comment">//! Assertion.</span></div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span> <span class="comment"></span><span class="comment">/*! \ingroup RAPIDJSON_CONFIG</span></div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span> <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> <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> <span class="comment"></span></div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span> <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> <span class="comment"> \ref RAPIDJSON_ERRORS APIs.</span></div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span> <span class="comment">*/</span></div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span> <span class="preprocessor">#ifndef RAPIDJSON_ASSERT</span></div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span> <span class="preprocessor">#include <cassert></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> <span class="preprocessor">#define RAPIDJSON_ASSERT(x) assert(x)</span></div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span> <span class="preprocessor">#endif // RAPIDJSON_ASSERT</span></div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span> <span class="comment"></span></div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span> <span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span> <span class="comment"></span><span class="comment">// RAPIDJSON_STATIC_ASSERT</span></div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span> </div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span> <span class="comment">// Prefer C++11 static_assert, if available</span></div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span> <span class="preprocessor">#ifndef RAPIDJSON_STATIC_ASSERT</span></div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span> <span class="preprocessor">#if __cplusplus >= 201103L || ( defined(_MSC_VER) && _MSC_VER >= 1800 )</span></div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span> <span class="preprocessor">#define RAPIDJSON_STATIC_ASSERT(x) \</span></div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span> <span class="preprocessor"> static_assert(x, RAPIDJSON_STRINGIFY(x))</span></div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span> <span class="preprocessor">#endif // C++11</span></div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span> <span class="preprocessor">#endif // RAPIDJSON_STATIC_ASSERT</span></div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span> </div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span> <span class="comment">// Adopt C++03 implementation from boost</span></div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span> <span class="preprocessor">#ifndef RAPIDJSON_STATIC_ASSERT</span></div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span> <span class="preprocessor">#ifndef __clang__</span></div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span> <span class="comment">//!@cond RAPIDJSON_HIDDEN_FROM_DOXYGEN</span></div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span> <span class="comment"></span><span class="preprocessor">#endif</span></div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span> RAPIDJSON_NAMESPACE_BEGIN</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span> <span class="keyword">template</span> <<span class="keywordtype">bool</span> x> <span class="keyword">struct </span>STATIC_ASSERTION_FAILURE;</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span> <span class="keyword">template</span> <> <span class="keyword">struct </span>STATIC_ASSERTION_FAILURE<true> { <span class="keyword">enum</span> { value = 1 }; };</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span> <span class="keyword">template</span> <<span class="keywordtype">size_t</span> x> <span class="keyword">struct </span>StaticAssertTest {};</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span> RAPIDJSON_NAMESPACE_END</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span> </div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span> <span class="preprocessor">#if defined(__GNUC__) || defined(__clang__)</span></div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span> <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> <span class="preprocessor">#else</span></div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span> <span class="preprocessor">#define RAPIDJSON_STATIC_ASSERT_UNUSED_ATTRIBUTE </span></div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span> <span class="preprocessor">#ifndef __clang__</span></div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span> <span class="comment">//!@endcond</span></div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span> <span class="comment"></span><span class="preprocessor">#endif</span></div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span> <span class="comment"></span></div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span> <span class="comment">/*! \def RAPIDJSON_STATIC_ASSERT</span></div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span> <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> <span class="comment"> \param x compile-time condition</span></div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span> <span class="comment"> \hideinitializer</span></div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span> <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> <span class="preprocessor">#define RAPIDJSON_STATIC_ASSERT(x) \</span></div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span> <span class="preprocessor"> typedef ::RAPIDJSON_NAMESPACE::StaticAssertTest< \</span></div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span> <span class="preprocessor"> sizeof(::RAPIDJSON_NAMESPACE::STATIC_ASSERTION_FAILURE<bool(x) >)> \</span></div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span> <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> <span class="preprocessor">#endif // RAPIDJSON_STATIC_ASSERT</span></div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span> <span class="comment"></span></div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span> <span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span> <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> <span class="comment"></span></div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span> <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> <span class="comment"></span><span class="comment">/*!</span></div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span> <span class="comment"> \ingroup RAPIDJSON_CONFIG</span></div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span> <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> <span class="comment">*/</span></div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span> <span class="preprocessor">#ifndef RAPIDJSON_LIKELY</span></div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span> <span class="preprocessor">#if defined(__GNUC__) || defined(__clang__)</span></div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span> <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> <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> <span class="preprocessor">#define RAPIDJSON_LIKELY(x) (x)</span></div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span> <span class="comment"></span></div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span> <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> <span class="comment"></span><span class="comment">/*!</span></div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span> <span class="comment"> \ingroup RAPIDJSON_CONFIG</span></div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span> <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> <span class="comment">*/</span></div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span> <span class="preprocessor">#ifndef RAPIDJSON_UNLIKELY</span></div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span> <span class="preprocessor">#if defined(__GNUC__) || defined(__clang__)</span></div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span> <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> <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> <span class="preprocessor">#define RAPIDJSON_UNLIKELY(x) (x)</span></div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span> <span class="comment"></span></div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span> <span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span> <span class="comment"></span><span class="comment">// Helpers</span></div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span> <span class="comment"></span></div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span> <span class="comment">//!@cond RAPIDJSON_HIDDEN_FROM_DOXYGEN</span></div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span> <span class="comment"></span></div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span> <span class="preprocessor">#define RAPIDJSON_MULTILINEMACRO_BEGIN do { </span></div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span> <span class="preprocessor">#define RAPIDJSON_MULTILINEMACRO_END \</span></div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span> <span class="preprocessor">} while((void)0, 0)</span></div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span> </div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span> <span class="comment">// adopted from Boost</span></div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span> <span class="preprocessor">#define RAPIDJSON_VERSION_CODE(x,y,z) \</span></div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span> <span class="preprocessor"> (((x)*100000) + ((y)*100) + (z))</span></div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span> <span class="comment"></span></div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span> <span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span> <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> </div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span> <span class="preprocessor">#if defined(__GNUC__)</span></div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span> <span class="preprocessor">#define RAPIDJSON_GNUC \</span></div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span> <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> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span> </div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span> <span class="preprocessor">#if defined(__clang__) || (defined(RAPIDJSON_GNUC) && RAPIDJSON_GNUC >= RAPIDJSON_VERSION_CODE(4,2,0))</span></div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span> </div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span> <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> <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> <span class="preprocessor">#define RAPIDJSON_DIAG_OFF(x) \</span></div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span> <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> </div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span> <span class="comment">// push/pop support in Clang and GCC>=4.6</span></div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span> <span class="preprocessor">#if defined(__clang__) || (defined(RAPIDJSON_GNUC) && RAPIDJSON_GNUC >= RAPIDJSON_VERSION_CODE(4,6,0))</span></div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span> <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> <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> <span class="preprocessor">#else // GCC >= 4.2, < 4.6</span></div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span> <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> <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> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span> </div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span> <span class="preprocessor">#elif defined(_MSC_VER)</span></div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span> </div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span> <span class="comment">// pragma (MSVC specific)</span></div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span> <span class="preprocessor">#define RAPIDJSON_PRAGMA(x) __pragma(x)</span></div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span> <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> </div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span> <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> <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> <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> </div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span> <span class="preprocessor">#else</span></div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span> </div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span> <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> <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> <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> </div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span> <span class="preprocessor">#endif // RAPIDJSON_DIAG_*</span></div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span> <span class="comment"></span></div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span> <span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span> <span class="comment"></span><span class="comment">// C++11 features</span></div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span> </div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span> <span class="preprocessor">#ifndef RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span> <span class="preprocessor">#if defined(__clang__)</span></div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span> <span class="preprocessor">#if __has_feature(cxx_rvalue_references) && \</span></div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span> <span class="preprocessor"> (defined(_MSC_VER) || defined(_LIBCPP_VERSION) || defined(__GLIBCXX__) && __GLIBCXX__ >= 20080306)</span></div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span> <span class="preprocessor">#define RAPIDJSON_HAS_CXX11_RVALUE_REFS 1</span></div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span> <span class="preprocessor">#else</span></div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span> <span class="preprocessor">#define RAPIDJSON_HAS_CXX11_RVALUE_REFS 0</span></div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span> <span class="preprocessor">#elif (defined(RAPIDJSON_GNUC) && (RAPIDJSON_GNUC >= RAPIDJSON_VERSION_CODE(4,3,0)) && defined(__GXX_EXPERIMENTAL_CXX0X__)) || \</span></div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span> <span class="preprocessor"> (defined(_MSC_VER) && _MSC_VER >= 1600) || \</span></div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span> <span class="preprocessor"> (defined(__SUNPRO_CC) && __SUNPRO_CC >= 0x5140 && defined(__GXX_EXPERIMENTAL_CXX0X__))</span></div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span> </div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span> <span class="preprocessor">#define RAPIDJSON_HAS_CXX11_RVALUE_REFS 1</span></div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span> <span class="preprocessor">#else</span></div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span> <span class="preprocessor">#define RAPIDJSON_HAS_CXX11_RVALUE_REFS 0</span></div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span> <span class="preprocessor">#endif // RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span> </div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span> <span class="preprocessor">#ifndef RAPIDJSON_HAS_CXX11_NOEXCEPT</span></div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span> <span class="preprocessor">#if defined(__clang__)</span></div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span> <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> <span class="preprocessor">#elif (defined(RAPIDJSON_GNUC) && (RAPIDJSON_GNUC >= RAPIDJSON_VERSION_CODE(4,6,0)) && defined(__GXX_EXPERIMENTAL_CXX0X__)) || \</span></div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span> <span class="preprocessor"> (defined(_MSC_VER) && _MSC_VER >= 1900) || \</span></div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span> <span class="preprocessor"> (defined(__SUNPRO_CC) && __SUNPRO_CC >= 0x5140 && defined(__GXX_EXPERIMENTAL_CXX0X__))</span></div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span> <span class="preprocessor">#define RAPIDJSON_HAS_CXX11_NOEXCEPT 1</span></div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span> <span class="preprocessor">#else</span></div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span> <span class="preprocessor">#define RAPIDJSON_HAS_CXX11_NOEXCEPT 0</span></div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span> <span class="preprocessor">#if RAPIDJSON_HAS_CXX11_NOEXCEPT</span></div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span> <span class="preprocessor">#define RAPIDJSON_NOEXCEPT noexcept</span></div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span> <span class="preprocessor">#else</span></div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span> <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> <span class="preprocessor">#endif // RAPIDJSON_HAS_CXX11_NOEXCEPT</span></div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span> </div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span> <span class="comment">// no automatic detection, yet</span></div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span> <span class="preprocessor">#ifndef RAPIDJSON_HAS_CXX11_TYPETRAITS</span></div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span> <span class="preprocessor">#if (defined(_MSC_VER) && _MSC_VER >= 1700)</span></div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span> <span class="preprocessor">#define RAPIDJSON_HAS_CXX11_TYPETRAITS 1</span></div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span> <span class="preprocessor">#else</span></div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span> <span class="preprocessor">#define RAPIDJSON_HAS_CXX11_TYPETRAITS 0</span></div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span> </div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span> <span class="preprocessor">#ifndef RAPIDJSON_HAS_CXX11_RANGE_FOR</span></div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span> <span class="preprocessor">#if defined(__clang__)</span></div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span> <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> <span class="preprocessor">#elif (defined(RAPIDJSON_GNUC) && (RAPIDJSON_GNUC >= RAPIDJSON_VERSION_CODE(4,6,0)) && defined(__GXX_EXPERIMENTAL_CXX0X__)) || \</span></div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span> <span class="preprocessor"> (defined(_MSC_VER) && _MSC_VER >= 1700) || \</span></div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span> <span class="preprocessor"> (defined(__SUNPRO_CC) && __SUNPRO_CC >= 0x5140 && defined(__GXX_EXPERIMENTAL_CXX0X__))</span></div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span> <span class="preprocessor">#define RAPIDJSON_HAS_CXX11_RANGE_FOR 1</span></div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span> <span class="preprocessor">#else</span></div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span> <span class="preprocessor">#define RAPIDJSON_HAS_CXX11_RANGE_FOR 0</span></div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span> <span class="preprocessor">#endif // RAPIDJSON_HAS_CXX11_RANGE_FOR</span></div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span> <span class="comment"></span></div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span> <span class="comment">//!@endcond</span></div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span> <span class="comment">//! Assertion (in non-throwing contexts).</span></div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span> <span class="comment"></span><span class="comment"> /*! \ingroup RAPIDJSON_CONFIG</span></div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span> <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> <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> <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> <span class="comment"> such cases.</span></div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span> <span class="comment"></span></div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span> <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> <span class="comment"> supported, and to \ref RAPIDJSON_ASSERT otherwise.</span></div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span> <span class="comment"> */</span></div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span> <span class="comment"></span></div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span> <span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span> <span class="comment"></span><span class="comment">// RAPIDJSON_NOEXCEPT_ASSERT</span></div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span> </div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span> <span class="preprocessor">#ifdef RAPIDJSON_ASSERT_THROWS</span></div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span> <span class="preprocessor">#if RAPIDJSON_HAS_CXX11_NOEXCEPT</span></div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span> <span class="preprocessor">#define RAPIDJSON_NOEXCEPT_ASSERT(x)</span></div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span> <span class="preprocessor">#else</span></div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span> <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> <span class="preprocessor">#endif // RAPIDJSON_HAS_CXX11_NOEXCEPT</span></div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span> <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> <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> <span class="preprocessor">#endif // RAPIDJSON_ASSERT_THROWS</span></div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span> <span class="comment"></span></div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span> <span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span> <span class="comment"></span><span class="comment">// new/delete</span></div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span> </div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span> <span class="preprocessor">#ifndef RAPIDJSON_NEW</span></div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span> <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> <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> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span> <span class="preprocessor">#ifndef RAPIDJSON_DELETE</span></div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span> <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> <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> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span> <span class="comment"></span></div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span> <span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span> <span class="comment"></span><span class="comment">// Type</span></div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span> <span class="comment"></span></div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span> <span class="comment">/*! \namespace rapidjson</span></div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span> <span class="comment"> \brief main RapidJSON namespace</span></div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span> <span class="comment"> \see RAPIDJSON_NAMESPACE</span></div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span> <span class="comment">*/</span></div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span> RAPIDJSON_NAMESPACE_BEGIN</div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span> <span class="comment"></span></div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span> <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> <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>  <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a952871e4326b527154fc8aac1ac1f6ff">kNullType</a> = 0, <span class="comment">//!< null</span></div><div class="line"><a name="l00644"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a9f2e7047832dce1029551b5de0f05607"> 644</a></span> <span class="comment"></span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a9f2e7047832dce1029551b5de0f05607">kFalseType</a> = 1, <span class="comment">//!< false</span></div><div class="line"><a name="l00645"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a80d9f25b083abce45edbfdd3ba006c8e"> 645</a></span> <span class="comment"></span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a80d9f25b083abce45edbfdd3ba006c8e">kTrueType</a> = 2, <span class="comment">//!< true</span></div><div class="line"><a name="l00646"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4acf030b422a32c3647c7c5973bd4dd0a9"> 646</a></span> <span class="comment"></span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4acf030b422a32c3647c7c5973bd4dd0a9">kObjectType</a> = 3, <span class="comment">//!< object</span></div><div class="line"><a name="l00647"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a058c622e1e7d59419ae58b895cbce468"> 647</a></span> <span class="comment"></span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a058c622e1e7d59419ae58b895cbce468">kArrayType</a> = 4, <span class="comment">//!< array </span></div><div class="line"><a name="l00648"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4ad6379da3dc04b83a591992bfb9fabba7"> 648</a></span> <span class="comment"></span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4ad6379da3dc04b83a591992bfb9fabba7">kStringType</a> = 5, <span class="comment">//!< string</span></div><div class="line"><a name="l00649"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a"> 649</a></span> <span class="comment"></span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a">kNumberType</a> = 6 <span class="comment">//!< number</span></div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span> <span class="comment"></span>};</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span> </div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span> RAPIDJSON_NAMESPACE_END</div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span> </div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span> <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 &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> <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> <span class="comment">// </span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <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> <span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">// Licensed under the MIT License (the "License"); you may not use this file except</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <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> <span class="comment">//</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">// http://opensource.org/licenses/MIT</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">//</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <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> <span class="comment">// under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR </span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <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> <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> </div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor">#ifndef RAPIDJSON_INTERNAL_REGEX_H_</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#define RAPIDJSON_INTERNAL_REGEX_H_</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> </div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#include "../allocators.h"</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#include "../stream.h"</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include "stack.h"</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> </div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#ifdef __clang__</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> RAPIDJSON_DIAG_PUSH</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> RAPIDJSON_DIAG_OFF(padded)</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> 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> RAPIDJSON_DIAG_OFF(implicit-fallthrough)</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#elif defined(_MSC_VER)</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> RAPIDJSON_DIAG_PUSH</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> 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> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> </div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#ifdef __GNUC__</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> RAPIDJSON_DIAG_PUSH</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> RAPIDJSON_DIAG_OFF(effc++)</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor">#if __GNUC__ >= 7</span></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span> RAPIDJSON_DIAG_OFF(implicit-fallthrough)</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span> </div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="preprocessor">#ifndef RAPIDJSON_REGEX_VERBOSE</span></div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="preprocessor">#define RAPIDJSON_REGEX_VERBOSE 0</span></div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span> </div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span> RAPIDJSON_NAMESPACE_BEGIN</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="keyword">namespace </span>internal {</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="comment"></span></div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="comment"></span><span class="comment">// DecodedStream</span></div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span> </div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="keyword">template</span> <<span class="keyword">typename</span> SourceStream, <span class="keyword">typename</span> Encoding></div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="keyword">class </span>DecodedStream {</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  DecodedStream(SourceStream& ss) : ss_(ss), codepoint_() { Decode(); }</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <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>  <span class="keywordtype">unsigned</span> Take() {</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  <span class="keywordtype">unsigned</span> c = codepoint_;</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <span class="keywordflow">if</span> (c) <span class="comment">// No further decoding when '\0'</span></div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  Decode();</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  <span class="keywordflow">return</span> c;</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  }</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span> </div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="keyword">private</span>:</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  <span class="keywordtype">void</span> Decode() {</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <span class="keywordflow">if</span> (!Encoding::Decode(ss_, &codepoint_))</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  codepoint_ = 0;</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  }</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span> </div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  SourceStream& ss_;</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <span class="keywordtype">unsigned</span> codepoint_;</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span> };</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="comment"></span></div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="comment"></span><span class="comment">// GenericRegex</span></div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span> </div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <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">//!< Represents an invalid index in GenericRegex::State::out, out1</span></div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <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> </div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="keyword">template</span> <<span class="keyword">typename</span> Encoding, <span class="keyword">typename</span> Allocator></div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="keyword">class </span>GenericRegexSearch;</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <span class="comment"></span></div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <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> <span class="comment"></span><span class="comment">/*!</span></div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="comment"> Supported regular expression syntax:</span></div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <span class="comment"> - \c ab Concatenation</span></div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="comment"> - \c a|b Alternation</span></div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="comment"> - \c a? Zero or one</span></div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="comment"> - \c a* Zero or more</span></div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <span class="comment"> - \c a+ One or more</span></div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="comment"> - \c a{3} Exactly 3 times</span></div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="comment"> - \c a{3,} At least 3 times</span></div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <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> <span class="comment"> - \c (ab) Grouping</span></div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <span class="comment"> - \c ^a At the beginning</span></div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span> <span class="comment"> - \c a$ At the end</span></div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <span class="comment"> - \c . Any character</span></div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <span class="comment"> - \c [abc] Character classes</span></div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <span class="comment"> - \c [a-c] Character class range</span></div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="comment"> - \c [a-z0-9_] Character class combination</span></div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span> <span class="comment"> - \c [^abc] Negated character classes</span></div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span> <span class="comment"> - \c [^a-c] Negated character class range</span></div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span> <span class="comment"> - \c [\b] Backspace (U+0008)</span></div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <span class="comment"> - \c \\| \\\\ ... Escape characters</span></div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="comment"> - \c \\f Form feed (U+000C)</span></div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <span class="comment"> - \c \\n Line feed (U+000A)</span></div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <span class="comment"> - \c \\r Carriage return (U+000D)</span></div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <span class="comment"> - \c \\t Tab (U+0009)</span></div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <span class="comment"> - \c \\v Vertical tab (U+000B)</span></div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <span class="comment"></span></div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span> <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> <span class="comment"> Cox, Russ. "Regular Expression Matching Can Be Simple And Fast (but is slow in Java, Perl, PHP, Python, Ruby,...).", </span></div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <span class="comment"> https://swtch.com/~rsc/regexp/regexp1.html </span></div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <span class="comment">*/</span></div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <span class="keyword">template</span> <<span class="keyword">typename</span> Encoding, <span class="keyword">typename</span> Allocator = CrtAllocator></div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="keyword">class </span>GenericRegex {</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  <span class="keyword">typedef</span> Encoding EncodingType;</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  <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>  <span class="keyword">template</span> <<span class="keyword">typename</span>, <span class="keyword">typename</span>> <span class="keyword">friend</span> <span class="keyword">class </span>GenericRegexSearch;</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span> </div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  GenericRegex(<span class="keyword">const</span> Ch* source, Allocator* allocator = 0) : </div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  states_(allocator, 256), ranges_(allocator, 256), root_(kRegexInvalidState), stateCount_(), rangeCount_(), </div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  anchorBegin_(), anchorEnd_()</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  {</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  GenericStringStream<Encoding> ss(source);</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  DecodedStream<GenericStringStream<Encoding>, Encoding> ds(ss);</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  Parse(ds);</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  }</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span> </div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  ~GenericRegex() {}</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span> </div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  <span class="keywordtype">bool</span> IsValid()<span class="keyword"> const </span>{</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  <span class="keywordflow">return</span> root_ != kRegexInvalidState;</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  }</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span> </div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <span class="keyword">private</span>:</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  <span class="keyword">enum</span> Operator {</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  kZeroOrOne,</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  kZeroOrMore,</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  kOneOrMore,</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  kConcatenation,</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  kAlternation,</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  kLeftParenthesis</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  };</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span> </div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> kAnyCharacterClass = 0xFFFFFFFF; <span class="comment">//!< For '.'</span></div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span> <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>  <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> </div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  <span class="keyword">struct </span>Range {</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  <span class="keywordtype">unsigned</span> start; <span class="comment">// </span></div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  <span class="keywordtype">unsigned</span> end;</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> next;</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  };</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span> </div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  <span class="keyword">struct </span>State {</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> out; <span class="comment">//!< Equals to kInvalid for matching state</span></div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span> <span class="comment"></span> <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> out1; <span class="comment">//!< Equals to non-kInvalid for split</span></div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span> <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>  <span class="keywordtype">unsigned</span> codepoint;</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  };</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span> </div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  <span class="keyword">struct </span>Frag {</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  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>  <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> start;</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> out; <span class="comment">//!< link-list of all output states</span></div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span> <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>  };</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span> </div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  State& GetState(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> index) {</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</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 < stateCount_);</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  <span class="keywordflow">return</span> states_.template Bottom<State>()[index];</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  }</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span> </div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  <span class="keyword">const</span> State& 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>  <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 < stateCount_);</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  <span class="keywordflow">return</span> states_.template Bottom<State>()[index];</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  }</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span> </div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  Range& GetRange(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> index) {</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</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 < rangeCount_);</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  <span class="keywordflow">return</span> ranges_.template Bottom<Range>()[index];</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  }</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span> </div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  <span class="keyword">const</span> Range& 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>  <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 < rangeCount_);</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  <span class="keywordflow">return</span> ranges_.template Bottom<Range>()[index];</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  }</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span> </div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> InputStream></div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  <span class="keywordtype">void</span> Parse(DecodedStream<InputStream, Encoding>& ds) {</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  Allocator allocator;</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  Stack<Allocator> operandStack(&allocator, 256); <span class="comment">// Frag</span></div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  Stack<Allocator> operatorStack(&allocator, 256); <span class="comment">// Operator</span></div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  Stack<Allocator> atomCountStack(&allocator, 256); <span class="comment">// unsigned (Atom per parenthesis)</span></div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span> </div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  *atomCountStack.template Push<unsigned>() = 0;</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span> </div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  <span class="keywordtype">unsigned</span> codepoint;</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  <span class="keywordflow">while</span> (ds.Peek() != 0) {</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  <span class="keywordflow">switch</span> (codepoint = ds.Take()) {</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  <span class="keywordflow">case</span> <span class="charliteral">'^'</span>:</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  anchorBegin_ = <span class="keyword">true</span>;</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span> </div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  <span class="keywordflow">case</span> <span class="charliteral">'$'</span>:</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  anchorEnd_ = <span class="keyword">true</span>;</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span> </div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  <span class="keywordflow">case</span> <span class="charliteral">'|'</span>:</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  <span class="keywordflow">while</span> (!operatorStack.Empty() && *operatorStack.template Top<Operator>() < kAlternation)</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  <span class="keywordflow">if</span> (!Eval(operandStack, *operatorStack.template Pop<Operator>(1)))</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  *operatorStack.template Push<Operator>() = kAlternation;</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  *atomCountStack.template Top<unsigned>() = 0;</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span> </div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  <span class="keywordflow">case</span> <span class="charliteral">'('</span>:</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  *operatorStack.template Push<Operator>() = kLeftParenthesis;</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  *atomCountStack.template Push<unsigned>() = 0;</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span> </div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  <span class="keywordflow">case</span> <span class="charliteral">')'</span>:</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  <span class="keywordflow">while</span> (!operatorStack.Empty() && *operatorStack.template Top<Operator>() != kLeftParenthesis)</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  <span class="keywordflow">if</span> (!Eval(operandStack, *operatorStack.template Pop<Operator>(1)))</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  <span class="keywordflow">if</span> (operatorStack.Empty())</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  operatorStack.template Pop<Operator>(1);</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  atomCountStack.template Pop<unsigned>(1);</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  ImplicitConcatenation(atomCountStack, operatorStack);</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span> </div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  <span class="keywordflow">case</span> <span class="charliteral">'?'</span>:</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  <span class="keywordflow">if</span> (!Eval(operandStack, kZeroOrOne))</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span> </div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  <span class="keywordflow">case</span> <span class="charliteral">'*'</span>:</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  <span class="keywordflow">if</span> (!Eval(operandStack, kZeroOrMore))</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span> </div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  <span class="keywordflow">case</span> <span class="charliteral">'+'</span>:</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  <span class="keywordflow">if</span> (!Eval(operandStack, kOneOrMore))</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span> </div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  <span class="keywordflow">case</span> <span class="charliteral">'{'</span>:</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>  {</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  <span class="keywordtype">unsigned</span> n, m;</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  <span class="keywordflow">if</span> (!ParseUnsigned(ds, &n))</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span> </div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>  <span class="keywordflow">if</span> (ds.Peek() == <span class="charliteral">','</span>) {</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>  ds.Take();</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  <span class="keywordflow">if</span> (ds.Peek() == <span class="charliteral">'}'</span>)</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  m = kInfinityQuantifier;</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!ParseUnsigned(ds, &m) || m < n)</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  }</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  m = n;</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span> </div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  <span class="keywordflow">if</span> (!EvalQuantifier(operandStack, n, m) || ds.Peek() != <span class="charliteral">'}'</span>)</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  ds.Take();</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  }</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span> </div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>  <span class="keywordflow">case</span> <span class="charliteral">'.'</span>:</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>  PushOperand(operandStack, kAnyCharacterClass);</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  ImplicitConcatenation(atomCountStack, operatorStack);</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span> </div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  <span class="keywordflow">case</span> <span class="charliteral">'['</span>:</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  {</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> range;</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  <span class="keywordflow">if</span> (!ParseRange(ds, &range))</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  <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>  GetState(s).rangeStart = range;</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  *operandStack.template Push<Frag>() = Frag(s, s, s);</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>  }</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  ImplicitConcatenation(atomCountStack, operatorStack);</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span> </div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  <span class="keywordflow">case</span> <span class="charliteral">'\\'</span>: <span class="comment">// Escape character</span></div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  <span class="keywordflow">if</span> (!CharacterEscape(ds, &codepoint))</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  <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>  <span class="comment">// fall through to default</span></div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span> </div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>  <span class="keywordflow">default</span>: <span class="comment">// Pattern character</span></div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  PushOperand(operandStack, codepoint);</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>  ImplicitConcatenation(atomCountStack, operatorStack);</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  }</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>  }</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span> </div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  <span class="keywordflow">while</span> (!operatorStack.Empty())</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  <span class="keywordflow">if</span> (!Eval(operandStack, *operatorStack.template Pop<Operator>(1)))</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span> </div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  <span class="comment">// Link the operand to matching state.</span></div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  <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>  Frag* e = operandStack.template Pop<Frag>(1);</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  Patch(e->out, NewState(kRegexInvalidState, kRegexInvalidState, 0));</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  root_ = e->start;</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span> </div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span> <span class="preprocessor">#if RAPIDJSON_REGEX_VERBOSE</span></div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  printf(<span class="stringliteral">"root: %d\n"</span>, root_);</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>  <span class="keywordflow">for</span> (<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> i = 0; i < stateCount_ ; i++) {</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  State& s = GetState(i);</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  printf(<span class="stringliteral">"[%2d] out: %2d out1: %2d c: '%c'\n"</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>  }</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  printf(<span class="stringliteral">"\n"</span>);</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>  }</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>  }</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span> </div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  <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>  State* s = states_.template Push<State>();</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  s->out = out;</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  s->out1 = out1;</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  s->codepoint = codepoint;</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  s->rangeStart = kRegexInvalidRange;</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  <span class="keywordflow">return</span> stateCount_++;</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  }</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span> </div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>  <span class="keywordtype">void</span> PushOperand(Stack<Allocator>& operandStack, <span class="keywordtype">unsigned</span> codepoint) {</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>  <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>  *operandStack.template Push<Frag>() = Frag(s, s, s);</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>  }</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span> </div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>  <span class="keywordtype">void</span> ImplicitConcatenation(Stack<Allocator>& atomCountStack, Stack<Allocator>& operatorStack) {</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  <span class="keywordflow">if</span> (*atomCountStack.template Top<unsigned>())</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>  *operatorStack.template Push<Operator>() = kConcatenation;</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>  (*atomCountStack.template Top<unsigned>())++;</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>  }</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span> </div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>  <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>  <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> old = l1;</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>  <span class="keywordflow">while</span> (GetState(l1).out != kRegexInvalidState)</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>  l1 = GetState(l1).out;</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>  GetState(l1).out = l2;</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>  <span class="keywordflow">return</span> old;</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>  }</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span> </div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>  <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>  <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>  next = GetState(l).out;</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>  GetState(l).out = s;</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>  }</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  }</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span> </div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>  <span class="keywordtype">bool</span> Eval(Stack<Allocator>& operandStack, Operator op) {</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  <span class="keywordflow">switch</span> (op) {</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>  <span class="keywordflow">case</span> kConcatenation:</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</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>(operandStack.GetSize() >= <span class="keyword">sizeof</span>(Frag) * 2);</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>  {</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>  Frag e2 = *operandStack.template Pop<Frag>(1);</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  Frag e1 = *operandStack.template Pop<Frag>(1);</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>  Patch(e1.out, e2.start);</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>  *operandStack.template Push<Frag>() = Frag(e1.start, e2.out, Min(e1.minIndex, e2.minIndex));</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>  }</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span> </div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>  <span class="keywordflow">case</span> kAlternation:</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>  <span class="keywordflow">if</span> (operandStack.GetSize() >= <span class="keyword">sizeof</span>(Frag) * 2) {</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>  Frag e2 = *operandStack.template Pop<Frag>(1);</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>  Frag e1 = *operandStack.template Pop<Frag>(1);</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>  <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>  *operandStack.template Push<Frag>() = 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>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>  }</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span> </div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>  <span class="keywordflow">case</span> kZeroOrOne:</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>  <span class="keywordflow">if</span> (operandStack.GetSize() >= <span class="keyword">sizeof</span>(Frag)) {</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>  Frag e = *operandStack.template Pop<Frag>(1);</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>  <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>  *operandStack.template Push<Frag>() = Frag(s, Append(e.out, s), e.minIndex);</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>  }</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span> </div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>  <span class="keywordflow">case</span> kZeroOrMore:</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>  <span class="keywordflow">if</span> (operandStack.GetSize() >= <span class="keyword">sizeof</span>(Frag)) {</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>  Frag e = *operandStack.template Pop<Frag>(1);</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>  <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>  Patch(e.out, s);</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>  *operandStack.template Push<Frag>() = Frag(s, s, e.minIndex);</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>  }</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span> </div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>  <span class="keywordflow">default</span>: </div><div class="line"><a name="l00396"></a><span class="lineno"> 396</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>(op == kOneOrMore);</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>  <span class="keywordflow">if</span> (operandStack.GetSize() >= <span class="keyword">sizeof</span>(Frag)) {</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>  Frag e = *operandStack.template Pop<Frag>(1);</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>  <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>  Patch(e.out, s);</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>  *operandStack.template Push<Frag>() = Frag(e.start, s, e.minIndex);</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>  }</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>  }</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>  }</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span> </div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>  <span class="keywordtype">bool</span> EvalQuantifier(Stack<Allocator>& 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>  <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 <= m);</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</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>(operandStack.GetSize() >= <span class="keyword">sizeof</span>(Frag));</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span> </div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>  <span class="keywordflow">if</span> (n == 0) {</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>  <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>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>  <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>  Eval(operandStack, kZeroOrMore); <span class="comment">// a{0,} -> a*</span></div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>  <span class="keywordflow">else</span> {</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>  Eval(operandStack, kZeroOrOne); <span class="comment">// a{0,5} -> a?</span></div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i < m - 1; i++)</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>  CloneTopOperand(operandStack); <span class="comment">// a{0,5} -> a? a? a? a? a?</span></div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i < m - 1; i++)</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>  Eval(operandStack, kConcatenation); <span class="comment">// a{0,5} -> a?a?a?a?a?</span></div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>  }</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>  }</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span> </div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i < n - 1; i++) <span class="comment">// a{3} -> a a a</span></div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>  CloneTopOperand(operandStack);</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span> </div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>  <span class="keywordflow">if</span> (m == kInfinityQuantifier)</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>  Eval(operandStack, kOneOrMore); <span class="comment">// a{3,} -> a a a+</span></div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (m > n) {</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>  CloneTopOperand(operandStack); <span class="comment">// a{3,5} -> a a a a</span></div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>  Eval(operandStack, kZeroOrOne); <span class="comment">// a{3,5} -> a a a a?</span></div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = n; i < m - 1; i++)</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>  CloneTopOperand(operandStack); <span class="comment">// a{3,5} -> a a a a? a?</span></div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = n; i < m; i++)</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>  Eval(operandStack, kConcatenation); <span class="comment">// a{3,5} -> a a aa?a?</span></div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>  }</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span> </div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i < n - 1; i++)</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>  Eval(operandStack, kConcatenation); <span class="comment">// a{3} -> aaa, a{3,} -> aaa+, a{3.5} -> aaaa?a?</span></div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span> </div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>  }</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span> </div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>  <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 < b ? a : b; }</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span> </div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>  <span class="keywordtype">void</span> CloneTopOperand(Stack<Allocator>& operandStack) {</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>  <span class="keyword">const</span> Frag src = *operandStack.template Top<Frag>(); <span class="comment">// Copy constructor to prevent invalidation</span></div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>  <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> count = stateCount_ - src.minIndex; <span class="comment">// Assumes top operand contains states in [src->minIndex, stateCount_)</span></div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>  State* s = states_.template Push<State>(count);</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>  memcpy(s, &GetState(src.minIndex), count * <span class="keyword">sizeof</span>(State));</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>  <span class="keywordflow">for</span> (<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> j = 0; j < count; j++) {</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>  <span class="keywordflow">if</span> (s[j].out != kRegexInvalidState)</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>  s[j].out += count;</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>  <span class="keywordflow">if</span> (s[j].out1 != kRegexInvalidState)</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>  s[j].out1 += count;</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>  }</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>  *operandStack.template Push<Frag>() = Frag(src.start + count, src.out + count, src.minIndex + count);</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>  stateCount_ += count;</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>  }</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span> </div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> InputStream></div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>  <span class="keywordtype">bool</span> ParseUnsigned(DecodedStream<InputStream, Encoding>& ds, <span class="keywordtype">unsigned</span>* u) {</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>  <span class="keywordtype">unsigned</span> r = 0;</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>  <span class="keywordflow">if</span> (ds.Peek() < <span class="charliteral">'0'</span> || ds.Peek() > <span class="charliteral">'9'</span>)</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>  <span class="keywordflow">while</span> (ds.Peek() >= <span class="charliteral">'0'</span> && ds.Peek() <= <span class="charliteral">'9'</span>) {</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>  <span class="keywordflow">if</span> (r >= 429496729 && ds.Peek() > <span class="charliteral">'5'</span>) <span class="comment">// 2^32 - 1 = 4294967295</span></div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>  <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>  r = r * 10 + (ds.Take() - <span class="charliteral">'0'</span>);</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>  }</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>  *u = r;</div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>  }</div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span> </div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> InputStream></div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>  <span class="keywordtype">bool</span> ParseRange(DecodedStream<InputStream, Encoding>& ds, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a>* range) {</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>  <span class="keywordtype">bool</span> isBegin = <span class="keyword">true</span>;</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>  <span class="keywordtype">bool</span> negate = <span class="keyword">false</span>;</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>  <span class="keywordtype">int</span> step = 0;</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>  <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> start = kRegexInvalidRange;</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>  <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> current = kRegexInvalidRange;</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>  <span class="keywordtype">unsigned</span> codepoint;</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>  <span class="keywordflow">while</span> ((codepoint = ds.Take()) != 0) {</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>  <span class="keywordflow">if</span> (isBegin) {</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>  isBegin = <span class="keyword">false</span>;</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>  <span class="keywordflow">if</span> (codepoint == <span class="charliteral">'^'</span>) {</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>  negate = <span class="keyword">true</span>;</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>  }</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>  }</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span> </div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>  <span class="keywordflow">switch</span> (codepoint) {</div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>  <span class="keywordflow">case</span> <span class="charliteral">']'</span>:</div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>  <span class="keywordflow">if</span> (start == kRegexInvalidRange)</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>  <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>  <span class="keywordflow">if</span> (step == 2) { <span class="comment">// Add trailing '-'</span></div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>  <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> r = NewRange(<span class="charliteral">'-'</span>);</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</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>(current != kRegexInvalidRange);</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>  GetRange(current).next = r;</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>  }</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>  <span class="keywordflow">if</span> (negate)</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>  GetRange(start).start |= kRangeNegationFlag;</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>  *range = start;</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span> </div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>  <span class="keywordflow">case</span> <span class="charliteral">'\\'</span>:</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>  <span class="keywordflow">if</span> (ds.Peek() == <span class="charliteral">'b'</span>) {</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>  ds.Take();</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>  codepoint = 0x0008; <span class="comment">// Escape backspace character</span></div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>  }</div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!CharacterEscape(ds, &codepoint))</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>  <span class="comment">// fall through to default</span></div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span> </div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>  <span class="keywordflow">default</span>:</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>  <span class="keywordflow">switch</span> (step) {</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>  <span class="keywordflow">case</span> 1:</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>  <span class="keywordflow">if</span> (codepoint == <span class="charliteral">'-'</span>) {</div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>  step++;</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>  }</div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>  <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> </div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>  <span class="keywordflow">case</span> 0:</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>  {</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>  <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>  <span class="keywordflow">if</span> (current != kRegexInvalidRange)</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>  GetRange(current).next = r;</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>  <span class="keywordflow">if</span> (start == kRegexInvalidRange)</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>  start = r;</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>  current = r;</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>  }</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>  step = 1;</div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span> </div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>  <span class="keywordflow">default</span>:</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</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>(step == 2);</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>  GetRange(current).end = codepoint;</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>  step = 0;</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>  }</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>  }</div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>  }</div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>  }</div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>  </div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>  <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>  Range* r = ranges_.template Push<Range>();</div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>  r->start = r->end = codepoint;</div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>  r->next = kRegexInvalidRange;</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>  <span class="keywordflow">return</span> rangeCount_++;</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>  }</div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span> </div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> InputStream></div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>  <span class="keywordtype">bool</span> CharacterEscape(DecodedStream<InputStream, Encoding>& ds, <span class="keywordtype">unsigned</span>* escapedCodepoint) {</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>  <span class="keywordtype">unsigned</span> codepoint;</div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>  <span class="keywordflow">switch</span> (codepoint = ds.Take()) {</div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>  <span class="keywordflow">case</span> <span class="charliteral">'^'</span>:</div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>  <span class="keywordflow">case</span> <span class="charliteral">'$'</span>:</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>  <span class="keywordflow">case</span> <span class="charliteral">'|'</span>:</div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>  <span class="keywordflow">case</span> <span class="charliteral">'('</span>:</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>  <span class="keywordflow">case</span> <span class="charliteral">')'</span>:</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>  <span class="keywordflow">case</span> <span class="charliteral">'?'</span>:</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>  <span class="keywordflow">case</span> <span class="charliteral">'*'</span>:</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>  <span class="keywordflow">case</span> <span class="charliteral">'+'</span>:</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>  <span class="keywordflow">case</span> <span class="charliteral">'.'</span>:</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>  <span class="keywordflow">case</span> <span class="charliteral">'['</span>:</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>  <span class="keywordflow">case</span> <span class="charliteral">']'</span>:</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>  <span class="keywordflow">case</span> <span class="charliteral">'{'</span>:</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>  <span class="keywordflow">case</span> <span class="charliteral">'}'</span>:</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>  <span class="keywordflow">case</span> <span class="charliteral">'\\'</span>:</div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span>  *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>  <span class="keywordflow">case</span> <span class="charliteral">'f'</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>  <span class="keywordflow">case</span> <span class="charliteral">'n'</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>  <span class="keywordflow">case</span> <span class="charliteral">'r'</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>  <span class="keywordflow">case</span> <span class="charliteral">'t'</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>  <span class="keywordflow">case</span> <span class="charliteral">'v'</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>  <span class="keywordflow">default</span>:</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>  <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>  }</div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>  }</div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span> </div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>  Stack<Allocator> states_;</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>  Stack<Allocator> ranges_;</div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>  <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> root_;</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>  <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> stateCount_;</div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>  <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> rangeCount_;</div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span> </div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>  <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> </div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>  <span class="comment">// For SearchWithAnchoring()</span></div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>  <span class="keywordtype">bool</span> anchorBegin_;</div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>  <span class="keywordtype">bool</span> anchorEnd_;</div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span> };</div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span> </div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span> <span class="keyword">template</span> <<span class="keyword">typename</span> RegexType, <span class="keyword">typename</span> Allocator = CrtAllocator></div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span> <span class="keyword">class </span>GenericRegexSearch {</div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>  <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>  <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> </div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>  GenericRegexSearch(<span class="keyword">const</span> RegexType& regex, Allocator* allocator = 0) : </div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>  regex_(regex), allocator_(allocator), ownAllocator_(0),</div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>  state0_(allocator, 0), state1_(allocator, 0), stateSet_()</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>  {</div><div class="line"><a name="l00608"></a><span class="lineno"> 608</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>(regex_.IsValid());</div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>  <span class="keywordflow">if</span> (!allocator_)</div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>  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>  stateSet_ = <span class="keyword">static_cast<</span><span class="keywordtype">unsigned</span>*<span class="keyword">></span>(allocator_->Malloc(GetStateSetSize()));</div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span>  state0_.template Reserve<SizeType>(regex_.stateCount_);</div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>  state1_.template Reserve<SizeType>(regex_.stateCount_);</div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>  }</div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span> </div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span>  ~GenericRegexSearch() {</div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>  Allocator::Free(stateSet_);</div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>  <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>  }</div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span> </div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> InputStream></div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>  <span class="keywordtype">bool</span> Match(InputStream& is) {</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>  <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>  }</div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span> </div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>  <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>  GenericStringStream<Encoding> is(s);</div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>  <span class="keywordflow">return</span> Match(is);</div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>  }</div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span> </div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> InputStream></div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>  <span class="keywordtype">bool</span> Search(InputStream& is) {</div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>  <span class="keywordflow">return</span> SearchWithAnchoring(is, regex_.anchorBegin_, regex_.anchorEnd_);</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>  }</div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span> </div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span>  <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>  GenericStringStream<Encoding> is(s);</div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>  <span class="keywordflow">return</span> Search(is);</div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>  }</div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span> </div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span> <span class="keyword">private</span>:</div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span>  <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>  <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> </div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> InputStream></div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>  <span class="keywordtype">bool</span> SearchWithAnchoring(InputStream& 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>  DecodedStream<InputStream, Encoding> ds(is);</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span> </div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>  state0_.Clear();</div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>  Stack<Allocator> *current = &state0_, *next = &state1_;</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>  <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>  std::memset(stateSet_, 0, stateSetSize);</div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span> </div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>  <span class="keywordtype">bool</span> matched = AddState(*current, regex_.root_);</div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>  <span class="keywordtype">unsigned</span> codepoint;</div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>  <span class="keywordflow">while</span> (!current->Empty() && (codepoint = ds.Take()) != 0) {</div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span>  std::memset(stateSet_, 0, stateSetSize);</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>  next->Clear();</div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>  matched = <span class="keyword">false</span>;</div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a>* s = current->template Bottom<SizeType>(); s != current->template End<SizeType>(); ++s) {</div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span>  <span class="keyword">const</span> State& sr = regex_.GetState(*s);</div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>  <span class="keywordflow">if</span> (sr.codepoint == codepoint ||</div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>  sr.codepoint == RegexType::kAnyCharacterClass || </div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>  (sr.codepoint == RegexType::kRangeCharacterClass && MatchRange(sr.rangeStart, codepoint)))</div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span>  {</div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span>  matched = AddState(*next, sr.out) || matched;</div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>  <span class="keywordflow">if</span> (!anchorEnd && matched)</div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>  }</div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span>  <span class="keywordflow">if</span> (!anchorBegin)</div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span>  AddState(*next, regex_.root_);</div><div class="line"><a name="l00672"></a><span class="lineno"> 672</span>  }</div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span>  internal::Swap(current, next);</div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span>  }</div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span> </div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>  <span class="keywordflow">return</span> matched;</div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span>  }</div><div class="line"><a name="l00678"></a><span class="lineno"> 678</span> </div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span>  <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>  <span class="keywordflow">return</span> (regex_.stateCount_ + 31) / 32 * 4;</div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>  }</div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span> </div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>  <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>  <span class="keywordtype">bool</span> AddState(Stack<Allocator>& l, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> index) {</div><div class="line"><a name="l00685"></a><span class="lineno"> 685</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 != kRegexInvalidState);</div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span> </div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>  <span class="keyword">const</span> State& s = regex_.GetState(index);</div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span>  <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>  <span class="keywordtype">bool</span> matched = AddState(l, s.out);</div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span>  <span class="keywordflow">return</span> AddState(l, s.out1) || matched;</div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span>  }</div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!(stateSet_[index >> 5] & (1u << (index & 31)))) {</div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span>  stateSet_[index >> 5] |= (1u << (index & 31));</div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span>  *l.template PushUnsafe<SizeType>() = index;</div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span>  }</div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span>  <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>  }</div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span> </div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span>  <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>  <span class="keywordtype">bool</span> yes = (regex_.GetRange(rangeIndex).start & RegexType::kRangeNegationFlag) == 0;</div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span>  <span class="keywordflow">while</span> (rangeIndex != kRegexInvalidRange) {</div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>  <span class="keyword">const</span> Range& r = regex_.GetRange(rangeIndex);</div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span>  <span class="keywordflow">if</span> (codepoint >= (r.start & ~RegexType::kRangeNegationFlag) && codepoint <= r.end)</div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span>  <span class="keywordflow">return</span> yes;</div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span>  rangeIndex = r.next;</div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span>  }</div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span>  <span class="keywordflow">return</span> !yes;</div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span>  }</div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span> </div><div class="line"><a name="l00710"></a><span class="lineno"> 710</span>  <span class="keyword">const</span> RegexType& regex_;</div><div class="line"><a name="l00711"></a><span class="lineno"> 711</span>  Allocator* allocator_;</div><div class="line"><a name="l00712"></a><span class="lineno"> 712</span>  Allocator* ownAllocator_;</div><div class="line"><a name="l00713"></a><span class="lineno"> 713</span>  Stack<Allocator> state0_;</div><div class="line"><a name="l00714"></a><span class="lineno"> 714</span>  Stack<Allocator> state1_;</div><div class="line"><a name="l00715"></a><span class="lineno"> 715</span>  uint32_t* stateSet_;</div><div class="line"><a name="l00716"></a><span class="lineno"> 716</span> };</div><div class="line"><a name="l00717"></a><span class="lineno"> 717</span> </div><div class="line"><a name="l00718"></a><span class="lineno"> 718</span> <span class="keyword">typedef</span> GenericRegex<UTF8<> > Regex;</div><div class="line"><a name="l00719"></a><span class="lineno"> 719</span> <span class="keyword">typedef</span> GenericRegexSearch<Regex> RegexSearch;</div><div class="line"><a name="l00720"></a><span class="lineno"> 720</span> </div><div class="line"><a name="l00721"></a><span class="lineno"> 721</span> } <span class="comment">// namespace internal</span></div><div class="line"><a name="l00722"></a><span class="lineno"> 722</span> RAPIDJSON_NAMESPACE_END</div><div class="line"><a name="l00723"></a><span class="lineno"> 723</span> </div><div class="line"><a name="l00724"></a><span class="lineno"> 724</span> <span class="preprocessor">#ifdef __GNUC__</span></div><div class="line"><a name="l00725"></a><span class="lineno"> 725</span> RAPIDJSON_DIAG_POP</div><div class="line"><a name="l00726"></a><span class="lineno"> 726</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00727"></a><span class="lineno"> 727</span> </div><div class="line"><a name="l00728"></a><span class="lineno"> 728</span> <span class="preprocessor">#if defined(__clang__) || defined(_MSC_VER)</span></div><div class="line"><a name="l00729"></a><span class="lineno"> 729</span> RAPIDJSON_DIAG_POP</div><div class="line"><a name="l00730"></a><span class="lineno"> 730</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00731"></a><span class="lineno"> 731</span> </div><div class="line"><a name="l00732"></a><span class="lineno"> 732</span> <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> <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> <span class="comment">// </span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <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> <span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">// Licensed under the MIT License (the "License"); you may not use this file except</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <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> <span class="comment">//</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">// http://opensource->org/licenses/MIT</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">//</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <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> <span class="comment">// under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR </span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <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> <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> </div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor">#ifndef RAPIDJSON_SCHEMA_H_</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#define RAPIDJSON_SCHEMA_H_</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> </div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#include "<a class="code" href="document_8h.html">document.h</a>"</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#include "pointer.h"</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include "stringbuffer.h"</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include <cmath></span> <span class="comment">// abs, floor</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#if !defined(RAPIDJSON_SCHEMA_USE_INTERNALREGEX)</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#define RAPIDJSON_SCHEMA_USE_INTERNALREGEX 1</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#else</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#define RAPIDJSON_SCHEMA_USE_INTERNALREGEX 0</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#if !RAPIDJSON_SCHEMA_USE_INTERNALREGEX && defined(RAPIDJSON_SCHEMA_USE_STDREGEX) && (__cplusplus >=201103L || (defined(_MSC_VER) && _MSC_VER >= 1800))</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#define RAPIDJSON_SCHEMA_USE_STDREGEX 1</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#else</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#define RAPIDJSON_SCHEMA_USE_STDREGEX 0</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> </div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor">#if RAPIDJSON_SCHEMA_USE_INTERNALREGEX</span></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor">#include "internal/regex.h"</span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="preprocessor">#elif RAPIDJSON_SCHEMA_USE_STDREGEX</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="preprocessor">#include <regex></span></div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span> </div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <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> <span class="preprocessor">#define RAPIDJSON_SCHEMA_HAS_REGEX 1</span></div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="preprocessor">#else</span></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="preprocessor">#define RAPIDJSON_SCHEMA_HAS_REGEX 0</span></div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span> </div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="preprocessor">#ifndef RAPIDJSON_SCHEMA_VERBOSE</span></div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="preprocessor">#define RAPIDJSON_SCHEMA_VERBOSE 0</span></div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span> </div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="preprocessor">#if RAPIDJSON_SCHEMA_VERBOSE</span></div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="preprocessor">#include "stringbuffer.h"</span></div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span> </div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span> RAPIDJSON_DIAG_PUSH</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span> </div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="preprocessor">#if defined(__GNUC__)</span></div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span> RAPIDJSON_DIAG_OFF(effc++)</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span> </div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="preprocessor">#ifdef __clang__</span></div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span> RAPIDJSON_DIAG_OFF(weak-vtables)</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span> RAPIDJSON_DIAG_OFF(exit-time-destructors)</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span> RAPIDJSON_DIAG_OFF(c++98-compat-pedantic)</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span> RAPIDJSON_DIAG_OFF(variadic-macros)</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="preprocessor">#elif defined(_MSC_VER)</span></div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span> 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> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span> </div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span> RAPIDJSON_NAMESPACE_BEGIN</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="comment"></span></div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="comment"></span><span class="comment">// Verbose Utilities</span></div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span> </div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="preprocessor">#if RAPIDJSON_SCHEMA_VERBOSE</span></div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span> </div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="keyword">namespace </span>internal {</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span> </div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <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>  printf(<span class="stringliteral">"Fail keyword: %s\n"</span>, keyword);</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span> }</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span> </div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <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>  wprintf(L<span class="stringliteral">"Fail keyword: %ls\n"</span>, keyword);</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span> }</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span> </div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <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>  printf(<span class="stringliteral">"Fail document: %s\n\n"</span>, document);</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span> }</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span> </div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <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>  wprintf(L<span class="stringliteral">"Fail document: %ls\n\n"</span>, document);</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span> }</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span> </div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <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>  printf(<span class="stringliteral">"S: %*s%s\nD: %*s%s\n\n"</span>, depth * 4, <span class="stringliteral">" "</span>, s, depth * 4, <span class="stringliteral">" "</span>, d);</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span> }</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span> </div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span> <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>  wprintf(L<span class="stringliteral">"S: %*ls%ls\nD: %*ls%ls\n\n"</span>, depth * 4, L<span class="stringliteral">" "</span>, s, depth * 4, L<span class="stringliteral">" "</span>, d);</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span> }</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span> </div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span> } <span class="comment">// namespace internal</span></div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span> </div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <span class="preprocessor">#endif // RAPIDJSON_SCHEMA_VERBOSE</span></div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <span class="comment"></span></div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <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> </div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <span class="preprocessor">#if RAPIDJSON_SCHEMA_VERBOSE</span></div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <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> <span class="preprocessor">#else</span></div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <span class="preprocessor">#define RAPIDJSON_INVALID_KEYWORD_VERBOSE(keyword)</span></div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span> </div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <span class="preprocessor">#define RAPIDJSON_INVALID_KEYWORD_RETURN(keyword)\</span></div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span> <span class="preprocessor">RAPIDJSON_MULTILINEMACRO_BEGIN\</span></div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span> <span class="preprocessor"> context.invalidKeyword = keyword.GetString();\</span></div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span> <span class="preprocessor"> RAPIDJSON_INVALID_KEYWORD_VERBOSE(keyword.GetString());\</span></div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <span class="preprocessor"> return false;\</span></div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <span class="preprocessor">RAPIDJSON_MULTILINEMACRO_END</span></div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span> <span class="comment"></span></div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span> <span class="comment"></span><span class="comment">// Forward declarations</span></div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span> </div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span> <span class="keyword">template</span> <<span class="keyword">typename</span> ValueType, <span class="keyword">typename</span> Allocator></div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <span class="keyword">class </span>GenericSchemaDocument;</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span> </div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span> <span class="keyword">namespace </span>internal {</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span> </div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <span class="keyword">template</span> <<span class="keyword">typename</span> SchemaDocumentType></div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <span class="keyword">class </span>Schema;</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span> <span class="comment"></span></div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span> <span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <span class="comment"></span><span class="comment">// ISchemaValidator</span></div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span> </div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span> <span class="keyword">class </span>ISchemaValidator {</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  <span class="keyword">virtual</span> ~ISchemaValidator() {}</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  <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> };</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span> <span class="comment"></span></div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span> <span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span> <span class="comment"></span><span class="comment">// ISchemaStateFactory</span></div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span> </div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span> <span class="keyword">template</span> <<span class="keyword">typename</span> SchemaType></div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span> <span class="keyword">class </span>ISchemaStateFactory {</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  <span class="keyword">virtual</span> ~ISchemaStateFactory() {}</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  <span class="keyword">virtual</span> ISchemaValidator* CreateSchemaValidator(<span class="keyword">const</span> SchemaType&) = 0;</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  <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>  <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>  <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>  <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>  <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>  <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> };</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span> <span class="comment"></span></div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span> <span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span> <span class="comment"></span><span class="comment">// IValidationErrorHandler</span></div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span> </div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span> <span class="keyword">template</span> <<span class="keyword">typename</span> SchemaType></div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span> <span class="keyword">class </span>IValidationErrorHandler {</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  <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>  <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> </div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  <span class="keyword">virtual</span> ~IValidationErrorHandler() {}</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span> </div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> NotMultipleOf(int64_t actual, <span class="keyword">const</span> SValue& expected) = 0;</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> NotMultipleOf(uint64_t actual, <span class="keyword">const</span> SValue& expected) = 0;</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> NotMultipleOf(<span class="keywordtype">double</span> actual, <span class="keyword">const</span> SValue& expected) = 0;</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> AboveMaximum(int64_t actual, <span class="keyword">const</span> SValue& expected, <span class="keywordtype">bool</span> exclusive) = 0;</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> AboveMaximum(uint64_t actual, <span class="keyword">const</span> SValue& expected, <span class="keywordtype">bool</span> exclusive) = 0;</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> AboveMaximum(<span class="keywordtype">double</span> actual, <span class="keyword">const</span> SValue& expected, <span class="keywordtype">bool</span> exclusive) = 0;</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> BelowMinimum(int64_t actual, <span class="keyword">const</span> SValue& expected, <span class="keywordtype">bool</span> exclusive) = 0;</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> BelowMinimum(uint64_t actual, <span class="keyword">const</span> SValue& expected, <span class="keywordtype">bool</span> exclusive) = 0;</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> BelowMinimum(<span class="keywordtype">double</span> actual, <span class="keyword">const</span> SValue& expected, <span class="keywordtype">bool</span> exclusive) = 0;</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span> </div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  <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>  <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>  <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> </div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  <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>  <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>  <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>  <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> </div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  <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>  <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>  <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>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> AddMissingProperty(<span class="keyword">const</span> SValue& name) = 0;</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  <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>  <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>  <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> </div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  <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>  <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>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> AddMissingDependentProperty(<span class="keyword">const</span> SValue& targetName) = 0;</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> EndMissingDependentProperties(<span class="keyword">const</span> SValue& sourceName) = 0;</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> AddDependencySchemaError(<span class="keyword">const</span> SValue& souceName, ISchemaValidator* subvalidator) = 0;</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  <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> </div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  <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>  <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>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> AddExpectedType(<span class="keyword">const</span> <span class="keyword">typename</span> SchemaType::ValueType& expectedType) = 0;</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> EndDisallowedType(<span class="keyword">const</span> <span class="keyword">typename</span> SchemaType::ValueType& actualType) = 0;</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  <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>  <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>  <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>  <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> };</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span> </div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span> <span class="comment"></span></div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span> <span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span> <span class="comment"></span><span class="comment">// Hasher</span></div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span> </div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span> <span class="comment">// For comparison of compound value</span></div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span> <span class="keyword">template</span><<span class="keyword">typename</span> Encoding, <span class="keyword">typename</span> Allocator></div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span> <span class="keyword">class </span>Hasher {</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  <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> </div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  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> </div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  <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>  <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>  <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<</span><span class="keywordtype">double</span><span class="keyword">></span>(i); <span class="keywordflow">return</span> WriteNumber(n); }</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  <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<</span><span class="keywordtype">double</span><span class="keyword">></span>(u); <span class="keywordflow">return</span> WriteNumber(n); }</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  <span class="keywordtype">bool</span> Int64(int64_t i) { Number n; n.u.i = i; n.d = <span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>(i); <span class="keywordflow">return</span> WriteNumber(n); }</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  <span class="keywordtype">bool</span> Uint64(uint64_t u) { Number n; n.u.u = u; n.d = <span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>(u); <span class="keywordflow">return</span> WriteNumber(n); }</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  <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>  Number n; </div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  <span class="keywordflow">if</span> (d < 0) n.u.i = <span class="keyword">static_cast<</span>int64_t<span class="keyword">></span>(d);</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  <span class="keywordflow">else</span> n.u.u = <span class="keyword">static_cast<</span>uint64_t<span class="keyword">></span>(d); </div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  n.d = d;</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  <span class="keywordflow">return</span> WriteNumber(n);</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  }</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span> </div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  <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>  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>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  }</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span> </div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  <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>  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>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  }</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span> </div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  <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>  <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>  <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>  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>  uint64_t* kv = stack_.template Pop<uint64_t>(memberCount * 2);</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>  <span class="keywordflow">for</span> (<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> i = 0; i < memberCount; i++)</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  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>  *stack_.template Push<uint64_t>() = h;</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  }</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  </div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  <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>  <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>  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>  uint64_t* e = stack_.template Pop<uint64_t>(elementCount);</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  <span class="keywordflow">for</span> (<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> i = 0; i < elementCount; i++)</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  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>  *stack_.template Push<uint64_t>() = h;</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>  }</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span> </div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>  <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> </div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  uint64_t GetHashCode()<span class="keyword"> const </span>{</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</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>(IsValid());</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  <span class="keywordflow">return</span> *stack_.template Top<uint64_t>();</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  }</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span> </div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span> <span class="keyword">private</span>:</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  <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>  <span class="keyword">struct </span>Number {</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  <span class="keyword">union </span>U {</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  uint64_t u;</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>  int64_t i;</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  }u;</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  <span class="keywordtype">double</span> d;</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>  };</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span> </div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  <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>  </div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  <span class="keywordtype">bool</span> WriteNumber(<span class="keyword">const</span> Number& n) { <span class="keywordflow">return</span> WriteBuffer(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a">kNumberType</a>, &n, <span class="keyword">sizeof</span>(n)); }</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  </div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>  <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>  <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>  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>  <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>* d = <span class="keyword">static_cast<</span><span class="keyword">const </span><span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>*<span class="keyword">></span>(data);</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i < len; i++)</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  h = Hash(h, d[i]);</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  *stack_.template Push<uint64_t>() = h;</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  }</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span> </div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  <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>  <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>  h ^= d;</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  h *= kPrime;</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  <span class="keywordflow">return</span> h;</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  }</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span> </div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  Stack<Allocator> stack_;</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span> };</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span> <span class="comment"></span></div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span> <span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span> <span class="comment"></span><span class="comment">// SchemaValidationContext</span></div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span> </div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span> <span class="keyword">template</span> <<span class="keyword">typename</span> SchemaDocumentType></div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span> <span class="keyword">struct </span>SchemaValidationContext {</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>  <span class="keyword">typedef</span> Schema<SchemaDocumentType> SchemaType;</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  <span class="keyword">typedef</span> ISchemaStateFactory<SchemaType> SchemaValidatorFactoryType;</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  <span class="keyword">typedef</span> IValidationErrorHandler<SchemaType> ErrorHandlerType;</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>  <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>  <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> </div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  <span class="keyword">enum</span> PatternValidatorType {</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  kPatternValidatorOnly,</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  kPatternValidatorWithProperty,</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  kPatternValidatorWithAdditionalProperty</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  };</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span> </div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>  SchemaValidationContext(SchemaValidatorFactoryType& f, ErrorHandlerType& eh, <span class="keyword">const</span> SchemaType* s) :</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  factory(f),</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>  error_handler(eh),</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  schema(s),</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>  valueSchema(),</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  invalidKeyword(),</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>  hasher(),</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>  arrayElementHashCodes(),</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>  validators(),</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>  validatorCount(),</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>  patternPropertiesValidators(),</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>  patternPropertiesValidatorCount(),</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>  patternPropertiesSchemas(),</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>  patternPropertiesSchemaCount(),</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>  valuePatternValidatorType(kPatternValidatorOnly),</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>  propertyExist(),</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>  inArray(false),</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>  valueUniqueness(false),</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>  arrayUniqueness(false)</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>  {</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>  }</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span> </div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>  ~SchemaValidationContext() {</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  <span class="keywordflow">if</span> (hasher)</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  factory.DestroryHasher(hasher);</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>  <span class="keywordflow">if</span> (validators) {</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  <span class="keywordflow">for</span> (<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> i = 0; i < validatorCount; i++)</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>  factory.DestroySchemaValidator(validators[i]);</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>  factory.FreeState(validators);</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>  }</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>  <span class="keywordflow">if</span> (patternPropertiesValidators) {</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  <span class="keywordflow">for</span> (<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> i = 0; i < patternPropertiesValidatorCount; i++)</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>  factory.DestroySchemaValidator(patternPropertiesValidators[i]);</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>  factory.FreeState(patternPropertiesValidators);</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>  }</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>  <span class="keywordflow">if</span> (patternPropertiesSchemas)</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>  factory.FreeState(patternPropertiesSchemas);</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>  <span class="keywordflow">if</span> (propertyExist)</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>  factory.FreeState(propertyExist);</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>  }</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span> </div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>  SchemaValidatorFactoryType& factory;</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>  ErrorHandlerType& error_handler;</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>  <span class="keyword">const</span> SchemaType* schema;</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>  <span class="keyword">const</span> SchemaType* valueSchema;</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>  <span class="keyword">const</span> Ch* invalidKeyword;</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>  <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>  <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>  ISchemaValidator** validators;</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>  <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> validatorCount;</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>  ISchemaValidator** patternPropertiesValidators;</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>  <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> patternPropertiesValidatorCount;</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>  <span class="keyword">const</span> SchemaType** patternPropertiesSchemas;</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>  <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> patternPropertiesSchemaCount;</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>  PatternValidatorType valuePatternValidatorType;</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>  PatternValidatorType objectPatternValidatorType;</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>  <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> arrayElementIndex;</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>  <span class="keywordtype">bool</span>* propertyExist;</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>  <span class="keywordtype">bool</span> inArray;</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>  <span class="keywordtype">bool</span> valueUniqueness;</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>  <span class="keywordtype">bool</span> arrayUniqueness;</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span> };</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span> <span class="comment"></span></div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span> <span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span> <span class="comment"></span><span class="comment">// Schema</span></div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span> </div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span> <span class="keyword">template</span> <<span class="keyword">typename</span> SchemaDocumentType></div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span> <span class="keyword">class </span>Schema {</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>  <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>  <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>  <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>  <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>  <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>  <span class="keyword">typedef</span> SchemaValidationContext<SchemaDocumentType> Context;</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>  <span class="keyword">typedef</span> Schema<SchemaDocumentType> SchemaType;</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>  <span class="keyword">typedef</span> GenericValue<EncodingType, AllocatorType> SValue;</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>  <span class="keyword">typedef</span> IValidationErrorHandler<Schema> ErrorHandler;</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>  <span class="keyword">friend</span> <span class="keyword">class </span>GenericSchemaDocument<ValueType, AllocatorType>;</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span> </div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>  Schema(SchemaDocumentType* schemaDocument, <span class="keyword">const</span> PointerType& p, <span class="keyword">const</span> ValueType& value, <span class="keyword">const</span> ValueType& document, AllocatorType* allocator) :</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>  allocator_(allocator),</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>  uri_(schemaDocument->GetURI(), *allocator),</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>  pointer_(p),</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>  typeless_(schemaDocument->GetTypeless()),</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>  enum_(),</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>  enumCount_(),</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>  not_(),</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>  type_((1 << kTotalSchemaType) - 1), <span class="comment">// typeless</span></div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>  validatorCount_(),</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>  notValidatorIndex_(),</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>  properties_(),</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>  additionalPropertiesSchema_(),</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>  patternProperties_(),</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>  patternPropertyCount_(),</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>  propertyCount_(),</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>  minProperties_(),</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>  maxProperties_(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a>(~0)),</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>  additionalProperties_(true),</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>  hasDependencies_(),</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>  hasRequired_(),</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>  hasSchemaDependencies_(),</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>  additionalItemsSchema_(),</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>  itemsList_(),</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>  itemsTuple_(),</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>  itemsTupleCount_(),</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>  minItems_(),</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>  maxItems_(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a>(~0)),</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>  additionalItems_(true),</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>  uniqueItems_(false),</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>  pattern_(),</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>  minLength_(0),</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>  maxLength_(~<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a>(0)),</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>  exclusiveMinimum_(false),</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>  exclusiveMaximum_(false),</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>  defaultValueLength_(0)</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>  {</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>  <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>  <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>  <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> </div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>  <span class="keywordflow">if</span> (!value.IsObject())</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span> </div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>  <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>  type_ = 0;</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>  <span class="keywordflow">if</span> (v->IsString())</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>  AddType(*v);</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (v->IsArray())</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>  <span class="keywordflow">for</span> (ConstValueIterator itr = v->Begin(); itr != v->End(); ++itr)</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>  AddType(*itr);</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>  }</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span> </div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>  <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>  <span class="keywordflow">if</span> (v->IsArray() && v->Size() > 0) {</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>  enum_ = <span class="keyword">static_cast<</span>uint64_t*<span class="keyword">></span>(allocator_->Malloc(<span class="keyword">sizeof</span>(uint64_t) * v->Size()));</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>  <span class="keywordflow">for</span> (ConstValueIterator itr = v->Begin(); itr != v->End(); ++itr) {</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>  <span class="keyword">typedef</span> Hasher<EncodingType, MemoryPoolAllocator<> > EnumHasherType;</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>  <span class="keywordtype">char</span> buffer[256u + 24];</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>  MemoryPoolAllocator<> hasherAllocator(buffer, <span class="keyword">sizeof</span>(buffer));</div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>  EnumHasherType h(&hasherAllocator, 256);</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>  itr->Accept(h);</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>  enum_[enumCount_++] = h.GetHashCode();</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>  }</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>  }</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span> </div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>  <span class="keywordflow">if</span> (schemaDocument) {</div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>  AssignIfExist(allOf_, *schemaDocument, p, value, GetAllOfString(), document);</div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>  AssignIfExist(anyOf_, *schemaDocument, p, value, GetAnyOfString(), document);</div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span>  AssignIfExist(oneOf_, *schemaDocument, p, value, GetOneOfString(), document);</div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>  }</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span> </div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>  <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>  schemaDocument->CreateSchema(&not_, p.Append(GetNotString(), allocator_), *v, document);</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>  notValidatorIndex_ = validatorCount_;</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>  validatorCount_++;</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>  }</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span> </div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>  <span class="comment">// Object</span></div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span> </div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>  <span class="keyword">const</span> ValueType* properties = GetMember(value, GetPropertiesString());</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>  <span class="keyword">const</span> ValueType* required = GetMember(value, GetRequiredString());</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>  <span class="keyword">const</span> ValueType* dependencies = GetMember(value, GetDependenciesString());</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>  {</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>  <span class="comment">// Gather properties from properties/required/dependencies</span></div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>  SValue allProperties(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a058c622e1e7d59419ae58b895cbce468">kArrayType</a>);</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span> </div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>  <span class="keywordflow">if</span> (properties && properties->IsObject())</div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>  <span class="keywordflow">for</span> (ConstMemberIterator itr = properties->MemberBegin(); itr != properties->MemberEnd(); ++itr)</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>  AddUniqueElement(allProperties, itr->name);</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>  </div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>  <span class="keywordflow">if</span> (required && required->IsArray())</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>  <span class="keywordflow">for</span> (ConstValueIterator itr = required->Begin(); itr != required->End(); ++itr)</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>  <span class="keywordflow">if</span> (itr->IsString())</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>  AddUniqueElement(allProperties, *itr);</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span> </div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>  <span class="keywordflow">if</span> (dependencies && dependencies->IsObject())</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>  <span class="keywordflow">for</span> (ConstMemberIterator itr = dependencies->MemberBegin(); itr != dependencies->MemberEnd(); ++itr) {</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>  AddUniqueElement(allProperties, itr->name);</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>  <span class="keywordflow">if</span> (itr->value.IsArray())</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>  <span class="keywordflow">for</span> (ConstValueIterator i = itr->value.Begin(); i != itr->value.End(); ++i)</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>  <span class="keywordflow">if</span> (i->IsString())</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>  AddUniqueElement(allProperties, *i);</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>  }</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span> </div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>  <span class="keywordflow">if</span> (allProperties.Size() > 0) {</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>  propertyCount_ = allProperties.Size();</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>  properties_ = <span class="keyword">static_cast<</span>Property*<span class="keyword">></span>(allocator_->Malloc(<span class="keyword">sizeof</span>(Property) * propertyCount_));</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>  <span class="keywordflow">for</span> (<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> i = 0; i < propertyCount_; i++) {</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>  <span class="keyword">new</span> (&properties_[i]) Property();</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>  properties_[i].name = allProperties[i];</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>  properties_[i].schema = typeless_;</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>  }</div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>  }</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>  }</div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span> </div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>  <span class="keywordflow">if</span> (properties && properties->IsObject()) {</div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>  PointerType q = p.Append(GetPropertiesString(), allocator_);</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>  <span class="keywordflow">for</span> (ConstMemberIterator itr = properties->MemberBegin(); itr != properties->MemberEnd(); ++itr) {</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>  <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> index;</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>  <span class="keywordflow">if</span> (FindPropertyIndex(itr->name, &index))</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>  schemaDocument->CreateSchema(&properties_[index].schema, q.Append(itr->name, allocator_), itr->value, document);</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>  }</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>  }</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span> </div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>  <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>  PointerType q = p.Append(GetPatternPropertiesString(), allocator_);</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>  patternProperties_ = <span class="keyword">static_cast<</span>PatternProperty*<span class="keyword">></span>(allocator_->Malloc(<span class="keyword">sizeof</span>(PatternProperty) * v->MemberCount()));</div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>  patternPropertyCount_ = 0;</div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span> </div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>  <span class="keywordflow">for</span> (ConstMemberIterator itr = v->MemberBegin(); itr != v->MemberEnd(); ++itr) {</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>  <span class="keyword">new</span> (&patternProperties_[patternPropertyCount_]) PatternProperty();</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>  patternProperties_[patternPropertyCount_].pattern = CreatePattern(itr->name);</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>  schemaDocument->CreateSchema(&patternProperties_[patternPropertyCount_].schema, q.Append(itr->name, allocator_), itr->value, document);</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>  patternPropertyCount_++;</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>  }</div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>  }</div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span> </div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>  <span class="keywordflow">if</span> (required && required->IsArray())</div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>  <span class="keywordflow">for</span> (ConstValueIterator itr = required->Begin(); itr != required->End(); ++itr)</div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>  <span class="keywordflow">if</span> (itr->IsString()) {</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>  <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> index;</div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>  <span class="keywordflow">if</span> (FindPropertyIndex(*itr, &index)) {</div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>  properties_[index].required = <span class="keyword">true</span>;</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>  hasRequired_ = <span class="keyword">true</span>;</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>  }</div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>  }</div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span> </div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>  <span class="keywordflow">if</span> (dependencies && dependencies->IsObject()) {</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>  PointerType q = p.Append(GetDependenciesString(), allocator_);</div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>  hasDependencies_ = <span class="keyword">true</span>;</div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>  <span class="keywordflow">for</span> (ConstMemberIterator itr = dependencies->MemberBegin(); itr != dependencies->MemberEnd(); ++itr) {</div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>  <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> sourceIndex;</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>  <span class="keywordflow">if</span> (FindPropertyIndex(itr->name, &sourceIndex)) {</div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>  <span class="keywordflow">if</span> (itr->value.IsArray()) {</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>  properties_[sourceIndex].dependencies = <span class="keyword">static_cast<</span><span class="keywordtype">bool</span>*<span class="keyword">></span>(allocator_->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>  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>  <span class="keywordflow">for</span> (ConstValueIterator targetItr = itr->value.Begin(); targetItr != itr->value.End(); ++targetItr) {</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>  <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> targetIndex;</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>  <span class="keywordflow">if</span> (FindPropertyIndex(*targetItr, &targetIndex))</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>  properties_[sourceIndex].dependencies[targetIndex] = <span class="keyword">true</span>;</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>  }</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>  }</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (itr->value.IsObject()) {</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>  hasSchemaDependencies_ = <span class="keyword">true</span>;</div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span>  schemaDocument->CreateSchema(&properties_[sourceIndex].dependenciesSchema, q.Append(itr->name, allocator_), itr->value, document);</div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span>  properties_[sourceIndex].dependenciesValidatorIndex = validatorCount_;</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>  validatorCount_++;</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>  }</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>  }</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>  }</div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>  }</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span> </div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>  <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>  <span class="keywordflow">if</span> (v->IsBool())</div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>  additionalProperties_ = v->GetBool();</div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (v->IsObject())</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>  schemaDocument->CreateSchema(&additionalPropertiesSchema_, p.Append(GetAdditionalPropertiesString(), allocator_), *v, document);</div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>  }</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span> </div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>  AssignIfExist(minProperties_, value, GetMinPropertiesString());</div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>  AssignIfExist(maxProperties_, value, GetMaxPropertiesString());</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span> </div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>  <span class="comment">// Array</span></div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>  <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>  PointerType q = p.Append(GetItemsString(), allocator_);</div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>  <span class="keywordflow">if</span> (v->IsObject()) <span class="comment">// List validation</span></div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>  schemaDocument->CreateSchema(&itemsList_, q, *v, document);</div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (v->IsArray()) { <span class="comment">// Tuple validation</span></div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>  itemsTuple_ = <span class="keyword">static_cast<</span><span class="keyword">const </span>Schema**<span class="keyword">></span>(allocator_->Malloc(<span class="keyword">sizeof</span>(<span class="keyword">const</span> Schema*) * v->Size()));</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>  <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> index = 0;</div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>  <span class="keywordflow">for</span> (ConstValueIterator itr = v->Begin(); itr != v->End(); ++itr, index++)</div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>  schemaDocument->CreateSchema(&itemsTuple_[itemsTupleCount_++], q.Append(index, allocator_), *itr, document);</div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>  }</div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>  }</div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span> </div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>  AssignIfExist(minItems_, value, GetMinItemsString());</div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>  AssignIfExist(maxItems_, value, GetMaxItemsString());</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span> </div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>  <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>  <span class="keywordflow">if</span> (v->IsBool())</div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>  additionalItems_ = v->GetBool();</div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (v->IsObject())</div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span>  schemaDocument->CreateSchema(&additionalItemsSchema_, p.Append(GetAdditionalItemsString(), allocator_), *v, document);</div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>  }</div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span> </div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span>  AssignIfExist(uniqueItems_, value, GetUniqueItemsString());</div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span> </div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>  <span class="comment">// String</span></div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>  AssignIfExist(minLength_, value, GetMinLengthString());</div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>  AssignIfExist(maxLength_, value, GetMaxLengthString());</div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span> </div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>  <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>  pattern_ = CreatePattern(*v);</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span> </div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>  <span class="comment">// Number</span></div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>  <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>  <span class="keywordflow">if</span> (v->IsNumber())</div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>  minimum_.CopyFrom(*v, *allocator_);</div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span> </div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>  <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>  <span class="keywordflow">if</span> (v->IsNumber())</div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>  maximum_.CopyFrom(*v, *allocator_);</div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span> </div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>  AssignIfExist(exclusiveMinimum_, value, GetExclusiveMinimumString());</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>  AssignIfExist(exclusiveMaximum_, value, GetExclusiveMaximumString());</div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span> </div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span>  <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>  <span class="keywordflow">if</span> (v->IsNumber() && v->GetDouble() > 0.0)</div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>  multipleOf_.CopyFrom(*v, *allocator_);</div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span> </div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>  <span class="comment">// Default</span></div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>  <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>  <span class="keywordflow">if</span> (v->IsString())</div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span>  defaultValueLength_ = v->GetStringLength();</div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span> </div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span>  }</div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span> </div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>  ~Schema() {</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>  AllocatorType::Free(enum_);</div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>  <span class="keywordflow">if</span> (properties_) {</div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>  <span class="keywordflow">for</span> (<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> i = 0; i < propertyCount_; i++)</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>  properties_[i].~Property();</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>  AllocatorType::Free(properties_);</div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span>  }</div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>  <span class="keywordflow">if</span> (patternProperties_) {</div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>  <span class="keywordflow">for</span> (<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> i = 0; i < patternPropertyCount_; i++)</div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>  patternProperties_[i].~PatternProperty();</div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span>  AllocatorType::Free(patternProperties_);</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>  }</div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>  AllocatorType::Free(itemsTuple_);</div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span> <span class="preprocessor">#if RAPIDJSON_SCHEMA_HAS_REGEX</span></div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span>  <span class="keywordflow">if</span> (pattern_) {</div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>  pattern_->~RegexType();</div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>  AllocatorType::Free(pattern_);</div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>  }</div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span>  }</div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span> </div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>  <span class="keyword">const</span> SValue& GetURI()<span class="keyword"> const </span>{</div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>  <span class="keywordflow">return</span> uri_;</div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span>  }</div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span> </div><div class="line"><a name="l00672"></a><span class="lineno"> 672</span>  <span class="keyword">const</span> PointerType& GetPointer()<span class="keyword"> const </span>{</div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span>  <span class="keywordflow">return</span> pointer_;</div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span>  }</div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span> </div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>  <span class="keywordtype">bool</span> BeginValue(Context& context)<span class="keyword"> const </span>{</div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span>  <span class="keywordflow">if</span> (context.inArray) {</div><div class="line"><a name="l00678"></a><span class="lineno"> 678</span>  <span class="keywordflow">if</span> (uniqueItems_)</div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span>  context.valueUniqueness = <span class="keyword">true</span>;</div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span> </div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>  <span class="keywordflow">if</span> (itemsList_)</div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>  context.valueSchema = itemsList_;</div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (itemsTuple_) {</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>  <span class="keywordflow">if</span> (context.arrayElementIndex < itemsTupleCount_)</div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>  context.valueSchema = itemsTuple_[context.arrayElementIndex];</div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (additionalItemsSchema_)</div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>  context.valueSchema = additionalItemsSchema_;</div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (additionalItems_)</div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>  context.valueSchema = typeless_;</div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span>  <span class="keywordflow">else</span> {</div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span>  context.error_handler.DisallowedItem(context.arrayElementIndex);</div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span>  RAPIDJSON_INVALID_KEYWORD_RETURN(GetItemsString());</div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span>  }</div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span>  }</div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span>  context.valueSchema = typeless_;</div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span> </div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span>  context.arrayElementIndex++;</div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span>  }</div><div class="line"><a name="l00700"></a><span class="lineno"> 700</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span>  }</div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span> </div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span>  RAPIDJSON_FORCEINLINE <span class="keywordtype">bool</span> EndValue(Context& context)<span class="keyword"> const </span>{</div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span>  <span class="keywordflow">if</span> (context.patternPropertiesValidatorCount > 0) {</div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span>  <span class="keywordtype">bool</span> otherValid = <span class="keyword">false</span>;</div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span>  <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>  <span class="keywordflow">if</span> (context.objectPatternValidatorType != Context::kPatternValidatorOnly)</div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span>  otherValid = context.patternPropertiesValidators[--count]->IsValid();</div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span> </div><div class="line"><a name="l00710"></a><span class="lineno"> 710</span>  <span class="keywordtype">bool</span> patternValid = <span class="keyword">true</span>;</div><div class="line"><a name="l00711"></a><span class="lineno"> 711</span>  <span class="keywordflow">for</span> (<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> i = 0; i < count; i++)</div><div class="line"><a name="l00712"></a><span class="lineno"> 712</span>  <span class="keywordflow">if</span> (!context.patternPropertiesValidators[i]->IsValid()) {</div><div class="line"><a name="l00713"></a><span class="lineno"> 713</span>  patternValid = <span class="keyword">false</span>;</div><div class="line"><a name="l00714"></a><span class="lineno"> 714</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00715"></a><span class="lineno"> 715</span>  }</div><div class="line"><a name="l00716"></a><span class="lineno"> 716</span> </div><div class="line"><a name="l00717"></a><span class="lineno"> 717</span>  <span class="keywordflow">if</span> (context.objectPatternValidatorType == Context::kPatternValidatorOnly) {</div><div class="line"><a name="l00718"></a><span class="lineno"> 718</span>  <span class="keywordflow">if</span> (!patternValid) {</div><div class="line"><a name="l00719"></a><span class="lineno"> 719</span>  context.error_handler.PropertyViolations(context.patternPropertiesValidators, count);</div><div class="line"><a name="l00720"></a><span class="lineno"> 720</span>  RAPIDJSON_INVALID_KEYWORD_RETURN(GetPatternPropertiesString());</div><div class="line"><a name="l00721"></a><span class="lineno"> 721</span>  }</div><div class="line"><a name="l00722"></a><span class="lineno"> 722</span>  }</div><div class="line"><a name="l00723"></a><span class="lineno"> 723</span>  <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>  <span class="keywordflow">if</span> (!patternValid || !otherValid) {</div><div class="line"><a name="l00725"></a><span class="lineno"> 725</span>  context.error_handler.PropertyViolations(context.patternPropertiesValidators, count + 1);</div><div class="line"><a name="l00726"></a><span class="lineno"> 726</span>  RAPIDJSON_INVALID_KEYWORD_RETURN(GetPatternPropertiesString());</div><div class="line"><a name="l00727"></a><span class="lineno"> 727</span>  }</div><div class="line"><a name="l00728"></a><span class="lineno"> 728</span>  }</div><div class="line"><a name="l00729"></a><span class="lineno"> 729</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!patternValid && !otherValid) { <span class="comment">// kPatternValidatorWithAdditionalProperty)</span></div><div class="line"><a name="l00730"></a><span class="lineno"> 730</span>  context.error_handler.PropertyViolations(context.patternPropertiesValidators, count + 1);</div><div class="line"><a name="l00731"></a><span class="lineno"> 731</span>  RAPIDJSON_INVALID_KEYWORD_RETURN(GetPatternPropertiesString());</div><div class="line"><a name="l00732"></a><span class="lineno"> 732</span>  }</div><div class="line"><a name="l00733"></a><span class="lineno"> 733</span>  }</div><div class="line"><a name="l00734"></a><span class="lineno"> 734</span> </div><div class="line"><a name="l00735"></a><span class="lineno"> 735</span>  <span class="keywordflow">if</span> (enum_) {</div><div class="line"><a name="l00736"></a><span class="lineno"> 736</span>  <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>  <span class="keywordflow">for</span> (<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> i = 0; i < enumCount_; i++)</div><div class="line"><a name="l00738"></a><span class="lineno"> 738</span>  <span class="keywordflow">if</span> (enum_[i] == h)</div><div class="line"><a name="l00739"></a><span class="lineno"> 739</span>  <span class="keywordflow">goto</span> foundEnum;</div><div class="line"><a name="l00740"></a><span class="lineno"> 740</span>  context.error_handler.DisallowedValue();</div><div class="line"><a name="l00741"></a><span class="lineno"> 741</span>  RAPIDJSON_INVALID_KEYWORD_RETURN(GetEnumString());</div><div class="line"><a name="l00742"></a><span class="lineno"> 742</span>  foundEnum:;</div><div class="line"><a name="l00743"></a><span class="lineno"> 743</span>  }</div><div class="line"><a name="l00744"></a><span class="lineno"> 744</span> </div><div class="line"><a name="l00745"></a><span class="lineno"> 745</span>  <span class="keywordflow">if</span> (allOf_.schemas)</div><div class="line"><a name="l00746"></a><span class="lineno"> 746</span>  <span class="keywordflow">for</span> (<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> i = allOf_.begin; i < allOf_.begin + allOf_.count; i++)</div><div class="line"><a name="l00747"></a><span class="lineno"> 747</span>  <span class="keywordflow">if</span> (!context.validators[i]->IsValid()) {</div><div class="line"><a name="l00748"></a><span class="lineno"> 748</span>  context.error_handler.NotAllOf(&context.validators[allOf_.begin], allOf_.count);</div><div class="line"><a name="l00749"></a><span class="lineno"> 749</span>  RAPIDJSON_INVALID_KEYWORD_RETURN(GetAllOfString());</div><div class="line"><a name="l00750"></a><span class="lineno"> 750</span>  }</div><div class="line"><a name="l00751"></a><span class="lineno"> 751</span>  </div><div class="line"><a name="l00752"></a><span class="lineno"> 752</span>  <span class="keywordflow">if</span> (anyOf_.schemas) {</div><div class="line"><a name="l00753"></a><span class="lineno"> 753</span>  <span class="keywordflow">for</span> (<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> i = anyOf_.begin; i < anyOf_.begin + anyOf_.count; i++)</div><div class="line"><a name="l00754"></a><span class="lineno"> 754</span>  <span class="keywordflow">if</span> (context.validators[i]->IsValid())</div><div class="line"><a name="l00755"></a><span class="lineno"> 755</span>  <span class="keywordflow">goto</span> foundAny;</div><div class="line"><a name="l00756"></a><span class="lineno"> 756</span>  context.error_handler.NoneOf(&context.validators[anyOf_.begin], anyOf_.count);</div><div class="line"><a name="l00757"></a><span class="lineno"> 757</span>  RAPIDJSON_INVALID_KEYWORD_RETURN(GetAnyOfString());</div><div class="line"><a name="l00758"></a><span class="lineno"> 758</span>  foundAny:;</div><div class="line"><a name="l00759"></a><span class="lineno"> 759</span>  }</div><div class="line"><a name="l00760"></a><span class="lineno"> 760</span> </div><div class="line"><a name="l00761"></a><span class="lineno"> 761</span>  <span class="keywordflow">if</span> (oneOf_.schemas) {</div><div class="line"><a name="l00762"></a><span class="lineno"> 762</span>  <span class="keywordtype">bool</span> oneValid = <span class="keyword">false</span>;</div><div class="line"><a name="l00763"></a><span class="lineno"> 763</span>  <span class="keywordflow">for</span> (<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> i = oneOf_.begin; i < oneOf_.begin + oneOf_.count; i++)</div><div class="line"><a name="l00764"></a><span class="lineno"> 764</span>  <span class="keywordflow">if</span> (context.validators[i]->IsValid()) {</div><div class="line"><a name="l00765"></a><span class="lineno"> 765</span>  <span class="keywordflow">if</span> (oneValid) {</div><div class="line"><a name="l00766"></a><span class="lineno"> 766</span>  context.error_handler.NotOneOf(&context.validators[oneOf_.begin], oneOf_.count);</div><div class="line"><a name="l00767"></a><span class="lineno"> 767</span>  RAPIDJSON_INVALID_KEYWORD_RETURN(GetOneOfString());</div><div class="line"><a name="l00768"></a><span class="lineno"> 768</span>  } <span class="keywordflow">else</span></div><div class="line"><a name="l00769"></a><span class="lineno"> 769</span>  oneValid = <span class="keyword">true</span>;</div><div class="line"><a name="l00770"></a><span class="lineno"> 770</span>  }</div><div class="line"><a name="l00771"></a><span class="lineno"> 771</span>  <span class="keywordflow">if</span> (!oneValid) {</div><div class="line"><a name="l00772"></a><span class="lineno"> 772</span>  context.error_handler.NotOneOf(&context.validators[oneOf_.begin], oneOf_.count);</div><div class="line"><a name="l00773"></a><span class="lineno"> 773</span>  RAPIDJSON_INVALID_KEYWORD_RETURN(GetOneOfString());</div><div class="line"><a name="l00774"></a><span class="lineno"> 774</span>  }</div><div class="line"><a name="l00775"></a><span class="lineno"> 775</span>  }</div><div class="line"><a name="l00776"></a><span class="lineno"> 776</span> </div><div class="line"><a name="l00777"></a><span class="lineno"> 777</span>  <span class="keywordflow">if</span> (not_ && context.validators[notValidatorIndex_]->IsValid()) {</div><div class="line"><a name="l00778"></a><span class="lineno"> 778</span>  context.error_handler.Disallowed();</div><div class="line"><a name="l00779"></a><span class="lineno"> 779</span>  RAPIDJSON_INVALID_KEYWORD_RETURN(GetNotString());</div><div class="line"><a name="l00780"></a><span class="lineno"> 780</span>  }</div><div class="line"><a name="l00781"></a><span class="lineno"> 781</span> </div><div class="line"><a name="l00782"></a><span class="lineno"> 782</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00783"></a><span class="lineno"> 783</span>  }</div><div class="line"><a name="l00784"></a><span class="lineno"> 784</span> </div><div class="line"><a name="l00785"></a><span class="lineno"> 785</span>  <span class="keywordtype">bool</span> Null(Context& context)<span class="keyword"> const </span>{</div><div class="line"><a name="l00786"></a><span class="lineno"> 786</span>  <span class="keywordflow">if</span> (!(type_ & (1 << kNullSchemaType))) {</div><div class="line"><a name="l00787"></a><span class="lineno"> 787</span>  DisallowedType(context, GetNullString());</div><div class="line"><a name="l00788"></a><span class="lineno"> 788</span>  RAPIDJSON_INVALID_KEYWORD_RETURN(GetTypeString());</div><div class="line"><a name="l00789"></a><span class="lineno"> 789</span>  }</div><div class="line"><a name="l00790"></a><span class="lineno"> 790</span>  <span class="keywordflow">return</span> CreateParallelValidator(context);</div><div class="line"><a name="l00791"></a><span class="lineno"> 791</span>  }</div><div class="line"><a name="l00792"></a><span class="lineno"> 792</span>  </div><div class="line"><a name="l00793"></a><span class="lineno"> 793</span>  <span class="keywordtype">bool</span> Bool(Context& context, <span class="keywordtype">bool</span>)<span class="keyword"> const </span>{</div><div class="line"><a name="l00794"></a><span class="lineno"> 794</span>  <span class="keywordflow">if</span> (!(type_ & (1 << kBooleanSchemaType))) {</div><div class="line"><a name="l00795"></a><span class="lineno"> 795</span>  DisallowedType(context, GetBooleanString());</div><div class="line"><a name="l00796"></a><span class="lineno"> 796</span>  RAPIDJSON_INVALID_KEYWORD_RETURN(GetTypeString());</div><div class="line"><a name="l00797"></a><span class="lineno"> 797</span>  }</div><div class="line"><a name="l00798"></a><span class="lineno"> 798</span>  <span class="keywordflow">return</span> CreateParallelValidator(context);</div><div class="line"><a name="l00799"></a><span class="lineno"> 799</span>  }</div><div class="line"><a name="l00800"></a><span class="lineno"> 800</span> </div><div class="line"><a name="l00801"></a><span class="lineno"> 801</span>  <span class="keywordtype">bool</span> Int(Context& 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>  <span class="keywordflow">if</span> (!CheckInt(context, i))</div><div class="line"><a name="l00803"></a><span class="lineno"> 803</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00804"></a><span class="lineno"> 804</span>  <span class="keywordflow">return</span> CreateParallelValidator(context);</div><div class="line"><a name="l00805"></a><span class="lineno"> 805</span>  }</div><div class="line"><a name="l00806"></a><span class="lineno"> 806</span> </div><div class="line"><a name="l00807"></a><span class="lineno"> 807</span>  <span class="keywordtype">bool</span> Uint(Context& 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>  <span class="keywordflow">if</span> (!CheckUint(context, u))</div><div class="line"><a name="l00809"></a><span class="lineno"> 809</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00810"></a><span class="lineno"> 810</span>  <span class="keywordflow">return</span> CreateParallelValidator(context);</div><div class="line"><a name="l00811"></a><span class="lineno"> 811</span>  }</div><div class="line"><a name="l00812"></a><span class="lineno"> 812</span> </div><div class="line"><a name="l00813"></a><span class="lineno"> 813</span>  <span class="keywordtype">bool</span> Int64(Context& context, int64_t i)<span class="keyword"> const </span>{</div><div class="line"><a name="l00814"></a><span class="lineno"> 814</span>  <span class="keywordflow">if</span> (!CheckInt(context, i))</div><div class="line"><a name="l00815"></a><span class="lineno"> 815</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00816"></a><span class="lineno"> 816</span>  <span class="keywordflow">return</span> CreateParallelValidator(context);</div><div class="line"><a name="l00817"></a><span class="lineno"> 817</span>  }</div><div class="line"><a name="l00818"></a><span class="lineno"> 818</span> </div><div class="line"><a name="l00819"></a><span class="lineno"> 819</span>  <span class="keywordtype">bool</span> Uint64(Context& context, uint64_t u)<span class="keyword"> const </span>{</div><div class="line"><a name="l00820"></a><span class="lineno"> 820</span>  <span class="keywordflow">if</span> (!CheckUint(context, u))</div><div class="line"><a name="l00821"></a><span class="lineno"> 821</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00822"></a><span class="lineno"> 822</span>  <span class="keywordflow">return</span> CreateParallelValidator(context);</div><div class="line"><a name="l00823"></a><span class="lineno"> 823</span>  }</div><div class="line"><a name="l00824"></a><span class="lineno"> 824</span> </div><div class="line"><a name="l00825"></a><span class="lineno"> 825</span>  <span class="keywordtype">bool</span> Double(Context& 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>  <span class="keywordflow">if</span> (!(type_ & (1 << kNumberSchemaType))) {</div><div class="line"><a name="l00827"></a><span class="lineno"> 827</span>  DisallowedType(context, GetNumberString());</div><div class="line"><a name="l00828"></a><span class="lineno"> 828</span>  RAPIDJSON_INVALID_KEYWORD_RETURN(GetTypeString());</div><div class="line"><a name="l00829"></a><span class="lineno"> 829</span>  }</div><div class="line"><a name="l00830"></a><span class="lineno"> 830</span> </div><div class="line"><a name="l00831"></a><span class="lineno"> 831</span>  <span class="keywordflow">if</span> (!minimum_.IsNull() && !CheckDoubleMinimum(context, d))</div><div class="line"><a name="l00832"></a><span class="lineno"> 832</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00833"></a><span class="lineno"> 833</span> </div><div class="line"><a name="l00834"></a><span class="lineno"> 834</span>  <span class="keywordflow">if</span> (!maximum_.IsNull() && !CheckDoubleMaximum(context, d))</div><div class="line"><a name="l00835"></a><span class="lineno"> 835</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00836"></a><span class="lineno"> 836</span>  </div><div class="line"><a name="l00837"></a><span class="lineno"> 837</span>  <span class="keywordflow">if</span> (!multipleOf_.IsNull() && !CheckDoubleMultipleOf(context, d))</div><div class="line"><a name="l00838"></a><span class="lineno"> 838</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00839"></a><span class="lineno"> 839</span>  </div><div class="line"><a name="l00840"></a><span class="lineno"> 840</span>  <span class="keywordflow">return</span> CreateParallelValidator(context);</div><div class="line"><a name="l00841"></a><span class="lineno"> 841</span>  }</div><div class="line"><a name="l00842"></a><span class="lineno"> 842</span>  </div><div class="line"><a name="l00843"></a><span class="lineno"> 843</span>  <span class="keywordtype">bool</span> String(Context& 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>  <span class="keywordflow">if</span> (!(type_ & (1 << kStringSchemaType))) {</div><div class="line"><a name="l00845"></a><span class="lineno"> 845</span>  DisallowedType(context, GetStringString());</div><div class="line"><a name="l00846"></a><span class="lineno"> 846</span>  RAPIDJSON_INVALID_KEYWORD_RETURN(GetTypeString());</div><div class="line"><a name="l00847"></a><span class="lineno"> 847</span>  }</div><div class="line"><a name="l00848"></a><span class="lineno"> 848</span> </div><div class="line"><a name="l00849"></a><span class="lineno"> 849</span>  <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>  <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> count;</div><div class="line"><a name="l00851"></a><span class="lineno"> 851</span>  <span class="keywordflow">if</span> (internal::CountStringCodePoint<EncodingType>(str, length, &count)) {</div><div class="line"><a name="l00852"></a><span class="lineno"> 852</span>  <span class="keywordflow">if</span> (count < minLength_) {</div><div class="line"><a name="l00853"></a><span class="lineno"> 853</span>  context.error_handler.TooShort(str, length, minLength_);</div><div class="line"><a name="l00854"></a><span class="lineno"> 854</span>  RAPIDJSON_INVALID_KEYWORD_RETURN(GetMinLengthString());</div><div class="line"><a name="l00855"></a><span class="lineno"> 855</span>  }</div><div class="line"><a name="l00856"></a><span class="lineno"> 856</span>  <span class="keywordflow">if</span> (count > maxLength_) {</div><div class="line"><a name="l00857"></a><span class="lineno"> 857</span>  context.error_handler.TooLong(str, length, maxLength_);</div><div class="line"><a name="l00858"></a><span class="lineno"> 858</span>  RAPIDJSON_INVALID_KEYWORD_RETURN(GetMaxLengthString());</div><div class="line"><a name="l00859"></a><span class="lineno"> 859</span>  }</div><div class="line"><a name="l00860"></a><span class="lineno"> 860</span>  }</div><div class="line"><a name="l00861"></a><span class="lineno"> 861</span>  }</div><div class="line"><a name="l00862"></a><span class="lineno"> 862</span> </div><div class="line"><a name="l00863"></a><span class="lineno"> 863</span>  <span class="keywordflow">if</span> (pattern_ && !IsPatternMatch(pattern_, str, length)) {</div><div class="line"><a name="l00864"></a><span class="lineno"> 864</span>  context.error_handler.DoesNotMatch(str, length);</div><div class="line"><a name="l00865"></a><span class="lineno"> 865</span>  RAPIDJSON_INVALID_KEYWORD_RETURN(GetPatternString());</div><div class="line"><a name="l00866"></a><span class="lineno"> 866</span>  }</div><div class="line"><a name="l00867"></a><span class="lineno"> 867</span> </div><div class="line"><a name="l00868"></a><span class="lineno"> 868</span>  <span class="keywordflow">return</span> CreateParallelValidator(context);</div><div class="line"><a name="l00869"></a><span class="lineno"> 869</span>  }</div><div class="line"><a name="l00870"></a><span class="lineno"> 870</span> </div><div class="line"><a name="l00871"></a><span class="lineno"> 871</span>  <span class="keywordtype">bool</span> StartObject(Context& context)<span class="keyword"> const </span>{</div><div class="line"><a name="l00872"></a><span class="lineno"> 872</span>  <span class="keywordflow">if</span> (!(type_ & (1 << kObjectSchemaType))) {</div><div class="line"><a name="l00873"></a><span class="lineno"> 873</span>  DisallowedType(context, GetObjectString());</div><div class="line"><a name="l00874"></a><span class="lineno"> 874</span>  RAPIDJSON_INVALID_KEYWORD_RETURN(GetTypeString());</div><div class="line"><a name="l00875"></a><span class="lineno"> 875</span>  }</div><div class="line"><a name="l00876"></a><span class="lineno"> 876</span> </div><div class="line"><a name="l00877"></a><span class="lineno"> 877</span>  <span class="keywordflow">if</span> (hasDependencies_ || hasRequired_) {</div><div class="line"><a name="l00878"></a><span class="lineno"> 878</span>  context.propertyExist = <span class="keyword">static_cast<</span><span class="keywordtype">bool</span>*<span class="keyword">></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>  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>  }</div><div class="line"><a name="l00881"></a><span class="lineno"> 881</span> </div><div class="line"><a name="l00882"></a><span class="lineno"> 882</span>  <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>  <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>  context.patternPropertiesSchemas = <span class="keyword">static_cast<</span><span class="keyword">const </span>SchemaType**<span class="keyword">></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>  context.patternPropertiesSchemaCount = 0;</div><div class="line"><a name="l00886"></a><span class="lineno"> 886</span>  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>  }</div><div class="line"><a name="l00888"></a><span class="lineno"> 888</span> </div><div class="line"><a name="l00889"></a><span class="lineno"> 889</span>  <span class="keywordflow">return</span> CreateParallelValidator(context);</div><div class="line"><a name="l00890"></a><span class="lineno"> 890</span>  }</div><div class="line"><a name="l00891"></a><span class="lineno"> 891</span>  </div><div class="line"><a name="l00892"></a><span class="lineno"> 892</span>  <span class="keywordtype">bool</span> Key(Context& 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>  <span class="keywordflow">if</span> (patternProperties_) {</div><div class="line"><a name="l00894"></a><span class="lineno"> 894</span>  context.patternPropertiesSchemaCount = 0;</div><div class="line"><a name="l00895"></a><span class="lineno"> 895</span>  <span class="keywordflow">for</span> (<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> i = 0; i < patternPropertyCount_; i++)</div><div class="line"><a name="l00896"></a><span class="lineno"> 896</span>  <span class="keywordflow">if</span> (patternProperties_[i].pattern && IsPatternMatch(patternProperties_[i].pattern, str, len)) {</div><div class="line"><a name="l00897"></a><span class="lineno"> 897</span>  context.patternPropertiesSchemas[context.patternPropertiesSchemaCount++] = patternProperties_[i].schema;</div><div class="line"><a name="l00898"></a><span class="lineno"> 898</span>  context.valueSchema = typeless_;</div><div class="line"><a name="l00899"></a><span class="lineno"> 899</span>  }</div><div class="line"><a name="l00900"></a><span class="lineno"> 900</span>  }</div><div class="line"><a name="l00901"></a><span class="lineno"> 901</span> </div><div class="line"><a name="l00902"></a><span class="lineno"> 902</span>  <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> index;</div><div class="line"><a name="l00903"></a><span class="lineno"> 903</span>  <span class="keywordflow">if</span> (FindPropertyIndex(ValueType(str, len).Move(), &index)) {</div><div class="line"><a name="l00904"></a><span class="lineno"> 904</span>  <span class="keywordflow">if</span> (context.patternPropertiesSchemaCount > 0) {</div><div class="line"><a name="l00905"></a><span class="lineno"> 905</span>  context.patternPropertiesSchemas[context.patternPropertiesSchemaCount++] = properties_[index].schema;</div><div class="line"><a name="l00906"></a><span class="lineno"> 906</span>  context.valueSchema = typeless_;</div><div class="line"><a name="l00907"></a><span class="lineno"> 907</span>  context.valuePatternValidatorType = Context::kPatternValidatorWithProperty;</div><div class="line"><a name="l00908"></a><span class="lineno"> 908</span>  }</div><div class="line"><a name="l00909"></a><span class="lineno"> 909</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00910"></a><span class="lineno"> 910</span>  context.valueSchema = properties_[index].schema;</div><div class="line"><a name="l00911"></a><span class="lineno"> 911</span> </div><div class="line"><a name="l00912"></a><span class="lineno"> 912</span>  <span class="keywordflow">if</span> (context.propertyExist)</div><div class="line"><a name="l00913"></a><span class="lineno"> 913</span>  context.propertyExist[index] = <span class="keyword">true</span>;</div><div class="line"><a name="l00914"></a><span class="lineno"> 914</span> </div><div class="line"><a name="l00915"></a><span class="lineno"> 915</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00916"></a><span class="lineno"> 916</span>  }</div><div class="line"><a name="l00917"></a><span class="lineno"> 917</span> </div><div class="line"><a name="l00918"></a><span class="lineno"> 918</span>  <span class="keywordflow">if</span> (additionalPropertiesSchema_) {</div><div class="line"><a name="l00919"></a><span class="lineno"> 919</span>  <span class="keywordflow">if</span> (additionalPropertiesSchema_ && context.patternPropertiesSchemaCount > 0) {</div><div class="line"><a name="l00920"></a><span class="lineno"> 920</span>  context.patternPropertiesSchemas[context.patternPropertiesSchemaCount++] = additionalPropertiesSchema_;</div><div class="line"><a name="l00921"></a><span class="lineno"> 921</span>  context.valueSchema = typeless_;</div><div class="line"><a name="l00922"></a><span class="lineno"> 922</span>  context.valuePatternValidatorType = Context::kPatternValidatorWithAdditionalProperty;</div><div class="line"><a name="l00923"></a><span class="lineno"> 923</span>  }</div><div class="line"><a name="l00924"></a><span class="lineno"> 924</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00925"></a><span class="lineno"> 925</span>  context.valueSchema = additionalPropertiesSchema_;</div><div class="line"><a name="l00926"></a><span class="lineno"> 926</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00927"></a><span class="lineno"> 927</span>  }</div><div class="line"><a name="l00928"></a><span class="lineno"> 928</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (additionalProperties_) {</div><div class="line"><a name="l00929"></a><span class="lineno"> 929</span>  context.valueSchema = typeless_;</div><div class="line"><a name="l00930"></a><span class="lineno"> 930</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00931"></a><span class="lineno"> 931</span>  }</div><div class="line"><a name="l00932"></a><span class="lineno"> 932</span> </div><div class="line"><a name="l00933"></a><span class="lineno"> 933</span>  <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>  context.error_handler.DisallowedProperty(str, len);</div><div class="line"><a name="l00935"></a><span class="lineno"> 935</span>  RAPIDJSON_INVALID_KEYWORD_RETURN(GetAdditionalPropertiesString());</div><div class="line"><a name="l00936"></a><span class="lineno"> 936</span>  }</div><div class="line"><a name="l00937"></a><span class="lineno"> 937</span> </div><div class="line"><a name="l00938"></a><span class="lineno"> 938</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00939"></a><span class="lineno"> 939</span>  }</div><div class="line"><a name="l00940"></a><span class="lineno"> 940</span> </div><div class="line"><a name="l00941"></a><span class="lineno"> 941</span>  <span class="keywordtype">bool</span> EndObject(Context& 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>  <span class="keywordflow">if</span> (hasRequired_) {</div><div class="line"><a name="l00943"></a><span class="lineno"> 943</span>  context.error_handler.StartMissingProperties();</div><div class="line"><a name="l00944"></a><span class="lineno"> 944</span>  <span class="keywordflow">for</span> (<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> index = 0; index < propertyCount_; index++)</div><div class="line"><a name="l00945"></a><span class="lineno"> 945</span>  <span class="keywordflow">if</span> (properties_[index].required && !context.propertyExist[index])</div><div class="line"><a name="l00946"></a><span class="lineno"> 946</span>  <span class="keywordflow">if</span> (properties_[index].schema->defaultValueLength_ == 0 )</div><div class="line"><a name="l00947"></a><span class="lineno"> 947</span>  context.error_handler.AddMissingProperty(properties_[index].name);</div><div class="line"><a name="l00948"></a><span class="lineno"> 948</span>  <span class="keywordflow">if</span> (context.error_handler.EndMissingProperties())</div><div class="line"><a name="l00949"></a><span class="lineno"> 949</span>  RAPIDJSON_INVALID_KEYWORD_RETURN(GetRequiredString());</div><div class="line"><a name="l00950"></a><span class="lineno"> 950</span>  }</div><div class="line"><a name="l00951"></a><span class="lineno"> 951</span> </div><div class="line"><a name="l00952"></a><span class="lineno"> 952</span>  <span class="keywordflow">if</span> (memberCount < minProperties_) {</div><div class="line"><a name="l00953"></a><span class="lineno"> 953</span>  context.error_handler.TooFewProperties(memberCount, minProperties_);</div><div class="line"><a name="l00954"></a><span class="lineno"> 954</span>  RAPIDJSON_INVALID_KEYWORD_RETURN(GetMinPropertiesString());</div><div class="line"><a name="l00955"></a><span class="lineno"> 955</span>  }</div><div class="line"><a name="l00956"></a><span class="lineno"> 956</span> </div><div class="line"><a name="l00957"></a><span class="lineno"> 957</span>  <span class="keywordflow">if</span> (memberCount > maxProperties_) {</div><div class="line"><a name="l00958"></a><span class="lineno"> 958</span>  context.error_handler.TooManyProperties(memberCount, maxProperties_);</div><div class="line"><a name="l00959"></a><span class="lineno"> 959</span>  RAPIDJSON_INVALID_KEYWORD_RETURN(GetMaxPropertiesString());</div><div class="line"><a name="l00960"></a><span class="lineno"> 960</span>  }</div><div class="line"><a name="l00961"></a><span class="lineno"> 961</span> </div><div class="line"><a name="l00962"></a><span class="lineno"> 962</span>  <span class="keywordflow">if</span> (hasDependencies_) {</div><div class="line"><a name="l00963"></a><span class="lineno"> 963</span>  context.error_handler.StartDependencyErrors();</div><div class="line"><a name="l00964"></a><span class="lineno"> 964</span>  <span class="keywordflow">for</span> (<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> sourceIndex = 0; sourceIndex < propertyCount_; sourceIndex++) {</div><div class="line"><a name="l00965"></a><span class="lineno"> 965</span>  <span class="keyword">const</span> Property& source = properties_[sourceIndex];</div><div class="line"><a name="l00966"></a><span class="lineno"> 966</span>  <span class="keywordflow">if</span> (context.propertyExist[sourceIndex]) {</div><div class="line"><a name="l00967"></a><span class="lineno"> 967</span>  <span class="keywordflow">if</span> (source.dependencies) {</div><div class="line"><a name="l00968"></a><span class="lineno"> 968</span>  context.error_handler.StartMissingDependentProperties();</div><div class="line"><a name="l00969"></a><span class="lineno"> 969</span>  <span class="keywordflow">for</span> (<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> targetIndex = 0; targetIndex < propertyCount_; targetIndex++)</div><div class="line"><a name="l00970"></a><span class="lineno"> 970</span>  <span class="keywordflow">if</span> (source.dependencies[targetIndex] && !context.propertyExist[targetIndex])</div><div class="line"><a name="l00971"></a><span class="lineno"> 971</span>  context.error_handler.AddMissingDependentProperty(properties_[targetIndex].name);</div><div class="line"><a name="l00972"></a><span class="lineno"> 972</span>  context.error_handler.EndMissingDependentProperties(source.name);</div><div class="line"><a name="l00973"></a><span class="lineno"> 973</span>  }</div><div class="line"><a name="l00974"></a><span class="lineno"> 974</span>  <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>  ISchemaValidator* dependenciesValidator = context.validators[source.dependenciesValidatorIndex];</div><div class="line"><a name="l00976"></a><span class="lineno"> 976</span>  <span class="keywordflow">if</span> (!dependenciesValidator->IsValid())</div><div class="line"><a name="l00977"></a><span class="lineno"> 977</span>  context.error_handler.AddDependencySchemaError(source.name, dependenciesValidator);</div><div class="line"><a name="l00978"></a><span class="lineno"> 978</span>  }</div><div class="line"><a name="l00979"></a><span class="lineno"> 979</span>  }</div><div class="line"><a name="l00980"></a><span class="lineno"> 980</span>  }</div><div class="line"><a name="l00981"></a><span class="lineno"> 981</span>  <span class="keywordflow">if</span> (context.error_handler.EndDependencyErrors())</div><div class="line"><a name="l00982"></a><span class="lineno"> 982</span>  RAPIDJSON_INVALID_KEYWORD_RETURN(GetDependenciesString());</div><div class="line"><a name="l00983"></a><span class="lineno"> 983</span>  }</div><div class="line"><a name="l00984"></a><span class="lineno"> 984</span> </div><div class="line"><a name="l00985"></a><span class="lineno"> 985</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00986"></a><span class="lineno"> 986</span>  }</div><div class="line"><a name="l00987"></a><span class="lineno"> 987</span> </div><div class="line"><a name="l00988"></a><span class="lineno"> 988</span>  <span class="keywordtype">bool</span> StartArray(Context& context)<span class="keyword"> const </span>{</div><div class="line"><a name="l00989"></a><span class="lineno"> 989</span>  <span class="keywordflow">if</span> (!(type_ & (1 << kArraySchemaType))) {</div><div class="line"><a name="l00990"></a><span class="lineno"> 990</span>  DisallowedType(context, GetArrayString());</div><div class="line"><a name="l00991"></a><span class="lineno"> 991</span>  RAPIDJSON_INVALID_KEYWORD_RETURN(GetTypeString());</div><div class="line"><a name="l00992"></a><span class="lineno"> 992</span>  }</div><div class="line"><a name="l00993"></a><span class="lineno"> 993</span> </div><div class="line"><a name="l00994"></a><span class="lineno"> 994</span>  context.arrayElementIndex = 0;</div><div class="line"><a name="l00995"></a><span class="lineno"> 995</span>  context.inArray = <span class="keyword">true</span>;</div><div class="line"><a name="l00996"></a><span class="lineno"> 996</span> </div><div class="line"><a name="l00997"></a><span class="lineno"> 997</span>  <span class="keywordflow">return</span> CreateParallelValidator(context);</div><div class="line"><a name="l00998"></a><span class="lineno"> 998</span>  }</div><div class="line"><a name="l00999"></a><span class="lineno"> 999</span> </div><div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>  <span class="keywordtype">bool</span> EndArray(Context& 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>  context.inArray = <span class="keyword">false</span>;</div><div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>  </div><div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>  <span class="keywordflow">if</span> (elementCount < minItems_) {</div><div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>  context.error_handler.TooFewItems(elementCount, minItems_);</div><div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>  RAPIDJSON_INVALID_KEYWORD_RETURN(GetMinItemsString());</div><div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>  }</div><div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>  </div><div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>  <span class="keywordflow">if</span> (elementCount > maxItems_) {</div><div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>  context.error_handler.TooManyItems(elementCount, maxItems_);</div><div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>  RAPIDJSON_INVALID_KEYWORD_RETURN(GetMaxItemsString());</div><div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>  }</div><div class="line"><a name="l01012"></a><span class="lineno"> 1012</span> </div><div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>  }</div><div class="line"><a name="l01015"></a><span class="lineno"> 1015</span> </div><div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>  <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> <span class="preprocessor">#define RAPIDJSON_STRING_(name, ...) \</span></div><div class="line"><a name="l01018"></a><span class="lineno"> 1018</span> <span class="preprocessor"> static const ValueType& Get##name##String() {\</span></div><div class="line"><a name="l01019"></a><span class="lineno"> 1019</span> <span class="preprocessor"> static const Ch s[] = { __VA_ARGS__, '\0' };\</span></div><div class="line"><a name="l01020"></a><span class="lineno"> 1020</span> <span class="preprocessor"> static const ValueType v(s, static_cast<SizeType>(sizeof(s) / sizeof(Ch) - 1));\</span></div><div class="line"><a name="l01021"></a><span class="lineno"> 1021</span> <span class="preprocessor"> return v;\</span></div><div class="line"><a name="l01022"></a><span class="lineno"> 1022</span> <span class="preprocessor"> }</span></div><div class="line"><a name="l01023"></a><span class="lineno"> 1023</span> </div><div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>  RAPIDJSON_STRING_(Null, <span class="charliteral">'n'</span>, <span class="charliteral">'u'</span>, <span class="charliteral">'l'</span>, <span class="charliteral">'l'</span>)</div><div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>  RAPIDJSON_STRING_(Boolean, 'b', 'o', 'o', 'l', 'e', 'a', 'n')</div><div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>  RAPIDJSON_STRING_(Object, 'o', 'b', 'j', 'e', 'c', 't')</div><div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>  RAPIDJSON_STRING_(Array, 'a', 'r', 'r', 'a', 'y')</div><div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>  RAPIDJSON_STRING_(String, 's', 't', 'r', 'i', 'n', 'g')</div><div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>  RAPIDJSON_STRING_(Number, 'n', 'u', 'm', 'b', 'e', 'r')</div><div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>  RAPIDJSON_STRING_(Integer, 'i', 'n', 't', 'e', 'g', 'e', 'r')</div><div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>  RAPIDJSON_STRING_(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">Type</a>, 't', 'y', 'p', 'e')</div><div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>  RAPIDJSON_STRING_(Enum, 'e', 'n', 'u', 'm')</div><div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>  RAPIDJSON_STRING_(AllOf, 'a', 'l', 'l', 'O', 'f')</div><div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>  RAPIDJSON_STRING_(AnyOf, 'a', 'n', 'y', 'O', 'f')</div><div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>  RAPIDJSON_STRING_(OneOf, 'o', 'n', 'e', 'O', 'f')</div><div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>  RAPIDJSON_STRING_(Not, 'n', 'o', 't')</div><div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>  RAPIDJSON_STRING_(Properties, 'p', 'r', 'o', 'p', 'e', 'r', 't', 'i', 'e', 's')</div><div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>  RAPIDJSON_STRING_(Required, 'r', 'e', 'q', 'u', 'i', 'r', 'e', 'd')</div><div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>  RAPIDJSON_STRING_(Dependencies, 'd', 'e', 'p', 'e', 'n', 'd', 'e', 'n', 'c', 'i', 'e', 's')</div><div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>  RAPIDJSON_STRING_(PatternProperties, 'p', 'a', 't', 't', 'e', 'r', 'n', 'P', 'r', 'o', 'p', 'e', 'r', 't', 'i', 'e', 's')</div><div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>  RAPIDJSON_STRING_(AdditionalProperties, 'a', 'd', 'd', 'i', 't', 'i', 'o', 'n', 'a', 'l', 'P', 'r', 'o', 'p', 'e', 'r', 't', 'i', 'e', 's')</div><div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>  RAPIDJSON_STRING_(MinProperties, 'm', 'i', 'n', 'P', 'r', 'o', 'p', 'e', 'r', 't', 'i', 'e', 's')</div><div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>  RAPIDJSON_STRING_(MaxProperties, 'm', 'a', 'x', 'P', 'r', 'o', 'p', 'e', 'r', 't', 'i', 'e', 's')</div><div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>  RAPIDJSON_STRING_(Items, 'i', 't', 'e', 'm', 's')</div><div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>  RAPIDJSON_STRING_(MinItems, 'm', 'i', 'n', 'I', 't', 'e', 'm', 's')</div><div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>  RAPIDJSON_STRING_(MaxItems, 'm', 'a', 'x', 'I', 't', 'e', 'm', 's')</div><div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>  RAPIDJSON_STRING_(AdditionalItems, 'a', 'd', 'd', 'i', 't', 'i', 'o', 'n', 'a', 'l', 'I', 't', 'e', 'm', 's')</div><div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>  RAPIDJSON_STRING_(UniqueItems, 'u', 'n', 'i', 'q', 'u', 'e', 'I', 't', 'e', 'm', 's')</div><div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>  RAPIDJSON_STRING_(MinLength, 'm', 'i', 'n', 'L', 'e', 'n', 'g', 't', 'h')</div><div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>  RAPIDJSON_STRING_(MaxLength, 'm', 'a', 'x', 'L', 'e', 'n', 'g', 't', 'h')</div><div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>  RAPIDJSON_STRING_(Pattern, 'p', 'a', 't', 't', 'e', 'r', 'n')</div><div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>  RAPIDJSON_STRING_(Minimum, 'm', 'i', 'n', 'i', 'm', 'u', 'm')</div><div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>  RAPIDJSON_STRING_(Maximum, 'm', 'a', 'x', 'i', 'm', 'u', 'm')</div><div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>  RAPIDJSON_STRING_(ExclusiveMinimum, 'e', 'x', 'c', 'l', 'u', 's', 'i', 'v', 'e', 'M', 'i', 'n', 'i', 'm', 'u', 'm')</div><div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>  RAPIDJSON_STRING_(ExclusiveMaximum, 'e', 'x', 'c', 'l', 'u', 's', 'i', 'v', 'e', 'M', 'a', 'x', 'i', 'm', 'u', 'm')</div><div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>  RAPIDJSON_STRING_(MultipleOf, 'm', 'u', 'l', 't', 'i', 'p', 'l', 'e', 'O', 'f')</div><div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>  RAPIDJSON_STRING_(DefaultValue, 'd', 'e', 'f', 'a', 'u', 'l', 't')</div><div class="line"><a name="l01058"></a><span class="lineno"> 1058</span> </div><div class="line"><a name="l01059"></a><span class="lineno"> 1059</span> <span class="preprocessor">#undef RAPIDJSON_STRING_</span></div><div class="line"><a name="l01060"></a><span class="lineno"> 1060</span> </div><div class="line"><a name="l01061"></a><span class="lineno"> 1061</span> <span class="keyword">private</span>:</div><div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>  <span class="keyword">enum</span> SchemaValueType {</div><div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>  kNullSchemaType,</div><div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>  kBooleanSchemaType,</div><div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>  kObjectSchemaType,</div><div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>  kArraySchemaType,</div><div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>  kStringSchemaType,</div><div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>  kNumberSchemaType,</div><div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>  kIntegerSchemaType,</div><div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>  kTotalSchemaType</div><div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>  };</div><div class="line"><a name="l01072"></a><span class="lineno"> 1072</span> </div><div class="line"><a name="l01073"></a><span class="lineno"> 1073</span> <span class="preprocessor">#if RAPIDJSON_SCHEMA_USE_INTERNALREGEX</span></div><div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>  <span class="keyword">typedef</span> internal::GenericRegex<EncodingType, AllocatorType> RegexType;</div><div class="line"><a name="l01075"></a><span class="lineno"> 1075</span> <span class="preprocessor">#elif RAPIDJSON_SCHEMA_USE_STDREGEX</span></div><div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>  <span class="keyword">typedef</span> std::basic_regex<Ch> RegexType;</div><div class="line"><a name="l01077"></a><span class="lineno"> 1077</span> <span class="preprocessor">#else</span></div><div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>  <span class="keyword">typedef</span> <span class="keywordtype">char</span> RegexType;</div><div class="line"><a name="l01079"></a><span class="lineno"> 1079</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l01080"></a><span class="lineno"> 1080</span> </div><div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>  <span class="keyword">struct </span>SchemaArray {</div><div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>  SchemaArray() : schemas(), count() {}</div><div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>  ~SchemaArray() { AllocatorType::Free(schemas); }</div><div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>  <span class="keyword">const</span> SchemaType** schemas;</div><div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>  <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>  <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> count;</div><div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>  };</div><div class="line"><a name="l01088"></a><span class="lineno"> 1088</span> </div><div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> V1, <span class="keyword">typename</span> V2></div><div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>  <span class="keywordtype">void</span> AddUniqueElement(V1& a, <span class="keyword">const</span> V2& v) {</div><div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>  <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>  <span class="keywordflow">if</span> (*itr == v)</div><div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>  V1 c(v, *allocator_);</div><div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>  a.PushBack(c, *allocator_);</div><div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>  }</div><div class="line"><a name="l01097"></a><span class="lineno"> 1097</span> </div><div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>  <span class="keyword">static</span> <span class="keyword">const</span> ValueType* GetMember(<span class="keyword">const</span> ValueType& value, <span class="keyword">const</span> ValueType& name) {</div><div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>  <span class="keyword">typename</span> ValueType::ConstMemberIterator itr = value.FindMember(name);</div><div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>  <span class="keywordflow">return</span> itr != value.MemberEnd() ? &(itr->value) : 0;</div><div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>  }</div><div class="line"><a name="l01102"></a><span class="lineno"> 1102</span> </div><div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>  <span class="keyword">static</span> <span class="keywordtype">void</span> AssignIfExist(<span class="keywordtype">bool</span>& out, <span class="keyword">const</span> ValueType& value, <span class="keyword">const</span> ValueType& name) {</div><div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>  <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>  <span class="keywordflow">if</span> (v->IsBool())</div><div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>  out = v->GetBool();</div><div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>  }</div><div class="line"><a name="l01108"></a><span class="lineno"> 1108</span> </div><div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>  <span class="keyword">static</span> <span class="keywordtype">void</span> AssignIfExist(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a>& out, <span class="keyword">const</span> ValueType& value, <span class="keyword">const</span> ValueType& name) {</div><div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>  <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>  <span class="keywordflow">if</span> (v->IsUint64() && v->GetUint64() <= <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a>(~0))</div><div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>  out = static_cast<SizeType>(v->GetUint64());</div><div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>  }</div><div class="line"><a name="l01114"></a><span class="lineno"> 1114</span> </div><div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>  <span class="keywordtype">void</span> AssignIfExist(SchemaArray& out, SchemaDocumentType& schemaDocument, <span class="keyword">const</span> PointerType& p, <span class="keyword">const</span> ValueType& value, <span class="keyword">const</span> ValueType& name, <span class="keyword">const</span> ValueType& document) {</div><div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>  <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>  <span class="keywordflow">if</span> (v->IsArray() && v->Size() > 0) {</div><div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>  PointerType q = p.Append(name, allocator_);</div><div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>  out.count = v->Size();</div><div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>  out.schemas = <span class="keyword">static_cast<</span><span class="keyword">const </span>Schema**<span class="keyword">></span>(allocator_->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>  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>  <span class="keywordflow">for</span> (<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> i = 0; i < out.count; i++)</div><div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>  schemaDocument.CreateSchema(&out.schemas[i], q.Append(i, allocator_), (*v)[i], document);</div><div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>  out.begin = validatorCount_;</div><div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>  validatorCount_ += out.count;</div><div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>  }</div><div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>  }</div><div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>  }</div><div class="line"><a name="l01129"></a><span class="lineno"> 1129</span> </div><div class="line"><a name="l01130"></a><span class="lineno"> 1130</span> <span class="preprocessor">#if RAPIDJSON_SCHEMA_USE_INTERNALREGEX</span></div><div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> ValueType></div><div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>  RegexType* CreatePattern(<span class="keyword">const</span> ValueType& value) {</div><div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>  <span class="keywordflow">if</span> (value.IsString()) {</div><div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>  RegexType* r = <span class="keyword">new</span> (allocator_->Malloc(<span class="keyword">sizeof</span>(RegexType))) RegexType(value.GetString(), allocator_);</div><div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>  <span class="keywordflow">if</span> (!r->IsValid()) {</div><div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>  r->~RegexType();</div><div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>  AllocatorType::Free(r);</div><div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>  r = 0;</div><div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>  }</div><div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>  <span class="keywordflow">return</span> r;</div><div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>  }</div><div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>  <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>  }</div><div class="line"><a name="l01144"></a><span class="lineno"> 1144</span> </div><div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>  <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>  GenericRegexSearch<RegexType> rs(*pattern);</div><div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>  <span class="keywordflow">return</span> rs.Search(str);</div><div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>  }</div><div class="line"><a name="l01149"></a><span class="lineno"> 1149</span> <span class="preprocessor">#elif RAPIDJSON_SCHEMA_USE_STDREGEX</span></div><div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> ValueType></div><div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>  RegexType* CreatePattern(<span class="keyword">const</span> ValueType& value) {</div><div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>  <span class="keywordflow">if</span> (value.IsString())</div><div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>  <span class="keywordflow">try</span> {</div><div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>  <span class="keywordflow">return</span> <span class="keyword">new</span> (allocator_->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>  }</div><div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>  <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::regex_error&) {</div><div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>  }</div><div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>  <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>  }</div><div class="line"><a name="l01160"></a><span class="lineno"> 1160</span> </div><div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>  <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>  std::match_results<const Ch*> r;</div><div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>  <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>  }</div><div class="line"><a name="l01165"></a><span class="lineno"> 1165</span> <span class="preprocessor">#else</span></div><div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> ValueType></div><div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>  RegexType* CreatePattern(<span class="keyword">const</span> ValueType&) { <span class="keywordflow">return</span> 0; }</div><div class="line"><a name="l01168"></a><span class="lineno"> 1168</span> </div><div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>  <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> <span class="preprocessor">#endif // RAPIDJSON_SCHEMA_USE_STDREGEX</span></div><div class="line"><a name="l01171"></a><span class="lineno"> 1171</span> </div><div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>  <span class="keywordtype">void</span> AddType(<span class="keyword">const</span> ValueType& type) {</div><div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>  <span class="keywordflow">if</span> (type == GetNullString() ) type_ |= 1 << kNullSchemaType;</div><div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (type == GetBooleanString()) type_ |= 1 << kBooleanSchemaType;</div><div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (type == GetObjectString() ) type_ |= 1 << kObjectSchemaType;</div><div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (type == GetArrayString() ) type_ |= 1 << kArraySchemaType;</div><div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (type == GetStringString() ) type_ |= 1 << kStringSchemaType;</div><div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (type == GetIntegerString()) type_ |= 1 << kIntegerSchemaType;</div><div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (type == GetNumberString() ) type_ |= (1 << kNumberSchemaType) | (1 << kIntegerSchemaType);</div><div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>  }</div><div class="line"><a name="l01181"></a><span class="lineno"> 1181</span> </div><div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>  <span class="keywordtype">bool</span> CreateParallelValidator(Context& context)<span class="keyword"> const </span>{</div><div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>  <span class="keywordflow">if</span> (enum_ || context.arrayUniqueness)</div><div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>  context.hasher = context.factory.CreateHasher();</div><div class="line"><a name="l01185"></a><span class="lineno"> 1185</span> </div><div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>  <span class="keywordflow">if</span> (validatorCount_) {</div><div class="line"><a name="l01187"></a><span class="lineno"> 1187</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>(context.validators == 0);</div><div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>  context.validators = <span class="keyword">static_cast<</span>ISchemaValidator**<span class="keyword">></span>(context.factory.MallocState(<span class="keyword">sizeof</span>(ISchemaValidator*) * validatorCount_));</div><div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>  context.validatorCount = validatorCount_;</div><div class="line"><a name="l01190"></a><span class="lineno"> 1190</span> </div><div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>  <span class="keywordflow">if</span> (allOf_.schemas)</div><div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>  CreateSchemaValidators(context, allOf_);</div><div class="line"><a name="l01193"></a><span class="lineno"> 1193</span> </div><div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>  <span class="keywordflow">if</span> (anyOf_.schemas)</div><div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>  CreateSchemaValidators(context, anyOf_);</div><div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>  </div><div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>  <span class="keywordflow">if</span> (oneOf_.schemas)</div><div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>  CreateSchemaValidators(context, oneOf_);</div><div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>  </div><div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>  <span class="keywordflow">if</span> (not_)</div><div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>  context.validators[notValidatorIndex_] = context.factory.CreateSchemaValidator(*not_);</div><div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>  </div><div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>  <span class="keywordflow">if</span> (hasSchemaDependencies_) {</div><div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>  <span class="keywordflow">for</span> (<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> i = 0; i < propertyCount_; i++)</div><div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>  <span class="keywordflow">if</span> (properties_[i].dependenciesSchema)</div><div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>  context.validators[properties_[i].dependenciesValidatorIndex] = context.factory.CreateSchemaValidator(*properties_[i].dependenciesSchema);</div><div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>  }</div><div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>  }</div><div class="line"><a name="l01209"></a><span class="lineno"> 1209</span> </div><div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>  }</div><div class="line"><a name="l01212"></a><span class="lineno"> 1212</span> </div><div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>  <span class="keywordtype">void</span> CreateSchemaValidators(Context& context, <span class="keyword">const</span> SchemaArray& schemas)<span class="keyword"> const </span>{</div><div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>  <span class="keywordflow">for</span> (<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> i = 0; i < schemas.count; i++)</div><div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>  context.validators[schemas.begin + i] = context.factory.CreateSchemaValidator(*schemas.schemas[i]);</div><div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>  }</div><div class="line"><a name="l01217"></a><span class="lineno"> 1217</span> </div><div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>  <span class="comment">// O(n)</span></div><div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>  <span class="keywordtype">bool</span> FindPropertyIndex(<span class="keyword">const</span> ValueType& 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>  <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>  <span class="keyword">const</span> Ch* str = name.GetString();</div><div class="line"><a name="l01222"></a><span class="lineno"> 1222</span>  <span class="keywordflow">for</span> (<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> index = 0; index < propertyCount_; index++)</div><div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>  <span class="keywordflow">if</span> (properties_[index].name.GetStringLength() == len && </div><div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>  (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>  {</div><div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>  *outIndex = index;</div><div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>  }</div><div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>  }</div><div class="line"><a name="l01231"></a><span class="lineno"> 1231</span> </div><div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>  <span class="keywordtype">bool</span> CheckInt(Context& context, int64_t i)<span class="keyword"> const </span>{</div><div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>  <span class="keywordflow">if</span> (!(type_ & ((1 << kIntegerSchemaType) | (1 << kNumberSchemaType)))) {</div><div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>  DisallowedType(context, GetIntegerString());</div><div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>  RAPIDJSON_INVALID_KEYWORD_RETURN(GetTypeString());</div><div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>  }</div><div class="line"><a name="l01237"></a><span class="lineno"> 1237</span> </div><div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>  <span class="keywordflow">if</span> (!minimum_.IsNull()) {</div><div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>  <span class="keywordflow">if</span> (minimum_.IsInt64()) {</div><div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>  <span class="keywordflow">if</span> (exclusiveMinimum_ ? i <= minimum_.GetInt64() : i < minimum_.GetInt64()) {</div><div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>  context.error_handler.BelowMinimum(i, minimum_, exclusiveMinimum_);</div><div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>  RAPIDJSON_INVALID_KEYWORD_RETURN(GetMinimumString());</div><div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>  }</div><div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>  }</div><div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>  <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>  context.error_handler.BelowMinimum(i, minimum_, exclusiveMinimum_);</div><div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>  RAPIDJSON_INVALID_KEYWORD_RETURN(GetMinimumString()); <span class="comment">// i <= max(int64_t) < minimum.GetUint64()</span></div><div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>  }</div><div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!CheckDoubleMinimum(context, static_cast<double>(i)))</div><div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>  }</div><div class="line"><a name="l01252"></a><span class="lineno"> 1252</span> </div><div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>  <span class="keywordflow">if</span> (!maximum_.IsNull()) {</div><div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>  <span class="keywordflow">if</span> (maximum_.IsInt64()) {</div><div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>  <span class="keywordflow">if</span> (exclusiveMaximum_ ? i >= maximum_.GetInt64() : i > maximum_.GetInt64()) {</div><div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>  context.error_handler.AboveMaximum(i, maximum_, exclusiveMaximum_);</div><div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>  RAPIDJSON_INVALID_KEYWORD_RETURN(GetMaximumString());</div><div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>  }</div><div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>  }</div><div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>  <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>  <span class="comment">/* do nothing */</span> <span class="comment">// i <= max(int64_t) < maximum_.GetUint64()</span></div><div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!CheckDoubleMaximum(context, static_cast<double>(i)))</div><div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>  }</div><div class="line"><a name="l01265"></a><span class="lineno"> 1265</span> </div><div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>  <span class="keywordflow">if</span> (!multipleOf_.IsNull()) {</div><div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>  <span class="keywordflow">if</span> (multipleOf_.IsUint64()) {</div><div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>  <span class="keywordflow">if</span> (static_cast<uint64_t>(i >= 0 ? i : -i) % multipleOf_.GetUint64() != 0) {</div><div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>  context.error_handler.NotMultipleOf(i, multipleOf_);</div><div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>  RAPIDJSON_INVALID_KEYWORD_RETURN(GetMultipleOfString());</div><div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>  }</div><div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>  }</div><div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!CheckDoubleMultipleOf(context, static_cast<double>(i)))</div><div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>  }</div><div class="line"><a name="l01276"></a><span class="lineno"> 1276</span> </div><div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>  }</div><div class="line"><a name="l01279"></a><span class="lineno"> 1279</span> </div><div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>  <span class="keywordtype">bool</span> CheckUint(Context& context, uint64_t i)<span class="keyword"> const </span>{</div><div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>  <span class="keywordflow">if</span> (!(type_ & ((1 << kIntegerSchemaType) | (1 << kNumberSchemaType)))) {</div><div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>  DisallowedType(context, GetIntegerString());</div><div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>  RAPIDJSON_INVALID_KEYWORD_RETURN(GetTypeString());</div><div class="line"><a name="l01284"></a><span class="lineno"> 1284</span>  }</div><div class="line"><a name="l01285"></a><span class="lineno"> 1285</span> </div><div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>  <span class="keywordflow">if</span> (!minimum_.IsNull()) {</div><div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>  <span class="keywordflow">if</span> (minimum_.IsUint64()) {</div><div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>  <span class="keywordflow">if</span> (exclusiveMinimum_ ? i <= minimum_.GetUint64() : i < minimum_.GetUint64()) {</div><div class="line"><a name="l01289"></a><span class="lineno"> 1289</span>  context.error_handler.BelowMinimum(i, minimum_, exclusiveMinimum_);</div><div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>  RAPIDJSON_INVALID_KEYWORD_RETURN(GetMinimumString());</div><div class="line"><a name="l01291"></a><span class="lineno"> 1291</span>  }</div><div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>  }</div><div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>  <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>  <span class="comment">/* do nothing */</span>; <span class="comment">// i >= 0 > minimum.Getint64()</span></div><div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!CheckDoubleMinimum(context, static_cast<double>(i)))</div><div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01297"></a><span class="lineno"> 1297</span>  }</div><div class="line"><a name="l01298"></a><span class="lineno"> 1298</span> </div><div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>  <span class="keywordflow">if</span> (!maximum_.IsNull()) {</div><div class="line"><a name="l01300"></a><span class="lineno"> 1300</span>  <span class="keywordflow">if</span> (maximum_.IsUint64()) {</div><div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>  <span class="keywordflow">if</span> (exclusiveMaximum_ ? i >= maximum_.GetUint64() : i > maximum_.GetUint64()) {</div><div class="line"><a name="l01302"></a><span class="lineno"> 1302</span>  context.error_handler.AboveMaximum(i, maximum_, exclusiveMaximum_);</div><div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>  RAPIDJSON_INVALID_KEYWORD_RETURN(GetMaximumString());</div><div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>  }</div><div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>  }</div><div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>  <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>  context.error_handler.AboveMaximum(i, maximum_, exclusiveMaximum_);</div><div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>  RAPIDJSON_INVALID_KEYWORD_RETURN(GetMaximumString()); <span class="comment">// i >= 0 > maximum_</span></div><div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>  }</div><div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!CheckDoubleMaximum(context, static_cast<double>(i)))</div><div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>  }</div><div class="line"><a name="l01313"></a><span class="lineno"> 1313</span> </div><div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>  <span class="keywordflow">if</span> (!multipleOf_.IsNull()) {</div><div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>  <span class="keywordflow">if</span> (multipleOf_.IsUint64()) {</div><div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>  <span class="keywordflow">if</span> (i % multipleOf_.GetUint64() != 0) {</div><div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>  context.error_handler.NotMultipleOf(i, multipleOf_);</div><div class="line"><a name="l01318"></a><span class="lineno"> 1318</span>  RAPIDJSON_INVALID_KEYWORD_RETURN(GetMultipleOfString());</div><div class="line"><a name="l01319"></a><span class="lineno"> 1319</span>  }</div><div class="line"><a name="l01320"></a><span class="lineno"> 1320</span>  }</div><div class="line"><a name="l01321"></a><span class="lineno"> 1321</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!CheckDoubleMultipleOf(context, static_cast<double>(i)))</div><div class="line"><a name="l01322"></a><span class="lineno"> 1322</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01323"></a><span class="lineno"> 1323</span>  }</div><div class="line"><a name="l01324"></a><span class="lineno"> 1324</span> </div><div class="line"><a name="l01325"></a><span class="lineno"> 1325</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l01326"></a><span class="lineno"> 1326</span>  }</div><div class="line"><a name="l01327"></a><span class="lineno"> 1327</span> </div><div class="line"><a name="l01328"></a><span class="lineno"> 1328</span>  <span class="keywordtype">bool</span> CheckDoubleMinimum(Context& 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>  <span class="keywordflow">if</span> (exclusiveMinimum_ ? d <= minimum_.GetDouble() : d < minimum_.GetDouble()) {</div><div class="line"><a name="l01330"></a><span class="lineno"> 1330</span>  context.error_handler.BelowMinimum(d, minimum_, exclusiveMinimum_);</div><div class="line"><a name="l01331"></a><span class="lineno"> 1331</span>  RAPIDJSON_INVALID_KEYWORD_RETURN(GetMinimumString());</div><div class="line"><a name="l01332"></a><span class="lineno"> 1332</span>  }</div><div class="line"><a name="l01333"></a><span class="lineno"> 1333</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>  }</div><div class="line"><a name="l01335"></a><span class="lineno"> 1335</span> </div><div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>  <span class="keywordtype">bool</span> CheckDoubleMaximum(Context& 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>  <span class="keywordflow">if</span> (exclusiveMaximum_ ? d >= maximum_.GetDouble() : d > maximum_.GetDouble()) {</div><div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>  context.error_handler.AboveMaximum(d, maximum_, exclusiveMaximum_);</div><div class="line"><a name="l01339"></a><span class="lineno"> 1339</span>  RAPIDJSON_INVALID_KEYWORD_RETURN(GetMaximumString());</div><div class="line"><a name="l01340"></a><span class="lineno"> 1340</span>  }</div><div class="line"><a name="l01341"></a><span class="lineno"> 1341</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l01342"></a><span class="lineno"> 1342</span>  }</div><div class="line"><a name="l01343"></a><span class="lineno"> 1343</span> </div><div class="line"><a name="l01344"></a><span class="lineno"> 1344</span>  <span class="keywordtype">bool</span> CheckDoubleMultipleOf(Context& 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>  <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>  <span class="keywordtype">double</span> q = std::floor(a / b);</div><div class="line"><a name="l01347"></a><span class="lineno"> 1347</span>  <span class="keywordtype">double</span> r = a - q * b;</div><div class="line"><a name="l01348"></a><span class="lineno"> 1348</span>  <span class="keywordflow">if</span> (r > 0.0) {</div><div class="line"><a name="l01349"></a><span class="lineno"> 1349</span>  context.error_handler.NotMultipleOf(d, multipleOf_);</div><div class="line"><a name="l01350"></a><span class="lineno"> 1350</span>  RAPIDJSON_INVALID_KEYWORD_RETURN(GetMultipleOfString());</div><div class="line"><a name="l01351"></a><span class="lineno"> 1351</span>  }</div><div class="line"><a name="l01352"></a><span class="lineno"> 1352</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l01353"></a><span class="lineno"> 1353</span>  }</div><div class="line"><a name="l01354"></a><span class="lineno"> 1354</span> </div><div class="line"><a name="l01355"></a><span class="lineno"> 1355</span>  <span class="keywordtype">void</span> DisallowedType(Context& context, <span class="keyword">const</span> ValueType& actualType)<span class="keyword"> const </span>{</div><div class="line"><a name="l01356"></a><span class="lineno"> 1356</span>  ErrorHandler& eh = context.error_handler;</div><div class="line"><a name="l01357"></a><span class="lineno"> 1357</span>  eh.StartDisallowedType();</div><div class="line"><a name="l01358"></a><span class="lineno"> 1358</span> </div><div class="line"><a name="l01359"></a><span class="lineno"> 1359</span>  <span class="keywordflow">if</span> (type_ & (1 << kNullSchemaType)) eh.AddExpectedType(GetNullString());</div><div class="line"><a name="l01360"></a><span class="lineno"> 1360</span>  <span class="keywordflow">if</span> (type_ & (1 << kBooleanSchemaType)) eh.AddExpectedType(GetBooleanString());</div><div class="line"><a name="l01361"></a><span class="lineno"> 1361</span>  <span class="keywordflow">if</span> (type_ & (1 << kObjectSchemaType)) eh.AddExpectedType(GetObjectString());</div><div class="line"><a name="l01362"></a><span class="lineno"> 1362</span>  <span class="keywordflow">if</span> (type_ & (1 << kArraySchemaType)) eh.AddExpectedType(GetArrayString());</div><div class="line"><a name="l01363"></a><span class="lineno"> 1363</span>  <span class="keywordflow">if</span> (type_ & (1 << kStringSchemaType)) eh.AddExpectedType(GetStringString());</div><div class="line"><a name="l01364"></a><span class="lineno"> 1364</span> </div><div class="line"><a name="l01365"></a><span class="lineno"> 1365</span>  <span class="keywordflow">if</span> (type_ & (1 << kNumberSchemaType)) eh.AddExpectedType(GetNumberString());</div><div class="line"><a name="l01366"></a><span class="lineno"> 1366</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (type_ & (1 << kIntegerSchemaType)) eh.AddExpectedType(GetIntegerString());</div><div class="line"><a name="l01367"></a><span class="lineno"> 1367</span> </div><div class="line"><a name="l01368"></a><span class="lineno"> 1368</span>  eh.EndDisallowedType(actualType);</div><div class="line"><a name="l01369"></a><span class="lineno"> 1369</span>  }</div><div class="line"><a name="l01370"></a><span class="lineno"> 1370</span> </div><div class="line"><a name="l01371"></a><span class="lineno"> 1371</span>  <span class="keyword">struct </span>Property {</div><div class="line"><a name="l01372"></a><span class="lineno"> 1372</span>  Property() : schema(), dependenciesSchema(), dependenciesValidatorIndex(), dependencies(), required(false) {}</div><div class="line"><a name="l01373"></a><span class="lineno"> 1373</span>  ~Property() { AllocatorType::Free(dependencies); }</div><div class="line"><a name="l01374"></a><span class="lineno"> 1374</span>  SValue name;</div><div class="line"><a name="l01375"></a><span class="lineno"> 1375</span>  <span class="keyword">const</span> SchemaType* schema;</div><div class="line"><a name="l01376"></a><span class="lineno"> 1376</span>  <span class="keyword">const</span> SchemaType* dependenciesSchema;</div><div class="line"><a name="l01377"></a><span class="lineno"> 1377</span>  <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> dependenciesValidatorIndex;</div><div class="line"><a name="l01378"></a><span class="lineno"> 1378</span>  <span class="keywordtype">bool</span>* dependencies;</div><div class="line"><a name="l01379"></a><span class="lineno"> 1379</span>  <span class="keywordtype">bool</span> required;</div><div class="line"><a name="l01380"></a><span class="lineno"> 1380</span>  };</div><div class="line"><a name="l01381"></a><span class="lineno"> 1381</span> </div><div class="line"><a name="l01382"></a><span class="lineno"> 1382</span>  <span class="keyword">struct </span>PatternProperty {</div><div class="line"><a name="l01383"></a><span class="lineno"> 1383</span>  PatternProperty() : schema(), pattern() {}</div><div class="line"><a name="l01384"></a><span class="lineno"> 1384</span>  ~PatternProperty() { </div><div class="line"><a name="l01385"></a><span class="lineno"> 1385</span>  <span class="keywordflow">if</span> (pattern) {</div><div class="line"><a name="l01386"></a><span class="lineno"> 1386</span>  pattern->~RegexType();</div><div class="line"><a name="l01387"></a><span class="lineno"> 1387</span>  AllocatorType::Free(pattern);</div><div class="line"><a name="l01388"></a><span class="lineno"> 1388</span>  }</div><div class="line"><a name="l01389"></a><span class="lineno"> 1389</span>  }</div><div class="line"><a name="l01390"></a><span class="lineno"> 1390</span>  <span class="keyword">const</span> SchemaType* schema;</div><div class="line"><a name="l01391"></a><span class="lineno"> 1391</span>  RegexType* pattern;</div><div class="line"><a name="l01392"></a><span class="lineno"> 1392</span>  };</div><div class="line"><a name="l01393"></a><span class="lineno"> 1393</span> </div><div class="line"><a name="l01394"></a><span class="lineno"> 1394</span>  AllocatorType* allocator_;</div><div class="line"><a name="l01395"></a><span class="lineno"> 1395</span>  SValue uri_;</div><div class="line"><a name="l01396"></a><span class="lineno"> 1396</span>  PointerType pointer_;</div><div class="line"><a name="l01397"></a><span class="lineno"> 1397</span>  <span class="keyword">const</span> SchemaType* typeless_;</div><div class="line"><a name="l01398"></a><span class="lineno"> 1398</span>  uint64_t* enum_;</div><div class="line"><a name="l01399"></a><span class="lineno"> 1399</span>  <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> enumCount_;</div><div class="line"><a name="l01400"></a><span class="lineno"> 1400</span>  SchemaArray allOf_;</div><div class="line"><a name="l01401"></a><span class="lineno"> 1401</span>  SchemaArray anyOf_;</div><div class="line"><a name="l01402"></a><span class="lineno"> 1402</span>  SchemaArray oneOf_;</div><div class="line"><a name="l01403"></a><span class="lineno"> 1403</span>  <span class="keyword">const</span> SchemaType* not_;</div><div class="line"><a name="l01404"></a><span class="lineno"> 1404</span>  <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>  <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> validatorCount_;</div><div class="line"><a name="l01406"></a><span class="lineno"> 1406</span>  <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> notValidatorIndex_;</div><div class="line"><a name="l01407"></a><span class="lineno"> 1407</span> </div><div class="line"><a name="l01408"></a><span class="lineno"> 1408</span>  Property* properties_;</div><div class="line"><a name="l01409"></a><span class="lineno"> 1409</span>  <span class="keyword">const</span> SchemaType* additionalPropertiesSchema_;</div><div class="line"><a name="l01410"></a><span class="lineno"> 1410</span>  PatternProperty* patternProperties_;</div><div class="line"><a name="l01411"></a><span class="lineno"> 1411</span>  <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> patternPropertyCount_;</div><div class="line"><a name="l01412"></a><span class="lineno"> 1412</span>  <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> propertyCount_;</div><div class="line"><a name="l01413"></a><span class="lineno"> 1413</span>  <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> minProperties_;</div><div class="line"><a name="l01414"></a><span class="lineno"> 1414</span>  <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> maxProperties_;</div><div class="line"><a name="l01415"></a><span class="lineno"> 1415</span>  <span class="keywordtype">bool</span> additionalProperties_;</div><div class="line"><a name="l01416"></a><span class="lineno"> 1416</span>  <span class="keywordtype">bool</span> hasDependencies_;</div><div class="line"><a name="l01417"></a><span class="lineno"> 1417</span>  <span class="keywordtype">bool</span> hasRequired_;</div><div class="line"><a name="l01418"></a><span class="lineno"> 1418</span>  <span class="keywordtype">bool</span> hasSchemaDependencies_;</div><div class="line"><a name="l01419"></a><span class="lineno"> 1419</span> </div><div class="line"><a name="l01420"></a><span class="lineno"> 1420</span>  <span class="keyword">const</span> SchemaType* additionalItemsSchema_;</div><div class="line"><a name="l01421"></a><span class="lineno"> 1421</span>  <span class="keyword">const</span> SchemaType* itemsList_;</div><div class="line"><a name="l01422"></a><span class="lineno"> 1422</span>  <span class="keyword">const</span> SchemaType** itemsTuple_;</div><div class="line"><a name="l01423"></a><span class="lineno"> 1423</span>  <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> itemsTupleCount_;</div><div class="line"><a name="l01424"></a><span class="lineno"> 1424</span>  <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> minItems_;</div><div class="line"><a name="l01425"></a><span class="lineno"> 1425</span>  <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> maxItems_;</div><div class="line"><a name="l01426"></a><span class="lineno"> 1426</span>  <span class="keywordtype">bool</span> additionalItems_;</div><div class="line"><a name="l01427"></a><span class="lineno"> 1427</span>  <span class="keywordtype">bool</span> uniqueItems_;</div><div class="line"><a name="l01428"></a><span class="lineno"> 1428</span> </div><div class="line"><a name="l01429"></a><span class="lineno"> 1429</span>  RegexType* pattern_;</div><div class="line"><a name="l01430"></a><span class="lineno"> 1430</span>  <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> minLength_;</div><div class="line"><a name="l01431"></a><span class="lineno"> 1431</span>  <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> maxLength_;</div><div class="line"><a name="l01432"></a><span class="lineno"> 1432</span> </div><div class="line"><a name="l01433"></a><span class="lineno"> 1433</span>  SValue minimum_;</div><div class="line"><a name="l01434"></a><span class="lineno"> 1434</span>  SValue maximum_;</div><div class="line"><a name="l01435"></a><span class="lineno"> 1435</span>  SValue multipleOf_;</div><div class="line"><a name="l01436"></a><span class="lineno"> 1436</span>  <span class="keywordtype">bool</span> exclusiveMinimum_;</div><div class="line"><a name="l01437"></a><span class="lineno"> 1437</span>  <span class="keywordtype">bool</span> exclusiveMaximum_;</div><div class="line"><a name="l01438"></a><span class="lineno"> 1438</span>  </div><div class="line"><a name="l01439"></a><span class="lineno"> 1439</span>  <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> defaultValueLength_;</div><div class="line"><a name="l01440"></a><span class="lineno"> 1440</span> };</div><div class="line"><a name="l01441"></a><span class="lineno"> 1441</span> </div><div class="line"><a name="l01442"></a><span class="lineno"> 1442</span> <span class="keyword">template</span><<span class="keyword">typename</span> Stack, <span class="keyword">typename</span> Ch></div><div class="line"><a name="l01443"></a><span class="lineno"> 1443</span> <span class="keyword">struct </span>TokenHelper {</div><div class="line"><a name="l01444"></a><span class="lineno"> 1444</span>  RAPIDJSON_FORCEINLINE <span class="keyword">static</span> <span class="keywordtype">void</span> AppendIndexToken(Stack& documentStack, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> index) {</div><div class="line"><a name="l01445"></a><span class="lineno"> 1445</span>  *documentStack.template Push<Ch>() = <span class="charliteral">'/'</span>;</div><div class="line"><a name="l01446"></a><span class="lineno"> 1446</span>  <span class="keywordtype">char</span> buffer[21];</div><div class="line"><a name="l01447"></a><span class="lineno"> 1447</span>  <span class="keywordtype">size_t</span> length = <span class="keyword">static_cast<</span><span class="keywordtype">size_t</span><span class="keyword">></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>  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i < length; i++)</div><div class="line"><a name="l01449"></a><span class="lineno"> 1449</span>  *documentStack.template Push<Ch>() = <span class="keyword">static_cast<</span>Ch<span class="keyword">></span>(buffer[i]);</div><div class="line"><a name="l01450"></a><span class="lineno"> 1450</span>  }</div><div class="line"><a name="l01451"></a><span class="lineno"> 1451</span> };</div><div class="line"><a name="l01452"></a><span class="lineno"> 1452</span> </div><div class="line"><a name="l01453"></a><span class="lineno"> 1453</span> <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> <span class="keyword">template</span> <<span class="keyword">typename</span> Stack></div><div class="line"><a name="l01455"></a><span class="lineno"> 1455</span> <span class="keyword">struct </span>TokenHelper<Stack, char> {</div><div class="line"><a name="l01456"></a><span class="lineno"> 1456</span>  RAPIDJSON_FORCEINLINE <span class="keyword">static</span> <span class="keywordtype">void</span> AppendIndexToken(Stack& documentStack, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> index) {</div><div class="line"><a name="l01457"></a><span class="lineno"> 1457</span>  <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>  <span class="keywordtype">char</span> *buffer = documentStack.template Push<char>(1 + 10); <span class="comment">// '/' + uint</span></div><div class="line"><a name="l01459"></a><span class="lineno"> 1459</span>  *buffer++ = <span class="charliteral">'/'</span>;</div><div class="line"><a name="l01460"></a><span class="lineno"> 1460</span>  <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>  documentStack.template Pop<char>(<span class="keyword">static_cast<</span><span class="keywordtype">size_t</span><span class="keyword">></span>(10 - (end - buffer)));</div><div class="line"><a name="l01462"></a><span class="lineno"> 1462</span>  }</div><div class="line"><a name="l01463"></a><span class="lineno"> 1463</span>  <span class="keywordflow">else</span> {</div><div class="line"><a name="l01464"></a><span class="lineno"> 1464</span>  <span class="keywordtype">char</span> *buffer = documentStack.template Push<char>(1 + 20); <span class="comment">// '/' + uint64</span></div><div class="line"><a name="l01465"></a><span class="lineno"> 1465</span>  *buffer++ = <span class="charliteral">'/'</span>;</div><div class="line"><a name="l01466"></a><span class="lineno"> 1466</span>  <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>  documentStack.template Pop<char>(<span class="keyword">static_cast<</span><span class="keywordtype">size_t</span><span class="keyword">></span>(20 - (end - buffer)));</div><div class="line"><a name="l01468"></a><span class="lineno"> 1468</span>  }</div><div class="line"><a name="l01469"></a><span class="lineno"> 1469</span>  }</div><div class="line"><a name="l01470"></a><span class="lineno"> 1470</span> };</div><div class="line"><a name="l01471"></a><span class="lineno"> 1471</span> </div><div class="line"><a name="l01472"></a><span class="lineno"> 1472</span> } <span class="comment">// namespace internal</span></div><div class="line"><a name="l01473"></a><span class="lineno"> 1473</span> <span class="comment"></span></div><div class="line"><a name="l01474"></a><span class="lineno"> 1474</span> <span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l01475"></a><span class="lineno"> 1475</span> <span class="comment"></span><span class="comment">// IGenericRemoteSchemaDocumentProvider</span></div><div class="line"><a name="l01476"></a><span class="lineno"> 1476</span> </div><div class="line"><a name="l01477"></a><span class="lineno"> 1477</span> <span class="keyword">template</span> <<span class="keyword">typename</span> SchemaDocumentType></div><div class="line"><a name="l01478"></a><span class="lineno"> 1478</span> <span class="keyword">class </span>IGenericRemoteSchemaDocumentProvider {</div><div class="line"><a name="l01479"></a><span class="lineno"> 1479</span> <span class="keyword">public</span>:</div><div class="line"><a name="l01480"></a><span class="lineno"> 1480</span>  <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> </div><div class="line"><a name="l01482"></a><span class="lineno"> 1482</span>  <span class="keyword">virtual</span> ~IGenericRemoteSchemaDocumentProvider() {}</div><div class="line"><a name="l01483"></a><span class="lineno"> 1483</span>  <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> };</div><div class="line"><a name="l01485"></a><span class="lineno"> 1485</span> <span class="comment"></span></div><div class="line"><a name="l01486"></a><span class="lineno"> 1486</span> <span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l01487"></a><span class="lineno"> 1487</span> <span class="comment"></span><span class="comment">// GenericSchemaDocument</span></div><div class="line"><a name="l01488"></a><span class="lineno"> 1488</span> <span class="comment"></span></div><div class="line"><a name="l01489"></a><span class="lineno"> 1489</span> <span class="comment">//! JSON schema document.</span></div><div class="line"><a name="l01490"></a><span class="lineno"> 1490</span> <span class="comment"></span><span class="comment">/*!</span></div><div class="line"><a name="l01491"></a><span class="lineno"> 1491</span> <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> <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> <span class="comment"></span></div><div class="line"><a name="l01494"></a><span class="lineno"> 1494</span> <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> <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> <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> <span class="comment">*/</span></div><div class="line"><a name="l01498"></a><span class="lineno"> 1498</span> <span class="keyword">template</span> <<span class="keyword">typename</span> ValueT, <span class="keyword">typename</span> Allocator = CrtAllocator></div><div class="line"><a name="l01499"></a><span class="lineno"> 1499</span> <span class="keyword">class </span>GenericSchemaDocument {</div><div class="line"><a name="l01500"></a><span class="lineno"> 1500</span> <span class="keyword">public</span>:</div><div class="line"><a name="l01501"></a><span class="lineno"> 1501</span>  <span class="keyword">typedef</span> ValueT ValueType;</div><div class="line"><a name="l01502"></a><span class="lineno"> 1502</span>  <span class="keyword">typedef</span> IGenericRemoteSchemaDocumentProvider<GenericSchemaDocument> IRemoteSchemaDocumentProviderType;</div><div class="line"><a name="l01503"></a><span class="lineno"> 1503</span>  <span class="keyword">typedef</span> Allocator AllocatorType;</div><div class="line"><a name="l01504"></a><span class="lineno"> 1504</span>  <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>  <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>  <span class="keyword">typedef</span> internal::Schema<GenericSchemaDocument> SchemaType;</div><div class="line"><a name="l01507"></a><span class="lineno"> 1507</span>  <span class="keyword">typedef</span> GenericPointer<ValueType, Allocator> PointerType;</div><div class="line"><a name="l01508"></a><span class="lineno"> 1508</span>  <span class="keyword">typedef</span> GenericValue<EncodingType, Allocator> URIType;</div><div class="line"><a name="l01509"></a><span class="lineno"> 1509</span>  <span class="keyword">friend</span> <span class="keyword">class </span>internal::Schema<GenericSchemaDocument>;</div><div class="line"><a name="l01510"></a><span class="lineno"> 1510</span>  <span class="keyword">template</span> <<span class="keyword">typename</span>, <span class="keyword">typename</span>, <span class="keyword">typename</span>></div><div class="line"><a name="l01511"></a><span class="lineno"> 1511</span>  <span class="keyword">friend</span> <span class="keyword">class </span>GenericSchemaValidator;</div><div class="line"><a name="l01512"></a><span class="lineno"> 1512</span> <span class="comment"></span></div><div class="line"><a name="l01513"></a><span class="lineno"> 1513</span> <span class="comment"> //! Constructor.</span></div><div class="line"><a name="l01514"></a><span class="lineno"> 1514</span> <span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l01515"></a><span class="lineno"> 1515</span> <span class="comment"> Compile a JSON document into schema document.</span></div><div class="line"><a name="l01516"></a><span class="lineno"> 1516</span> <span class="comment"></span></div><div class="line"><a name="l01517"></a><span class="lineno"> 1517</span> <span class="comment"> \param document A JSON document as source.</span></div><div class="line"><a name="l01518"></a><span class="lineno"> 1518</span> <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> <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> <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> <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> <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>  <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& 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>  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>  remoteProvider_(remoteProvider),</div><div class="line"><a name="l01526"></a><span class="lineno"> 1526</span>  allocator_(allocator),</div><div class="line"><a name="l01527"></a><span class="lineno"> 1527</span>  ownAllocator_(),</div><div class="line"><a name="l01528"></a><span class="lineno"> 1528</span>  root_(),</div><div class="line"><a name="l01529"></a><span class="lineno"> 1529</span>  typeless_(),</div><div class="line"><a name="l01530"></a><span class="lineno"> 1530</span>  schemaMap_(allocator, kInitialSchemaMapSize),</div><div class="line"><a name="l01531"></a><span class="lineno"> 1531</span>  schemaRef_(allocator, kInitialSchemaRefSize)</div><div class="line"><a name="l01532"></a><span class="lineno"> 1532</span>  {</div><div class="line"><a name="l01533"></a><span class="lineno"> 1533</span>  <span class="keywordflow">if</span> (!allocator_)</div><div class="line"><a name="l01534"></a><span class="lineno"> 1534</span>  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> </div><div class="line"><a name="l01536"></a><span class="lineno"> 1536</span>  Ch noUri[1] = {0};</div><div class="line"><a name="l01537"></a><span class="lineno"> 1537</span>  uri_.SetString(uri ? uri : noUri, uriLength, *allocator_);</div><div class="line"><a name="l01538"></a><span class="lineno"> 1538</span> </div><div class="line"><a name="l01539"></a><span class="lineno"> 1539</span>  typeless_ = <span class="keyword">static_cast<</span>SchemaType*<span class="keyword">></span>(allocator_->Malloc(<span class="keyword">sizeof</span>(SchemaType)));</div><div class="line"><a name="l01540"></a><span class="lineno"> 1540</span>  <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> </div><div class="line"><a name="l01542"></a><span class="lineno"> 1542</span>  <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>  <span class="comment">// And call AddRefSchema() if there are $ref.</span></div><div class="line"><a name="l01544"></a><span class="lineno"> 1544</span>  CreateSchemaRecursive(&root_, PointerType(), document, document);</div><div class="line"><a name="l01545"></a><span class="lineno"> 1545</span> </div><div class="line"><a name="l01546"></a><span class="lineno"> 1546</span>  <span class="comment">// Resolve $ref</span></div><div class="line"><a name="l01547"></a><span class="lineno"> 1547</span>  <span class="keywordflow">while</span> (!schemaRef_.Empty()) {</div><div class="line"><a name="l01548"></a><span class="lineno"> 1548</span>  SchemaRefEntry* refEntry = schemaRef_.template Pop<SchemaRefEntry>(1);</div><div class="line"><a name="l01549"></a><span class="lineno"> 1549</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> SchemaType* s = GetSchema(refEntry->target)) {</div><div class="line"><a name="l01550"></a><span class="lineno"> 1550</span>  <span class="keywordflow">if</span> (refEntry->schema)</div><div class="line"><a name="l01551"></a><span class="lineno"> 1551</span>  *refEntry->schema = s;</div><div class="line"><a name="l01552"></a><span class="lineno"> 1552</span> </div><div class="line"><a name="l01553"></a><span class="lineno"> 1553</span>  <span class="comment">// Create entry in map if not exist</span></div><div class="line"><a name="l01554"></a><span class="lineno"> 1554</span>  <span class="keywordflow">if</span> (!GetSchema(refEntry->source)) {</div><div class="line"><a name="l01555"></a><span class="lineno"> 1555</span>  <span class="keyword">new</span> (schemaMap_.template Push<SchemaEntry>()) SchemaEntry(refEntry->source, const_cast<SchemaType*>(s), <span class="keyword">false</span>, allocator_);</div><div class="line"><a name="l01556"></a><span class="lineno"> 1556</span>  }</div><div class="line"><a name="l01557"></a><span class="lineno"> 1557</span>  }</div><div class="line"><a name="l01558"></a><span class="lineno"> 1558</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (refEntry->schema)</div><div class="line"><a name="l01559"></a><span class="lineno"> 1559</span>  *refEntry->schema = typeless_;</div><div class="line"><a name="l01560"></a><span class="lineno"> 1560</span> </div><div class="line"><a name="l01561"></a><span class="lineno"> 1561</span>  refEntry->~SchemaRefEntry();</div><div class="line"><a name="l01562"></a><span class="lineno"> 1562</span>  }</div><div class="line"><a name="l01563"></a><span class="lineno"> 1563</span> </div><div class="line"><a name="l01564"></a><span class="lineno"> 1564</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>(root_ != 0);</div><div class="line"><a name="l01565"></a><span class="lineno"> 1565</span> </div><div class="line"><a name="l01566"></a><span class="lineno"> 1566</span>  schemaRef_.ShrinkToFit(); <span class="comment">// Deallocate all memory for ref</span></div><div class="line"><a name="l01567"></a><span class="lineno"> 1567</span>  }</div><div class="line"><a name="l01568"></a><span class="lineno"> 1568</span> </div><div class="line"><a name="l01569"></a><span class="lineno"> 1569</span> <span class="preprocessor">#if RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l01570"></a><span class="lineno"> 1570</span> <span class="comment"> //! Move constructor in C++11</span></div><div class="line"><a name="l01571"></a><span class="lineno"> 1571</span> <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>&& rhs) RAPIDJSON_NOEXCEPT :</div><div class="line"><a name="l01572"></a><span class="lineno"> 1572</span>  remoteProvider_(rhs.remoteProvider_),</div><div class="line"><a name="l01573"></a><span class="lineno"> 1573</span>  allocator_(rhs.allocator_),</div><div class="line"><a name="l01574"></a><span class="lineno"> 1574</span>  ownAllocator_(rhs.ownAllocator_),</div><div class="line"><a name="l01575"></a><span class="lineno"> 1575</span>  root_(rhs.root_),</div><div class="line"><a name="l01576"></a><span class="lineno"> 1576</span>  typeless_(rhs.typeless_),</div><div class="line"><a name="l01577"></a><span class="lineno"> 1577</span>  schemaMap_(std::move(rhs.schemaMap_)),</div><div class="line"><a name="l01578"></a><span class="lineno"> 1578</span>  schemaRef_(std::move(rhs.schemaRef_)),</div><div class="line"><a name="l01579"></a><span class="lineno"> 1579</span>  uri_(std::move(rhs.uri_))</div><div class="line"><a name="l01580"></a><span class="lineno"> 1580</span>  {</div><div class="line"><a name="l01581"></a><span class="lineno"> 1581</span>  rhs.remoteProvider_ = 0;</div><div class="line"><a name="l01582"></a><span class="lineno"> 1582</span>  rhs.allocator_ = 0;</div><div class="line"><a name="l01583"></a><span class="lineno"> 1583</span>  rhs.ownAllocator_ = 0;</div><div class="line"><a name="l01584"></a><span class="lineno"> 1584</span>  rhs.typeless_ = 0;</div><div class="line"><a name="l01585"></a><span class="lineno"> 1585</span>  }</div><div class="line"><a name="l01586"></a><span class="lineno"> 1586</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l01587"></a><span class="lineno"> 1587</span> <span class="comment"></span></div><div class="line"><a name="l01588"></a><span class="lineno"> 1588</span> <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> <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>  <span class="keywordflow">while</span> (!schemaMap_.Empty())</div><div class="line"><a name="l01591"></a><span class="lineno"> 1591</span>  schemaMap_.template Pop<SchemaEntry>(1)->~SchemaEntry();</div><div class="line"><a name="l01592"></a><span class="lineno"> 1592</span> </div><div class="line"><a name="l01593"></a><span class="lineno"> 1593</span>  <span class="keywordflow">if</span> (typeless_) {</div><div class="line"><a name="l01594"></a><span class="lineno"> 1594</span>  typeless_->~SchemaType();</div><div class="line"><a name="l01595"></a><span class="lineno"> 1595</span>  Allocator::Free(typeless_);</div><div class="line"><a name="l01596"></a><span class="lineno"> 1596</span>  }</div><div class="line"><a name="l01597"></a><span class="lineno"> 1597</span> </div><div class="line"><a name="l01598"></a><span class="lineno"> 1598</span>  <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>  }</div><div class="line"><a name="l01600"></a><span class="lineno"> 1600</span> </div><div class="line"><a name="l01601"></a><span class="lineno"> 1601</span>  <span class="keyword">const</span> URIType& 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> <span class="comment"></span></div><div class="line"><a name="l01603"></a><span class="lineno"> 1603</span> <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> <span class="comment"></span> <span class="keyword">const</span> SchemaType& <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> </div><div class="line"><a name="l01606"></a><span class="lineno"> 1606</span> <span class="keyword">private</span>:<span class="comment"></span></div><div class="line"><a name="l01607"></a><span class="lineno"> 1607</span> <span class="comment"> //! Prohibit copying</span></div><div class="line"><a name="l01608"></a><span class="lineno"> 1608</span> <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>&);<span class="comment"></span></div><div class="line"><a name="l01609"></a><span class="lineno"> 1609</span> <span class="comment"> //! Prohibit assignment</span></div><div class="line"><a name="l01610"></a><span class="lineno"> 1610</span> <span class="comment"></span> <a class="code" href="classrapidjson_1_1_generic_schema_document.html">GenericSchemaDocument</a>& operator=(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_schema_document.html">GenericSchemaDocument</a>&);</div><div class="line"><a name="l01611"></a><span class="lineno"> 1611</span> </div><div class="line"><a name="l01612"></a><span class="lineno"> 1612</span>  <span class="keyword">struct </span>SchemaRefEntry {</div><div class="line"><a name="l01613"></a><span class="lineno"> 1613</span>  SchemaRefEntry(<span class="keyword">const</span> PointerType& s, <span class="keyword">const</span> PointerType& 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>  PointerType source;</div><div class="line"><a name="l01615"></a><span class="lineno"> 1615</span>  PointerType target;</div><div class="line"><a name="l01616"></a><span class="lineno"> 1616</span>  <span class="keyword">const</span> SchemaType** schema;</div><div class="line"><a name="l01617"></a><span class="lineno"> 1617</span>  };</div><div class="line"><a name="l01618"></a><span class="lineno"> 1618</span> </div><div class="line"><a name="l01619"></a><span class="lineno"> 1619</span>  <span class="keyword">struct </span>SchemaEntry {</div><div class="line"><a name="l01620"></a><span class="lineno"> 1620</span>  SchemaEntry(<span class="keyword">const</span> PointerType& 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>  ~SchemaEntry() {</div><div class="line"><a name="l01622"></a><span class="lineno"> 1622</span>  <span class="keywordflow">if</span> (owned) {</div><div class="line"><a name="l01623"></a><span class="lineno"> 1623</span>  schema->~SchemaType();</div><div class="line"><a name="l01624"></a><span class="lineno"> 1624</span>  Allocator::Free(schema);</div><div class="line"><a name="l01625"></a><span class="lineno"> 1625</span>  }</div><div class="line"><a name="l01626"></a><span class="lineno"> 1626</span>  }</div><div class="line"><a name="l01627"></a><span class="lineno"> 1627</span>  PointerType pointer;</div><div class="line"><a name="l01628"></a><span class="lineno"> 1628</span>  SchemaType* schema;</div><div class="line"><a name="l01629"></a><span class="lineno"> 1629</span>  <span class="keywordtype">bool</span> owned;</div><div class="line"><a name="l01630"></a><span class="lineno"> 1630</span>  };</div><div class="line"><a name="l01631"></a><span class="lineno"> 1631</span> </div><div class="line"><a name="l01632"></a><span class="lineno"> 1632</span>  <span class="keywordtype">void</span> CreateSchemaRecursive(<span class="keyword">const</span> SchemaType** schema, <span class="keyword">const</span> PointerType& pointer, <span class="keyword">const</span> ValueType& v, <span class="keyword">const</span> ValueType& document) {</div><div class="line"><a name="l01633"></a><span class="lineno"> 1633</span>  <span class="keywordflow">if</span> (schema)</div><div class="line"><a name="l01634"></a><span class="lineno"> 1634</span>  *schema = typeless_;</div><div class="line"><a name="l01635"></a><span class="lineno"> 1635</span> </div><div class="line"><a name="l01636"></a><span class="lineno"> 1636</span>  <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>  <span class="keyword">const</span> SchemaType* s = GetSchema(pointer);</div><div class="line"><a name="l01638"></a><span class="lineno"> 1638</span>  <span class="keywordflow">if</span> (!s)</div><div class="line"><a name="l01639"></a><span class="lineno"> 1639</span>  CreateSchema(schema, pointer, v, document);</div><div class="line"><a name="l01640"></a><span class="lineno"> 1640</span> </div><div class="line"><a name="l01641"></a><span class="lineno"> 1641</span>  <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>  CreateSchemaRecursive(0, pointer.<a class="code" href="classrapidjson_1_1_generic_pointer.html#a7cb5eda2af1722e52efa591c4103ebec">Append</a>(itr->name, allocator_), itr->value, document);</div><div class="line"><a name="l01643"></a><span class="lineno"> 1643</span>  }</div><div class="line"><a name="l01644"></a><span class="lineno"> 1644</span>  <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>  <span class="keywordflow">for</span> (<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> i = 0; i < v.Size(); i++)</div><div class="line"><a name="l01646"></a><span class="lineno"> 1646</span>  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>  }</div><div class="line"><a name="l01648"></a><span class="lineno"> 1648</span> </div><div class="line"><a name="l01649"></a><span class="lineno"> 1649</span>  <span class="keywordtype">void</span> CreateSchema(<span class="keyword">const</span> SchemaType** schema, <span class="keyword">const</span> PointerType& pointer, <span class="keyword">const</span> ValueType& v, <span class="keyword">const</span> ValueType& document) {</div><div class="line"><a name="l01650"></a><span class="lineno"> 1650</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>(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>  <span class="keywordflow">if</span> (v.IsObject()) {</div><div class="line"><a name="l01652"></a><span class="lineno"> 1652</span>  <span class="keywordflow">if</span> (!HandleRefSchema(pointer, schema, v, document)) {</div><div class="line"><a name="l01653"></a><span class="lineno"> 1653</span>  SchemaType* s = <span class="keyword">new</span> (allocator_->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>  <span class="keyword">new</span> (schemaMap_.template Push<SchemaEntry>()) SchemaEntry(pointer, s, <span class="keyword">true</span>, allocator_);</div><div class="line"><a name="l01655"></a><span class="lineno"> 1655</span>  <span class="keywordflow">if</span> (schema)</div><div class="line"><a name="l01656"></a><span class="lineno"> 1656</span>  *schema = s;</div><div class="line"><a name="l01657"></a><span class="lineno"> 1657</span>  }</div><div class="line"><a name="l01658"></a><span class="lineno"> 1658</span>  }</div><div class="line"><a name="l01659"></a><span class="lineno"> 1659</span>  }</div><div class="line"><a name="l01660"></a><span class="lineno"> 1660</span> </div><div class="line"><a name="l01661"></a><span class="lineno"> 1661</span>  <span class="keywordtype">bool</span> HandleRefSchema(<span class="keyword">const</span> PointerType& source, <span class="keyword">const</span> SchemaType** schema, <span class="keyword">const</span> ValueType& v, <span class="keyword">const</span> ValueType& document) {</div><div class="line"><a name="l01662"></a><span class="lineno"> 1662</span>  <span class="keyword">static</span> <span class="keyword">const</span> Ch kRefString[] = { <span class="charliteral">'$'</span>, <span class="charliteral">'r'</span>, <span class="charliteral">'e'</span>, <span class="charliteral">'f'</span>, <span class="charliteral">'\0'</span> };</div><div class="line"><a name="l01663"></a><span class="lineno"> 1663</span>  <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> </div><div class="line"><a name="l01665"></a><span class="lineno"> 1665</span>  <span class="keyword">typename</span> ValueType::ConstMemberIterator itr = v.FindMember(kRefValue);</div><div class="line"><a name="l01666"></a><span class="lineno"> 1666</span>  <span class="keywordflow">if</span> (itr == v.MemberEnd())</div><div class="line"><a name="l01667"></a><span class="lineno"> 1667</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01668"></a><span class="lineno"> 1668</span> </div><div class="line"><a name="l01669"></a><span class="lineno"> 1669</span>  <span class="keywordflow">if</span> (itr->value.IsString()) {</div><div class="line"><a name="l01670"></a><span class="lineno"> 1670</span>  <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> len = itr->value.GetStringLength();</div><div class="line"><a name="l01671"></a><span class="lineno"> 1671</span>  <span class="keywordflow">if</span> (len > 0) {</div><div class="line"><a name="l01672"></a><span class="lineno"> 1672</span>  <span class="keyword">const</span> Ch* s = itr->value.GetString();</div><div class="line"><a name="l01673"></a><span class="lineno"> 1673</span>  <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> i = 0;</div><div class="line"><a name="l01674"></a><span class="lineno"> 1674</span>  <span class="keywordflow">while</span> (i < len && s[i] != <span class="charliteral">'#'</span>) <span class="comment">// Find the first #</span></div><div class="line"><a name="l01675"></a><span class="lineno"> 1675</span>  i++;</div><div class="line"><a name="l01676"></a><span class="lineno"> 1676</span> </div><div class="line"><a name="l01677"></a><span class="lineno"> 1677</span>  <span class="keywordflow">if</span> (i > 0) { <span class="comment">// Remote reference, resolve immediately</span></div><div class="line"><a name="l01678"></a><span class="lineno"> 1678</span>  <span class="keywordflow">if</span> (remoteProvider_) {</div><div class="line"><a name="l01679"></a><span class="lineno"> 1679</span>  <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_->GetRemoteDocument(s, i)) {</div><div class="line"><a name="l01680"></a><span class="lineno"> 1680</span>  PointerType pointer(&s[i], len - i, allocator_);</div><div class="line"><a name="l01681"></a><span class="lineno"> 1681</span>  <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>  <span class="keywordflow">if</span> (<span class="keyword">const</span> SchemaType* sc = remoteDocument->GetSchema(pointer)) {</div><div class="line"><a name="l01683"></a><span class="lineno"> 1683</span>  <span class="keywordflow">if</span> (schema)</div><div class="line"><a name="l01684"></a><span class="lineno"> 1684</span>  *schema = sc;</div><div class="line"><a name="l01685"></a><span class="lineno"> 1685</span>  <span class="keyword">new</span> (schemaMap_.template Push<SchemaEntry>()) SchemaEntry(source, const_cast<SchemaType*>(sc), <span class="keyword">false</span>, allocator_);</div><div class="line"><a name="l01686"></a><span class="lineno"> 1686</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l01687"></a><span class="lineno"> 1687</span>  }</div><div class="line"><a name="l01688"></a><span class="lineno"> 1688</span>  }</div><div class="line"><a name="l01689"></a><span class="lineno"> 1689</span>  }</div><div class="line"><a name="l01690"></a><span class="lineno"> 1690</span>  }</div><div class="line"><a name="l01691"></a><span class="lineno"> 1691</span>  }</div><div class="line"><a name="l01692"></a><span class="lineno"> 1692</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (s[i] == <span class="charliteral">'#'</span>) { <span class="comment">// Local reference, defer resolution</span></div><div class="line"><a name="l01693"></a><span class="lineno"> 1693</span>  PointerType pointer(&s[i], len - i, allocator_);</div><div class="line"><a name="l01694"></a><span class="lineno"> 1694</span>  <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>  <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>  <span class="keywordflow">if</span> (HandleRefSchema(source, schema, *nv, document))</div><div class="line"><a name="l01697"></a><span class="lineno"> 1697</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l01698"></a><span class="lineno"> 1698</span> </div><div class="line"><a name="l01699"></a><span class="lineno"> 1699</span>  <span class="keyword">new</span> (schemaRef_.template Push<SchemaRefEntry>()) SchemaRefEntry(source, pointer, schema, allocator_);</div><div class="line"><a name="l01700"></a><span class="lineno"> 1700</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l01701"></a><span class="lineno"> 1701</span>  }</div><div class="line"><a name="l01702"></a><span class="lineno"> 1702</span>  }</div><div class="line"><a name="l01703"></a><span class="lineno"> 1703</span>  }</div><div class="line"><a name="l01704"></a><span class="lineno"> 1704</span>  }</div><div class="line"><a name="l01705"></a><span class="lineno"> 1705</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01706"></a><span class="lineno"> 1706</span>  }</div><div class="line"><a name="l01707"></a><span class="lineno"> 1707</span> </div><div class="line"><a name="l01708"></a><span class="lineno"> 1708</span>  <span class="keyword">const</span> SchemaType* GetSchema(<span class="keyword">const</span> PointerType& pointer)<span class="keyword"> const </span>{</div><div class="line"><a name="l01709"></a><span class="lineno"> 1709</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> SchemaEntry* target = schemaMap_.template Bottom<SchemaEntry>(); target != schemaMap_.template End<SchemaEntry>(); ++target)</div><div class="line"><a name="l01710"></a><span class="lineno"> 1710</span>  <span class="keywordflow">if</span> (pointer == target->pointer)</div><div class="line"><a name="l01711"></a><span class="lineno"> 1711</span>  <span class="keywordflow">return</span> target->schema;</div><div class="line"><a name="l01712"></a><span class="lineno"> 1712</span>  <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l01713"></a><span class="lineno"> 1713</span>  }</div><div class="line"><a name="l01714"></a><span class="lineno"> 1714</span> </div><div class="line"><a name="l01715"></a><span class="lineno"> 1715</span>  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>  <span class="keywordflow">for</span> (<span class="keyword">const</span> SchemaEntry* target = schemaMap_.template Bottom<SchemaEntry>(); target != schemaMap_.template End<SchemaEntry>(); ++target)</div><div class="line"><a name="l01717"></a><span class="lineno"> 1717</span>  <span class="keywordflow">if</span> (schema == target->schema)</div><div class="line"><a name="l01718"></a><span class="lineno"> 1718</span>  <span class="keywordflow">return</span> target->pointer;</div><div class="line"><a name="l01719"></a><span class="lineno"> 1719</span>  <span class="keywordflow">return</span> PointerType();</div><div class="line"><a name="l01720"></a><span class="lineno"> 1720</span>  }</div><div class="line"><a name="l01721"></a><span class="lineno"> 1721</span> </div><div class="line"><a name="l01722"></a><span class="lineno"> 1722</span>  <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> </div><div class="line"><a name="l01724"></a><span class="lineno"> 1724</span>  <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>  <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> </div><div class="line"><a name="l01727"></a><span class="lineno"> 1727</span>  IRemoteSchemaDocumentProviderType* remoteProvider_;</div><div class="line"><a name="l01728"></a><span class="lineno"> 1728</span>  <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>  <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>  <span class="keyword">const</span> SchemaType* root_; <span class="comment">//!< Root schema.</span></div><div class="line"><a name="l01731"></a><span class="lineno"> 1731</span> <span class="comment"></span> SchemaType* typeless_;</div><div class="line"><a name="l01732"></a><span class="lineno"> 1732</span>  internal::Stack<Allocator> schemaMap_; <span class="comment">// Stores created Pointer -> Schemas</span></div><div class="line"><a name="l01733"></a><span class="lineno"> 1733</span>  internal::Stack<Allocator> 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>  URIType uri_;</div><div class="line"><a name="l01735"></a><span class="lineno"> 1735</span> };</div><div class="line"><a name="l01736"></a><span class="lineno"> 1736</span> <span class="comment"></span></div><div class="line"><a name="l01737"></a><span class="lineno"> 1737</span> <span class="comment">//! GenericSchemaDocument using Value type.</span></div><div class="line"><a name="l01738"></a><span class="lineno"> 1738</span> <span class="comment"></span><span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_schema_document.html">GenericSchemaDocument<Value></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> <span class="comment">//! IGenericRemoteSchemaDocumentProvider using SchemaDocument.</span></div><div class="line"><a name="l01740"></a><span class="lineno"> 1740</span> <span class="comment"></span><span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_i_generic_remote_schema_document_provider.html">IGenericRemoteSchemaDocumentProvider<SchemaDocument></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> <span class="comment"></span></div><div class="line"><a name="l01742"></a><span class="lineno"> 1742</span> <span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l01743"></a><span class="lineno"> 1743</span> <span class="comment"></span><span class="comment">// GenericSchemaValidator</span></div><div class="line"><a name="l01744"></a><span class="lineno"> 1744</span> <span class="comment"></span></div><div class="line"><a name="l01745"></a><span class="lineno"> 1745</span> <span class="comment">//! JSON Schema Validator.</span></div><div class="line"><a name="l01746"></a><span class="lineno"> 1746</span> <span class="comment"></span><span class="comment">/*!</span></div><div class="line"><a name="l01747"></a><span class="lineno"> 1747</span> <span class="comment"> A SAX style JSON schema validator.</span></div><div class="line"><a name="l01748"></a><span class="lineno"> 1748</span> <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> <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> <span class="comment"> The default output handler does nothing.</span></div><div class="line"><a name="l01751"></a><span class="lineno"> 1751</span> <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> <span class="comment"></span></div><div class="line"><a name="l01753"></a><span class="lineno"> 1753</span> <span class="comment"> \tparam SchemaDocumentType Type of schema document.</span></div><div class="line"><a name="l01754"></a><span class="lineno"> 1754</span> <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> <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> <span class="comment">*/</span></div><div class="line"><a name="l01757"></a><span class="lineno"> 1757</span> <span class="keyword">template</span> <</div><div class="line"><a name="l01758"></a><span class="lineno"> 1758</span>  <span class="keyword">typename</span> SchemaDocumentType,</div><div class="line"><a name="l01759"></a><span class="lineno"> 1759</span>  <span class="keyword">typename</span> OutputHandler = <a class="code" href="structrapidjson_1_1_base_reader_handler.html">BaseReaderHandler<typename SchemaDocumentType::SchemaType::EncodingType></a>,</div><div class="line"><a name="l01760"></a><span class="lineno"> 1760</span>  <span class="keyword">typename</span> StateAllocator = <a class="code" href="classrapidjson_1_1_crt_allocator.html">CrtAllocator</a>></div><div class="line"><a name="l01761"></a><span class="lineno"> 1761</span> <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>  <span class="keyword">public</span> internal::ISchemaStateFactory<typename SchemaDocumentType::SchemaType>, </div><div class="line"><a name="l01763"></a><span class="lineno"> 1763</span>  <span class="keyword">public</span> internal::ISchemaValidator,</div><div class="line"><a name="l01764"></a><span class="lineno"> 1764</span>  <span class="keyword">public</span> internal::IValidationErrorHandler<typename SchemaDocumentType::SchemaType></div><div class="line"><a name="l01765"></a><span class="lineno"> 1765</span> {</div><div class="line"><a name="l01766"></a><span class="lineno"> 1766</span> <span class="keyword">public</span>:</div><div class="line"><a name="l01767"></a><span class="lineno"> 1767</span>  <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>  <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>  <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>  <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>  <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>  <span class="keyword">typedef</span> <a class="code" href="structrapidjson_1_1_generic_string_ref.html">GenericStringRef<Ch></a> StringRefType;</div><div class="line"><a name="l01773"></a><span class="lineno"> 1773</span>  <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue<EncodingType, StateAllocator></a> ValueType;</div><div class="line"><a name="l01774"></a><span class="lineno"> 1774</span> <span class="comment"></span></div><div class="line"><a name="l01775"></a><span class="lineno"> 1775</span> <span class="comment"> //! Constructor without output handler.</span></div><div class="line"><a name="l01776"></a><span class="lineno"> 1776</span> <span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l01777"></a><span class="lineno"> 1777</span> <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> <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> <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> <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> <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>  <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>  <span class="keyword">const</span> SchemaDocumentType& schemaDocument,</div><div class="line"><a name="l01784"></a><span class="lineno"> 1784</span>  StateAllocator* allocator = 0, </div><div class="line"><a name="l01785"></a><span class="lineno"> 1785</span>  <span class="keywordtype">size_t</span> schemaStackCapacity = kDefaultSchemaStackCapacity,</div><div class="line"><a name="l01786"></a><span class="lineno"> 1786</span>  <span class="keywordtype">size_t</span> documentStackCapacity = kDefaultDocumentStackCapacity)</div><div class="line"><a name="l01787"></a><span class="lineno"> 1787</span>  :</div><div class="line"><a name="l01788"></a><span class="lineno"> 1788</span>  schemaDocument_(&schemaDocument),</div><div class="line"><a name="l01789"></a><span class="lineno"> 1789</span>  root_(schemaDocument.GetRoot()),</div><div class="line"><a name="l01790"></a><span class="lineno"> 1790</span>  stateAllocator_(allocator),</div><div class="line"><a name="l01791"></a><span class="lineno"> 1791</span>  ownStateAllocator_(0),</div><div class="line"><a name="l01792"></a><span class="lineno"> 1792</span>  schemaStack_(allocator, schemaStackCapacity),</div><div class="line"><a name="l01793"></a><span class="lineno"> 1793</span>  documentStack_(allocator, documentStackCapacity),</div><div class="line"><a name="l01794"></a><span class="lineno"> 1794</span>  outputHandler_(0),</div><div class="line"><a name="l01795"></a><span class="lineno"> 1795</span>  error_(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4acf030b422a32c3647c7c5973bd4dd0a9">kObjectType</a>),</div><div class="line"><a name="l01796"></a><span class="lineno"> 1796</span>  currentError_(),</div><div class="line"><a name="l01797"></a><span class="lineno"> 1797</span>  missingDependents_(),</div><div class="line"><a name="l01798"></a><span class="lineno"> 1798</span>  valid_(true)</div><div class="line"><a name="l01799"></a><span class="lineno"> 1799</span> #if RAPIDJSON_SCHEMA_VERBOSE</div><div class="line"><a name="l01800"></a><span class="lineno"> 1800</span>  , depth_(0)</div><div class="line"><a name="l01801"></a><span class="lineno"> 1801</span> #endif</div><div class="line"><a name="l01802"></a><span class="lineno"> 1802</span>  {</div><div class="line"><a name="l01803"></a><span class="lineno"> 1803</span>  }</div><div class="line"><a name="l01804"></a><span class="lineno"> 1804</span> <span class="comment"></span></div><div class="line"><a name="l01805"></a><span class="lineno"> 1805</span> <span class="comment"> //! Constructor with output handler.</span></div><div class="line"><a name="l01806"></a><span class="lineno"> 1806</span> <span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l01807"></a><span class="lineno"> 1807</span> <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> <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> <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> <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> <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>  <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>  <span class="keyword">const</span> SchemaDocumentType& schemaDocument,</div><div class="line"><a name="l01814"></a><span class="lineno"> 1814</span>  OutputHandler& outputHandler,</div><div class="line"><a name="l01815"></a><span class="lineno"> 1815</span>  StateAllocator* allocator = 0, </div><div class="line"><a name="l01816"></a><span class="lineno"> 1816</span>  <span class="keywordtype">size_t</span> schemaStackCapacity = kDefaultSchemaStackCapacity,</div><div class="line"><a name="l01817"></a><span class="lineno"> 1817</span>  <span class="keywordtype">size_t</span> documentStackCapacity = kDefaultDocumentStackCapacity)</div><div class="line"><a name="l01818"></a><span class="lineno"> 1818</span>  :</div><div class="line"><a name="l01819"></a><span class="lineno"> 1819</span>  schemaDocument_(&schemaDocument),</div><div class="line"><a name="l01820"></a><span class="lineno"> 1820</span>  root_(schemaDocument.GetRoot()),</div><div class="line"><a name="l01821"></a><span class="lineno"> 1821</span>  stateAllocator_(allocator),</div><div class="line"><a name="l01822"></a><span class="lineno"> 1822</span>  ownStateAllocator_(0),</div><div class="line"><a name="l01823"></a><span class="lineno"> 1823</span>  schemaStack_(allocator, schemaStackCapacity),</div><div class="line"><a name="l01824"></a><span class="lineno"> 1824</span>  documentStack_(allocator, documentStackCapacity),</div><div class="line"><a name="l01825"></a><span class="lineno"> 1825</span>  outputHandler_(&outputHandler),</div><div class="line"><a name="l01826"></a><span class="lineno"> 1826</span>  error_(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4acf030b422a32c3647c7c5973bd4dd0a9">kObjectType</a>),</div><div class="line"><a name="l01827"></a><span class="lineno"> 1827</span>  currentError_(),</div><div class="line"><a name="l01828"></a><span class="lineno"> 1828</span>  missingDependents_(),</div><div class="line"><a name="l01829"></a><span class="lineno"> 1829</span>  valid_(true)</div><div class="line"><a name="l01830"></a><span class="lineno"> 1830</span> #if RAPIDJSON_SCHEMA_VERBOSE</div><div class="line"><a name="l01831"></a><span class="lineno"> 1831</span>  , depth_(0)</div><div class="line"><a name="l01832"></a><span class="lineno"> 1832</span> #endif</div><div class="line"><a name="l01833"></a><span class="lineno"> 1833</span>  {</div><div class="line"><a name="l01834"></a><span class="lineno"> 1834</span>  }</div><div class="line"><a name="l01835"></a><span class="lineno"> 1835</span> <span class="comment"></span></div><div class="line"><a name="l01836"></a><span class="lineno"> 1836</span> <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> <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>  Reset();</div><div class="line"><a name="l01839"></a><span class="lineno"> 1839</span>  <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>  }</div><div class="line"><a name="l01841"></a><span class="lineno"> 1841</span> <span class="comment"></span></div><div class="line"><a name="l01842"></a><span class="lineno"> 1842</span> <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> <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>  <span class="keywordflow">while</span> (!schemaStack_.Empty())</div><div class="line"><a name="l01845"></a><span class="lineno"> 1845</span>  PopSchema();</div><div class="line"><a name="l01846"></a><span class="lineno"> 1846</span>  documentStack_.Clear();</div><div class="line"><a name="l01847"></a><span class="lineno"> 1847</span>  error_.SetObject();</div><div class="line"><a name="l01848"></a><span class="lineno"> 1848</span>  currentError_.SetNull();</div><div class="line"><a name="l01849"></a><span class="lineno"> 1849</span>  missingDependents_.SetNull();</div><div class="line"><a name="l01850"></a><span class="lineno"> 1850</span>  valid_ = <span class="keyword">true</span>;</div><div class="line"><a name="l01851"></a><span class="lineno"> 1851</span>  }</div><div class="line"><a name="l01852"></a><span class="lineno"> 1852</span> <span class="comment"></span></div><div class="line"><a name="l01853"></a><span class="lineno"> 1853</span> <span class="comment"> //! Checks whether the current state is valid.</span></div><div class="line"><a name="l01854"></a><span class="lineno"> 1854</span> <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>  <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> <span class="comment"></span></div><div class="line"><a name="l01857"></a><span class="lineno"> 1857</span> <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> <span class="comment"></span> ValueType& <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>  <span class="keyword">const</span> ValueType& 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> <span class="comment"></span></div><div class="line"><a name="l01861"></a><span class="lineno"> 1861</span> <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> <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>  <span class="keywordflow">return</span> schemaStack_.Empty() ? PointerType() : CurrentSchema().GetPointer();</div><div class="line"><a name="l01864"></a><span class="lineno"> 1864</span>  }</div><div class="line"><a name="l01865"></a><span class="lineno"> 1865</span> <span class="comment"></span></div><div class="line"><a name="l01866"></a><span class="lineno"> 1866</span> <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> <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>  <span class="keywordflow">return</span> schemaStack_.Empty() ? 0 : CurrentContext().invalidKeyword;</div><div class="line"><a name="l01869"></a><span class="lineno"> 1869</span>  }</div><div class="line"><a name="l01870"></a><span class="lineno"> 1870</span> <span class="comment"></span></div><div class="line"><a name="l01871"></a><span class="lineno"> 1871</span> <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> <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>  <span class="keywordflow">if</span> (documentStack_.Empty()) {</div><div class="line"><a name="l01874"></a><span class="lineno"> 1874</span>  <span class="keywordflow">return</span> PointerType();</div><div class="line"><a name="l01875"></a><span class="lineno"> 1875</span>  }</div><div class="line"><a name="l01876"></a><span class="lineno"> 1876</span>  <span class="keywordflow">else</span> {</div><div class="line"><a name="l01877"></a><span class="lineno"> 1877</span>  <span class="keywordflow">return</span> PointerType(documentStack_.template Bottom<Ch>(), documentStack_.GetSize() / <span class="keyword">sizeof</span>(Ch));</div><div class="line"><a name="l01878"></a><span class="lineno"> 1878</span>  }</div><div class="line"><a name="l01879"></a><span class="lineno"> 1879</span>  }</div><div class="line"><a name="l01880"></a><span class="lineno"> 1880</span> </div><div class="line"><a name="l01881"></a><span class="lineno"> 1881</span>  <span class="keywordtype">void</span> NotMultipleOf(int64_t actual, <span class="keyword">const</span> SValue& expected) {</div><div class="line"><a name="l01882"></a><span class="lineno"> 1882</span>  AddNumberError(SchemaType::GetMultipleOfString(), ValueType(actual).Move(), expected);</div><div class="line"><a name="l01883"></a><span class="lineno"> 1883</span>  }</div><div class="line"><a name="l01884"></a><span class="lineno"> 1884</span>  <span class="keywordtype">void</span> NotMultipleOf(uint64_t actual, <span class="keyword">const</span> SValue& expected) {</div><div class="line"><a name="l01885"></a><span class="lineno"> 1885</span>  AddNumberError(SchemaType::GetMultipleOfString(), ValueType(actual).Move(), expected);</div><div class="line"><a name="l01886"></a><span class="lineno"> 1886</span>  }</div><div class="line"><a name="l01887"></a><span class="lineno"> 1887</span>  <span class="keywordtype">void</span> NotMultipleOf(<span class="keywordtype">double</span> actual, <span class="keyword">const</span> SValue& expected) {</div><div class="line"><a name="l01888"></a><span class="lineno"> 1888</span>  AddNumberError(SchemaType::GetMultipleOfString(), ValueType(actual).Move(), expected);</div><div class="line"><a name="l01889"></a><span class="lineno"> 1889</span>  }</div><div class="line"><a name="l01890"></a><span class="lineno"> 1890</span>  <span class="keywordtype">void</span> AboveMaximum(int64_t actual, <span class="keyword">const</span> SValue& expected, <span class="keywordtype">bool</span> exclusive) {</div><div class="line"><a name="l01891"></a><span class="lineno"> 1891</span>  AddNumberError(SchemaType::GetMaximumString(), ValueType(actual).Move(), expected,</div><div class="line"><a name="l01892"></a><span class="lineno"> 1892</span>  exclusive ? &SchemaType::GetExclusiveMaximumString : 0);</div><div class="line"><a name="l01893"></a><span class="lineno"> 1893</span>  }</div><div class="line"><a name="l01894"></a><span class="lineno"> 1894</span>  <span class="keywordtype">void</span> AboveMaximum(uint64_t actual, <span class="keyword">const</span> SValue& expected, <span class="keywordtype">bool</span> exclusive) {</div><div class="line"><a name="l01895"></a><span class="lineno"> 1895</span>  AddNumberError(SchemaType::GetMaximumString(), ValueType(actual).Move(), expected,</div><div class="line"><a name="l01896"></a><span class="lineno"> 1896</span>  exclusive ? &SchemaType::GetExclusiveMaximumString : 0);</div><div class="line"><a name="l01897"></a><span class="lineno"> 1897</span>  }</div><div class="line"><a name="l01898"></a><span class="lineno"> 1898</span>  <span class="keywordtype">void</span> AboveMaximum(<span class="keywordtype">double</span> actual, <span class="keyword">const</span> SValue& expected, <span class="keywordtype">bool</span> exclusive) {</div><div class="line"><a name="l01899"></a><span class="lineno"> 1899</span>  AddNumberError(SchemaType::GetMaximumString(), ValueType(actual).Move(), expected,</div><div class="line"><a name="l01900"></a><span class="lineno"> 1900</span>  exclusive ? &SchemaType::GetExclusiveMaximumString : 0);</div><div class="line"><a name="l01901"></a><span class="lineno"> 1901</span>  }</div><div class="line"><a name="l01902"></a><span class="lineno"> 1902</span>  <span class="keywordtype">void</span> BelowMinimum(int64_t actual, <span class="keyword">const</span> SValue& expected, <span class="keywordtype">bool</span> exclusive) {</div><div class="line"><a name="l01903"></a><span class="lineno"> 1903</span>  AddNumberError(SchemaType::GetMinimumString(), ValueType(actual).Move(), expected,</div><div class="line"><a name="l01904"></a><span class="lineno"> 1904</span>  exclusive ? &SchemaType::GetExclusiveMinimumString : 0);</div><div class="line"><a name="l01905"></a><span class="lineno"> 1905</span>  }</div><div class="line"><a name="l01906"></a><span class="lineno"> 1906</span>  <span class="keywordtype">void</span> BelowMinimum(uint64_t actual, <span class="keyword">const</span> SValue& expected, <span class="keywordtype">bool</span> exclusive) {</div><div class="line"><a name="l01907"></a><span class="lineno"> 1907</span>  AddNumberError(SchemaType::GetMinimumString(), ValueType(actual).Move(), expected,</div><div class="line"><a name="l01908"></a><span class="lineno"> 1908</span>  exclusive ? &SchemaType::GetExclusiveMinimumString : 0);</div><div class="line"><a name="l01909"></a><span class="lineno"> 1909</span>  }</div><div class="line"><a name="l01910"></a><span class="lineno"> 1910</span>  <span class="keywordtype">void</span> BelowMinimum(<span class="keywordtype">double</span> actual, <span class="keyword">const</span> SValue& expected, <span class="keywordtype">bool</span> exclusive) {</div><div class="line"><a name="l01911"></a><span class="lineno"> 1911</span>  AddNumberError(SchemaType::GetMinimumString(), ValueType(actual).Move(), expected,</div><div class="line"><a name="l01912"></a><span class="lineno"> 1912</span>  exclusive ? &SchemaType::GetExclusiveMinimumString : 0);</div><div class="line"><a name="l01913"></a><span class="lineno"> 1913</span>  }</div><div class="line"><a name="l01914"></a><span class="lineno"> 1914</span> </div><div class="line"><a name="l01915"></a><span class="lineno"> 1915</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) {</div><div class="line"><a name="l01916"></a><span class="lineno"> 1916</span>  AddNumberError(SchemaType::GetMaxLengthString(),</div><div class="line"><a name="l01917"></a><span class="lineno"> 1917</span>  ValueType(str, length, GetStateAllocator()).Move(), SValue(expected).Move());</div><div class="line"><a name="l01918"></a><span class="lineno"> 1918</span>  }</div><div class="line"><a name="l01919"></a><span class="lineno"> 1919</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) {</div><div class="line"><a name="l01920"></a><span class="lineno"> 1920</span>  AddNumberError(SchemaType::GetMinLengthString(),</div><div class="line"><a name="l01921"></a><span class="lineno"> 1921</span>  ValueType(str, length, GetStateAllocator()).Move(), SValue(expected).Move());</div><div class="line"><a name="l01922"></a><span class="lineno"> 1922</span>  }</div><div class="line"><a name="l01923"></a><span class="lineno"> 1923</span>  <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>  currentError_.SetObject();</div><div class="line"><a name="l01925"></a><span class="lineno"> 1925</span>  currentError_.AddMember(GetActualString(), ValueType(str, length, GetStateAllocator()).Move(), GetStateAllocator());</div><div class="line"><a name="l01926"></a><span class="lineno"> 1926</span>  AddCurrentError(SchemaType::GetPatternString());</div><div class="line"><a name="l01927"></a><span class="lineno"> 1927</span>  }</div><div class="line"><a name="l01928"></a><span class="lineno"> 1928</span> </div><div class="line"><a name="l01929"></a><span class="lineno"> 1929</span>  <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>  currentError_.SetObject();</div><div class="line"><a name="l01931"></a><span class="lineno"> 1931</span>  currentError_.AddMember(GetDisallowedString(), ValueType(index).Move(), GetStateAllocator());</div><div class="line"><a name="l01932"></a><span class="lineno"> 1932</span>  AddCurrentError(SchemaType::GetAdditionalItemsString(), <span class="keyword">true</span>);</div><div class="line"><a name="l01933"></a><span class="lineno"> 1933</span>  }</div><div class="line"><a name="l01934"></a><span class="lineno"> 1934</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) {</div><div class="line"><a name="l01935"></a><span class="lineno"> 1935</span>  AddNumberError(SchemaType::GetMinItemsString(),</div><div class="line"><a name="l01936"></a><span class="lineno"> 1936</span>  ValueType(actualCount).Move(), SValue(expectedCount).Move());</div><div class="line"><a name="l01937"></a><span class="lineno"> 1937</span>  }</div><div class="line"><a name="l01938"></a><span class="lineno"> 1938</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) {</div><div class="line"><a name="l01939"></a><span class="lineno"> 1939</span>  AddNumberError(SchemaType::GetMaxItemsString(),</div><div class="line"><a name="l01940"></a><span class="lineno"> 1940</span>  ValueType(actualCount).Move(), SValue(expectedCount).Move());</div><div class="line"><a name="l01941"></a><span class="lineno"> 1941</span>  }</div><div class="line"><a name="l01942"></a><span class="lineno"> 1942</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) {</div><div class="line"><a name="l01943"></a><span class="lineno"> 1943</span>  ValueType duplicates(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a058c622e1e7d59419ae58b895cbce468">kArrayType</a>);</div><div class="line"><a name="l01944"></a><span class="lineno"> 1944</span>  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>  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>  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>  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>  AddCurrentError(SchemaType::GetUniqueItemsString(), <span class="keyword">true</span>);</div><div class="line"><a name="l01949"></a><span class="lineno"> 1949</span>  }</div><div class="line"><a name="l01950"></a><span class="lineno"> 1950</span> </div><div class="line"><a name="l01951"></a><span class="lineno"> 1951</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) {</div><div class="line"><a name="l01952"></a><span class="lineno"> 1952</span>  AddNumberError(SchemaType::GetMaxPropertiesString(),</div><div class="line"><a name="l01953"></a><span class="lineno"> 1953</span>  ValueType(actualCount).Move(), SValue(expectedCount).Move());</div><div class="line"><a name="l01954"></a><span class="lineno"> 1954</span>  }</div><div class="line"><a name="l01955"></a><span class="lineno"> 1955</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) {</div><div class="line"><a name="l01956"></a><span class="lineno"> 1956</span>  AddNumberError(SchemaType::GetMinPropertiesString(),</div><div class="line"><a name="l01957"></a><span class="lineno"> 1957</span>  ValueType(actualCount).Move(), SValue(expectedCount).Move());</div><div class="line"><a name="l01958"></a><span class="lineno"> 1958</span>  }</div><div class="line"><a name="l01959"></a><span class="lineno"> 1959</span>  <span class="keywordtype">void</span> StartMissingProperties() {</div><div class="line"><a name="l01960"></a><span class="lineno"> 1960</span>  currentError_.SetArray();</div><div class="line"><a name="l01961"></a><span class="lineno"> 1961</span>  }</div><div class="line"><a name="l01962"></a><span class="lineno"> 1962</span>  <span class="keywordtype">void</span> AddMissingProperty(<span class="keyword">const</span> SValue& name) {</div><div class="line"><a name="l01963"></a><span class="lineno"> 1963</span>  currentError_.PushBack(ValueType(name, GetStateAllocator()).Move(), GetStateAllocator());</div><div class="line"><a name="l01964"></a><span class="lineno"> 1964</span>  }</div><div class="line"><a name="l01965"></a><span class="lineno"> 1965</span>  <span class="keywordtype">bool</span> EndMissingProperties() {</div><div class="line"><a name="l01966"></a><span class="lineno"> 1966</span>  <span class="keywordflow">if</span> (currentError_.Empty())</div><div class="line"><a name="l01967"></a><span class="lineno"> 1967</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01968"></a><span class="lineno"> 1968</span>  ValueType error(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4acf030b422a32c3647c7c5973bd4dd0a9">kObjectType</a>);</div><div class="line"><a name="l01969"></a><span class="lineno"> 1969</span>  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>  currentError_ = error;</div><div class="line"><a name="l01971"></a><span class="lineno"> 1971</span>  AddCurrentError(SchemaType::GetRequiredString());</div><div class="line"><a name="l01972"></a><span class="lineno"> 1972</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l01973"></a><span class="lineno"> 1973</span>  }</div><div class="line"><a name="l01974"></a><span class="lineno"> 1974</span>  <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>  <span class="keywordflow">for</span> (<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> i = 0; i < count; ++i)</div><div class="line"><a name="l01976"></a><span class="lineno"> 1976</span>  MergeError(static_cast<GenericSchemaValidator*>(subvalidators[i])->GetError());</div><div class="line"><a name="l01977"></a><span class="lineno"> 1977</span>  }</div><div class="line"><a name="l01978"></a><span class="lineno"> 1978</span>  <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>  currentError_.SetObject();</div><div class="line"><a name="l01980"></a><span class="lineno"> 1980</span>  currentError_.AddMember(GetDisallowedString(), ValueType(name, length, GetStateAllocator()).Move(), GetStateAllocator());</div><div class="line"><a name="l01981"></a><span class="lineno"> 1981</span>  AddCurrentError(SchemaType::GetAdditionalPropertiesString(), <span class="keyword">true</span>);</div><div class="line"><a name="l01982"></a><span class="lineno"> 1982</span>  }</div><div class="line"><a name="l01983"></a><span class="lineno"> 1983</span> </div><div class="line"><a name="l01984"></a><span class="lineno"> 1984</span>  <span class="keywordtype">void</span> StartDependencyErrors() {</div><div class="line"><a name="l01985"></a><span class="lineno"> 1985</span>  currentError_.SetObject();</div><div class="line"><a name="l01986"></a><span class="lineno"> 1986</span>  }</div><div class="line"><a name="l01987"></a><span class="lineno"> 1987</span>  <span class="keywordtype">void</span> StartMissingDependentProperties() {</div><div class="line"><a name="l01988"></a><span class="lineno"> 1988</span>  missingDependents_.SetArray();</div><div class="line"><a name="l01989"></a><span class="lineno"> 1989</span>  }</div><div class="line"><a name="l01990"></a><span class="lineno"> 1990</span>  <span class="keywordtype">void</span> AddMissingDependentProperty(<span class="keyword">const</span> SValue& targetName) {</div><div class="line"><a name="l01991"></a><span class="lineno"> 1991</span>  missingDependents_.PushBack(ValueType(targetName, GetStateAllocator()).Move(), GetStateAllocator());</div><div class="line"><a name="l01992"></a><span class="lineno"> 1992</span>  }</div><div class="line"><a name="l01993"></a><span class="lineno"> 1993</span>  <span class="keywordtype">void</span> EndMissingDependentProperties(<span class="keyword">const</span> SValue& sourceName) {</div><div class="line"><a name="l01994"></a><span class="lineno"> 1994</span>  <span class="keywordflow">if</span> (!missingDependents_.Empty())</div><div class="line"><a name="l01995"></a><span class="lineno"> 1995</span>  currentError_.AddMember(ValueType(sourceName, GetStateAllocator()).Move(),</div><div class="line"><a name="l01996"></a><span class="lineno"> 1996</span>  missingDependents_, GetStateAllocator());</div><div class="line"><a name="l01997"></a><span class="lineno"> 1997</span>  }</div><div class="line"><a name="l01998"></a><span class="lineno"> 1998</span>  <span class="keywordtype">void</span> AddDependencySchemaError(<span class="keyword">const</span> SValue& sourceName, ISchemaValidator* subvalidator) {</div><div class="line"><a name="l01999"></a><span class="lineno"> 1999</span>  currentError_.AddMember(ValueType(sourceName, GetStateAllocator()).Move(),</div><div class="line"><a name="l02000"></a><span class="lineno"> 2000</span>  static_cast<GenericSchemaValidator*>(subvalidator)->GetError(), GetStateAllocator());</div><div class="line"><a name="l02001"></a><span class="lineno"> 2001</span>  }</div><div class="line"><a name="l02002"></a><span class="lineno"> 2002</span>  <span class="keywordtype">bool</span> EndDependencyErrors() {</div><div class="line"><a name="l02003"></a><span class="lineno"> 2003</span>  <span class="keywordflow">if</span> (currentError_.ObjectEmpty())</div><div class="line"><a name="l02004"></a><span class="lineno"> 2004</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l02005"></a><span class="lineno"> 2005</span>  ValueType error(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4acf030b422a32c3647c7c5973bd4dd0a9">kObjectType</a>);</div><div class="line"><a name="l02006"></a><span class="lineno"> 2006</span>  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>  currentError_ = error;</div><div class="line"><a name="l02008"></a><span class="lineno"> 2008</span>  AddCurrentError(SchemaType::GetDependenciesString());</div><div class="line"><a name="l02009"></a><span class="lineno"> 2009</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l02010"></a><span class="lineno"> 2010</span>  }</div><div class="line"><a name="l02011"></a><span class="lineno"> 2011</span> </div><div class="line"><a name="l02012"></a><span class="lineno"> 2012</span>  <span class="keywordtype">void</span> DisallowedValue() {</div><div class="line"><a name="l02013"></a><span class="lineno"> 2013</span>  currentError_.SetObject();</div><div class="line"><a name="l02014"></a><span class="lineno"> 2014</span>  AddCurrentError(SchemaType::GetEnumString());</div><div class="line"><a name="l02015"></a><span class="lineno"> 2015</span>  }</div><div class="line"><a name="l02016"></a><span class="lineno"> 2016</span>  <span class="keywordtype">void</span> StartDisallowedType() {</div><div class="line"><a name="l02017"></a><span class="lineno"> 2017</span>  currentError_.SetArray();</div><div class="line"><a name="l02018"></a><span class="lineno"> 2018</span>  }</div><div class="line"><a name="l02019"></a><span class="lineno"> 2019</span>  <span class="keywordtype">void</span> AddExpectedType(<span class="keyword">const</span> <span class="keyword">typename</span> SchemaType::ValueType& expectedType) {</div><div class="line"><a name="l02020"></a><span class="lineno"> 2020</span>  currentError_.PushBack(ValueType(expectedType, GetStateAllocator()).Move(), GetStateAllocator());</div><div class="line"><a name="l02021"></a><span class="lineno"> 2021</span>  }</div><div class="line"><a name="l02022"></a><span class="lineno"> 2022</span>  <span class="keywordtype">void</span> EndDisallowedType(<span class="keyword">const</span> <span class="keyword">typename</span> SchemaType::ValueType& actualType) {</div><div class="line"><a name="l02023"></a><span class="lineno"> 2023</span>  ValueType error(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4acf030b422a32c3647c7c5973bd4dd0a9">kObjectType</a>);</div><div class="line"><a name="l02024"></a><span class="lineno"> 2024</span>  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>  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>  currentError_ = error;</div><div class="line"><a name="l02027"></a><span class="lineno"> 2027</span>  AddCurrentError(SchemaType::GetTypeString());</div><div class="line"><a name="l02028"></a><span class="lineno"> 2028</span>  }</div><div class="line"><a name="l02029"></a><span class="lineno"> 2029</span>  <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>  <span class="keywordflow">for</span> (<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> i = 0; i < count; ++i) {</div><div class="line"><a name="l02031"></a><span class="lineno"> 2031</span>  MergeError(static_cast<GenericSchemaValidator*>(subvalidators[i])->GetError());</div><div class="line"><a name="l02032"></a><span class="lineno"> 2032</span>  }</div><div class="line"><a name="l02033"></a><span class="lineno"> 2033</span>  }</div><div class="line"><a name="l02034"></a><span class="lineno"> 2034</span>  <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>  AddErrorArray(SchemaType::GetAnyOfString(), subvalidators, count);</div><div class="line"><a name="l02036"></a><span class="lineno"> 2036</span>  }</div><div class="line"><a name="l02037"></a><span class="lineno"> 2037</span>  <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>  AddErrorArray(SchemaType::GetOneOfString(), subvalidators, count);</div><div class="line"><a name="l02039"></a><span class="lineno"> 2039</span>  }</div><div class="line"><a name="l02040"></a><span class="lineno"> 2040</span>  <span class="keywordtype">void</span> Disallowed() {</div><div class="line"><a name="l02041"></a><span class="lineno"> 2041</span>  currentError_.SetObject();</div><div class="line"><a name="l02042"></a><span class="lineno"> 2042</span>  AddCurrentError(SchemaType::GetNotString());</div><div class="line"><a name="l02043"></a><span class="lineno"> 2043</span>  }</div><div class="line"><a name="l02044"></a><span class="lineno"> 2044</span> </div><div class="line"><a name="l02045"></a><span class="lineno"> 2045</span> <span class="preprocessor">#define RAPIDJSON_STRING_(name, ...) \</span></div><div class="line"><a name="l02046"></a><span class="lineno"> 2046</span> <span class="preprocessor"> static const StringRefType& Get##name##String() {\</span></div><div class="line"><a name="l02047"></a><span class="lineno"> 2047</span> <span class="preprocessor"> static const Ch s[] = { __VA_ARGS__, '\0' };\</span></div><div class="line"><a name="l02048"></a><span class="lineno"> 2048</span> <span class="preprocessor"> static const StringRefType v(s, static_cast<SizeType>(sizeof(s) / sizeof(Ch) - 1)); \</span></div><div class="line"><a name="l02049"></a><span class="lineno"> 2049</span> <span class="preprocessor"> return v;\</span></div><div class="line"><a name="l02050"></a><span class="lineno"> 2050</span> <span class="preprocessor"> }</span></div><div class="line"><a name="l02051"></a><span class="lineno"> 2051</span> </div><div class="line"><a name="l02052"></a><span class="lineno"> 2052</span>  RAPIDJSON_STRING_(InstanceRef, <span class="charliteral">'i'</span>, <span class="charliteral">'n'</span>, <span class="charliteral">'s'</span>, <span class="charliteral">'t'</span>, <span class="charliteral">'a'</span>, <span class="charliteral">'n'</span>, <span class="charliteral">'c'</span>, <span class="charliteral">'e'</span>, <span class="charliteral">'R'</span>, <span class="charliteral">'e'</span>, <span class="charliteral">'f'</span>)</div><div class="line"><a name="l02053"></a><span class="lineno"> 2053</span>  RAPIDJSON_STRING_(SchemaRef, <span class="charliteral">'s'</span>, <span class="charliteral">'c'</span>, <span class="charliteral">'h'</span>, <span class="charliteral">'e'</span>, <span class="charliteral">'m'</span>, <span class="charliteral">'a'</span>, <span class="charliteral">'R'</span>, <span class="charliteral">'e'</span>, <span class="charliteral">'f'</span>)</div><div class="line"><a name="l02054"></a><span class="lineno"> 2054</span>  RAPIDJSON_STRING_(Expected, <span class="charliteral">'e'</span>, <span class="charliteral">'x'</span>, <span class="charliteral">'p'</span>, <span class="charliteral">'e'</span>, <span class="charliteral">'c'</span>, <span class="charliteral">'t'</span>, <span class="charliteral">'e'</span>, <span class="charliteral">'d'</span>)</div><div class="line"><a name="l02055"></a><span class="lineno"> 2055</span>  RAPIDJSON_STRING_(Actual, <span class="charliteral">'a'</span>, <span class="charliteral">'c'</span>, <span class="charliteral">'t'</span>, <span class="charliteral">'u'</span>, <span class="charliteral">'a'</span>, <span class="charliteral">'l'</span>)</div><div class="line"><a name="l02056"></a><span class="lineno"> 2056</span>  RAPIDJSON_STRING_(Disallowed, <span class="charliteral">'d'</span>, <span class="charliteral">'i'</span>, <span class="charliteral">'s'</span>, <span class="charliteral">'a'</span>, <span class="charliteral">'l'</span>, <span class="charliteral">'l'</span>, <span class="charliteral">'o'</span>, <span class="charliteral">'w'</span>, <span class="charliteral">'e'</span>, <span class="charliteral">'d'</span>)</div><div class="line"><a name="l02057"></a><span class="lineno"> 2057</span>  RAPIDJSON_STRING_(Missing, <span class="charliteral">'m'</span>, <span class="charliteral">'i'</span>, <span class="charliteral">'s'</span>, <span class="charliteral">'s'</span>, <span class="charliteral">'i'</span>, <span class="charliteral">'n'</span>, <span class="charliteral">'g'</span>)</div><div class="line"><a name="l02058"></a><span class="lineno"> 2058</span>  RAPIDJSON_STRING_(Errors, <span class="charliteral">'e'</span>, <span class="charliteral">'r'</span>, <span class="charliteral">'r'</span>, <span class="charliteral">'o'</span>, <span class="charliteral">'r'</span>, <span class="charliteral">'s'</span>)</div><div class="line"><a name="l02059"></a><span class="lineno"> 2059</span>  RAPIDJSON_STRING_(Duplicates, <span class="charliteral">'d'</span>, <span class="charliteral">'u'</span>, <span class="charliteral">'p'</span>, <span class="charliteral">'l'</span>, <span class="charliteral">'i'</span>, <span class="charliteral">'c'</span>, <span class="charliteral">'a'</span>, <span class="charliteral">'t'</span>, <span class="charliteral">'e'</span>, <span class="charliteral">'s'</span>)</div><div class="line"><a name="l02060"></a><span class="lineno"> 2060</span> </div><div class="line"><a name="l02061"></a><span class="lineno"> 2061</span> <span class="preprocessor">#undef RAPIDJSON_STRING_</span></div><div class="line"><a name="l02062"></a><span class="lineno"> 2062</span> </div><div class="line"><a name="l02063"></a><span class="lineno"> 2063</span> <span class="preprocessor">#if RAPIDJSON_SCHEMA_VERBOSE</span></div><div class="line"><a name="l02064"></a><span class="lineno"> 2064</span> <span class="preprocessor">#define RAPIDJSON_SCHEMA_HANDLE_BEGIN_VERBOSE_() \</span></div><div class="line"><a name="l02065"></a><span class="lineno"> 2065</span> <span class="preprocessor">RAPIDJSON_MULTILINEMACRO_BEGIN\</span></div><div class="line"><a name="l02066"></a><span class="lineno"> 2066</span> <span class="preprocessor"> *documentStack_.template Push<Ch>() = '\0';\</span></div><div class="line"><a name="l02067"></a><span class="lineno"> 2067</span> <span class="preprocessor"> documentStack_.template Pop<Ch>(1);\</span></div><div class="line"><a name="l02068"></a><span class="lineno"> 2068</span> <span class="preprocessor"> internal::PrintInvalidDocument(documentStack_.template Bottom<Ch>());\</span></div><div class="line"><a name="l02069"></a><span class="lineno"> 2069</span> <span class="preprocessor">RAPIDJSON_MULTILINEMACRO_END</span></div><div class="line"><a name="l02070"></a><span class="lineno"> 2070</span> <span class="preprocessor">#else</span></div><div class="line"><a name="l02071"></a><span class="lineno"> 2071</span> <span class="preprocessor">#define RAPIDJSON_SCHEMA_HANDLE_BEGIN_VERBOSE_()</span></div><div class="line"><a name="l02072"></a><span class="lineno"> 2072</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l02073"></a><span class="lineno"> 2073</span> </div><div class="line"><a name="l02074"></a><span class="lineno"> 2074</span> <span class="preprocessor">#define RAPIDJSON_SCHEMA_HANDLE_BEGIN_(method, arg1)\</span></div><div class="line"><a name="l02075"></a><span class="lineno"> 2075</span> <span class="preprocessor"> if (!valid_) return false; \</span></div><div class="line"><a name="l02076"></a><span class="lineno"> 2076</span> <span class="preprocessor"> if (!BeginValue() || !CurrentSchema().method arg1) {\</span></div><div class="line"><a name="l02077"></a><span class="lineno"> 2077</span> <span class="preprocessor"> RAPIDJSON_SCHEMA_HANDLE_BEGIN_VERBOSE_();\</span></div><div class="line"><a name="l02078"></a><span class="lineno"> 2078</span> <span class="preprocessor"> return valid_ = false;\</span></div><div class="line"><a name="l02079"></a><span class="lineno"> 2079</span> <span class="preprocessor"> }</span></div><div class="line"><a name="l02080"></a><span class="lineno"> 2080</span> </div><div class="line"><a name="l02081"></a><span class="lineno"> 2081</span> <span class="preprocessor">#define RAPIDJSON_SCHEMA_HANDLE_PARALLEL_(method, arg2)\</span></div><div class="line"><a name="l02082"></a><span class="lineno"> 2082</span> <span class="preprocessor"> for (Context* context = schemaStack_.template Bottom<Context>(); context != schemaStack_.template End<Context>(); context++) {\</span></div><div class="line"><a name="l02083"></a><span class="lineno"> 2083</span> <span class="preprocessor"> if (context->hasher)\</span></div><div class="line"><a name="l02084"></a><span class="lineno"> 2084</span> <span class="preprocessor"> static_cast<HasherType*>(context->hasher)->method arg2;\</span></div><div class="line"><a name="l02085"></a><span class="lineno"> 2085</span> <span class="preprocessor"> if (context->validators)\</span></div><div class="line"><a name="l02086"></a><span class="lineno"> 2086</span> <span class="preprocessor"> for (SizeType i_ = 0; i_ < context->validatorCount; i_++)\</span></div><div class="line"><a name="l02087"></a><span class="lineno"> 2087</span> <span class="preprocessor"> static_cast<GenericSchemaValidator*>(context->validators[i_])->method arg2;\</span></div><div class="line"><a name="l02088"></a><span class="lineno"> 2088</span> <span class="preprocessor"> if (context->patternPropertiesValidators)\</span></div><div class="line"><a name="l02089"></a><span class="lineno"> 2089</span> <span class="preprocessor"> for (SizeType i_ = 0; i_ < context->patternPropertiesValidatorCount; i_++)\</span></div><div class="line"><a name="l02090"></a><span class="lineno"> 2090</span> <span class="preprocessor"> static_cast<GenericSchemaValidator*>(context->patternPropertiesValidators[i_])->method arg2;\</span></div><div class="line"><a name="l02091"></a><span class="lineno"> 2091</span> <span class="preprocessor"> }</span></div><div class="line"><a name="l02092"></a><span class="lineno"> 2092</span> </div><div class="line"><a name="l02093"></a><span class="lineno"> 2093</span> <span class="preprocessor">#define RAPIDJSON_SCHEMA_HANDLE_END_(method, arg2)\</span></div><div class="line"><a name="l02094"></a><span class="lineno"> 2094</span> <span class="preprocessor"> return valid_ = EndValue() && (!outputHandler_ || outputHandler_->method arg2)</span></div><div class="line"><a name="l02095"></a><span class="lineno"> 2095</span> </div><div class="line"><a name="l02096"></a><span class="lineno"> 2096</span> <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> <span class="preprocessor"> RAPIDJSON_SCHEMA_HANDLE_BEGIN_ (method, arg1);\</span></div><div class="line"><a name="l02098"></a><span class="lineno"> 2098</span> <span class="preprocessor"> RAPIDJSON_SCHEMA_HANDLE_PARALLEL_(method, arg2);\</span></div><div class="line"><a name="l02099"></a><span class="lineno"> 2099</span> <span class="preprocessor"> RAPIDJSON_SCHEMA_HANDLE_END_ (method, arg2)</span></div><div class="line"><a name="l02100"></a><span class="lineno"> 2100</span> </div><div class="line"><a name="l02101"></a><span class="lineno"> 2101</span>  <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>  <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>  <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>  <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>  <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>  <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>  <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>  <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>  { 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>  <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>  { 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> </div><div class="line"><a name="l02113"></a><span class="lineno"> 2113</span>  <span class="keywordtype">bool</span> StartObject() {</div><div class="line"><a name="l02114"></a><span class="lineno"> 2114</span>  RAPIDJSON_SCHEMA_HANDLE_BEGIN_(StartObject, (CurrentContext()));</div><div class="line"><a name="l02115"></a><span class="lineno"> 2115</span>  RAPIDJSON_SCHEMA_HANDLE_PARALLEL_(StartObject, ());</div><div class="line"><a name="l02116"></a><span class="lineno"> 2116</span>  <span class="keywordflow">return</span> valid_ = !outputHandler_ || outputHandler_->StartObject();</div><div class="line"><a name="l02117"></a><span class="lineno"> 2117</span>  }</div><div class="line"><a name="l02118"></a><span class="lineno"> 2118</span>  </div><div class="line"><a name="l02119"></a><span class="lineno"> 2119</span>  <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>  <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>  AppendToken(str, len);</div><div class="line"><a name="l02122"></a><span class="lineno"> 2122</span>  <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>  RAPIDJSON_SCHEMA_HANDLE_PARALLEL_(Key, (str, len, copy));</div><div class="line"><a name="l02124"></a><span class="lineno"> 2124</span>  <span class="keywordflow">return</span> valid_ = !outputHandler_ || outputHandler_->Key(str, len, copy);</div><div class="line"><a name="l02125"></a><span class="lineno"> 2125</span>  }</div><div class="line"><a name="l02126"></a><span class="lineno"> 2126</span>  </div><div class="line"><a name="l02127"></a><span class="lineno"> 2127</span>  <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>  <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>  RAPIDJSON_SCHEMA_HANDLE_PARALLEL_(EndObject, (memberCount));</div><div class="line"><a name="l02130"></a><span class="lineno"> 2130</span>  <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>  RAPIDJSON_SCHEMA_HANDLE_END_(EndObject, (memberCount));</div><div class="line"><a name="l02132"></a><span class="lineno"> 2132</span>  }</div><div class="line"><a name="l02133"></a><span class="lineno"> 2133</span> </div><div class="line"><a name="l02134"></a><span class="lineno"> 2134</span>  <span class="keywordtype">bool</span> StartArray() {</div><div class="line"><a name="l02135"></a><span class="lineno"> 2135</span>  RAPIDJSON_SCHEMA_HANDLE_BEGIN_(StartArray, (CurrentContext()));</div><div class="line"><a name="l02136"></a><span class="lineno"> 2136</span>  RAPIDJSON_SCHEMA_HANDLE_PARALLEL_(StartArray, ());</div><div class="line"><a name="l02137"></a><span class="lineno"> 2137</span>  <span class="keywordflow">return</span> valid_ = !outputHandler_ || outputHandler_->StartArray();</div><div class="line"><a name="l02138"></a><span class="lineno"> 2138</span>  }</div><div class="line"><a name="l02139"></a><span class="lineno"> 2139</span>  </div><div class="line"><a name="l02140"></a><span class="lineno"> 2140</span>  <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>  <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>  RAPIDJSON_SCHEMA_HANDLE_PARALLEL_(EndArray, (elementCount));</div><div class="line"><a name="l02143"></a><span class="lineno"> 2143</span>  <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>  RAPIDJSON_SCHEMA_HANDLE_END_(EndArray, (elementCount));</div><div class="line"><a name="l02145"></a><span class="lineno"> 2145</span>  }</div><div class="line"><a name="l02146"></a><span class="lineno"> 2146</span> </div><div class="line"><a name="l02147"></a><span class="lineno"> 2147</span> <span class="preprocessor">#undef RAPIDJSON_SCHEMA_HANDLE_BEGIN_VERBOSE_</span></div><div class="line"><a name="l02148"></a><span class="lineno"> 2148</span> <span class="preprocessor">#undef RAPIDJSON_SCHEMA_HANDLE_BEGIN_</span></div><div class="line"><a name="l02149"></a><span class="lineno"> 2149</span> <span class="preprocessor">#undef RAPIDJSON_SCHEMA_HANDLE_PARALLEL_</span></div><div class="line"><a name="l02150"></a><span class="lineno"> 2150</span> <span class="preprocessor">#undef RAPIDJSON_SCHEMA_HANDLE_VALUE_</span></div><div class="line"><a name="l02151"></a><span class="lineno"> 2151</span> </div><div class="line"><a name="l02152"></a><span class="lineno"> 2152</span>  <span class="comment">// Implementation of ISchemaStateFactory<SchemaType></span></div><div class="line"><a name="l02153"></a><span class="lineno"> 2153</span>  <span class="keyword">virtual</span> ISchemaValidator* CreateSchemaValidator(<span class="keyword">const</span> SchemaType& root) {</div><div class="line"><a name="l02154"></a><span class="lineno"> 2154</span>  <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<char>(), documentStack_.GetSize(),</div><div class="line"><a name="l02155"></a><span class="lineno"> 2155</span> <span class="preprocessor">#if RAPIDJSON_SCHEMA_VERBOSE</span></div><div class="line"><a name="l02156"></a><span class="lineno"> 2156</span>  depth_ + 1,</div><div class="line"><a name="l02157"></a><span class="lineno"> 2157</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l02158"></a><span class="lineno"> 2158</span>  &GetStateAllocator());</div><div class="line"><a name="l02159"></a><span class="lineno"> 2159</span>  }</div><div class="line"><a name="l02160"></a><span class="lineno"> 2160</span> </div><div class="line"><a name="l02161"></a><span class="lineno"> 2161</span>  <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>  <a class="code" href="classrapidjson_1_1_generic_schema_validator.html">GenericSchemaValidator</a>* v = <span class="keyword">static_cast<</span><a class="code" href="classrapidjson_1_1_generic_schema_validator.html">GenericSchemaValidator</a>*<span class="keyword">></span>(validator);</div><div class="line"><a name="l02163"></a><span class="lineno"> 2163</span>  v-><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>  StateAllocator::Free(v);</div><div class="line"><a name="l02165"></a><span class="lineno"> 2165</span>  }</div><div class="line"><a name="l02166"></a><span class="lineno"> 2166</span> </div><div class="line"><a name="l02167"></a><span class="lineno"> 2167</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span>* CreateHasher() {</div><div class="line"><a name="l02168"></a><span class="lineno"> 2168</span>  <span class="keywordflow">return</span> <span class="keyword">new</span> (GetStateAllocator().Malloc(<span class="keyword">sizeof</span>(HasherType))) HasherType(&GetStateAllocator());</div><div class="line"><a name="l02169"></a><span class="lineno"> 2169</span>  }</div><div class="line"><a name="l02170"></a><span class="lineno"> 2170</span> </div><div class="line"><a name="l02171"></a><span class="lineno"> 2171</span>  <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>  <span class="keywordflow">return</span> <span class="keyword">static_cast<</span>HasherType*<span class="keyword">></span>(hasher)->GetHashCode();</div><div class="line"><a name="l02173"></a><span class="lineno"> 2173</span>  }</div><div class="line"><a name="l02174"></a><span class="lineno"> 2174</span> </div><div class="line"><a name="l02175"></a><span class="lineno"> 2175</span>  <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>  HasherType* h = <span class="keyword">static_cast<</span>HasherType*<span class="keyword">></span>(hasher);</div><div class="line"><a name="l02177"></a><span class="lineno"> 2177</span>  h->~HasherType();</div><div class="line"><a name="l02178"></a><span class="lineno"> 2178</span>  StateAllocator::Free(h);</div><div class="line"><a name="l02179"></a><span class="lineno"> 2179</span>  }</div><div class="line"><a name="l02180"></a><span class="lineno"> 2180</span> </div><div class="line"><a name="l02181"></a><span class="lineno"> 2181</span>  <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>  <span class="keywordflow">return</span> GetStateAllocator().Malloc(size);</div><div class="line"><a name="l02183"></a><span class="lineno"> 2183</span>  }</div><div class="line"><a name="l02184"></a><span class="lineno"> 2184</span> </div><div class="line"><a name="l02185"></a><span class="lineno"> 2185</span>  <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>  StateAllocator::Free(p);</div><div class="line"><a name="l02187"></a><span class="lineno"> 2187</span>  }</div><div class="line"><a name="l02188"></a><span class="lineno"> 2188</span> </div><div class="line"><a name="l02189"></a><span class="lineno"> 2189</span> <span class="keyword">private</span>:</div><div class="line"><a name="l02190"></a><span class="lineno"> 2190</span>  <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>  <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue<UTF8<></a>, StateAllocator> <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>  <span class="keyword">typedef</span> internal::Hasher<EncodingType, StateAllocator> HasherType;</div><div class="line"><a name="l02193"></a><span class="lineno"> 2193</span> </div><div class="line"><a name="l02194"></a><span class="lineno"> 2194</span>  <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>  <span class="keyword">const</span> SchemaDocumentType& schemaDocument,</div><div class="line"><a name="l02196"></a><span class="lineno"> 2196</span>  <span class="keyword">const</span> SchemaType& root,</div><div class="line"><a name="l02197"></a><span class="lineno"> 2197</span>  <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> #<span class="keywordflow">if</span> RAPIDJSON_SCHEMA_VERBOSE</div><div class="line"><a name="l02199"></a><span class="lineno"> 2199</span>  <span class="keywordtype">unsigned</span> depth,</div><div class="line"><a name="l02200"></a><span class="lineno"> 2200</span> #endif</div><div class="line"><a name="l02201"></a><span class="lineno"> 2201</span>  StateAllocator* allocator = 0,</div><div class="line"><a name="l02202"></a><span class="lineno"> 2202</span>  <span class="keywordtype">size_t</span> schemaStackCapacity = kDefaultSchemaStackCapacity,</div><div class="line"><a name="l02203"></a><span class="lineno"> 2203</span>  <span class="keywordtype">size_t</span> documentStackCapacity = kDefaultDocumentStackCapacity)</div><div class="line"><a name="l02204"></a><span class="lineno"> 2204</span>  :</div><div class="line"><a name="l02205"></a><span class="lineno"> 2205</span>  schemaDocument_(&schemaDocument),</div><div class="line"><a name="l02206"></a><span class="lineno"> 2206</span>  root_(root),</div><div class="line"><a name="l02207"></a><span class="lineno"> 2207</span>  stateAllocator_(allocator),</div><div class="line"><a name="l02208"></a><span class="lineno"> 2208</span>  ownStateAllocator_(0),</div><div class="line"><a name="l02209"></a><span class="lineno"> 2209</span>  schemaStack_(allocator, schemaStackCapacity),</div><div class="line"><a name="l02210"></a><span class="lineno"> 2210</span>  documentStack_(allocator, documentStackCapacity),</div><div class="line"><a name="l02211"></a><span class="lineno"> 2211</span>  outputHandler_(0),</div><div class="line"><a name="l02212"></a><span class="lineno"> 2212</span>  error_(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4acf030b422a32c3647c7c5973bd4dd0a9">kObjectType</a>),</div><div class="line"><a name="l02213"></a><span class="lineno"> 2213</span>  currentError_(),</div><div class="line"><a name="l02214"></a><span class="lineno"> 2214</span>  missingDependents_(),</div><div class="line"><a name="l02215"></a><span class="lineno"> 2215</span>  valid_(<span class="keyword">true</span>)</div><div class="line"><a name="l02216"></a><span class="lineno"> 2216</span> <span class="preprocessor">#if RAPIDJSON_SCHEMA_VERBOSE</span></div><div class="line"><a name="l02217"></a><span class="lineno"> 2217</span>  , depth_(depth)</div><div class="line"><a name="l02218"></a><span class="lineno"> 2218</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l02219"></a><span class="lineno"> 2219</span>  {</div><div class="line"><a name="l02220"></a><span class="lineno"> 2220</span>  <span class="keywordflow">if</span> (basePath && basePathSize)</div><div class="line"><a name="l02221"></a><span class="lineno"> 2221</span>  memcpy(documentStack_.template Push<char>(basePathSize), basePath, basePathSize);</div><div class="line"><a name="l02222"></a><span class="lineno"> 2222</span>  }</div><div class="line"><a name="l02223"></a><span class="lineno"> 2223</span> </div><div class="line"><a name="l02224"></a><span class="lineno"> 2224</span>  StateAllocator& GetStateAllocator() {</div><div class="line"><a name="l02225"></a><span class="lineno"> 2225</span>  <span class="keywordflow">if</span> (!stateAllocator_)</div><div class="line"><a name="l02226"></a><span class="lineno"> 2226</span>  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>  <span class="keywordflow">return</span> *stateAllocator_;</div><div class="line"><a name="l02228"></a><span class="lineno"> 2228</span>  }</div><div class="line"><a name="l02229"></a><span class="lineno"> 2229</span> </div><div class="line"><a name="l02230"></a><span class="lineno"> 2230</span>  <span class="keywordtype">bool</span> BeginValue() {</div><div class="line"><a name="l02231"></a><span class="lineno"> 2231</span>  <span class="keywordflow">if</span> (schemaStack_.Empty())</div><div class="line"><a name="l02232"></a><span class="lineno"> 2232</span>  PushSchema(root_);</div><div class="line"><a name="l02233"></a><span class="lineno"> 2233</span>  <span class="keywordflow">else</span> {</div><div class="line"><a name="l02234"></a><span class="lineno"> 2234</span>  <span class="keywordflow">if</span> (CurrentContext().inArray)</div><div class="line"><a name="l02235"></a><span class="lineno"> 2235</span>  internal::TokenHelper<internal::Stack<StateAllocator>, Ch>::AppendIndexToken(documentStack_, CurrentContext().arrayElementIndex);</div><div class="line"><a name="l02236"></a><span class="lineno"> 2236</span> </div><div class="line"><a name="l02237"></a><span class="lineno"> 2237</span>  <span class="keywordflow">if</span> (!CurrentSchema().BeginValue(CurrentContext()))</div><div class="line"><a name="l02238"></a><span class="lineno"> 2238</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l02239"></a><span class="lineno"> 2239</span> </div><div class="line"><a name="l02240"></a><span class="lineno"> 2240</span>  <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>  <span class="keyword">const</span> SchemaType** sa = CurrentContext().patternPropertiesSchemas;</div><div class="line"><a name="l02242"></a><span class="lineno"> 2242</span>  <span class="keyword">typename</span> Context::PatternValidatorType patternValidatorType = CurrentContext().valuePatternValidatorType;</div><div class="line"><a name="l02243"></a><span class="lineno"> 2243</span>  <span class="keywordtype">bool</span> valueUniqueness = CurrentContext().valueUniqueness;</div><div class="line"><a name="l02244"></a><span class="lineno"> 2244</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>(CurrentContext().valueSchema);</div><div class="line"><a name="l02245"></a><span class="lineno"> 2245</span>  PushSchema(*CurrentContext().valueSchema);</div><div class="line"><a name="l02246"></a><span class="lineno"> 2246</span> </div><div class="line"><a name="l02247"></a><span class="lineno"> 2247</span>  <span class="keywordflow">if</span> (count > 0) {</div><div class="line"><a name="l02248"></a><span class="lineno"> 2248</span>  CurrentContext().objectPatternValidatorType = patternValidatorType;</div><div class="line"><a name="l02249"></a><span class="lineno"> 2249</span>  ISchemaValidator**& va = CurrentContext().patternPropertiesValidators;</div><div class="line"><a name="l02250"></a><span class="lineno"> 2250</span>  <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a>& validatorCount = CurrentContext().patternPropertiesValidatorCount;</div><div class="line"><a name="l02251"></a><span class="lineno"> 2251</span>  va = <span class="keyword">static_cast<</span>ISchemaValidator**<span class="keyword">></span>(MallocState(<span class="keyword">sizeof</span>(ISchemaValidator*) * count));</div><div class="line"><a name="l02252"></a><span class="lineno"> 2252</span>  <span class="keywordflow">for</span> (<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> i = 0; i < count; i++)</div><div class="line"><a name="l02253"></a><span class="lineno"> 2253</span>  va[validatorCount++] = CreateSchemaValidator(*sa[i]);</div><div class="line"><a name="l02254"></a><span class="lineno"> 2254</span>  }</div><div class="line"><a name="l02255"></a><span class="lineno"> 2255</span> </div><div class="line"><a name="l02256"></a><span class="lineno"> 2256</span>  CurrentContext().arrayUniqueness = valueUniqueness;</div><div class="line"><a name="l02257"></a><span class="lineno"> 2257</span>  }</div><div class="line"><a name="l02258"></a><span class="lineno"> 2258</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l02259"></a><span class="lineno"> 2259</span>  }</div><div class="line"><a name="l02260"></a><span class="lineno"> 2260</span> </div><div class="line"><a name="l02261"></a><span class="lineno"> 2261</span>  <span class="keywordtype">bool</span> EndValue() {</div><div class="line"><a name="l02262"></a><span class="lineno"> 2262</span>  <span class="keywordflow">if</span> (!CurrentSchema().EndValue(CurrentContext()))</div><div class="line"><a name="l02263"></a><span class="lineno"> 2263</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l02264"></a><span class="lineno"> 2264</span> </div><div class="line"><a name="l02265"></a><span class="lineno"> 2265</span> <span class="preprocessor">#if RAPIDJSON_SCHEMA_VERBOSE</span></div><div class="line"><a name="l02266"></a><span class="lineno"> 2266</span>  <a class="code" href="classrapidjson_1_1_generic_string_buffer.html">GenericStringBuffer<EncodingType></a> sb;</div><div class="line"><a name="l02267"></a><span class="lineno"> 2267</span>  schemaDocument_->GetPointer(&CurrentSchema()).Stringify(sb);</div><div class="line"><a name="l02268"></a><span class="lineno"> 2268</span> </div><div class="line"><a name="l02269"></a><span class="lineno"> 2269</span>  *documentStack_.template Push<Ch>() = <span class="charliteral">'\0'</span>;</div><div class="line"><a name="l02270"></a><span class="lineno"> 2270</span>  documentStack_.template Pop<Ch>(1);</div><div class="line"><a name="l02271"></a><span class="lineno"> 2271</span>  internal::PrintValidatorPointers(depth_, sb.GetString(), documentStack_.template Bottom<Ch>());</div><div class="line"><a name="l02272"></a><span class="lineno"> 2272</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l02273"></a><span class="lineno"> 2273</span> </div><div class="line"><a name="l02274"></a><span class="lineno"> 2274</span>  uint64_t h = CurrentContext().arrayUniqueness ? <span class="keyword">static_cast<</span>HasherType*<span class="keyword">></span>(CurrentContext().hasher)->GetHashCode() : 0;</div><div class="line"><a name="l02275"></a><span class="lineno"> 2275</span>  </div><div class="line"><a name="l02276"></a><span class="lineno"> 2276</span>  PopSchema();</div><div class="line"><a name="l02277"></a><span class="lineno"> 2277</span> </div><div class="line"><a name="l02278"></a><span class="lineno"> 2278</span>  <span class="keywordflow">if</span> (!schemaStack_.Empty()) {</div><div class="line"><a name="l02279"></a><span class="lineno"> 2279</span>  Context& context = CurrentContext();</div><div class="line"><a name="l02280"></a><span class="lineno"> 2280</span>  <span class="keywordflow">if</span> (context.valueUniqueness) {</div><div class="line"><a name="l02281"></a><span class="lineno"> 2281</span>  HashCodeArray* a = <span class="keyword">static_cast<</span>HashCodeArray*<span class="keyword">></span>(context.arrayElementHashCodes);</div><div class="line"><a name="l02282"></a><span class="lineno"> 2282</span>  <span class="keywordflow">if</span> (!a)</div><div class="line"><a name="l02283"></a><span class="lineno"> 2283</span>  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>  <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-><a class="code" href="classrapidjson_1_1_generic_value.html#a8d1040c479d89edb261db86400ebe603">Begin</a>(); itr != a-><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>  <span class="keywordflow">if</span> (itr->GetUint64() == h) {</div><div class="line"><a name="l02286"></a><span class="lineno"> 2286</span>  DuplicateItems(static_cast<SizeType>(itr - a-><a class="code" href="classrapidjson_1_1_generic_value.html#a8d1040c479d89edb261db86400ebe603">Begin</a>()), a-><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>  RAPIDJSON_INVALID_KEYWORD_RETURN(SchemaType::GetUniqueItemsString());</div><div class="line"><a name="l02288"></a><span class="lineno"> 2288</span>  }</div><div class="line"><a name="l02289"></a><span class="lineno"> 2289</span>  a-><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>  }</div><div class="line"><a name="l02291"></a><span class="lineno"> 2291</span>  }</div><div class="line"><a name="l02292"></a><span class="lineno"> 2292</span> </div><div class="line"><a name="l02293"></a><span class="lineno"> 2293</span>  <span class="comment">// Remove the last token of document pointer</span></div><div class="line"><a name="l02294"></a><span class="lineno"> 2294</span>  <span class="keywordflow">while</span> (!documentStack_.Empty() && *documentStack_.template Pop<Ch>(1) != <span class="charliteral">'/'</span>)</div><div class="line"><a name="l02295"></a><span class="lineno"> 2295</span>  ;</div><div class="line"><a name="l02296"></a><span class="lineno"> 2296</span> </div><div class="line"><a name="l02297"></a><span class="lineno"> 2297</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l02298"></a><span class="lineno"> 2298</span>  }</div><div class="line"><a name="l02299"></a><span class="lineno"> 2299</span> </div><div class="line"><a name="l02300"></a><span class="lineno"> 2300</span>  <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>  documentStack_.template Reserve<Ch>(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>  *documentStack_.template PushUnsafe<Ch>() = <span class="charliteral">'/'</span>;</div><div class="line"><a name="l02303"></a><span class="lineno"> 2303</span>  <span class="keywordflow">for</span> (<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> i = 0; i < len; i++) {</div><div class="line"><a name="l02304"></a><span class="lineno"> 2304</span>  <span class="keywordflow">if</span> (str[i] == <span class="charliteral">'~'</span>) {</div><div class="line"><a name="l02305"></a><span class="lineno"> 2305</span>  *documentStack_.template PushUnsafe<Ch>() = <span class="charliteral">'~'</span>;</div><div class="line"><a name="l02306"></a><span class="lineno"> 2306</span>  *documentStack_.template PushUnsafe<Ch>() = <span class="charliteral">'0'</span>;</div><div class="line"><a name="l02307"></a><span class="lineno"> 2307</span>  }</div><div class="line"><a name="l02308"></a><span class="lineno"> 2308</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (str[i] == <span class="charliteral">'/'</span>) {</div><div class="line"><a name="l02309"></a><span class="lineno"> 2309</span>  *documentStack_.template PushUnsafe<Ch>() = <span class="charliteral">'~'</span>;</div><div class="line"><a name="l02310"></a><span class="lineno"> 2310</span>  *documentStack_.template PushUnsafe<Ch>() = <span class="charliteral">'1'</span>;</div><div class="line"><a name="l02311"></a><span class="lineno"> 2311</span>  }</div><div class="line"><a name="l02312"></a><span class="lineno"> 2312</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l02313"></a><span class="lineno"> 2313</span>  *documentStack_.template PushUnsafe<Ch>() = str[i];</div><div class="line"><a name="l02314"></a><span class="lineno"> 2314</span>  }</div><div class="line"><a name="l02315"></a><span class="lineno"> 2315</span>  }</div><div class="line"><a name="l02316"></a><span class="lineno"> 2316</span> </div><div class="line"><a name="l02317"></a><span class="lineno"> 2317</span>  RAPIDJSON_FORCEINLINE <span class="keywordtype">void</span> PushSchema(<span class="keyword">const</span> SchemaType& schema) { <span class="keyword">new</span> (schemaStack_.template Push<Context>()) Context(*<span class="keyword">this</span>, *<span class="keyword">this</span>, &schema); }</div><div class="line"><a name="l02318"></a><span class="lineno"> 2318</span>  </div><div class="line"><a name="l02319"></a><span class="lineno"> 2319</span>  RAPIDJSON_FORCEINLINE <span class="keywordtype">void</span> PopSchema() {</div><div class="line"><a name="l02320"></a><span class="lineno"> 2320</span>  Context* c = schemaStack_.template Pop<Context>(1);</div><div class="line"><a name="l02321"></a><span class="lineno"> 2321</span>  <span class="keywordflow">if</span> (HashCodeArray* a = static_cast<HashCodeArray*>(c->arrayElementHashCodes)) {</div><div class="line"><a name="l02322"></a><span class="lineno"> 2322</span>  a->~HashCodeArray();</div><div class="line"><a name="l02323"></a><span class="lineno"> 2323</span>  StateAllocator::Free(a);</div><div class="line"><a name="l02324"></a><span class="lineno"> 2324</span>  }</div><div class="line"><a name="l02325"></a><span class="lineno"> 2325</span>  c->~Context();</div><div class="line"><a name="l02326"></a><span class="lineno"> 2326</span>  }</div><div class="line"><a name="l02327"></a><span class="lineno"> 2327</span> </div><div class="line"><a name="l02328"></a><span class="lineno"> 2328</span>  <span class="keywordtype">void</span> AddErrorLocation(ValueType& result, <span class="keywordtype">bool</span> parent) {</div><div class="line"><a name="l02329"></a><span class="lineno"> 2329</span>  <a class="code" href="classrapidjson_1_1_generic_string_buffer.html">GenericStringBuffer<EncodingType></a> sb;</div><div class="line"><a name="l02330"></a><span class="lineno"> 2330</span>  PointerType instancePointer = GetInvalidDocumentPointer();</div><div class="line"><a name="l02331"></a><span class="lineno"> 2331</span>  ((parent && instancePointer.GetTokenCount() > 0)</div><div class="line"><a name="l02332"></a><span class="lineno"> 2332</span>  ? PointerType(instancePointer.GetTokens(), instancePointer.GetTokenCount() - 1)</div><div class="line"><a name="l02333"></a><span class="lineno"> 2333</span>  : instancePointer).StringifyUriFragment(sb);</div><div class="line"><a name="l02334"></a><span class="lineno"> 2334</span>  ValueType instanceRef(sb.GetString(), <span class="keyword">static_cast<</span><a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a><span class="keyword">></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>  GetStateAllocator());</div><div class="line"><a name="l02336"></a><span class="lineno"> 2336</span>  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>  sb.Clear();</div><div class="line"><a name="l02338"></a><span class="lineno"> 2338</span>  memcpy(sb.Push(CurrentSchema().GetURI().GetStringLength()),</div><div class="line"><a name="l02339"></a><span class="lineno"> 2339</span>  CurrentSchema().GetURI().GetString(),</div><div class="line"><a name="l02340"></a><span class="lineno"> 2340</span>  CurrentSchema().GetURI().GetStringLength() * <span class="keyword">sizeof</span>(Ch));</div><div class="line"><a name="l02341"></a><span class="lineno"> 2341</span>  GetInvalidSchemaPointer().StringifyUriFragment(sb);</div><div class="line"><a name="l02342"></a><span class="lineno"> 2342</span>  ValueType schemaRef(sb.GetString(), <span class="keyword">static_cast<</span><a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a><span class="keyword">></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>  GetStateAllocator());</div><div class="line"><a name="l02344"></a><span class="lineno"> 2344</span>  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>  }</div><div class="line"><a name="l02346"></a><span class="lineno"> 2346</span> </div><div class="line"><a name="l02347"></a><span class="lineno"> 2347</span>  <span class="keywordtype">void</span> AddError(ValueType& keyword, ValueType& error) {</div><div class="line"><a name="l02348"></a><span class="lineno"> 2348</span>  <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>  <span class="keywordflow">if</span> (member == error_.MemberEnd())</div><div class="line"><a name="l02350"></a><span class="lineno"> 2350</span>  error_.AddMember(keyword, error, GetStateAllocator());</div><div class="line"><a name="l02351"></a><span class="lineno"> 2351</span>  <span class="keywordflow">else</span> {</div><div class="line"><a name="l02352"></a><span class="lineno"> 2352</span>  <span class="keywordflow">if</span> (member->value.IsObject()) {</div><div class="line"><a name="l02353"></a><span class="lineno"> 2353</span>  ValueType errors(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a058c622e1e7d59419ae58b895cbce468">kArrayType</a>);</div><div class="line"><a name="l02354"></a><span class="lineno"> 2354</span>  errors.<a class="code" href="classrapidjson_1_1_generic_value.html#a0ec9f34bef5890241d4bc882b73b1db4">PushBack</a>(member->value, GetStateAllocator());</div><div class="line"><a name="l02355"></a><span class="lineno"> 2355</span>  member->value = errors;</div><div class="line"><a name="l02356"></a><span class="lineno"> 2356</span>  }</div><div class="line"><a name="l02357"></a><span class="lineno"> 2357</span>  member->value.PushBack(error, GetStateAllocator());</div><div class="line"><a name="l02358"></a><span class="lineno"> 2358</span>  }</div><div class="line"><a name="l02359"></a><span class="lineno"> 2359</span>  }</div><div class="line"><a name="l02360"></a><span class="lineno"> 2360</span> </div><div class="line"><a name="l02361"></a><span class="lineno"> 2361</span>  <span class="keywordtype">void</span> AddCurrentError(<span class="keyword">const</span> <span class="keyword">typename</span> SchemaType::ValueType& 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>  AddErrorLocation(currentError_, parent);</div><div class="line"><a name="l02363"></a><span class="lineno"> 2363</span>  AddError(ValueType(keyword, GetStateAllocator(), <span class="keyword">false</span>).Move(), currentError_);</div><div class="line"><a name="l02364"></a><span class="lineno"> 2364</span>  }</div><div class="line"><a name="l02365"></a><span class="lineno"> 2365</span> </div><div class="line"><a name="l02366"></a><span class="lineno"> 2366</span>  <span class="keywordtype">void</span> MergeError(ValueType& other) {</div><div class="line"><a name="l02367"></a><span class="lineno"> 2367</span>  <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>  AddError(it->name, it->value);</div><div class="line"><a name="l02369"></a><span class="lineno"> 2369</span>  }</div><div class="line"><a name="l02370"></a><span class="lineno"> 2370</span>  }</div><div class="line"><a name="l02371"></a><span class="lineno"> 2371</span> </div><div class="line"><a name="l02372"></a><span class="lineno"> 2372</span>  <span class="keywordtype">void</span> AddNumberError(<span class="keyword">const</span> <span class="keyword">typename</span> SchemaType::ValueType& keyword, ValueType& actual, <span class="keyword">const</span> SValue& expected,</div><div class="line"><a name="l02373"></a><span class="lineno"> 2373</span>  <span class="keyword">const</span> <span class="keyword">typename</span> SchemaType::ValueType& (*exclusive)() = 0) {</div><div class="line"><a name="l02374"></a><span class="lineno"> 2374</span>  currentError_.SetObject();</div><div class="line"><a name="l02375"></a><span class="lineno"> 2375</span>  currentError_.AddMember(GetActualString(), actual, GetStateAllocator());</div><div class="line"><a name="l02376"></a><span class="lineno"> 2376</span>  currentError_.AddMember(GetExpectedString(), ValueType(expected, GetStateAllocator()).Move(), GetStateAllocator());</div><div class="line"><a name="l02377"></a><span class="lineno"> 2377</span>  <span class="keywordflow">if</span> (exclusive)</div><div class="line"><a name="l02378"></a><span class="lineno"> 2378</span>  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>  AddCurrentError(keyword);</div><div class="line"><a name="l02380"></a><span class="lineno"> 2380</span>  }</div><div class="line"><a name="l02381"></a><span class="lineno"> 2381</span> </div><div class="line"><a name="l02382"></a><span class="lineno"> 2382</span>  <span class="keywordtype">void</span> AddErrorArray(<span class="keyword">const</span> <span class="keyword">typename</span> SchemaType::ValueType& keyword,</div><div class="line"><a name="l02383"></a><span class="lineno"> 2383</span>  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>  ValueType errors(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a058c622e1e7d59419ae58b895cbce468">kArrayType</a>);</div><div class="line"><a name="l02385"></a><span class="lineno"> 2385</span>  <span class="keywordflow">for</span> (<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> i = 0; i < count; ++i)</div><div class="line"><a name="l02386"></a><span class="lineno"> 2386</span>  errors.<a class="code" href="classrapidjson_1_1_generic_value.html#a0ec9f34bef5890241d4bc882b73b1db4">PushBack</a>(static_cast<GenericSchemaValidator*>(subvalidators[i])->GetError(), GetStateAllocator());</div><div class="line"><a name="l02387"></a><span class="lineno"> 2387</span>  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>  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>  AddCurrentError(keyword);</div><div class="line"><a name="l02390"></a><span class="lineno"> 2390</span>  }</div><div class="line"><a name="l02391"></a><span class="lineno"> 2391</span> </div><div class="line"><a name="l02392"></a><span class="lineno"> 2392</span>  <span class="keyword">const</span> SchemaType& CurrentSchema()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> *schemaStack_.template Top<Context>()->schema; }</div><div class="line"><a name="l02393"></a><span class="lineno"> 2393</span>  Context& CurrentContext() { <span class="keywordflow">return</span> *schemaStack_.template Top<Context>(); }</div><div class="line"><a name="l02394"></a><span class="lineno"> 2394</span>  <span class="keyword">const</span> Context& CurrentContext()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> *schemaStack_.template Top<Context>(); }</div><div class="line"><a name="l02395"></a><span class="lineno"> 2395</span> </div><div class="line"><a name="l02396"></a><span class="lineno"> 2396</span>  <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>  <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>  <span class="keyword">const</span> SchemaDocumentType* schemaDocument_;</div><div class="line"><a name="l02399"></a><span class="lineno"> 2399</span>  <span class="keyword">const</span> SchemaType& root_;</div><div class="line"><a name="l02400"></a><span class="lineno"> 2400</span>  StateAllocator* stateAllocator_;</div><div class="line"><a name="l02401"></a><span class="lineno"> 2401</span>  StateAllocator* ownStateAllocator_;</div><div class="line"><a name="l02402"></a><span class="lineno"> 2402</span>  internal::Stack<StateAllocator> schemaStack_; <span class="comment">//!< stack to store the current path of schema (BaseSchemaType *)</span></div><div class="line"><a name="l02403"></a><span class="lineno"> 2403</span> <span class="comment"></span> internal::Stack<StateAllocator> documentStack_; <span class="comment">//!< stack to store the current path of validating document (Ch)</span></div><div class="line"><a name="l02404"></a><span class="lineno"> 2404</span> <span class="comment"></span> OutputHandler* outputHandler_;</div><div class="line"><a name="l02405"></a><span class="lineno"> 2405</span>  ValueType error_;</div><div class="line"><a name="l02406"></a><span class="lineno"> 2406</span>  ValueType currentError_;</div><div class="line"><a name="l02407"></a><span class="lineno"> 2407</span>  ValueType missingDependents_;</div><div class="line"><a name="l02408"></a><span class="lineno"> 2408</span>  <span class="keywordtype">bool</span> valid_;</div><div class="line"><a name="l02409"></a><span class="lineno"> 2409</span> <span class="preprocessor">#if RAPIDJSON_SCHEMA_VERBOSE</span></div><div class="line"><a name="l02410"></a><span class="lineno"> 2410</span>  <span class="keywordtype">unsigned</span> depth_;</div><div class="line"><a name="l02411"></a><span class="lineno"> 2411</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l02412"></a><span class="lineno"> 2412</span> };</div><div class="line"><a name="l02413"></a><span class="lineno"> 2413</span> </div><div class="line"><a name="l02414"></a><span class="lineno"> 2414</span> <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_schema_validator.html">GenericSchemaValidator<SchemaDocument></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> <span class="comment"></span></div><div class="line"><a name="l02416"></a><span class="lineno"> 2416</span> <span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l02417"></a><span class="lineno"> 2417</span> <span class="comment"></span><span class="comment">// SchemaValidatingReader</span></div><div class="line"><a name="l02418"></a><span class="lineno"> 2418</span> <span class="comment"></span></div><div class="line"><a name="l02419"></a><span class="lineno"> 2419</span> <span class="comment">//! A helper class for parsing with validation.</span></div><div class="line"><a name="l02420"></a><span class="lineno"> 2420</span> <span class="comment"></span><span class="comment">/*!</span></div><div class="line"><a name="l02421"></a><span class="lineno"> 2421</span> <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> <span class="comment"></span></div><div class="line"><a name="l02423"></a><span class="lineno"> 2423</span> <span class="comment"> \tparam parseFlags Combination of \ref ParseFlag.</span></div><div class="line"><a name="l02424"></a><span class="lineno"> 2424</span> <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> <span class="comment"> \tparam SourceEncoding Encoding of the input stream.</span></div><div class="line"><a name="l02426"></a><span class="lineno"> 2426</span> <span class="comment"> \tparam SchemaDocumentType Type of schema document.</span></div><div class="line"><a name="l02427"></a><span class="lineno"> 2427</span> <span class="comment"> \tparam StackAllocator Allocator type for stack.</span></div><div class="line"><a name="l02428"></a><span class="lineno"> 2428</span> <span class="comment">*/</span></div><div class="line"><a name="l02429"></a><span class="lineno"> 2429</span> <span class="keyword">template</span> <</div><div class="line"><a name="l02430"></a><span class="lineno"> 2430</span>  <span class="keywordtype">unsigned</span> parseFlags,</div><div class="line"><a name="l02431"></a><span class="lineno"> 2431</span>  <span class="keyword">typename</span> InputStream,</div><div class="line"><a name="l02432"></a><span class="lineno"> 2432</span>  <span class="keyword">typename</span> SourceEncoding,</div><div class="line"><a name="l02433"></a><span class="lineno"> 2433</span>  <span class="keyword">typename</span> SchemaDocumentType = SchemaDocument,</div><div class="line"><a name="l02434"></a><span class="lineno"> 2434</span>  <span class="keyword">typename</span> StackAllocator = <a class="code" href="classrapidjson_1_1_crt_allocator.html">CrtAllocator</a>></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> <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> <span class="keyword">public</span>:</div><div class="line"><a name="l02437"></a><span class="lineno"> 2437</span>  <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>  <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>  <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue<SourceEncoding, StackAllocator></a> ValueType;</div><div class="line"><a name="l02440"></a><span class="lineno"> 2440</span> <span class="comment"></span></div><div class="line"><a name="l02441"></a><span class="lineno"> 2441</span> <span class="comment"> //! Constructor</span></div><div class="line"><a name="l02442"></a><span class="lineno"> 2442</span> <span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l02443"></a><span class="lineno"> 2443</span> <span class="comment"> \param is Input stream.</span></div><div class="line"><a name="l02444"></a><span class="lineno"> 2444</span> <span class="comment"> \param sd Schema document.</span></div><div class="line"><a name="l02445"></a><span class="lineno"> 2445</span> <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>  <a class="code" href="classrapidjson_1_1_schema_validating_reader.html#a1e2bcc66cad23376241cd91e8bf8c706">SchemaValidatingReader</a>(InputStream& is, <span class="keyword">const</span> SchemaDocumentType& 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> </div><div class="line"><a name="l02448"></a><span class="lineno"> 2448</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> Handler></div><div class="line"><a name="l02449"></a><span class="lineno"> 2449</span>  <span class="keywordtype">bool</span> operator()(<a class="code" href="classrapidjson_1_1_handler.html">Handler</a>& handler) {</div><div class="line"><a name="l02450"></a><span class="lineno"> 2450</span>  <a class="code" href="classrapidjson_1_1_generic_reader.html">GenericReader<SourceEncoding, typename SchemaDocumentType::EncodingType, StackAllocator></a> reader;</div><div class="line"><a name="l02451"></a><span class="lineno"> 2451</span>  <a class="code" href="classrapidjson_1_1_generic_schema_validator.html">GenericSchemaValidator<SchemaDocumentType, Handler></a> validator(sd_, handler);</div><div class="line"><a name="l02452"></a><span class="lineno"> 2452</span>  parseResult_ = reader.template Parse<parseFlags>(is_, validator);</div><div class="line"><a name="l02453"></a><span class="lineno"> 2453</span> </div><div class="line"><a name="l02454"></a><span class="lineno"> 2454</span>  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>  <span class="keywordflow">if</span> (isValid_) {</div><div class="line"><a name="l02456"></a><span class="lineno"> 2456</span>  invalidSchemaPointer_ = PointerType();</div><div class="line"><a name="l02457"></a><span class="lineno"> 2457</span>  invalidSchemaKeyword_ = 0;</div><div class="line"><a name="l02458"></a><span class="lineno"> 2458</span>  invalidDocumentPointer_ = PointerType();</div><div class="line"><a name="l02459"></a><span class="lineno"> 2459</span>  error_.SetObject();</div><div class="line"><a name="l02460"></a><span class="lineno"> 2460</span>  }</div><div class="line"><a name="l02461"></a><span class="lineno"> 2461</span>  <span class="keywordflow">else</span> {</div><div class="line"><a name="l02462"></a><span class="lineno"> 2462</span>  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>  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>  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>  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>  }</div><div class="line"><a name="l02467"></a><span class="lineno"> 2467</span> </div><div class="line"><a name="l02468"></a><span class="lineno"> 2468</span>  <span class="keywordflow">return</span> parseResult_;</div><div class="line"><a name="l02469"></a><span class="lineno"> 2469</span>  }</div><div class="line"><a name="l02470"></a><span class="lineno"> 2470</span> </div><div class="line"><a name="l02471"></a><span class="lineno"> 2471</span>  <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>& 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>  <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>  <span class="keyword">const</span> PointerType& 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>  <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>  <span class="keyword">const</span> PointerType& 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>  <span class="keyword">const</span> ValueType& 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> </div><div class="line"><a name="l02478"></a><span class="lineno"> 2478</span> <span class="keyword">private</span>:</div><div class="line"><a name="l02479"></a><span class="lineno"> 2479</span>  InputStream& is_;</div><div class="line"><a name="l02480"></a><span class="lineno"> 2480</span>  <span class="keyword">const</span> SchemaDocumentType& sd_;</div><div class="line"><a name="l02481"></a><span class="lineno"> 2481</span> </div><div class="line"><a name="l02482"></a><span class="lineno"> 2482</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> parseResult_;</div><div class="line"><a name="l02483"></a><span class="lineno"> 2483</span>  PointerType invalidSchemaPointer_;</div><div class="line"><a name="l02484"></a><span class="lineno"> 2484</span>  <span class="keyword">const</span> Ch* invalidSchemaKeyword_;</div><div class="line"><a name="l02485"></a><span class="lineno"> 2485</span>  PointerType invalidDocumentPointer_;</div><div class="line"><a name="l02486"></a><span class="lineno"> 2486</span>  StackAllocator allocator_;</div><div class="line"><a name="l02487"></a><span class="lineno"> 2487</span>  ValueType error_;</div><div class="line"><a name="l02488"></a><span class="lineno"> 2488</span>  <span class="keywordtype">bool</span> isValid_;</div><div class="line"><a name="l02489"></a><span class="lineno"> 2489</span> };</div><div class="line"><a name="l02490"></a><span class="lineno"> 2490</span> </div><div class="line"><a name="l02491"></a><span class="lineno"> 2491</span> RAPIDJSON_NAMESPACE_END</div><div class="line"><a name="l02492"></a><span class="lineno"> 2492</span> RAPIDJSON_DIAG_POP</div><div class="line"><a name="l02493"></a><span class="lineno"> 2493</span> </div><div class="line"><a name="l02494"></a><span class="lineno"> 2494</span> <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 &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 & 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 & 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 &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 & 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 & AddMember(GenericValue &name, GenericValue &value, Allocator &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 & AddMember(GenericValue &name, GenericValue &value, Allocator &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 &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 & PushBack(GenericValue &value, Allocator &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 & PushBack(GenericValue &value, Allocator &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 &is, const SchemaDocumentType &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 & 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 &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 &schemaDocument, OutputHandler &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> <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> <span class="comment">// </span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <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> <span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">// Licensed under the MIT License (the "License"); you may not use this file except</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <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> <span class="comment">//</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">// http://opensource.org/licenses/MIT</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">//</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <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> <span class="comment">// under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR </span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <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> <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> </div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor">#ifndef RAPIDJSON_INTERNAL_STACK_H_</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#define RAPIDJSON_INTERNAL_STACK_H_</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> </div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#include "../allocators.h"</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#include "swap.h"</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#if defined(__clang__)</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> RAPIDJSON_DIAG_PUSH</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> RAPIDJSON_DIAG_OFF(c++98-compat)</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> </div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> RAPIDJSON_NAMESPACE_BEGIN</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="keyword">namespace </span>internal {</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="comment"></span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="comment"></span><span class="comment">// Stack</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="comment"></span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <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> <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> <span class="comment">*/</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="keyword">template</span> <<span class="keyword">typename</span> Allocator></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="keyword">class </span>Stack {</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <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>  <span class="comment">// Do it lazily when first Push() -> Expand() -> Resize().</span></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  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>  }</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span> </div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="preprocessor">#if RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  Stack(Stack&& rhs)</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  : allocator_(rhs.allocator_),</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  ownAllocator_(rhs.ownAllocator_),</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  stack_(rhs.stack_),</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  stackTop_(rhs.stackTop_),</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  stackEnd_(rhs.stackEnd_),</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  initialCapacity_(rhs.initialCapacity_)</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  {</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  rhs.allocator_ = 0;</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  rhs.ownAllocator_ = 0;</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  rhs.stack_ = 0;</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  rhs.stackTop_ = 0;</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  rhs.stackEnd_ = 0;</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  rhs.initialCapacity_ = 0;</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  }</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span> </div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  ~Stack() {</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  Destroy();</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  }</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span> </div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="preprocessor">#if RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  Stack& operator=(Stack&& rhs) {</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <span class="keywordflow">if</span> (&rhs != <span class="keyword">this</span>)</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  {</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  Destroy();</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span> </div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  allocator_ = rhs.allocator_;</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  ownAllocator_ = rhs.ownAllocator_;</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  stack_ = rhs.stack_;</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  stackTop_ = rhs.stackTop_;</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  stackEnd_ = rhs.stackEnd_;</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  initialCapacity_ = rhs.initialCapacity_;</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span> </div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  rhs.allocator_ = 0;</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  rhs.ownAllocator_ = 0;</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  rhs.stack_ = 0;</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  rhs.stackTop_ = 0;</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  rhs.stackEnd_ = 0;</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  rhs.initialCapacity_ = 0;</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  }</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  }</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span> </div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <span class="keywordtype">void</span> Swap(Stack& rhs) RAPIDJSON_NOEXCEPT {</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  internal::Swap(allocator_, rhs.allocator_);</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  internal::Swap(ownAllocator_, rhs.ownAllocator_);</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  internal::Swap(stack_, rhs.stack_);</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  internal::Swap(stackTop_, rhs.stackTop_);</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  internal::Swap(stackEnd_, rhs.stackEnd_);</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  internal::Swap(initialCapacity_, rhs.initialCapacity_);</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  }</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span> </div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  <span class="keywordtype">void</span> Clear() { stackTop_ = stack_; }</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span> </div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  <span class="keywordtype">void</span> ShrinkToFit() { </div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  <span class="keywordflow">if</span> (Empty()) {</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  <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>  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>  stack_ = 0;</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  stackTop_ = 0;</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  stackEnd_ = 0;</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  }</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  Resize(GetSize());</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  }</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span> </div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <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>  <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>  <span class="keyword">template</span><<span class="keyword">typename</span> T></div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  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>  <span class="comment">// Expand the stack if needed</span></div><div class="line"><a name="l00117"></a><span class="lineno"> 117</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>(stackTop_ + <span class="keyword">sizeof</span>(T) * count > stackEnd_))</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  Expand<T>(count);</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  }</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span> </div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T></div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  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>  Reserve<T>(count);</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  <span class="keywordflow">return</span> PushUnsafe<T>(count);</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  }</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span> </div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T></div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  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>  <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>  <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 <= stackEnd_);</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  T* ret = <span class="keyword">reinterpret_cast<</span>T*<span class="keyword">></span>(stackTop_);</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  stackTop_ += <span class="keyword">sizeof</span>(T) * count;</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  <span class="keywordflow">return</span> ret;</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  }</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span> </div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T></div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  T* Pop(<span class="keywordtype">size_t</span> count) {</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</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>(GetSize() >= count * <span class="keyword">sizeof</span>(T));</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  stackTop_ -= count * <span class="keyword">sizeof</span>(T);</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast<</span>T*<span class="keyword">></span>(stackTop_);</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  }</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span> </div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T></div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  T* Top() { </div><div class="line"><a name="l00145"></a><span class="lineno"> 145</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>(GetSize() >= <span class="keyword">sizeof</span>(T));</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast<</span>T*<span class="keyword">></span>(stackTop_ - <span class="keyword">sizeof</span>(T));</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  }</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span> </div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T></div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  <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>  <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() >= <span class="keyword">sizeof</span>(T));</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast<</span>T*<span class="keyword">></span>(stackTop_ - <span class="keyword">sizeof</span>(T));</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  }</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span> </div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T></div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  T* End() { <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast<</span>T*<span class="keyword">></span>(stackTop_); }</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span> </div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T></div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  <span class="keyword">const</span> T* End()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast<</span>T*<span class="keyword">></span>(stackTop_); }</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span> </div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T></div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  T* Bottom() { <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast<</span>T*<span class="keyword">></span>(stack_); }</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span> </div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T></div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  <span class="keyword">const</span> T* Bottom()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast<</span>T*<span class="keyword">></span>(stack_); }</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span> </div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  <span class="keywordtype">bool</span> HasAllocator()<span class="keyword"> const </span>{</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  <span class="keywordflow">return</span> allocator_ != 0;</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  }</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span> </div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  Allocator& GetAllocator() {</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</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>(allocator_);</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  <span class="keywordflow">return</span> *allocator_;</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  }</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span> </div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  <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>  <span class="keywordtype">size_t</span> GetSize()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">static_cast<</span><span class="keywordtype">size_t</span><span class="keyword">></span>(stackTop_ - stack_); }</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  <span class="keywordtype">size_t</span> GetCapacity()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">static_cast<</span><span class="keywordtype">size_t</span><span class="keyword">></span>(stackEnd_ - stack_); }</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span> </div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span> <span class="keyword">private</span>:</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T></div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  <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>  <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>  <span class="keywordtype">size_t</span> newCapacity;</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  <span class="keywordflow">if</span> (stack_ == 0) {</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  <span class="keywordflow">if</span> (!allocator_)</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  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>  newCapacity = initialCapacity_;</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  newCapacity = GetCapacity();</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  newCapacity += (newCapacity + 1) / 2;</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  }</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  <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>  <span class="keywordflow">if</span> (newCapacity < newSize)</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  newCapacity = newSize;</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span> </div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  Resize(newCapacity);</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  }</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span> </div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  <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>  <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>  stack_ = <span class="keyword">static_cast<</span><span class="keywordtype">char</span>*<span class="keyword">></span>(allocator_->Realloc(stack_, GetCapacity(), newCapacity));</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  stackTop_ = stack_ + size;</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  stackEnd_ = stack_ + newCapacity;</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  }</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span> </div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  <span class="keywordtype">void</span> Destroy() {</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  Allocator::Free(stack_);</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  <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>  }</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span> </div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  <span class="comment">// Prohibit copy constructor & assignment operator.</span></div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  Stack(<span class="keyword">const</span> Stack&);</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  Stack& operator=(<span class="keyword">const</span> Stack&);</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span> </div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  Allocator* allocator_;</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  Allocator* ownAllocator_;</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  <span class="keywordtype">char</span> *stack_;</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  <span class="keywordtype">char</span> *stackTop_;</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  <span class="keywordtype">char</span> *stackEnd_;</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  <span class="keywordtype">size_t</span> initialCapacity_;</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span> };</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span> </div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span> } <span class="comment">// namespace internal</span></div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span> RAPIDJSON_NAMESPACE_END</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span> </div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span> <span class="preprocessor">#if defined(__clang__)</span></div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span> RAPIDJSON_DIAG_POP</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span> </div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span> <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> <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> <span class="comment">// </span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <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> <span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">// Licensed under the MIT License (the "License"); you may not use this file except</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <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> <span class="comment">//</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">// http://opensource.org/licenses/MIT</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">//</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <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> <span class="comment">// under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR </span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <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> <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> </div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor">#ifndef RAPIDJSON_INTERNAL_STACK_H_</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#define RAPIDJSON_INTERNAL_STACK_H_</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> </div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#include "../allocators.h"</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#include "swap.h"</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#if defined(__clang__)</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> RAPIDJSON_DIAG_PUSH</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> RAPIDJSON_DIAG_OFF(c++98-compat)</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> </div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> RAPIDJSON_NAMESPACE_BEGIN</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="keyword">namespace </span>internal {</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="comment"></span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="comment"></span><span class="comment">// Stack</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="comment"></span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <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> <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> <span class="comment">*/</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="keyword">template</span> <<span class="keyword">typename</span> Allocator></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="keyword">class </span>Stack {</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <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>  <span class="comment">// Do it lazily when first Push() -> Expand() -> Resize().</span></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  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>  }</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span> </div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="preprocessor">#if RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  Stack(Stack&& rhs)</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  : allocator_(rhs.allocator_),</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  ownAllocator_(rhs.ownAllocator_),</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  stack_(rhs.stack_),</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  stackTop_(rhs.stackTop_),</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  stackEnd_(rhs.stackEnd_),</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  initialCapacity_(rhs.initialCapacity_)</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  {</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  rhs.allocator_ = 0;</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  rhs.ownAllocator_ = 0;</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  rhs.stack_ = 0;</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  rhs.stackTop_ = 0;</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  rhs.stackEnd_ = 0;</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  rhs.initialCapacity_ = 0;</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  }</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span> </div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  ~Stack() {</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  Destroy();</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  }</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span> </div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="preprocessor">#if RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  Stack& operator=(Stack&& rhs) {</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <span class="keywordflow">if</span> (&rhs != <span class="keyword">this</span>)</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  {</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  Destroy();</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span> </div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  allocator_ = rhs.allocator_;</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  ownAllocator_ = rhs.ownAllocator_;</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  stack_ = rhs.stack_;</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  stackTop_ = rhs.stackTop_;</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  stackEnd_ = rhs.stackEnd_;</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  initialCapacity_ = rhs.initialCapacity_;</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span> </div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  rhs.allocator_ = 0;</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  rhs.ownAllocator_ = 0;</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  rhs.stack_ = 0;</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  rhs.stackTop_ = 0;</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  rhs.stackEnd_ = 0;</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  rhs.initialCapacity_ = 0;</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  }</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  }</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span> </div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <span class="keywordtype">void</span> Swap(Stack& rhs) RAPIDJSON_NOEXCEPT {</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  internal::Swap(allocator_, rhs.allocator_);</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  internal::Swap(ownAllocator_, rhs.ownAllocator_);</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  internal::Swap(stack_, rhs.stack_);</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  internal::Swap(stackTop_, rhs.stackTop_);</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  internal::Swap(stackEnd_, rhs.stackEnd_);</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  internal::Swap(initialCapacity_, rhs.initialCapacity_);</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  }</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span> </div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  <span class="keywordtype">void</span> Clear() { stackTop_ = stack_; }</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span> </div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  <span class="keywordtype">void</span> ShrinkToFit() { </div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  <span class="keywordflow">if</span> (Empty()) {</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  <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>  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>  stack_ = 0;</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  stackTop_ = 0;</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  stackEnd_ = 0;</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  }</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  Resize(GetSize());</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  }</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span> </div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <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>  <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>  <span class="keyword">template</span><<span class="keyword">typename</span> T></div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  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>  <span class="comment">// Expand the stack if needed</span></div><div class="line"><a name="l00117"></a><span class="lineno"> 117</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>(stackTop_ + <span class="keyword">sizeof</span>(T) * count > stackEnd_))</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  Expand<T>(count);</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  }</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span> </div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T></div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  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>  Reserve<T>(count);</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  <span class="keywordflow">return</span> PushUnsafe<T>(count);</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  }</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span> </div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T></div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  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>  <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>  <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 <= stackEnd_);</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  T* ret = <span class="keyword">reinterpret_cast<</span>T*<span class="keyword">></span>(stackTop_);</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  stackTop_ += <span class="keyword">sizeof</span>(T) * count;</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  <span class="keywordflow">return</span> ret;</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  }</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span> </div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T></div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  T* Pop(<span class="keywordtype">size_t</span> count) {</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</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>(GetSize() >= count * <span class="keyword">sizeof</span>(T));</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  stackTop_ -= count * <span class="keyword">sizeof</span>(T);</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast<</span>T*<span class="keyword">></span>(stackTop_);</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  }</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span> </div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T></div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  T* Top() { </div><div class="line"><a name="l00145"></a><span class="lineno"> 145</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>(GetSize() >= <span class="keyword">sizeof</span>(T));</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast<</span>T*<span class="keyword">></span>(stackTop_ - <span class="keyword">sizeof</span>(T));</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  }</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span> </div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T></div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  <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>  <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() >= <span class="keyword">sizeof</span>(T));</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast<</span>T*<span class="keyword">></span>(stackTop_ - <span class="keyword">sizeof</span>(T));</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  }</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span> </div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T></div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  T* End() { <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast<</span>T*<span class="keyword">></span>(stackTop_); }</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span> </div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T></div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  <span class="keyword">const</span> T* End()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast<</span>T*<span class="keyword">></span>(stackTop_); }</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span> </div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T></div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  T* Bottom() { <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast<</span>T*<span class="keyword">></span>(stack_); }</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span> </div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T></div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  <span class="keyword">const</span> T* Bottom()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast<</span>T*<span class="keyword">></span>(stack_); }</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span> </div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  <span class="keywordtype">bool</span> HasAllocator()<span class="keyword"> const </span>{</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  <span class="keywordflow">return</span> allocator_ != 0;</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  }</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span> </div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  Allocator& GetAllocator() {</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</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>(allocator_);</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  <span class="keywordflow">return</span> *allocator_;</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  }</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span> </div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  <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>  <span class="keywordtype">size_t</span> GetSize()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">static_cast<</span><span class="keywordtype">size_t</span><span class="keyword">></span>(stackTop_ - stack_); }</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  <span class="keywordtype">size_t</span> GetCapacity()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">static_cast<</span><span class="keywordtype">size_t</span><span class="keyword">></span>(stackEnd_ - stack_); }</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span> </div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span> <span class="keyword">private</span>:</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T></div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  <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>  <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>  <span class="keywordtype">size_t</span> newCapacity;</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  <span class="keywordflow">if</span> (stack_ == 0) {</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  <span class="keywordflow">if</span> (!allocator_)</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  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>  newCapacity = initialCapacity_;</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  newCapacity = GetCapacity();</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  newCapacity += (newCapacity + 1) / 2;</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  }</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  <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>  <span class="keywordflow">if</span> (newCapacity < newSize)</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  newCapacity = newSize;</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span> </div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  Resize(newCapacity);</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  }</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span> </div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  <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>  <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>  stack_ = <span class="keyword">static_cast<</span><span class="keywordtype">char</span>*<span class="keyword">></span>(allocator_->Realloc(stack_, GetCapacity(), newCapacity));</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  stackTop_ = stack_ + size;</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  stackEnd_ = stack_ + newCapacity;</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  }</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span> </div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  <span class="keywordtype">void</span> Destroy() {</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  Allocator::Free(stack_);</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  <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>  }</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span> </div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  <span class="comment">// Prohibit copy constructor & assignment operator.</span></div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  Stack(<span class="keyword">const</span> Stack&);</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  Stack& operator=(<span class="keyword">const</span> Stack&);</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span> </div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  Allocator* allocator_;</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  Allocator* ownAllocator_;</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  <span class="keywordtype">char</span> *stack_;</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  <span class="keywordtype">char</span> *stackTop_;</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  <span class="keywordtype">char</span> *stackEnd_;</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  <span class="keywordtype">size_t</span> initialCapacity_;</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span> };</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span> </div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span> } <span class="comment">// namespace internal</span></div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span> RAPIDJSON_NAMESPACE_END</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span> </div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span> <span class="preprocessor">#if defined(__clang__)</span></div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span> RAPIDJSON_DIAG_POP</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span> </div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span> <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> <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> <span class="comment">// </span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <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> <span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">// Licensed under the MIT License (the "License"); you may not use this file except</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <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> <span class="comment">//</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">// http://opensource.org/licenses/MIT</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">//</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <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> <span class="comment">// under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR </span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <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> <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> </div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor">#ifndef RAPIDJSON_WRITER_H_</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#define RAPIDJSON_WRITER_H_</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> </div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#include "stream.h"</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#include "internal/meta.h"</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include "internal/stack.h"</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include "internal/strfunc.h"</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include "internal/dtoa.h"</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include "internal/itoa.h"</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include "stringbuffer.h"</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include <new></span> <span class="comment">// placement new</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> </div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#if defined(RAPIDJSON_SIMD) && defined(_MSC_VER)</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#include <intrin.h></span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#pragma intrinsic(_BitScanForward)</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#ifdef RAPIDJSON_SSE42</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#include <nmmintrin.h></span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#elif defined(RAPIDJSON_SSE2)</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor">#include <emmintrin.h></span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor">#elif defined(RAPIDJSON_NEON)</span></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor">#include <arm_neon.h></span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="preprocessor">#ifdef __clang__</span></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span> RAPIDJSON_DIAG_PUSH</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span> RAPIDJSON_DIAG_OFF(padded)</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span> RAPIDJSON_DIAG_OFF(unreachable-code)</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span> RAPIDJSON_DIAG_OFF(c++98-compat)</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="preprocessor">#elif defined(_MSC_VER)</span></div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span> RAPIDJSON_DIAG_PUSH</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span> 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> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span> </div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span> RAPIDJSON_NAMESPACE_BEGIN</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="comment"></span></div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="comment"></span><span class="comment">// WriteFlag</span></div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="comment"></span></div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="comment">/*! \def RAPIDJSON_WRITE_DEFAULT_FLAGS </span></div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="comment"> \ingroup RAPIDJSON_CONFIG</span></div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="comment"> \brief User-defined kWriteDefaultFlags definition.</span></div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="comment"></span></div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <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> <span class="comment">*/</span></div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <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> <span class="preprocessor">#define RAPIDJSON_WRITE_DEFAULT_FLAGS kWriteNoFlags</span></div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="comment"></span></div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <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> <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>  <a class="code" href="namespacerapidjson.html#ad28b1de6aee37e92fc31792dd6dd6b19ae971aa1fc0ae64c8f3d2b47fd802846a">kWriteNoFlags</a> = 0, <span class="comment">//!< 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> <span class="comment"></span> <a class="code" href="namespacerapidjson.html#ad28b1de6aee37e92fc31792dd6dd6b19ac1b5e17278b060e9e866df075c104c10">kWriteValidateEncodingFlag</a> = 1, <span class="comment">//!< 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> <span class="comment"></span> <a class="code" href="namespacerapidjson.html#ad28b1de6aee37e92fc31792dd6dd6b19a3adbca1d31ad845ff4e9d742280cce39">kWriteNanAndInfFlag</a> = 2, <span class="comment">//!< 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> <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">//!< 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> <span class="comment"></span>};</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="comment"></span></div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="comment">//! JSON writer</span></div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <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> <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> <span class="comment"></span></div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <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> <span class="comment"></span></div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <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> <span class="comment"></span></div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <span class="comment"> for example Reader::Parse() and Document::Accept().</span></div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="comment"></span></div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="comment"> \tparam OutputStream Type of output stream.</span></div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="comment"> \tparam SourceEncoding Encoding of source string.</span></div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <span class="comment"> \tparam TargetEncoding Encoding of output stream.</span></div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <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> <span class="comment"> \note implements Handler concept</span></div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="comment">*/</span></div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <span class="keyword">template</span><<span class="keyword">typename</span> OutputStream, <span class="keyword">typename</span> SourceEncoding = UTF8<>, <span class="keyword">typename</span> TargetEncoding = UTF8<>, <span class="keyword">typename</span> StackAllocator = CrtAllocator, <span class="keywordtype">unsigned</span> writeFlags = kWriteDefaultFlags></div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <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> <span class="keyword">public</span>:</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <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> </div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  <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> <span class="comment"></span></div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <span class="comment"> //! Constructor</span></div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <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> <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> <span class="comment"> \param levelDepth Initial capacity of stack.</span></div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span> <span class="comment"> */</span></div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  <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>  <a class="code" href="classrapidjson_1_1_writer.html#a98a421c806b456688874511f64add1f2">Writer</a>(OutputStream& 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>  os_(&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> </div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <span class="keyword">explicit</span></div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  <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>  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> </div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <span class="preprocessor">#if RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  <a class="code" href="classrapidjson_1_1_writer.html">Writer</a>(<a class="code" href="classrapidjson_1_1_writer.html">Writer</a>&& rhs) :</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  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>  rhs.os_ = 0;</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  }</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="comment"></span></div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="comment"> //! Reset the writer with a new stream.</span></div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span> <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> <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> <span class="comment"></span></div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <span class="comment"> \param os New output stream.</span></div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <span class="comment"> \code</span></div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span> <span class="comment"> Writer<OutputStream> writer(os1);</span></div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <span class="comment"> writer.StartObject();</span></div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span> <span class="comment"> // ...</span></div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span> <span class="comment"> writer.EndObject();</span></div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span> <span class="comment"></span></div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <span class="comment"> writer.Reset(os2);</span></div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span> <span class="comment"> writer.StartObject();</span></div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span> <span class="comment"> // ...</span></div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span> <span class="comment"> writer.EndObject();</span></div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <span class="comment"> \endcode</span></div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <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>  <span class="keywordtype">void</span> <a class="code" href="classrapidjson_1_1_writer.html#ac4026d3f14b80d6d7fc10004b1972722">Reset</a>(OutputStream& os) {</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  os_ = &os;</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  hasRoot_ = <span class="keyword">false</span>;</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  level_stack_.Clear();</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  }</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <span class="comment"></span></div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span> <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> <span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span> <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> <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>  <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>  <span class="keywordflow">return</span> hasRoot_ && level_stack_.Empty();</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  }</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span> </div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  <span class="keywordtype">int</span> GetMaxDecimalPlaces()<span class="keyword"> const </span>{</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  <span class="keywordflow">return</span> maxDecimalPlaces_;</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  }</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span> <span class="comment"></span></div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span> <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> <span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span> <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> <span class="comment"></span></div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span> <span class="comment"> For example, </span></div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span> <span class="comment"></span></div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span> <span class="comment"> \code</span></div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span> <span class="comment"> writer.SetMaxDecimalPlaces(3);</span></div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span> <span class="comment"> writer.StartArray();</span></div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span> <span class="comment"> writer.Double(0.12345); // "0.123"</span></div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span> <span class="comment"> writer.Double(0.0001); // "0.0"</span></div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span> <span class="comment"> writer.Double(1.234567890123456e30); // "1.234567890123456e30" (do not truncate significand for positive exponent)</span></div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span> <span class="comment"> writer.Double(1.23e-4); // "0.0" (do truncate significand for negative exponent)</span></div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span> <span class="comment"> writer.EndArray();</span></div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span> <span class="comment"> \endcode</span></div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span> <span class="comment"></span></div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span> <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> <span class="comment"> \code</span></div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span> <span class="comment"> writer.SetMaxDecimalPlaces(Writer::kDefaultMaxDecimalPlaces);</span></div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span> <span class="comment"> \endcode</span></div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span> <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>  <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>  maxDecimalPlaces_ = maxDecimalPlaces;</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  }</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span> <span class="comment"></span></div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span> <span class="comment"> /*!@name Implementation of Handler</span></div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span> <span class="comment"> \see Handler</span></div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span> <span class="comment"> */</span><span class="comment"></span></div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span> <span class="comment"> //@{</span></div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span> <span class="comment"></span></div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  <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>  <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>  <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>  <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>  <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>  <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> <span class="comment"></span></div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span> <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> <span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span> <span class="comment"> \param d The value to be written.</span></div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span> <span class="comment"> \return Whether it is succeed.</span></div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span> <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>  <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> </div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  <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>  <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>  (void)copy;</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  Prefix(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a">kNumberType</a>);</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  <span class="keywordflow">return</span> EndValue(WriteString(str, length));</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  }</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span> </div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  <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>  <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>  (void)copy;</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  Prefix(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4ad6379da3dc04b83a591992bfb9fabba7">kStringType</a>);</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  <span class="keywordflow">return</span> EndValue(WriteString(str, length));</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  }</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span> </div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span> <span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  <span class="keywordtype">bool</span> String(<span class="keyword">const</span> std::basic_string<Ch>& str) {</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  <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>  }</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span> </div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  <span class="keywordtype">bool</span> StartObject() {</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  Prefix(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4acf030b422a32c3647c7c5973bd4dd0a9">kObjectType</a>);</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  <span class="keyword">new</span> (level_stack_.template Push<Level>()) <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>  <span class="keywordflow">return</span> WriteStartObject();</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  }</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span> </div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  <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> </div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span> <span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  <span class="keywordtype">bool</span> Key(<span class="keyword">const</span> std::basic_string<Ch>& str)</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  {</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  <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>  }</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  </div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  <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>  (void)memberCount;</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</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>(level_stack_.GetSize() >= <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>  <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<Level>()->inArray); <span class="comment">// currently inside an Array, not Object</span></div><div class="line"><a name="l00234"></a><span class="lineno"> 234</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>(0 == level_stack_.template Top<Level>()->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>  level_stack_.template Pop<Level>(1);</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  <span class="keywordflow">return</span> EndValue(WriteEndObject());</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  }</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span> </div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  <span class="keywordtype">bool</span> StartArray() {</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  Prefix(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a058c622e1e7d59419ae58b895cbce468">kArrayType</a>);</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  <span class="keyword">new</span> (level_stack_.template Push<Level>()) <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>  <span class="keywordflow">return</span> WriteStartArray();</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  }</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span> </div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  <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>  (void)elementCount;</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</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>(level_stack_.GetSize() >= <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>  <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<Level>()->inArray);</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>  level_stack_.template Pop<Level>(1);</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  <span class="keywordflow">return</span> EndValue(WriteEndArray());</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  }<span class="comment"></span></div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span> <span class="comment"> //@}</span></div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span> <span class="comment"> /*! @name Convenience extensions */</span><span class="comment"></span></div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span> <span class="comment"> //@{</span></div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span> <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> <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>& 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>  <span class="keywordtype">bool</span> Key(<span class="keyword">const</span> Ch* <span class="keyword">const</span>& str) { <span class="keywordflow">return</span> Key(str, internal::StrLen(str)); }</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  <span class="comment"></span></div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span> <span class="comment"> //@}</span></div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span> <span class="comment"> //! Write a raw JSON value.</span></div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span> <span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span> <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> <span class="comment"></span></div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span> <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> <span class="comment"> \param length Length of the json.</span></div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span> <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> <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>  <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>  <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>  Prefix(type);</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  <span class="keywordflow">return</span> EndValue(WriteRawValue(json, length));</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  }</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span> <span class="comment"></span></div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span> <span class="comment"> //! Flush the output stream.</span></div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span> <span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span> <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> <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>  <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>  os_->Flush();</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>  }</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span> </div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span> <span class="keyword">protected</span>:<span class="comment"></span></div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span> <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> <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>  <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>  <span class="keywordtype">size_t</span> <a class="code" href="structrapidjson_1_1_writer_1_1_level.html#a5d17bdfa9ded5de72f5f91175cc3e36b">valueCount</a>; <span class="comment">//!< 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> <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">//!< true if in array, otherwise in object</span></div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span> <span class="comment"></span> };</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span> </div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  <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> </div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  <span class="keywordtype">bool</span> WriteNull() {</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>  <a class="code" href="namespacerapidjson.html#a820f77efccfbb749bd15fe4822d2c740">PutReserve</a>(*os_, 4);</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'n'</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'u'</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'l'</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'l'</span>); <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  }</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span> </div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  <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>  <span class="keywordflow">if</span> (b) {</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  <a class="code" href="namespacerapidjson.html#a820f77efccfbb749bd15fe4822d2c740">PutReserve</a>(*os_, 4);</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'t'</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'r'</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'u'</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'e'</span>);</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  }</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  <span class="keywordflow">else</span> {</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  <a class="code" href="namespacerapidjson.html#a820f77efccfbb749bd15fe4822d2c740">PutReserve</a>(*os_, 5);</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'f'</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'a'</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'l'</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'s'</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'e'</span>);</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  }</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>  }</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span> </div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  <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>  <span class="keywordtype">char</span> buffer[11];</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  <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>  <a class="code" href="namespacerapidjson.html#a820f77efccfbb749bd15fe4822d2c740">PutReserve</a>(*os_, static_cast<size_t>(end - buffer));</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>  <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>  <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, static_cast<typename OutputStream::Ch>(*p));</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  }</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span> </div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  <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>  <span class="keywordtype">char</span> buffer[10];</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  <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>  <a class="code" href="namespacerapidjson.html#a820f77efccfbb749bd15fe4822d2c740">PutReserve</a>(*os_, static_cast<size_t>(end - buffer));</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  <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>  <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, static_cast<typename OutputStream::Ch>(*p));</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>  }</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span> </div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  <span class="keywordtype">bool</span> WriteInt64(int64_t i64) {</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>  <span class="keywordtype">char</span> buffer[21];</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  <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>  <a class="code" href="namespacerapidjson.html#a820f77efccfbb749bd15fe4822d2c740">PutReserve</a>(*os_, static_cast<size_t>(end - buffer));</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  <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>  <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, static_cast<typename OutputStream::Ch>(*p));</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>  }</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span> </div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>  <span class="keywordtype">bool</span> WriteUint64(uint64_t u64) {</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>  <span class="keywordtype">char</span> buffer[20];</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>  <span class="keywordtype">char</span>* end = internal::u64toa(u64, buffer);</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>  <a class="code" href="namespacerapidjson.html#a820f77efccfbb749bd15fe4822d2c740">PutReserve</a>(*os_, static_cast<size_t>(end - buffer));</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>  <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>  <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, static_cast<typename OutputStream::Ch>(*p));</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>  }</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span> </div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>  <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>  <span class="keywordflow">if</span> (internal::Double(d).IsNanOrInf()) {</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>  <span class="keywordflow">if</span> (!(writeFlags & <a class="code" href="namespacerapidjson.html#ad28b1de6aee37e92fc31792dd6dd6b19a3adbca1d31ad845ff4e9d742280cce39">kWriteNanAndInfFlag</a>))</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  <span class="keywordflow">if</span> (internal::Double(d).IsNan()) {</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  <a class="code" href="namespacerapidjson.html#a820f77efccfbb749bd15fe4822d2c740">PutReserve</a>(*os_, 3);</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>  <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'N'</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'a'</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'N'</span>);</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>  }</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>  <span class="keywordflow">if</span> (internal::Double(d).Sign()) {</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>  <a class="code" href="namespacerapidjson.html#a820f77efccfbb749bd15fe4822d2c740">PutReserve</a>(*os_, 9);</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>  <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'-'</span>);</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  }</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>  <a class="code" href="namespacerapidjson.html#a820f77efccfbb749bd15fe4822d2c740">PutReserve</a>(*os_, 8);</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>  <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'I'</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'n'</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'f'</span>);</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>  <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'i'</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'n'</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'i'</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'t'</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'y'</span>);</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>  }</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span> </div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>  <span class="keywordtype">char</span> buffer[25];</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>  <span class="keywordtype">char</span>* end = internal::dtoa(d, buffer, maxDecimalPlaces_);</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>  <a class="code" href="namespacerapidjson.html#a820f77efccfbb749bd15fe4822d2c740">PutReserve</a>(*os_, static_cast<size_t>(end - buffer));</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>  <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>  <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, static_cast<typename OutputStream::Ch>(*p));</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>  }</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span> </div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>  <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>  <span class="keyword">static</span> <span class="keyword">const</span> <span class="keyword">typename</span> OutputStream::Ch hexDigits[16] = { <span class="charliteral">'0'</span>, <span class="charliteral">'1'</span>, <span class="charliteral">'2'</span>, <span class="charliteral">'3'</span>, <span class="charliteral">'4'</span>, <span class="charliteral">'5'</span>, <span class="charliteral">'6'</span>, <span class="charliteral">'7'</span>, <span class="charliteral">'8'</span>, <span class="charliteral">'9'</span>, <span class="charliteral">'A'</span>, <span class="charliteral">'B'</span>, <span class="charliteral">'C'</span>, <span class="charliteral">'D'</span>, <span class="charliteral">'E'</span>, <span class="charliteral">'F'</span> };</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>  <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> <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>  <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>  <span class="charliteral">'u'</span>, <span class="charliteral">'u'</span>, <span class="charliteral">'u'</span>, <span class="charliteral">'u'</span>, <span class="charliteral">'u'</span>, <span class="charliteral">'u'</span>, <span class="charliteral">'u'</span>, <span class="charliteral">'u'</span>, <span class="charliteral">'b'</span>, <span class="charliteral">'t'</span>, <span class="charliteral">'n'</span>, <span class="charliteral">'u'</span>, <span class="charliteral">'f'</span>, <span class="charliteral">'r'</span>, <span class="charliteral">'u'</span>, <span class="charliteral">'u'</span>, <span class="comment">// 00</span></div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>  <span class="charliteral">'u'</span>, <span class="charliteral">'u'</span>, <span class="charliteral">'u'</span>, <span class="charliteral">'u'</span>, <span class="charliteral">'u'</span>, <span class="charliteral">'u'</span>, <span class="charliteral">'u'</span>, <span class="charliteral">'u'</span>, <span class="charliteral">'u'</span>, <span class="charliteral">'u'</span>, <span class="charliteral">'u'</span>, <span class="charliteral">'u'</span>, <span class="charliteral">'u'</span>, <span class="charliteral">'u'</span>, <span class="charliteral">'u'</span>, <span class="charliteral">'u'</span>, <span class="comment">// 10</span></div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>  0, 0, <span class="charliteral">'"'</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>  Z16, Z16, <span class="comment">// 30~4F</span></div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,<span class="charliteral">'\\'</span>, 0, 0, 0, <span class="comment">// 50</span></div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>  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> <span class="preprocessor">#undef Z16</span></div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>  };</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span> </div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>  <span class="keywordflow">if</span> (TargetEncoding::supportUnicode)</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>  <a class="code" href="namespacerapidjson.html#a820f77efccfbb749bd15fe4822d2c740">PutReserve</a>(*os_, 2 + length * 6); <span class="comment">// "\uxxxx..."</span></div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>  <a class="code" href="namespacerapidjson.html#a820f77efccfbb749bd15fe4822d2c740">PutReserve</a>(*os_, 2 + length * 12); <span class="comment">// "\uxxxx\uyyyy..."</span></div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span> </div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>  <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'\"'</span>);</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>  <a class="code" href="structrapidjson_1_1_generic_string_stream.html">GenericStringStream<SourceEncoding></a> is(str);</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>  <span class="keywordflow">while</span> (ScanWriteUnescapedString(is, length)) {</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>  <span class="keyword">const</span> Ch c = is.Peek();</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>  <span class="keywordflow">if</span> (!TargetEncoding::supportUnicode && static_cast<unsigned>(c) >= 0x80) {</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>  <span class="comment">// Unicode escaping</span></div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>  <span class="keywordtype">unsigned</span> codepoint;</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</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>(!SourceEncoding::Decode(is, &codepoint)))</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>  <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'\\'</span>);</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>  <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'u'</span>);</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>  <span class="keywordflow">if</span> (codepoint <= 0xD7FF || (codepoint >= 0xE000 && codepoint <= 0xFFFF)) {</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>  <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, hexDigits[(codepoint >> 12) & 15]);</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>  <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, hexDigits[(codepoint >> 8) & 15]);</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>  <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, hexDigits[(codepoint >> 4) & 15]);</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>  <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, hexDigits[(codepoint ) & 15]);</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>  }</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>  <span class="keywordflow">else</span> {</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</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>(codepoint >= 0x010000 && codepoint <= 0x10FFFF);</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>  <span class="comment">// Surrogate pair</span></div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>  <span class="keywordtype">unsigned</span> s = codepoint - 0x010000;</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>  <span class="keywordtype">unsigned</span> lead = (s >> 10) + 0xD800;</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>  <span class="keywordtype">unsigned</span> trail = (s & 0x3FF) + 0xDC00;</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>  <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, hexDigits[(lead >> 12) & 15]);</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>  <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, hexDigits[(lead >> 8) & 15]);</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>  <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, hexDigits[(lead >> 4) & 15]);</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>  <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, hexDigits[(lead ) & 15]);</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>  <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'\\'</span>);</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>  <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'u'</span>);</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>  <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, hexDigits[(trail >> 12) & 15]);</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>  <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, hexDigits[(trail >> 8) & 15]);</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>  <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, hexDigits[(trail >> 4) & 15]);</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>  <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, hexDigits[(trail ) & 15]); </div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>  }</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>  }</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((<span class="keyword">sizeof</span>(Ch) == 1 || static_cast<unsigned>(c) < 256) && <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<unsigned char>(c)])) {</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>  is.Take();</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>  <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'\\'</span>);</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>  <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, static_cast<typename OutputStream::Ch>(escape[static_cast<unsigned char>(c)]));</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>  <span class="keywordflow">if</span> (escape[static_cast<unsigned char>(c)] == <span class="charliteral">'u'</span>) {</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>  <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'0'</span>);</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>  <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'0'</span>);</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>  <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, hexDigits[static_cast<unsigned char>(c) >> 4]);</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>  <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, hexDigits[static_cast<unsigned char>(c) & 0xF]);</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>  }</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>  }</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>  <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 & <a class="code" href="namespacerapidjson.html#ad28b1de6aee37e92fc31792dd6dd6b19ac1b5e17278b060e9e866df075c104c10">kWriteValidateEncodingFlag</a> ? </div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>  <a class="code" href="structrapidjson_1_1_transcoder.html">Transcoder<SourceEncoding, TargetEncoding>::Validate</a>(is, *os_) :</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>  <a class="code" href="structrapidjson_1_1_transcoder.html">Transcoder<SourceEncoding, TargetEncoding>::TranscodeUnsafe</a>(is, *os_))))</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>  }</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>  <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'\"'</span>);</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>  }</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span> </div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>  <span class="keywordtype">bool</span> ScanWriteUnescapedString(<a class="code" href="structrapidjson_1_1_generic_string_stream.html">GenericStringStream<SourceEncoding></a>& is, <span class="keywordtype">size_t</span> length) {</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>  <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() < length);</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>  }</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span> </div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>  <span class="keywordtype">bool</span> WriteStartObject() { os_->Put(<span class="charliteral">'{'</span>); <span class="keywordflow">return</span> <span class="keyword">true</span>; }</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>  <span class="keywordtype">bool</span> WriteEndObject() { os_->Put(<span class="charliteral">'}'</span>); <span class="keywordflow">return</span> <span class="keyword">true</span>; }</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>  <span class="keywordtype">bool</span> WriteStartArray() { os_->Put(<span class="charliteral">'['</span>); <span class="keywordflow">return</span> <span class="keyword">true</span>; }</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>  <span class="keywordtype">bool</span> WriteEndArray() { os_->Put(<span class="charliteral">']'</span>); <span class="keywordflow">return</span> <span class="keyword">true</span>; }</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span> </div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>  <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>  <a class="code" href="namespacerapidjson.html#a820f77efccfbb749bd15fe4822d2c740">PutReserve</a>(*os_, length);</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>  <a class="code" href="structrapidjson_1_1_generic_string_stream.html">GenericStringStream<SourceEncoding></a> is(json);</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>  <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() < length)) {</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>  <span class="keyword">const</span> Ch c = is.Peek();</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</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>(c != <span class="charliteral">'\0'</span>);</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</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 & <a class="code" href="namespacerapidjson.html#ad28b1de6aee37e92fc31792dd6dd6b19ac1b5e17278b060e9e866df075c104c10">kWriteValidateEncodingFlag</a> ? </div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>  <a class="code" href="structrapidjson_1_1_transcoder.html">Transcoder<SourceEncoding, TargetEncoding>::Validate</a>(is, *os_) :</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>  <a class="code" href="structrapidjson_1_1_transcoder.html">Transcoder<SourceEncoding, TargetEncoding>::TranscodeUnsafe</a>(is, *os_))))</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>  }</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>  }</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span> </div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>  <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>  (void)type;</div><div class="line"><a name="l00475"></a><span class="lineno"> 475</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#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>  <a class="code" href="structrapidjson_1_1_writer_1_1_level.html">Level</a>* level = level_stack_.template Top<Level>();</div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>  <span class="keywordflow">if</span> (level-><a class="code" href="structrapidjson_1_1_writer_1_1_level.html#a5d17bdfa9ded5de72f5f91175cc3e36b">valueCount</a> > 0) {</div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span>  <span class="keywordflow">if</span> (level-><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>  os_->Put(<span class="charliteral">','</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>  <span class="keywordflow">else</span> <span class="comment">// in object</span></div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>  os_->Put((level-><a class="code" href="structrapidjson_1_1_writer_1_1_level.html#a5d17bdfa9ded5de72f5f91175cc3e36b">valueCount</a> % 2 == 0) ? <span class="charliteral">','</span> : <span class="charliteral">':'</span>);</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>  }</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>  <span class="keywordflow">if</span> (!level-><a class="code" href="structrapidjson_1_1_writer_1_1_level.html#a59255e3b1d371161f7c894503cfd6bec">inArray</a> && level-><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>  <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's in object, then even number should be a name</span></div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>  level-><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>  }</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>  <span class="keywordflow">else</span> {</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</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>(!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>  hasRoot_ = <span class="keyword">true</span>;</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>  }</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>  }</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span> </div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>  <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>  <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>  <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>  Flush();</div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>  <span class="keywordflow">return</span> ret;</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>  }</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span> </div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>  OutputStream* os_;</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>  internal::Stack<StackAllocator> level_stack_;</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>  <span class="keywordtype">int</span> maxDecimalPlaces_;</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>  <span class="keywordtype">bool</span> hasRoot_;</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span> </div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span> <span class="keyword">private</span>:</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>  <span class="comment">// Prohibit copy constructor & assignment operator.</span></div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>  <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>&);</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>  <a class="code" href="classrapidjson_1_1_writer.html">Writer</a>& operator=(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_writer.html">Writer</a>&);</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span> };</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span> </div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span> <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> </div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span> <span class="keyword">template</span><></div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_writer.html">Writer<StringBuffer>::WriteInt</a>(<span class="keywordtype">int</span> i) {</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>  <span class="keywordtype">char</span> *buffer = os_->Push(11);</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>  <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>  os_->Pop(static_cast<size_t>(11 - (end - buffer)));</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span> }</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span> </div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span> <span class="keyword">template</span><></div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_writer.html">Writer<StringBuffer>::WriteUint</a>(<span class="keywordtype">unsigned</span> u) {</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>  <span class="keywordtype">char</span> *buffer = os_->Push(10);</div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>  <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>  os_->Pop(static_cast<size_t>(10 - (end - buffer)));</div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span> }</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span> </div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span> <span class="keyword">template</span><></div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_writer.html">Writer<StringBuffer>::WriteInt64</a>(int64_t i64) {</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>  <span class="keywordtype">char</span> *buffer = os_->Push(21);</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>  <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>  os_->Pop(static_cast<size_t>(21 - (end - buffer)));</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span> }</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span> </div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span> <span class="keyword">template</span><></div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_writer.html">Writer<StringBuffer>::WriteUint64</a>(uint64_t u) {</div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>  <span class="keywordtype">char</span> *buffer = os_->Push(20);</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>  <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>  os_->Pop(static_cast<size_t>(20 - (end - buffer)));</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span> }</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span> </div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span> <span class="keyword">template</span><></div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_writer.html">Writer<StringBuffer>::WriteDouble</a>(<span class="keywordtype">double</span> d) {</div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>  <span class="keywordflow">if</span> (internal::Double(d).IsNanOrInf()) {</div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>  <span class="comment">// Note: This code path can only be reached if (RAPIDJSON_WRITE_DEFAULT_FLAGS & kWriteNanAndInfFlag).</span></div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>  <span class="keywordflow">if</span> (!(<a class="code" href="namespacerapidjson.html#ad28b1de6aee37e92fc31792dd6dd6b19a5b5ca665afdfa828a74ae5755c67a226">kWriteDefaultFlags</a> & <a class="code" href="namespacerapidjson.html#ad28b1de6aee37e92fc31792dd6dd6b19a3adbca1d31ad845ff4e9d742280cce39">kWriteNanAndInfFlag</a>))</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>  <span class="keywordflow">if</span> (internal::Double(d).IsNan()) {</div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>  <a class="code" href="namespacerapidjson.html#a820f77efccfbb749bd15fe4822d2c740">PutReserve</a>(*os_, 3);</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>  <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'N'</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'a'</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'N'</span>);</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>  }</div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>  <span class="keywordflow">if</span> (internal::Double(d).Sign()) {</div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>  <a class="code" href="namespacerapidjson.html#a820f77efccfbb749bd15fe4822d2c740">PutReserve</a>(*os_, 9);</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>  <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'-'</span>);</div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>  }</div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>  <a class="code" href="namespacerapidjson.html#a820f77efccfbb749bd15fe4822d2c740">PutReserve</a>(*os_, 8);</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>  <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'I'</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'n'</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'f'</span>);</div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>  <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'i'</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'n'</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'i'</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'t'</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'y'</span>);</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>  }</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>  </div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>  <span class="keywordtype">char</span> *buffer = os_->Push(25);</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>  <span class="keywordtype">char</span>* end = internal::dtoa(d, buffer, maxDecimalPlaces_);</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>  os_->Pop(static_cast<size_t>(25 - (end - buffer)));</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span> }</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span> </div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span> <span class="preprocessor">#if defined(RAPIDJSON_SSE2) || defined(RAPIDJSON_SSE42)</span></div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span> <span class="keyword">template</span><></div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_writer.html">Writer<StringBuffer>::ScanWriteUnescapedString</a>(<a class="code" href="structrapidjson_1_1_generic_string_stream.html">StringStream</a>& is, <span class="keywordtype">size_t</span> length) {</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>  <span class="keywordflow">if</span> (length < 16)</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>  <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() < length);</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span> </div><div class="line"><a name="l00579"></a><span class="lineno"> 579</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#ga5dc14176a9e71ace282404b0bcda57a1">RAPIDJSON_LIKELY</a>(is.Tell() < length))</div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span> </div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>  <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>  <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>  <span class="keyword">const</span> <span class="keywordtype">char</span>* nextAligned = <span class="keyword">reinterpret_cast<</span><span class="keyword">const </span><span class="keywordtype">char</span>*<span class="keyword">></span>((<span class="keyword">reinterpret_cast<</span><span class="keywordtype">size_t</span><span class="keyword">></span>(p) + 15) & <span class="keyword">static_cast<</span><span class="keywordtype">size_t</span><span class="keyword">></span>(~15));</div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>  <span class="keyword">const</span> <span class="keywordtype">char</span>* endAligned = <span class="keyword">reinterpret_cast<</span><span class="keyword">const </span><span class="keywordtype">char</span>*<span class="keyword">></span>(<span class="keyword">reinterpret_cast<</span><span class="keywordtype">size_t</span><span class="keyword">></span>(end) & static_cast<size_t>(~15));</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>  <span class="keywordflow">if</span> (nextAligned > end)</div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span> </div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>  <span class="keywordflow">while</span> (p != nextAligned)</div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>  <span class="keywordflow">if</span> (*p < 0x20 || *p == <span class="charliteral">'\"'</span> || *p == <span class="charliteral">'\\'</span>) {</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>  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>  <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() < length);</div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>  }</div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>  os_->PutUnsafe(*p++);</div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span> </div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>  <span class="comment">// The rest of string using SIMD</span></div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>  <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> dquote[16] = { <span class="charliteral">'\"'</span>, <span class="charliteral">'\"'</span>, <span class="charliteral">'\"'</span>, <span class="charliteral">'\"'</span>, <span class="charliteral">'\"'</span>, <span class="charliteral">'\"'</span>, <span class="charliteral">'\"'</span>, <span class="charliteral">'\"'</span>, <span class="charliteral">'\"'</span>, <span class="charliteral">'\"'</span>, <span class="charliteral">'\"'</span>, <span class="charliteral">'\"'</span>, <span class="charliteral">'\"'</span>, <span class="charliteral">'\"'</span>, <span class="charliteral">'\"'</span>, <span class="charliteral">'\"'</span> };</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>  <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> bslash[16] = { <span class="charliteral">'\\'</span>, <span class="charliteral">'\\'</span>, <span class="charliteral">'\\'</span>, <span class="charliteral">'\\'</span>, <span class="charliteral">'\\'</span>, <span class="charliteral">'\\'</span>, <span class="charliteral">'\\'</span>, <span class="charliteral">'\\'</span>, <span class="charliteral">'\\'</span>, <span class="charliteral">'\\'</span>, <span class="charliteral">'\\'</span>, <span class="charliteral">'\\'</span>, <span class="charliteral">'\\'</span>, <span class="charliteral">'\\'</span>, <span class="charliteral">'\\'</span>, <span class="charliteral">'\\'</span> };</div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>  <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>  <span class="keyword">const</span> __m128i dq = _mm_loadu_si128(reinterpret_cast<const __m128i *>(&dquote[0]));</div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>  <span class="keyword">const</span> __m128i bs = _mm_loadu_si128(reinterpret_cast<const __m128i *>(&bslash[0]));</div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>  <span class="keyword">const</span> __m128i sp = _mm_loadu_si128(reinterpret_cast<const __m128i *>(&space[0]));</div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span> </div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>  <span class="keywordflow">for</span> (; p != endAligned; p += 16) {</div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>  <span class="keyword">const</span> __m128i s = _mm_load_si128(reinterpret_cast<const __m128i *>(p));</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>  <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>  <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>  <span class="keyword">const</span> __m128i t3 = _mm_cmpeq_epi8(_mm_max_epu8(s, sp), sp); <span class="comment">// s < 0x20 <=> max(s, 0x1F) == 0x1F</span></div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>  <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>  <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> r = <span class="keyword">static_cast<</span><span class="keywordtype">unsigned</span> <span class="keywordtype">short</span><span class="keyword">></span>(_mm_movemask_epi8(x));</div><div class="line"><a name="l00612"></a><span class="lineno"> 612</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>(r != 0)) { <span class="comment">// some of characters is escaped</span></div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>  <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> len;</div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span> <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>  <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> offset;</div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span>  _BitScanForward(&offset, r);</div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>  len = offset;</div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span> <span class="preprocessor">#else</span></div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>  len = <span class="keyword">static_cast<</span><a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a><span class="keyword">></span>(__builtin_ffs(r) - 1);</div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>  <span class="keywordtype">char</span>* q = <span class="keyword">reinterpret_cast<</span><span class="keywordtype">char</span>*<span class="keyword">></span>(os_->PushUnsafe(len));</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i < len; i++)</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>  q[i] = p[i];</div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span> </div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>  p += len;</div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>  }</div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>  _mm_storeu_si128(reinterpret_cast<__m128i *>(os_->PushUnsafe(16)), s);</div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>  }</div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span> </div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>  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>  <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() < length);</div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span> }</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span> <span class="preprocessor">#elif defined(RAPIDJSON_NEON)</span></div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span> <span class="keyword">template</span><></div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_writer.html">Writer<StringBuffer>::ScanWriteUnescapedString</a>(<a class="code" href="structrapidjson_1_1_generic_string_stream.html">StringStream</a>& is, <span class="keywordtype">size_t</span> length) {</div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span>  <span class="keywordflow">if</span> (length < 16)</div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>  <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() < length);</div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span> </div><div class="line"><a name="l00640"></a><span class="lineno"> 640</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#ga5dc14176a9e71ace282404b0bcda57a1">RAPIDJSON_LIKELY</a>(is.Tell() < length))</div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span> </div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span>  <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>  <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>  <span class="keyword">const</span> <span class="keywordtype">char</span>* nextAligned = <span class="keyword">reinterpret_cast<</span><span class="keyword">const </span><span class="keywordtype">char</span>*<span class="keyword">></span>((<span class="keyword">reinterpret_cast<</span><span class="keywordtype">size_t</span><span class="keyword">></span>(p) + 15) & <span class="keyword">static_cast<</span><span class="keywordtype">size_t</span><span class="keyword">></span>(~15));</div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>  <span class="keyword">const</span> <span class="keywordtype">char</span>* endAligned = <span class="keyword">reinterpret_cast<</span><span class="keyword">const </span><span class="keywordtype">char</span>*<span class="keyword">></span>(<span class="keyword">reinterpret_cast<</span><span class="keywordtype">size_t</span><span class="keyword">></span>(end) & static_cast<size_t>(~15));</div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>  <span class="keywordflow">if</span> (nextAligned > end)</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span> </div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>  <span class="keywordflow">while</span> (p != nextAligned)</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>  <span class="keywordflow">if</span> (*p < 0x20 || *p == <span class="charliteral">'\"'</span> || *p == <span class="charliteral">'\\'</span>) {</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>  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>  <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() < length);</div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>  }</div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>  os_->PutUnsafe(*p++);</div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span> </div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>  <span class="comment">// The rest of string using SIMD</span></div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>  <span class="keyword">const</span> uint8x16_t s0 = vmovq_n_u8(<span class="charliteral">'"'</span>);</div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>  <span class="keyword">const</span> uint8x16_t s1 = vmovq_n_u8(<span class="charliteral">'\\'</span>);</div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span>  <span class="keyword">const</span> uint8x16_t s2 = vmovq_n_u8(<span class="charliteral">'\b'</span>);</div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>  <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> </div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>  <span class="keywordflow">for</span> (; p != endAligned; p += 16) {</div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span>  <span class="keyword">const</span> uint8x16_t s = vld1q_u8(reinterpret_cast<const uint8_t *>(p));</div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span>  uint8x16_t x = vceqq_u8(s, s0);</div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>  x = vorrq_u8(x, vceqq_u8(s, s1));</div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>  x = vorrq_u8(x, vceqq_u8(s, s2));</div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>  x = vorrq_u8(x, vcltq_u8(s, s3));</div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span> </div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span>  x = vrev64q_u8(x); <span class="comment">// Rev in 64</span></div><div class="line"><a name="l00672"></a><span class="lineno"> 672</span>  uint64_t low = vgetq_lane_u64(reinterpret_cast<uint64x2_t>(x), 0); <span class="comment">// extract</span></div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span>  uint64_t high = vgetq_lane_u64(reinterpret_cast<uint64x2_t>(x), 1); <span class="comment">// extract</span></div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span> </div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>  <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> len = 0;</div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>  <span class="keywordtype">bool</span> escaped = <span class="keyword">false</span>;</div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span>  <span class="keywordflow">if</span> (low == 0) {</div><div class="line"><a name="l00678"></a><span class="lineno"> 678</span>  <span class="keywordflow">if</span> (high != 0) {</div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span>  <span class="keywordtype">unsigned</span> lz = (unsigned)__builtin_clzll(high);</div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span>  len = 8 + (lz >> 3);</div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>  escaped = <span class="keyword">true</span>;</div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>  }</div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>  <span class="keywordtype">unsigned</span> lz = (unsigned)__builtin_clzll(low);</div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>  len = lz >> 3;</div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>  escaped = <span class="keyword">true</span>;</div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>  }</div><div class="line"><a name="l00688"></a><span class="lineno"> 688</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>(escaped)) { <span class="comment">// some of characters is escaped</span></div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>  <span class="keywordtype">char</span>* q = <span class="keyword">reinterpret_cast<</span><span class="keywordtype">char</span>*<span class="keyword">></span>(os_->PushUnsafe(len));</div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span>  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i < len; i++)</div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span>  q[i] = p[i];</div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span> </div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span>  p += len;</div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span>  }</div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span>  vst1q_u8(reinterpret_cast<uint8_t *>(os_->PushUnsafe(16)), s);</div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span>  }</div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span> </div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span>  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>  <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() < length);</div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span> }</div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span> <span class="preprocessor">#endif // RAPIDJSON_NEON</span></div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span> </div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span> RAPIDJSON_NAMESPACE_END</div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span> </div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span> <span class="preprocessor">#if defined(_MSC_VER) || defined(__clang__)</span></div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span> RAPIDJSON_DIAG_POP</div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span> </div><div class="line"><a name="l00710"></a><span class="lineno"> 710</span> <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> <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> <span class="comment">// </span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <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> <span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">// Licensed under the MIT License (the "License"); you may not use this file except</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <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> <span class="comment">//</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">// http://opensource.org/licenses/MIT</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">//</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <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> <span class="comment">// under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR </span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <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> <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> </div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor">#ifndef RAPIDJSON_WRITER_H_</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#define RAPIDJSON_WRITER_H_</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> </div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#include "stream.h"</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#include "internal/meta.h"</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include "internal/stack.h"</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include "internal/strfunc.h"</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include "internal/dtoa.h"</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include "internal/itoa.h"</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include "stringbuffer.h"</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include <new></span> <span class="comment">// placement new</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> </div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#if defined(RAPIDJSON_SIMD) && defined(_MSC_VER)</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#include <intrin.h></span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#pragma intrinsic(_BitScanForward)</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#ifdef RAPIDJSON_SSE42</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#include <nmmintrin.h></span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#elif defined(RAPIDJSON_SSE2)</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor">#include <emmintrin.h></span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor">#elif defined(RAPIDJSON_NEON)</span></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor">#include <arm_neon.h></span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="preprocessor">#ifdef __clang__</span></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span> RAPIDJSON_DIAG_PUSH</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span> RAPIDJSON_DIAG_OFF(padded)</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span> RAPIDJSON_DIAG_OFF(unreachable-code)</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span> RAPIDJSON_DIAG_OFF(c++98-compat)</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="preprocessor">#elif defined(_MSC_VER)</span></div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span> RAPIDJSON_DIAG_PUSH</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span> 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> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span> </div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span> RAPIDJSON_NAMESPACE_BEGIN</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="comment"></span></div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="comment"></span><span class="comment">// WriteFlag</span></div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="comment"></span></div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="comment">/*! \def RAPIDJSON_WRITE_DEFAULT_FLAGS </span></div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="comment"> \ingroup RAPIDJSON_CONFIG</span></div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="comment"> \brief User-defined kWriteDefaultFlags definition.</span></div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="comment"></span></div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <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> <span class="comment">*/</span></div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <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> <span class="preprocessor">#define RAPIDJSON_WRITE_DEFAULT_FLAGS kWriteNoFlags</span></div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="comment"></span></div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <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> <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>  <a class="code" href="namespacerapidjson.html#ad28b1de6aee37e92fc31792dd6dd6b19ae971aa1fc0ae64c8f3d2b47fd802846a">kWriteNoFlags</a> = 0, <span class="comment">//!< 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> <span class="comment"></span> <a class="code" href="namespacerapidjson.html#ad28b1de6aee37e92fc31792dd6dd6b19ac1b5e17278b060e9e866df075c104c10">kWriteValidateEncodingFlag</a> = 1, <span class="comment">//!< 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> <span class="comment"></span> <a class="code" href="namespacerapidjson.html#ad28b1de6aee37e92fc31792dd6dd6b19a3adbca1d31ad845ff4e9d742280cce39">kWriteNanAndInfFlag</a> = 2, <span class="comment">//!< 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> <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">//!< 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> <span class="comment"></span>};</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="comment"></span></div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="comment">//! JSON writer</span></div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <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> <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> <span class="comment"></span></div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <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> <span class="comment"></span></div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <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> <span class="comment"></span></div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <span class="comment"> for example Reader::Parse() and Document::Accept().</span></div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="comment"></span></div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="comment"> \tparam OutputStream Type of output stream.</span></div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="comment"> \tparam SourceEncoding Encoding of source string.</span></div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <span class="comment"> \tparam TargetEncoding Encoding of output stream.</span></div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <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> <span class="comment"> \note implements Handler concept</span></div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="comment">*/</span></div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <span class="keyword">template</span><<span class="keyword">typename</span> OutputStream, <span class="keyword">typename</span> SourceEncoding = UTF8<>, <span class="keyword">typename</span> TargetEncoding = UTF8<>, <span class="keyword">typename</span> StackAllocator = CrtAllocator, <span class="keywordtype">unsigned</span> writeFlags = kWriteDefaultFlags></div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <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> <span class="keyword">public</span>:</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <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> </div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  <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> <span class="comment"></span></div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <span class="comment"> //! Constructor</span></div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <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> <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> <span class="comment"> \param levelDepth Initial capacity of stack.</span></div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span> <span class="comment"> */</span></div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  <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>  <a class="code" href="classrapidjson_1_1_writer.html#a98a421c806b456688874511f64add1f2">Writer</a>(OutputStream& 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>  os_(&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> </div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <span class="keyword">explicit</span></div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  <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>  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> </div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <span class="preprocessor">#if RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  <a class="code" href="classrapidjson_1_1_writer.html">Writer</a>(<a class="code" href="classrapidjson_1_1_writer.html">Writer</a>&& rhs) :</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  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>  rhs.os_ = 0;</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  }</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="comment"></span></div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="comment"> //! Reset the writer with a new stream.</span></div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span> <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> <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> <span class="comment"></span></div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <span class="comment"> \param os New output stream.</span></div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <span class="comment"> \code</span></div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span> <span class="comment"> Writer<OutputStream> writer(os1);</span></div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <span class="comment"> writer.StartObject();</span></div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span> <span class="comment"> // ...</span></div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span> <span class="comment"> writer.EndObject();</span></div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span> <span class="comment"></span></div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <span class="comment"> writer.Reset(os2);</span></div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span> <span class="comment"> writer.StartObject();</span></div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span> <span class="comment"> // ...</span></div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span> <span class="comment"> writer.EndObject();</span></div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <span class="comment"> \endcode</span></div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <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>  <span class="keywordtype">void</span> <a class="code" href="classrapidjson_1_1_writer.html#ac4026d3f14b80d6d7fc10004b1972722">Reset</a>(OutputStream& os) {</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  os_ = &os;</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  hasRoot_ = <span class="keyword">false</span>;</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  level_stack_.Clear();</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  }</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <span class="comment"></span></div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span> <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> <span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span> <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> <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>  <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>  <span class="keywordflow">return</span> hasRoot_ && level_stack_.Empty();</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  }</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span> </div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  <span class="keywordtype">int</span> GetMaxDecimalPlaces()<span class="keyword"> const </span>{</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  <span class="keywordflow">return</span> maxDecimalPlaces_;</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  }</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span> <span class="comment"></span></div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span> <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> <span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span> <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> <span class="comment"></span></div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span> <span class="comment"> For example, </span></div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span> <span class="comment"></span></div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span> <span class="comment"> \code</span></div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span> <span class="comment"> writer.SetMaxDecimalPlaces(3);</span></div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span> <span class="comment"> writer.StartArray();</span></div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span> <span class="comment"> writer.Double(0.12345); // "0.123"</span></div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span> <span class="comment"> writer.Double(0.0001); // "0.0"</span></div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span> <span class="comment"> writer.Double(1.234567890123456e30); // "1.234567890123456e30" (do not truncate significand for positive exponent)</span></div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span> <span class="comment"> writer.Double(1.23e-4); // "0.0" (do truncate significand for negative exponent)</span></div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span> <span class="comment"> writer.EndArray();</span></div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span> <span class="comment"> \endcode</span></div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span> <span class="comment"></span></div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span> <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> <span class="comment"> \code</span></div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span> <span class="comment"> writer.SetMaxDecimalPlaces(Writer::kDefaultMaxDecimalPlaces);</span></div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span> <span class="comment"> \endcode</span></div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span> <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>  <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>  maxDecimalPlaces_ = maxDecimalPlaces;</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  }</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span> <span class="comment"></span></div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span> <span class="comment"> /*!@name Implementation of Handler</span></div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span> <span class="comment"> \see Handler</span></div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span> <span class="comment"> */</span><span class="comment"></span></div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span> <span class="comment"> //@{</span></div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span> <span class="comment"></span></div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  <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>  <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>  <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>  <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>  <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>  <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> <span class="comment"></span></div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span> <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> <span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span> <span class="comment"> \param d The value to be written.</span></div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span> <span class="comment"> \return Whether it is succeed.</span></div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span> <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>  <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> </div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  <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>  <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>  (void)copy;</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  Prefix(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a">kNumberType</a>);</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  <span class="keywordflow">return</span> EndValue(WriteString(str, length));</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  }</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span> </div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  <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>  <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>  (void)copy;</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  Prefix(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4ad6379da3dc04b83a591992bfb9fabba7">kStringType</a>);</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  <span class="keywordflow">return</span> EndValue(WriteString(str, length));</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  }</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span> </div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span> <span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  <span class="keywordtype">bool</span> String(<span class="keyword">const</span> std::basic_string<Ch>& str) {</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  <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>  }</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span> </div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  <span class="keywordtype">bool</span> StartObject() {</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  Prefix(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4acf030b422a32c3647c7c5973bd4dd0a9">kObjectType</a>);</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  <span class="keyword">new</span> (level_stack_.template Push<Level>()) <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>  <span class="keywordflow">return</span> WriteStartObject();</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  }</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span> </div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  <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> </div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span> <span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  <span class="keywordtype">bool</span> Key(<span class="keyword">const</span> std::basic_string<Ch>& str)</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  {</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  <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>  }</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  </div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  <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>  (void)memberCount;</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</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>(level_stack_.GetSize() >= <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>  <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<Level>()->inArray); <span class="comment">// currently inside an Array, not Object</span></div><div class="line"><a name="l00234"></a><span class="lineno"> 234</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>(0 == level_stack_.template Top<Level>()->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>  level_stack_.template Pop<Level>(1);</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  <span class="keywordflow">return</span> EndValue(WriteEndObject());</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  }</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span> </div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  <span class="keywordtype">bool</span> StartArray() {</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  Prefix(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a058c622e1e7d59419ae58b895cbce468">kArrayType</a>);</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  <span class="keyword">new</span> (level_stack_.template Push<Level>()) <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>  <span class="keywordflow">return</span> WriteStartArray();</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  }</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span> </div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  <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>  (void)elementCount;</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</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>(level_stack_.GetSize() >= <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>  <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<Level>()->inArray);</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>  level_stack_.template Pop<Level>(1);</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  <span class="keywordflow">return</span> EndValue(WriteEndArray());</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  }<span class="comment"></span></div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span> <span class="comment"> //@}</span></div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span> <span class="comment"> /*! @name Convenience extensions */</span><span class="comment"></span></div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span> <span class="comment"> //@{</span></div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span> <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> <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>& 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>  <span class="keywordtype">bool</span> Key(<span class="keyword">const</span> Ch* <span class="keyword">const</span>& str) { <span class="keywordflow">return</span> Key(str, internal::StrLen(str)); }</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  <span class="comment"></span></div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span> <span class="comment"> //@}</span></div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span> <span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span> <span class="comment"> //! Write a raw JSON value.</span></div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span> <span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span> <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> <span class="comment"></span></div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span> <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> <span class="comment"> \param length Length of the json.</span></div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span> <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> <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>  <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>  <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>  Prefix(type);</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  <span class="keywordflow">return</span> EndValue(WriteRawValue(json, length));</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  }</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span> <span class="comment"></span></div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span> <span class="comment"> //! Flush the output stream.</span></div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span> <span class="comment"></span><span class="comment"> /*!</span></div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span> <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> <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>  <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>  os_->Flush();</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>  }</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span> </div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span> <span class="keyword">protected</span>:<span class="comment"></span></div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span> <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> <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>  <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>  <span class="keywordtype">size_t</span> <a class="code" href="structrapidjson_1_1_writer_1_1_level.html#a5d17bdfa9ded5de72f5f91175cc3e36b">valueCount</a>; <span class="comment">//!< 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> <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">//!< true if in array, otherwise in object</span></div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span> <span class="comment"></span> };</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span> </div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  <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> </div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  <span class="keywordtype">bool</span> WriteNull() {</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>  <a class="code" href="namespacerapidjson.html#a820f77efccfbb749bd15fe4822d2c740">PutReserve</a>(*os_, 4);</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'n'</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'u'</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'l'</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'l'</span>); <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  }</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span> </div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  <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>  <span class="keywordflow">if</span> (b) {</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  <a class="code" href="namespacerapidjson.html#a820f77efccfbb749bd15fe4822d2c740">PutReserve</a>(*os_, 4);</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'t'</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'r'</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'u'</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'e'</span>);</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  }</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  <span class="keywordflow">else</span> {</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  <a class="code" href="namespacerapidjson.html#a820f77efccfbb749bd15fe4822d2c740">PutReserve</a>(*os_, 5);</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'f'</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'a'</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'l'</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'s'</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'e'</span>);</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  }</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>  }</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span> </div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  <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>  <span class="keywordtype">char</span> buffer[11];</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  <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>  <a class="code" href="namespacerapidjson.html#a820f77efccfbb749bd15fe4822d2c740">PutReserve</a>(*os_, static_cast<size_t>(end - buffer));</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>  <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>  <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, static_cast<typename OutputStream::Ch>(*p));</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  }</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span> </div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  <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>  <span class="keywordtype">char</span> buffer[10];</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  <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>  <a class="code" href="namespacerapidjson.html#a820f77efccfbb749bd15fe4822d2c740">PutReserve</a>(*os_, static_cast<size_t>(end - buffer));</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  <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>  <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, static_cast<typename OutputStream::Ch>(*p));</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>  }</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span> </div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  <span class="keywordtype">bool</span> WriteInt64(int64_t i64) {</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>  <span class="keywordtype">char</span> buffer[21];</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  <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>  <a class="code" href="namespacerapidjson.html#a820f77efccfbb749bd15fe4822d2c740">PutReserve</a>(*os_, static_cast<size_t>(end - buffer));</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  <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>  <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, static_cast<typename OutputStream::Ch>(*p));</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>  }</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span> </div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>  <span class="keywordtype">bool</span> WriteUint64(uint64_t u64) {</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>  <span class="keywordtype">char</span> buffer[20];</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>  <span class="keywordtype">char</span>* end = internal::u64toa(u64, buffer);</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>  <a class="code" href="namespacerapidjson.html#a820f77efccfbb749bd15fe4822d2c740">PutReserve</a>(*os_, static_cast<size_t>(end - buffer));</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>  <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>  <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, static_cast<typename OutputStream::Ch>(*p));</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>  }</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span> </div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>  <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>  <span class="keywordflow">if</span> (internal::Double(d).IsNanOrInf()) {</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>  <span class="keywordflow">if</span> (!(writeFlags & <a class="code" href="namespacerapidjson.html#ad28b1de6aee37e92fc31792dd6dd6b19a3adbca1d31ad845ff4e9d742280cce39">kWriteNanAndInfFlag</a>))</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  <span class="keywordflow">if</span> (internal::Double(d).IsNan()) {</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  <a class="code" href="namespacerapidjson.html#a820f77efccfbb749bd15fe4822d2c740">PutReserve</a>(*os_, 3);</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>  <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'N'</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'a'</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'N'</span>);</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>  }</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>  <span class="keywordflow">if</span> (internal::Double(d).Sign()) {</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>  <a class="code" href="namespacerapidjson.html#a820f77efccfbb749bd15fe4822d2c740">PutReserve</a>(*os_, 9);</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>  <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'-'</span>);</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  }</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>  <a class="code" href="namespacerapidjson.html#a820f77efccfbb749bd15fe4822d2c740">PutReserve</a>(*os_, 8);</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>  <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'I'</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'n'</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'f'</span>);</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>  <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'i'</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'n'</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'i'</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'t'</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'y'</span>);</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>  }</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span> </div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>  <span class="keywordtype">char</span> buffer[25];</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>  <span class="keywordtype">char</span>* end = internal::dtoa(d, buffer, maxDecimalPlaces_);</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>  <a class="code" href="namespacerapidjson.html#a820f77efccfbb749bd15fe4822d2c740">PutReserve</a>(*os_, static_cast<size_t>(end - buffer));</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>  <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>  <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, static_cast<typename OutputStream::Ch>(*p));</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>  }</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span> </div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>  <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>  <span class="keyword">static</span> <span class="keyword">const</span> <span class="keyword">typename</span> OutputStream::Ch hexDigits[16] = { <span class="charliteral">'0'</span>, <span class="charliteral">'1'</span>, <span class="charliteral">'2'</span>, <span class="charliteral">'3'</span>, <span class="charliteral">'4'</span>, <span class="charliteral">'5'</span>, <span class="charliteral">'6'</span>, <span class="charliteral">'7'</span>, <span class="charliteral">'8'</span>, <span class="charliteral">'9'</span>, <span class="charliteral">'A'</span>, <span class="charliteral">'B'</span>, <span class="charliteral">'C'</span>, <span class="charliteral">'D'</span>, <span class="charliteral">'E'</span>, <span class="charliteral">'F'</span> };</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>  <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> <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>  <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>  <span class="charliteral">'u'</span>, <span class="charliteral">'u'</span>, <span class="charliteral">'u'</span>, <span class="charliteral">'u'</span>, <span class="charliteral">'u'</span>, <span class="charliteral">'u'</span>, <span class="charliteral">'u'</span>, <span class="charliteral">'u'</span>, <span class="charliteral">'b'</span>, <span class="charliteral">'t'</span>, <span class="charliteral">'n'</span>, <span class="charliteral">'u'</span>, <span class="charliteral">'f'</span>, <span class="charliteral">'r'</span>, <span class="charliteral">'u'</span>, <span class="charliteral">'u'</span>, <span class="comment">// 00</span></div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>  <span class="charliteral">'u'</span>, <span class="charliteral">'u'</span>, <span class="charliteral">'u'</span>, <span class="charliteral">'u'</span>, <span class="charliteral">'u'</span>, <span class="charliteral">'u'</span>, <span class="charliteral">'u'</span>, <span class="charliteral">'u'</span>, <span class="charliteral">'u'</span>, <span class="charliteral">'u'</span>, <span class="charliteral">'u'</span>, <span class="charliteral">'u'</span>, <span class="charliteral">'u'</span>, <span class="charliteral">'u'</span>, <span class="charliteral">'u'</span>, <span class="charliteral">'u'</span>, <span class="comment">// 10</span></div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>  0, 0, <span class="charliteral">'"'</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>  Z16, Z16, <span class="comment">// 30~4F</span></div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,<span class="charliteral">'\\'</span>, 0, 0, 0, <span class="comment">// 50</span></div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>  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> <span class="preprocessor">#undef Z16</span></div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>  };</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span> </div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>  <span class="keywordflow">if</span> (TargetEncoding::supportUnicode)</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>  <a class="code" href="namespacerapidjson.html#a820f77efccfbb749bd15fe4822d2c740">PutReserve</a>(*os_, 2 + length * 6); <span class="comment">// "\uxxxx..."</span></div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>  <a class="code" href="namespacerapidjson.html#a820f77efccfbb749bd15fe4822d2c740">PutReserve</a>(*os_, 2 + length * 12); <span class="comment">// "\uxxxx\uyyyy..."</span></div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span> </div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>  <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'\"'</span>);</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>  <a class="code" href="structrapidjson_1_1_generic_string_stream.html">GenericStringStream<SourceEncoding></a> is(str);</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>  <span class="keywordflow">while</span> (ScanWriteUnescapedString(is, length)) {</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>  <span class="keyword">const</span> Ch c = is.Peek();</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>  <span class="keywordflow">if</span> (!TargetEncoding::supportUnicode && static_cast<unsigned>(c) >= 0x80) {</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>  <span class="comment">// Unicode escaping</span></div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>  <span class="keywordtype">unsigned</span> codepoint;</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</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>(!SourceEncoding::Decode(is, &codepoint)))</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>  <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'\\'</span>);</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>  <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'u'</span>);</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>  <span class="keywordflow">if</span> (codepoint <= 0xD7FF || (codepoint >= 0xE000 && codepoint <= 0xFFFF)) {</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>  <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, hexDigits[(codepoint >> 12) & 15]);</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>  <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, hexDigits[(codepoint >> 8) & 15]);</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>  <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, hexDigits[(codepoint >> 4) & 15]);</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>  <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, hexDigits[(codepoint ) & 15]);</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>  }</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>  <span class="keywordflow">else</span> {</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</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>(codepoint >= 0x010000 && codepoint <= 0x10FFFF);</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>  <span class="comment">// Surrogate pair</span></div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>  <span class="keywordtype">unsigned</span> s = codepoint - 0x010000;</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>  <span class="keywordtype">unsigned</span> lead = (s >> 10) + 0xD800;</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>  <span class="keywordtype">unsigned</span> trail = (s & 0x3FF) + 0xDC00;</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>  <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, hexDigits[(lead >> 12) & 15]);</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>  <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, hexDigits[(lead >> 8) & 15]);</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>  <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, hexDigits[(lead >> 4) & 15]);</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>  <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, hexDigits[(lead ) & 15]);</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>  <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'\\'</span>);</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>  <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'u'</span>);</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>  <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, hexDigits[(trail >> 12) & 15]);</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>  <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, hexDigits[(trail >> 8) & 15]);</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>  <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, hexDigits[(trail >> 4) & 15]);</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>  <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, hexDigits[(trail ) & 15]); </div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>  }</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>  }</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((<span class="keyword">sizeof</span>(Ch) == 1 || static_cast<unsigned>(c) < 256) && <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<unsigned char>(c)])) {</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>  is.Take();</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>  <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'\\'</span>);</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>  <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, static_cast<typename OutputStream::Ch>(escape[static_cast<unsigned char>(c)]));</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>  <span class="keywordflow">if</span> (escape[static_cast<unsigned char>(c)] == <span class="charliteral">'u'</span>) {</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>  <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'0'</span>);</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>  <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'0'</span>);</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>  <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, hexDigits[static_cast<unsigned char>(c) >> 4]);</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>  <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, hexDigits[static_cast<unsigned char>(c) & 0xF]);</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>  }</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>  }</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>  <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 & <a class="code" href="namespacerapidjson.html#ad28b1de6aee37e92fc31792dd6dd6b19ac1b5e17278b060e9e866df075c104c10">kWriteValidateEncodingFlag</a> ? </div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>  <a class="code" href="structrapidjson_1_1_transcoder.html">Transcoder<SourceEncoding, TargetEncoding>::Validate</a>(is, *os_) :</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>  <a class="code" href="structrapidjson_1_1_transcoder.html">Transcoder<SourceEncoding, TargetEncoding>::TranscodeUnsafe</a>(is, *os_))))</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>  }</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>  <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'\"'</span>);</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>  }</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span> </div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>  <span class="keywordtype">bool</span> ScanWriteUnescapedString(<a class="code" href="structrapidjson_1_1_generic_string_stream.html">GenericStringStream<SourceEncoding></a>& is, <span class="keywordtype">size_t</span> length) {</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>  <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() < length);</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>  }</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span> </div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>  <span class="keywordtype">bool</span> WriteStartObject() { os_->Put(<span class="charliteral">'{'</span>); <span class="keywordflow">return</span> <span class="keyword">true</span>; }</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>  <span class="keywordtype">bool</span> WriteEndObject() { os_->Put(<span class="charliteral">'}'</span>); <span class="keywordflow">return</span> <span class="keyword">true</span>; }</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>  <span class="keywordtype">bool</span> WriteStartArray() { os_->Put(<span class="charliteral">'['</span>); <span class="keywordflow">return</span> <span class="keyword">true</span>; }</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>  <span class="keywordtype">bool</span> WriteEndArray() { os_->Put(<span class="charliteral">']'</span>); <span class="keywordflow">return</span> <span class="keyword">true</span>; }</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span> </div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>  <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>  <a class="code" href="namespacerapidjson.html#a820f77efccfbb749bd15fe4822d2c740">PutReserve</a>(*os_, length);</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>  <a class="code" href="structrapidjson_1_1_generic_string_stream.html">GenericStringStream<SourceEncoding></a> is(json);</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>  <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() < length)) {</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>  <span class="keyword">const</span> Ch c = is.Peek();</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</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>(c != <span class="charliteral">'\0'</span>);</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</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 & <a class="code" href="namespacerapidjson.html#ad28b1de6aee37e92fc31792dd6dd6b19ac1b5e17278b060e9e866df075c104c10">kWriteValidateEncodingFlag</a> ? </div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>  <a class="code" href="structrapidjson_1_1_transcoder.html">Transcoder<SourceEncoding, TargetEncoding>::Validate</a>(is, *os_) :</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>  <a class="code" href="structrapidjson_1_1_transcoder.html">Transcoder<SourceEncoding, TargetEncoding>::TranscodeUnsafe</a>(is, *os_))))</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>  }</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>  }</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span> </div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>  <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>  (void)type;</div><div class="line"><a name="l00475"></a><span class="lineno"> 475</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#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>  <a class="code" href="structrapidjson_1_1_writer_1_1_level.html">Level</a>* level = level_stack_.template Top<Level>();</div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>  <span class="keywordflow">if</span> (level-><a class="code" href="structrapidjson_1_1_writer_1_1_level.html#a5d17bdfa9ded5de72f5f91175cc3e36b">valueCount</a> > 0) {</div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span>  <span class="keywordflow">if</span> (level-><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>  os_->Put(<span class="charliteral">','</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>  <span class="keywordflow">else</span> <span class="comment">// in object</span></div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>  os_->Put((level-><a class="code" href="structrapidjson_1_1_writer_1_1_level.html#a5d17bdfa9ded5de72f5f91175cc3e36b">valueCount</a> % 2 == 0) ? <span class="charliteral">','</span> : <span class="charliteral">':'</span>);</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>  }</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>  <span class="keywordflow">if</span> (!level-><a class="code" href="structrapidjson_1_1_writer_1_1_level.html#a59255e3b1d371161f7c894503cfd6bec">inArray</a> && level-><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>  <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's in object, then even number should be a name</span></div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>  level-><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>  }</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>  <span class="keywordflow">else</span> {</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</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>(!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>  hasRoot_ = <span class="keyword">true</span>;</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>  }</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>  }</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span> </div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>  <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>  <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>  <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>  Flush();</div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>  <span class="keywordflow">return</span> ret;</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>  }</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span> </div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>  OutputStream* os_;</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>  internal::Stack<StackAllocator> level_stack_;</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>  <span class="keywordtype">int</span> maxDecimalPlaces_;</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>  <span class="keywordtype">bool</span> hasRoot_;</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span> </div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span> <span class="keyword">private</span>:</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>  <span class="comment">// Prohibit copy constructor & assignment operator.</span></div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>  <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>&);</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>  <a class="code" href="classrapidjson_1_1_writer.html">Writer</a>& operator=(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_writer.html">Writer</a>&);</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span> };</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span> </div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span> <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> </div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span> <span class="keyword">template</span><></div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_writer.html">Writer<StringBuffer>::WriteInt</a>(<span class="keywordtype">int</span> i) {</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>  <span class="keywordtype">char</span> *buffer = os_->Push(11);</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>  <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>  os_->Pop(static_cast<size_t>(11 - (end - buffer)));</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span> }</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span> </div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span> <span class="keyword">template</span><></div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_writer.html">Writer<StringBuffer>::WriteUint</a>(<span class="keywordtype">unsigned</span> u) {</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>  <span class="keywordtype">char</span> *buffer = os_->Push(10);</div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>  <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>  os_->Pop(static_cast<size_t>(10 - (end - buffer)));</div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span> }</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span> </div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span> <span class="keyword">template</span><></div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_writer.html">Writer<StringBuffer>::WriteInt64</a>(int64_t i64) {</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>  <span class="keywordtype">char</span> *buffer = os_->Push(21);</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>  <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>  os_->Pop(static_cast<size_t>(21 - (end - buffer)));</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span> }</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span> </div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span> <span class="keyword">template</span><></div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_writer.html">Writer<StringBuffer>::WriteUint64</a>(uint64_t u) {</div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>  <span class="keywordtype">char</span> *buffer = os_->Push(20);</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>  <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>  os_->Pop(static_cast<size_t>(20 - (end - buffer)));</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span> }</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span> </div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span> <span class="keyword">template</span><></div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_writer.html">Writer<StringBuffer>::WriteDouble</a>(<span class="keywordtype">double</span> d) {</div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>  <span class="keywordflow">if</span> (internal::Double(d).IsNanOrInf()) {</div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>  <span class="comment">// Note: This code path can only be reached if (RAPIDJSON_WRITE_DEFAULT_FLAGS & kWriteNanAndInfFlag).</span></div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>  <span class="keywordflow">if</span> (!(<a class="code" href="namespacerapidjson.html#ad28b1de6aee37e92fc31792dd6dd6b19a5b5ca665afdfa828a74ae5755c67a226">kWriteDefaultFlags</a> & <a class="code" href="namespacerapidjson.html#ad28b1de6aee37e92fc31792dd6dd6b19a3adbca1d31ad845ff4e9d742280cce39">kWriteNanAndInfFlag</a>))</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>  <span class="keywordflow">if</span> (internal::Double(d).IsNan()) {</div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>  <a class="code" href="namespacerapidjson.html#a820f77efccfbb749bd15fe4822d2c740">PutReserve</a>(*os_, 3);</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>  <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'N'</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'a'</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'N'</span>);</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>  }</div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>  <span class="keywordflow">if</span> (internal::Double(d).Sign()) {</div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>  <a class="code" href="namespacerapidjson.html#a820f77efccfbb749bd15fe4822d2c740">PutReserve</a>(*os_, 9);</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>  <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'-'</span>);</div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>  }</div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>  <a class="code" href="namespacerapidjson.html#a820f77efccfbb749bd15fe4822d2c740">PutReserve</a>(*os_, 8);</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>  <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'I'</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'n'</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'f'</span>);</div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>  <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'i'</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'n'</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'i'</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'t'</span>); <a class="code" href="namespacerapidjson.html#a0a774dcffe8ae07686f459ae017d2f20">PutUnsafe</a>(*os_, <span class="charliteral">'y'</span>);</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>  }</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>  </div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>  <span class="keywordtype">char</span> *buffer = os_->Push(25);</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>  <span class="keywordtype">char</span>* end = internal::dtoa(d, buffer, maxDecimalPlaces_);</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>  os_->Pop(static_cast<size_t>(25 - (end - buffer)));</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span> }</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span> </div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span> <span class="preprocessor">#if defined(RAPIDJSON_SSE2) || defined(RAPIDJSON_SSE42)</span></div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span> <span class="keyword">template</span><></div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_writer.html">Writer<StringBuffer>::ScanWriteUnescapedString</a>(<a class="code" href="structrapidjson_1_1_generic_string_stream.html">StringStream</a>& is, <span class="keywordtype">size_t</span> length) {</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>  <span class="keywordflow">if</span> (length < 16)</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>  <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() < length);</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span> </div><div class="line"><a name="l00579"></a><span class="lineno"> 579</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#ga5dc14176a9e71ace282404b0bcda57a1">RAPIDJSON_LIKELY</a>(is.Tell() < length))</div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span> </div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>  <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>  <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>  <span class="keyword">const</span> <span class="keywordtype">char</span>* nextAligned = <span class="keyword">reinterpret_cast<</span><span class="keyword">const </span><span class="keywordtype">char</span>*<span class="keyword">></span>((<span class="keyword">reinterpret_cast<</span><span class="keywordtype">size_t</span><span class="keyword">></span>(p) + 15) & <span class="keyword">static_cast<</span><span class="keywordtype">size_t</span><span class="keyword">></span>(~15));</div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>  <span class="keyword">const</span> <span class="keywordtype">char</span>* endAligned = <span class="keyword">reinterpret_cast<</span><span class="keyword">const </span><span class="keywordtype">char</span>*<span class="keyword">></span>(<span class="keyword">reinterpret_cast<</span><span class="keywordtype">size_t</span><span class="keyword">></span>(end) & static_cast<size_t>(~15));</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>  <span class="keywordflow">if</span> (nextAligned > end)</div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span> </div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>  <span class="keywordflow">while</span> (p != nextAligned)</div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>  <span class="keywordflow">if</span> (*p < 0x20 || *p == <span class="charliteral">'\"'</span> || *p == <span class="charliteral">'\\'</span>) {</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>  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>  <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() < length);</div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>  }</div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>  os_->PutUnsafe(*p++);</div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span> </div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>  <span class="comment">// The rest of string using SIMD</span></div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>  <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> dquote[16] = { <span class="charliteral">'\"'</span>, <span class="charliteral">'\"'</span>, <span class="charliteral">'\"'</span>, <span class="charliteral">'\"'</span>, <span class="charliteral">'\"'</span>, <span class="charliteral">'\"'</span>, <span class="charliteral">'\"'</span>, <span class="charliteral">'\"'</span>, <span class="charliteral">'\"'</span>, <span class="charliteral">'\"'</span>, <span class="charliteral">'\"'</span>, <span class="charliteral">'\"'</span>, <span class="charliteral">'\"'</span>, <span class="charliteral">'\"'</span>, <span class="charliteral">'\"'</span>, <span class="charliteral">'\"'</span> };</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>  <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> bslash[16] = { <span class="charliteral">'\\'</span>, <span class="charliteral">'\\'</span>, <span class="charliteral">'\\'</span>, <span class="charliteral">'\\'</span>, <span class="charliteral">'\\'</span>, <span class="charliteral">'\\'</span>, <span class="charliteral">'\\'</span>, <span class="charliteral">'\\'</span>, <span class="charliteral">'\\'</span>, <span class="charliteral">'\\'</span>, <span class="charliteral">'\\'</span>, <span class="charliteral">'\\'</span>, <span class="charliteral">'\\'</span>, <span class="charliteral">'\\'</span>, <span class="charliteral">'\\'</span>, <span class="charliteral">'\\'</span> };</div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>  <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>  <span class="keyword">const</span> __m128i dq = _mm_loadu_si128(reinterpret_cast<const __m128i *>(&dquote[0]));</div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>  <span class="keyword">const</span> __m128i bs = _mm_loadu_si128(reinterpret_cast<const __m128i *>(&bslash[0]));</div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>  <span class="keyword">const</span> __m128i sp = _mm_loadu_si128(reinterpret_cast<const __m128i *>(&space[0]));</div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span> </div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>  <span class="keywordflow">for</span> (; p != endAligned; p += 16) {</div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>  <span class="keyword">const</span> __m128i s = _mm_load_si128(reinterpret_cast<const __m128i *>(p));</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>  <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>  <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>  <span class="keyword">const</span> __m128i t3 = _mm_cmpeq_epi8(_mm_max_epu8(s, sp), sp); <span class="comment">// s < 0x20 <=> max(s, 0x1F) == 0x1F</span></div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>  <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>  <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> r = <span class="keyword">static_cast<</span><span class="keywordtype">unsigned</span> <span class="keywordtype">short</span><span class="keyword">></span>(_mm_movemask_epi8(x));</div><div class="line"><a name="l00612"></a><span class="lineno"> 612</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>(r != 0)) { <span class="comment">// some of characters is escaped</span></div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>  <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> len;</div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span> <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>  <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> offset;</div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span>  _BitScanForward(&offset, r);</div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>  len = offset;</div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span> <span class="preprocessor">#else</span></div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>  len = <span class="keyword">static_cast<</span><a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a><span class="keyword">></span>(__builtin_ffs(r) - 1);</div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>  <span class="keywordtype">char</span>* q = <span class="keyword">reinterpret_cast<</span><span class="keywordtype">char</span>*<span class="keyword">></span>(os_->PushUnsafe(len));</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i < len; i++)</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>  q[i] = p[i];</div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span> </div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>  p += len;</div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>  }</div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>  _mm_storeu_si128(reinterpret_cast<__m128i *>(os_->PushUnsafe(16)), s);</div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>  }</div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span> </div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>  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>  <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() < length);</div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span> }</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span> <span class="preprocessor">#elif defined(RAPIDJSON_NEON)</span></div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span> <span class="keyword">template</span><></div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_writer.html">Writer<StringBuffer>::ScanWriteUnescapedString</a>(<a class="code" href="structrapidjson_1_1_generic_string_stream.html">StringStream</a>& is, <span class="keywordtype">size_t</span> length) {</div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span>  <span class="keywordflow">if</span> (length < 16)</div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>  <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() < length);</div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span> </div><div class="line"><a name="l00640"></a><span class="lineno"> 640</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#ga5dc14176a9e71ace282404b0bcda57a1">RAPIDJSON_LIKELY</a>(is.Tell() < length))</div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span> </div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span>  <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>  <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>  <span class="keyword">const</span> <span class="keywordtype">char</span>* nextAligned = <span class="keyword">reinterpret_cast<</span><span class="keyword">const </span><span class="keywordtype">char</span>*<span class="keyword">></span>((<span class="keyword">reinterpret_cast<</span><span class="keywordtype">size_t</span><span class="keyword">></span>(p) + 15) & <span class="keyword">static_cast<</span><span class="keywordtype">size_t</span><span class="keyword">></span>(~15));</div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>  <span class="keyword">const</span> <span class="keywordtype">char</span>* endAligned = <span class="keyword">reinterpret_cast<</span><span class="keyword">const </span><span class="keywordtype">char</span>*<span class="keyword">></span>(<span class="keyword">reinterpret_cast<</span><span class="keywordtype">size_t</span><span class="keyword">></span>(end) & static_cast<size_t>(~15));</div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>  <span class="keywordflow">if</span> (nextAligned > end)</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span> </div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>  <span class="keywordflow">while</span> (p != nextAligned)</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>  <span class="keywordflow">if</span> (*p < 0x20 || *p == <span class="charliteral">'\"'</span> || *p == <span class="charliteral">'\\'</span>) {</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>  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>  <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() < length);</div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>  }</div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>  os_->PutUnsafe(*p++);</div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span> </div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>  <span class="comment">// The rest of string using SIMD</span></div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>  <span class="keyword">const</span> uint8x16_t s0 = vmovq_n_u8(<span class="charliteral">'"'</span>);</div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>  <span class="keyword">const</span> uint8x16_t s1 = vmovq_n_u8(<span class="charliteral">'\\'</span>);</div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span>  <span class="keyword">const</span> uint8x16_t s2 = vmovq_n_u8(<span class="charliteral">'\b'</span>);</div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>  <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> </div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>  <span class="keywordflow">for</span> (; p != endAligned; p += 16) {</div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span>  <span class="keyword">const</span> uint8x16_t s = vld1q_u8(reinterpret_cast<const uint8_t *>(p));</div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span>  uint8x16_t x = vceqq_u8(s, s0);</div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>  x = vorrq_u8(x, vceqq_u8(s, s1));</div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>  x = vorrq_u8(x, vceqq_u8(s, s2));</div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>  x = vorrq_u8(x, vcltq_u8(s, s3));</div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span> </div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span>  x = vrev64q_u8(x); <span class="comment">// Rev in 64</span></div><div class="line"><a name="l00672"></a><span class="lineno"> 672</span>  uint64_t low = vgetq_lane_u64(reinterpret_cast<uint64x2_t>(x), 0); <span class="comment">// extract</span></div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span>  uint64_t high = vgetq_lane_u64(reinterpret_cast<uint64x2_t>(x), 1); <span class="comment">// extract</span></div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span> </div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>  <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> len = 0;</div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>  <span class="keywordtype">bool</span> escaped = <span class="keyword">false</span>;</div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span>  <span class="keywordflow">if</span> (low == 0) {</div><div class="line"><a name="l00678"></a><span class="lineno"> 678</span>  <span class="keywordflow">if</span> (high != 0) {</div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span>  <span class="keywordtype">unsigned</span> lz = (unsigned)__builtin_clzll(high);</div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span>  len = 8 + (lz >> 3);</div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>  escaped = <span class="keyword">true</span>;</div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>  }</div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>  <span class="keywordtype">unsigned</span> lz = (unsigned)__builtin_clzll(low);</div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>  len = lz >> 3;</div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>  escaped = <span class="keyword">true</span>;</div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>  }</div><div class="line"><a name="l00688"></a><span class="lineno"> 688</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>(escaped)) { <span class="comment">// some of characters is escaped</span></div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>  <span class="keywordtype">char</span>* q = <span class="keyword">reinterpret_cast<</span><span class="keywordtype">char</span>*<span class="keyword">></span>(os_->PushUnsafe(len));</div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span>  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i < len; i++)</div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span>  q[i] = p[i];</div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span> </div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span>  p += len;</div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span>  }</div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span>  vst1q_u8(reinterpret_cast<uint8_t *>(os_->PushUnsafe(16)), s);</div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span>  }</div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span> </div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span>  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>  <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() < length);</div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span> }</div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span> <span class="preprocessor">#endif // RAPIDJSON_NEON</span></div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span> </div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span> RAPIDJSON_NAMESPACE_END</div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span> </div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span> <span class="preprocessor">#if defined(_MSC_VER) || defined(__clang__)</span></div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span> RAPIDJSON_DIAG_POP</div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span> </div><div class="line"><a name="l00710"></a><span class="lineno"> 710</span> <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 &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 &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 &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 --> |