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

document_8h_source.html « zh-cn - github.com/miloyip/rapidjson.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: acb2ba01ab25efdea07be3ebe7ca3efd5ea168a5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
<!-- HTML header for doxygen 1.8.7-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<title>RapidJSON: include/rapidjson/document.h 源文件</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
  $(document).ready(initResizable);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
  $(document).ready(function() { init_search(); });
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="doxygenextra.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="topbanner"><a href="https://github.com/Tencent/rapidjson" title="RapidJSON GitHub"><i class="githublogo"></i></a></div>
        <div id="MSearchBox" class="MSearchBoxInactive">
        <span class="left">
          <img id="MSearchSelect" src="search/mag_sel.png"
               onmouseover="return searchBox.OnSearchSelectShow()"
               onmouseout="return searchBox.OnSearchSelectHide()"
               alt=""/>
          <input type="text" id="MSearchField" value="搜索" accesskey="S"
               onfocus="searchBox.OnSearchFieldFocus(true)" 
               onblur="searchBox.OnSearchFieldFocus(false)" 
               onkeyup="searchBox.OnSearchFieldChange(event)"/>
          </span><span class="right">
            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
          </span>
        </div>
<!-- end header part -->
<!-- 制作者 Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'搜索');
</script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
      <div id="nav-sync" class="sync"></div>
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('document_8h_source.html','');});
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div class="header">
  <div class="headertitle">
<div class="title">document.h</div>  </div>
</div><!--header-->
<div class="contents">
<a href="document_8h.html">浏览该文件的文档.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">// Tencent is pleased to support the open source community by making RapidJSON available.</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment">// </span></div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment">// Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved.</span></div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment">// Licensed under the MIT License (the &quot;License&quot;); you may not use this file except</span></div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment">// in compliance with the License. You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment">// http://opensource.org/licenses/MIT</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment">// Unless required by applicable law or agreed to in writing, software distributed </span></div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment">// under the License is distributed on an &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR </span></div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment">// CONDITIONS OF ANY KIND, either express or implied. See the License for the </span></div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment">// specific language governing permissions and limitations under the License.</span></div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;</div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="preprocessor">#ifndef RAPIDJSON_DOCUMENT_H_</span></div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="preprocessor">#define RAPIDJSON_DOCUMENT_H_</span></div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="comment">/*! \file document.h */</span></div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;</div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="reader_8h.html">reader.h</a>&quot;</span></div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="preprocessor">#include &quot;internal/meta.h&quot;</span></div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="preprocessor">#include &quot;internal/strfunc.h&quot;</span></div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="preprocessor">#include &quot;memorystream.h&quot;</span></div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="preprocessor">#include &quot;encodedstream.h&quot;</span></div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="preprocessor">#include &lt;new&gt;</span>      <span class="comment">// placement new</span></div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="preprocessor">#include &lt;limits&gt;</span></div><div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;</div><div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;RAPIDJSON_DIAG_PUSH</div><div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;<span class="preprocessor">#ifdef __clang__</span></div><div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;RAPIDJSON_DIAG_OFF(padded)</div><div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;RAPIDJSON_DIAG_OFF(<span class="keywordflow">switch</span>-<span class="keyword">enum</span>)</div><div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;RAPIDJSON_DIAG_OFF(c++98-compat)</div><div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;<span class="preprocessor">#elif defined(_MSC_VER)</span></div><div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;RAPIDJSON_DIAG_OFF(4127) <span class="comment">// conditional expression is constant</span></div><div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;RAPIDJSON_DIAG_OFF(4244) <span class="comment">// conversion from kXxxFlags to &#39;uint16_t&#39;, possible loss of data</span></div><div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;</div><div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;<span class="preprocessor">#ifdef __GNUC__</span></div><div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;RAPIDJSON_DIAG_OFF(effc++)</div><div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;<span class="preprocessor">#if __GNUC__ &gt;= 6</span></div><div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;RAPIDJSON_DIAG_OFF(terminate) <span class="comment">// ignore throwing RAPIDJSON_ASSERT in RAPIDJSON_NOEXCEPT functions</span></div><div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;<span class="preprocessor">#endif // __GNUC__</span></div><div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;</div><div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;<span class="preprocessor">#ifndef RAPIDJSON_NOMEMBERITERATORCLASS</span></div><div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;<span class="preprocessor">#include &lt;iterator&gt;</span> <span class="comment">// std::random_access_iterator_tag</span></div><div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;</div><div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;<span class="preprocessor">#include &lt;utility&gt;</span> <span class="comment">// std::move</span></div><div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;</div><div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;RAPIDJSON_NAMESPACE_BEGIN</div><div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;</div><div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;<span class="comment">// Forward declaration.</span></div><div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> Encoding, <span class="keyword">typename</span> Allocator&gt;</div><div class="line"><a name="l00057"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html">   57</a></span>&#160;<span class="keyword">class </span><a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>;</div><div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;</div><div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> Encoding, <span class="keyword">typename</span> Allocator, <span class="keyword">typename</span> StackAllocator&gt;</div><div class="line"><a name="l00060"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_document.html">   60</a></span>&#160;<span class="keyword">class </span><a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>;</div><div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;<span class="comment">//! Name-value pair in a JSON object value.</span></div><div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;<span class="comment"></span><span class="comment">/*!</span></div><div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;<span class="comment">    This class was internal to GenericValue. It used to be a inner struct.</span></div><div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;<span class="comment">    But a compiler (IBM XL C/C++ for AIX) have reported to have problem with that so it moved as a namespace scope struct.</span></div><div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;<span class="comment">    https://code.google.com/p/rapidjson/issues/detail?id=64</span></div><div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> Encoding, <span class="keyword">typename</span> Allocator&gt; </div><div class="line"><a name="l00069"></a><span class="lineno"><a class="line" href="structrapidjson_1_1_generic_member.html">   69</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structrapidjson_1_1_generic_member.html">GenericMember</a> { </div><div class="line"><a name="l00070"></a><span class="lineno"><a class="line" href="structrapidjson_1_1_generic_member.html#ae820eaa74b415a9073f3f3855f6c6607">   70</a></span>&#160;    <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue&lt;Encoding, Allocator&gt;</a> <a class="code" href="structrapidjson_1_1_generic_member.html#ae820eaa74b415a9073f3f3855f6c6607">name</a>;     <span class="comment">//!&lt; name of member (must be a string)</span></div><div class="line"><a name="l00071"></a><span class="lineno"><a class="line" href="structrapidjson_1_1_generic_member.html#a8ffff2076e62d988a070a136da6ffca6">   71</a></span>&#160;<span class="comment"></span>    <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue&lt;Encoding, Allocator&gt;</a> <a class="code" href="structrapidjson_1_1_generic_member.html#a8ffff2076e62d988a070a136da6ffca6">value</a>;    <span class="comment">//!&lt; value of member.</span></div><div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;<span class="comment"></span>};</div><div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;<span class="comment"></span><span class="comment">// GenericMemberIterator</span></div><div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;</div><div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;<span class="preprocessor">#ifndef RAPIDJSON_NOMEMBERITERATORCLASS</span></div><div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;<span class="comment">//! (Constant) member iterator for a JSON object value</span></div><div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;<span class="comment"></span><span class="comment">/*!</span></div><div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;<span class="comment">    \tparam Const Is this a constant iterator?</span></div><div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;<span class="comment">    \tparam Encoding    Encoding of the value. (Even non-string values need to have the same encoding in a document)</span></div><div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;<span class="comment">    \tparam Allocator   Allocator type for allocating memory of object, array and string.</span></div><div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;<span class="comment">    This class implements a Random Access Iterator for GenericMember elements</span></div><div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;<span class="comment">    of a GenericValue, see ISO/IEC 14882:2003(E) C++ standard, 24.1 [lib.iterator.requirements].</span></div><div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;<span class="comment">    \note This iterator implementation is mainly intended to avoid implicit</span></div><div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;<span class="comment">        conversions from iterator values to \c NULL,</span></div><div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;<span class="comment">        e.g. from GenericValue::FindMember.</span></div><div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;<span class="comment">    \note Define \c RAPIDJSON_NOMEMBERITERATORCLASS to fall back to a</span></div><div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;<span class="comment">        pointer-based implementation, if your platform doesn&#39;t provide</span></div><div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;<span class="comment">        the C++ &lt;iterator&gt; header.</span></div><div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;<span class="comment">    \see GenericMember, GenericValue::MemberIterator, GenericValue::ConstMemberIterator</span></div><div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">bool</span> Const, <span class="keyword">typename</span> Encoding, <span class="keyword">typename</span> Allocator&gt;</div><div class="line"><a name="l00099"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_member_iterator.html">   99</a></span>&#160;<span class="keyword">class </span><a class="code" href="classrapidjson_1_1_generic_member_iterator.html">GenericMemberIterator</a> {</div><div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;</div><div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;    <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&lt;Encoding,Allocator&gt;;</div><div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;    <span class="keyword">template</span> &lt;<span class="keywordtype">bool</span>, <span class="keyword">typename</span>, <span class="keyword">typename</span>&gt; <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classrapidjson_1_1_generic_member_iterator.html">GenericMemberIterator</a>;</div><div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;</div><div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;    <span class="keyword">typedef</span> <a class="code" href="structrapidjson_1_1_generic_member.html">GenericMember&lt;Encoding,Allocator&gt;</a> <a class="code" href="structrapidjson_1_1_generic_member.html">PlainType</a>;</div><div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;    <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">internal::MaybeAddConst&lt;Const,PlainType&gt;::Type</a> ValueType;</div><div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;</div><div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;<span class="keyword">public</span>:<span class="comment"></span></div><div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;<span class="comment">    //! Iterator type itself</span></div><div class="line"><a name="l00109"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_member_iterator.html#a37091c3dd8470486ef5188f3c1108653">  109</a></span>&#160;<span class="comment"></span>    <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">GenericMemberIterator</a> <a class="code" href="classrapidjson_1_1_generic_member_iterator.html#a37091c3dd8470486ef5188f3c1108653">Iterator</a>;<span class="comment"></span></div><div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;<span class="comment">    //! Constant iterator type</span></div><div class="line"><a name="l00111"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_member_iterator.html#a61b9a9ba8a5917d90406532f104605cc">  111</a></span>&#160;<span class="comment"></span>    <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">GenericMemberIterator&lt;true,Encoding,Allocator&gt;</a>  <a class="code" href="classrapidjson_1_1_generic_member_iterator.html#a61b9a9ba8a5917d90406532f104605cc">ConstIterator</a>;<span class="comment"></span></div><div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;<span class="comment">    //! Non-constant iterator type</span></div><div class="line"><a name="l00113"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_member_iterator.html#a1a91868fa388664bb301061e3e24badb">  113</a></span>&#160;<span class="comment"></span>    <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">GenericMemberIterator&lt;false,Encoding,Allocator&gt;</a> <a class="code" href="classrapidjson_1_1_generic_member_iterator.html#a1a91868fa388664bb301061e3e24badb">NonConstIterator</a>;</div><div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;<span class="comment">    /** \name std::iterator_traits support */</span><span class="comment"></span></div><div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;<span class="comment">    //@{</span></div><div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;<span class="comment"></span>    <span class="keyword">typedef</span> ValueType      value_type;</div><div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;    <span class="keyword">typedef</span> ValueType *    pointer;</div><div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;    <span class="keyword">typedef</span> ValueType &amp;    reference;</div><div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;    <span class="keyword">typedef</span> std::ptrdiff_t difference_type;</div><div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;    <span class="keyword">typedef</span> std::random_access_iterator_tag iterator_category;<span class="comment"></span></div><div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;<span class="comment">    //@}</span></div><div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;<span class="comment">    //! Pointer to (const) GenericMember</span></div><div class="line"><a name="l00125"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_member_iterator.html#aa9d53504374c7c6bdf46775482c5b107">  125</a></span>&#160;<span class="comment"></span>    <span class="keyword">typedef</span> pointer         <a class="code" href="classrapidjson_1_1_generic_member_iterator.html#aa9d53504374c7c6bdf46775482c5b107">Pointer</a>;<span class="comment"></span></div><div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;<span class="comment">    //! Reference to (const) GenericMember</span></div><div class="line"><a name="l00127"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_member_iterator.html#abe27838f8dc71fdb38028ef27ae0b4f2">  127</a></span>&#160;<span class="comment"></span>    <span class="keyword">typedef</span> reference       <a class="code" href="classrapidjson_1_1_generic_member_iterator.html#abe27838f8dc71fdb38028ef27ae0b4f2">Reference</a>;<span class="comment"></span></div><div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;<span class="comment">    //! Signed integer type (e.g. \c ptrdiff_t)</span></div><div class="line"><a name="l00129"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_member_iterator.html#aff2739a9265639a7a4be8c3e6216b31a">  129</a></span>&#160;<span class="comment"></span>    <span class="keyword">typedef</span> difference_type <a class="code" href="classrapidjson_1_1_generic_member_iterator.html#aff2739a9265639a7a4be8c3e6216b31a">DifferenceType</a>;</div><div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;<span class="comment">    //! Default constructor (singular value)</span></div><div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;<span class="comment"></span><span class="comment">    /*! Creates an iterator pointing to no element.</span></div><div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;<span class="comment">        \note All operations, except for comparisons, are undefined on such values.</span></div><div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;<span class="comment">     */</span></div><div class="line"><a name="l00135"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_member_iterator.html#ac920af483c9e31a6746c22acf0dffc50">  135</a></span>&#160;    <a class="code" href="classrapidjson_1_1_generic_member_iterator.html#ac920af483c9e31a6746c22acf0dffc50">GenericMemberIterator</a>() : ptr_() {}</div><div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;<span class="comment">    //! Iterator conversions to more const</span></div><div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;<span class="comment"></span><span class="comment">    /*!</span></div><div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;<span class="comment">        \param it (Non-const) iterator to copy from</span></div><div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;<span class="comment">        Allows the creation of an iterator from another GenericMemberIterator</span></div><div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;<span class="comment">        that is &quot;less const&quot;.  Especially, creating a non-constant iterator</span></div><div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;<span class="comment">        from a constant iterator are disabled:</span></div><div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;<span class="comment">        \li const -&gt; non-const (not ok)</span></div><div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;<span class="comment">        \li const -&gt; const (ok)</span></div><div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;<span class="comment">        \li non-const -&gt; const (ok)</span></div><div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;<span class="comment">        \li non-const -&gt; non-const (ok)</span></div><div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;<span class="comment">        \note If the \c Const template parameter is already \c false, this</span></div><div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;<span class="comment">            constructor effectively defines a regular copy-constructor.</span></div><div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;<span class="comment">            Otherwise, the copy constructor is implicitly defined.</span></div><div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l00153"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_member_iterator.html#aa30ffef74b3f4978b403024d81b484e4">  153</a></span>&#160;    <a class="code" href="classrapidjson_1_1_generic_member_iterator.html#aa30ffef74b3f4978b403024d81b484e4">GenericMemberIterator</a>(<span class="keyword">const</span> NonConstIterator &amp; it) : ptr_(it.ptr_) {}</div><div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;    Iterator&amp; operator=(<span class="keyword">const</span> NonConstIterator &amp; it) { ptr_ = it.ptr_; <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;<span class="comment">    //! @name stepping</span></div><div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;<span class="comment"></span><span class="comment">    //@{</span></div><div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;<span class="comment"></span>    Iterator&amp; operator++(){ ++ptr_; <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;    Iterator&amp; operator--(){ --ptr_; <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;    Iterator  operator++(<span class="keywordtype">int</span>){ Iterator old(*<span class="keyword">this</span>); ++ptr_; <span class="keywordflow">return</span> old; }</div><div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;    Iterator  operator--(<span class="keywordtype">int</span>){ Iterator old(*<span class="keyword">this</span>); --ptr_; <span class="keywordflow">return</span> old; }<span class="comment"></span></div><div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;<span class="comment">    //@}</span></div><div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;<span class="comment">    //! @name increment/decrement</span></div><div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;<span class="comment"></span><span class="comment">    //@{</span></div><div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;<span class="comment"></span>    Iterator operator+(DifferenceType n)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> Iterator(ptr_+n); }</div><div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;    Iterator operator-(DifferenceType n)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> Iterator(ptr_-n); }</div><div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;</div><div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;    Iterator&amp; operator+=(DifferenceType n) { ptr_+=n; <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;    Iterator&amp; operator-=(DifferenceType n) { ptr_-=n; <span class="keywordflow">return</span> *<span class="keyword">this</span>; }<span class="comment"></span></div><div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;<span class="comment">    //@}</span></div><div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160;<span class="comment">    //! @name relations</span></div><div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160;<span class="comment"></span><span class="comment">    //@{</span></div><div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;<span class="comment"></span>    <span class="keywordtype">bool</span> operator==(ConstIterator that)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> ptr_ == that.ptr_; }</div><div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;    <span class="keywordtype">bool</span> operator!=(ConstIterator that)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> ptr_ != that.ptr_; }</div><div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;    <span class="keywordtype">bool</span> operator&lt;=(ConstIterator that)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> ptr_ &lt;= that.ptr_; }</div><div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;    <span class="keywordtype">bool</span> operator&gt;=(ConstIterator that)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> ptr_ &gt;= that.ptr_; }</div><div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;    <span class="keywordtype">bool</span> operator&lt; (ConstIterator that)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> ptr_ &lt; that.ptr_; }</div><div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;    <span class="keywordtype">bool</span> operator&gt; (ConstIterator that)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> ptr_ &gt; that.ptr_; }<span class="comment"></span></div><div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;<span class="comment">    //@}</span></div><div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;<span class="comment">    //! @name dereference</span></div><div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;<span class="comment"></span><span class="comment">    //@{</span></div><div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160;<span class="comment"></span>    Reference operator*()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> *ptr_; }</div><div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160;    Pointer   operator-&gt;()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> ptr_; }</div><div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160;    Reference operator[](DifferenceType n)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> ptr_[n]; }<span class="comment"></span></div><div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;<span class="comment">    //@}</span></div><div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160;<span class="comment">    //! Distance</span></div><div class="line"><a name="l00191"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_member_iterator.html#abfad2c34a97f82178cbf9464e958e2c2">  191</a></span>&#160;<span class="comment"></span>    DifferenceType <a class="code" href="classrapidjson_1_1_generic_member_iterator.html#abfad2c34a97f82178cbf9464e958e2c2">operator-</a>(ConstIterator that)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> ptr_-that.ptr_; }</div><div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160;</div><div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;<span class="keyword">private</span>:<span class="comment"></span></div><div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;<span class="comment">    //! Internal constructor from plain pointer</span></div><div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;<span class="comment"></span>    <span class="keyword">explicit</span> <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">GenericMemberIterator</a>(Pointer p) : ptr_(p) {}</div><div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160;</div><div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;    Pointer ptr_; <span class="comment">//!&lt; raw pointer</span></div><div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;<span class="comment"></span>};</div><div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160;</div><div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;<span class="preprocessor">#else // RAPIDJSON_NOMEMBERITERATORCLASS</span></div><div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;</div><div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160;<span class="comment">// class-based member iterator implementation disabled, use plain pointers</span></div><div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;</div><div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">bool</span> Const, <span class="keyword">typename</span> Encoding, <span class="keyword">typename</span> Allocator&gt;</div><div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160;<span class="keyword">struct </span><a class="code" href="classrapidjson_1_1_generic_member_iterator.html">GenericMemberIterator</a>;</div><div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160;<span class="comment">//! non-const GenericMemberIterator</span></div><div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160;<span class="comment"></span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> Encoding, <span class="keyword">typename</span> Allocator&gt;</div><div class="line"><a name="l00209"></a><span class="lineno">  209</span>&#160;<span class="keyword">struct </span><a class="code" href="classrapidjson_1_1_generic_member_iterator.html">GenericMemberIterator</a>&lt;false,Encoding,Allocator&gt; {<span class="comment"></span></div><div class="line"><a name="l00210"></a><span class="lineno">  210</span>&#160;<span class="comment">    //! use plain pointer as iterator type</span></div><div class="line"><a name="l00211"></a><span class="lineno">  211</span>&#160;<span class="comment"></span>    <span class="keyword">typedef</span> <a class="code" href="structrapidjson_1_1_generic_member.html">GenericMember&lt;Encoding,Allocator&gt;</a>* <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">Iterator</a>;</div><div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160;};<span class="comment"></span></div><div class="line"><a name="l00213"></a><span class="lineno">  213</span>&#160;<span class="comment">//! const GenericMemberIterator</span></div><div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;<span class="comment"></span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> Encoding, <span class="keyword">typename</span> Allocator&gt;</div><div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;<span class="keyword">struct </span><a class="code" href="classrapidjson_1_1_generic_member_iterator.html">GenericMemberIterator</a>&lt;true,Encoding,Allocator&gt; {<span class="comment"></span></div><div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160;<span class="comment">    //! use plain const pointer as iterator type</span></div><div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;<span class="comment"></span>    <span class="keyword">typedef</span> <span class="keyword">const</span> <a class="code" href="structrapidjson_1_1_generic_member.html">GenericMember&lt;Encoding,Allocator&gt;</a>* <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">Iterator</a>;</div><div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160;};</div><div class="line"><a name="l00219"></a><span class="lineno">  219</span>&#160;</div><div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;<span class="preprocessor">#endif // RAPIDJSON_NOMEMBERITERATORCLASS</span></div><div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00222"></a><span class="lineno">  222</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160;<span class="comment"></span><span class="comment">// GenericStringRef</span></div><div class="line"><a name="l00224"></a><span class="lineno">  224</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00225"></a><span class="lineno">  225</span>&#160;<span class="comment">//! Reference to a constant string (not taking a copy)</span></div><div class="line"><a name="l00226"></a><span class="lineno">  226</span>&#160;<span class="comment"></span><span class="comment">/*!</span></div><div class="line"><a name="l00227"></a><span class="lineno">  227</span>&#160;<span class="comment">    \tparam CharType character type of the string</span></div><div class="line"><a name="l00228"></a><span class="lineno">  228</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00229"></a><span class="lineno">  229</span>&#160;<span class="comment">    This helper class is used to automatically infer constant string</span></div><div class="line"><a name="l00230"></a><span class="lineno">  230</span>&#160;<span class="comment">    references for string literals, especially from \c const \b (!)</span></div><div class="line"><a name="l00231"></a><span class="lineno">  231</span>&#160;<span class="comment">    character arrays.</span></div><div class="line"><a name="l00232"></a><span class="lineno">  232</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00233"></a><span class="lineno">  233</span>&#160;<span class="comment">    The main use is for creating JSON string values without copying the</span></div><div class="line"><a name="l00234"></a><span class="lineno">  234</span>&#160;<span class="comment">    source string via an \ref Allocator.  This requires that the referenced</span></div><div class="line"><a name="l00235"></a><span class="lineno">  235</span>&#160;<span class="comment">    string pointers have a sufficient lifetime, which exceeds the lifetime</span></div><div class="line"><a name="l00236"></a><span class="lineno">  236</span>&#160;<span class="comment">    of the associated GenericValue.</span></div><div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00238"></a><span class="lineno">  238</span>&#160;<span class="comment">    \b Example</span></div><div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;<span class="comment">    \code</span></div><div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160;<span class="comment">    Value v(&quot;foo&quot;);   // ok, no need to copy &amp; calculate length</span></div><div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160;<span class="comment">    const char foo[] = &quot;foo&quot;;</span></div><div class="line"><a name="l00242"></a><span class="lineno">  242</span>&#160;<span class="comment">    v.SetString(foo); // ok</span></div><div class="line"><a name="l00243"></a><span class="lineno">  243</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00244"></a><span class="lineno">  244</span>&#160;<span class="comment">    const char* bar = foo;</span></div><div class="line"><a name="l00245"></a><span class="lineno">  245</span>&#160;<span class="comment">    // Value x(bar); // not ok, can&#39;t rely on bar&#39;s lifetime</span></div><div class="line"><a name="l00246"></a><span class="lineno">  246</span>&#160;<span class="comment">    Value x(StringRef(bar)); // lifetime explicitly guaranteed by user</span></div><div class="line"><a name="l00247"></a><span class="lineno">  247</span>&#160;<span class="comment">    Value y(StringRef(bar, 3));  // ok, explicitly pass length</span></div><div class="line"><a name="l00248"></a><span class="lineno">  248</span>&#160;<span class="comment">    \endcode</span></div><div class="line"><a name="l00249"></a><span class="lineno">  249</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00250"></a><span class="lineno">  250</span>&#160;<span class="comment">    \see StringRef, GenericValue::SetString</span></div><div class="line"><a name="l00251"></a><span class="lineno">  251</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00252"></a><span class="lineno">  252</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> CharType&gt;</div><div class="line"><a name="l00253"></a><span class="lineno"><a class="line" href="structrapidjson_1_1_generic_string_ref.html">  253</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structrapidjson_1_1_generic_string_ref.html">GenericStringRef</a> {</div><div class="line"><a name="l00254"></a><span class="lineno"><a class="line" href="structrapidjson_1_1_generic_string_ref.html#aa2a8eccae3d7eb14c30bc21afb7d6fba">  254</a></span>&#160;    <span class="keyword">typedef</span> CharType <a class="code" href="structrapidjson_1_1_generic_string_ref.html#aa2a8eccae3d7eb14c30bc21afb7d6fba">Ch</a>; <span class="comment">//!&lt; character type of the string</span></div><div class="line"><a name="l00255"></a><span class="lineno">  255</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00256"></a><span class="lineno">  256</span>&#160;<span class="comment">    //! Create string reference from \c const character array</span></div><div class="line"><a name="l00257"></a><span class="lineno">  257</span>&#160;<span class="comment"></span><span class="preprocessor">#ifndef __clang__ // -Wdocumentation</span></div><div class="line"><a name="l00258"></a><span class="lineno">  258</span>&#160;<span class="comment">    /*!</span></div><div class="line"><a name="l00259"></a><span class="lineno">  259</span>&#160;<span class="comment">        This constructor implicitly creates a constant string reference from</span></div><div class="line"><a name="l00260"></a><span class="lineno">  260</span>&#160;<span class="comment">        a \c const character array.  It has better performance than</span></div><div class="line"><a name="l00261"></a><span class="lineno">  261</span>&#160;<span class="comment">        \ref StringRef(const CharType*) by inferring the string \ref length</span></div><div class="line"><a name="l00262"></a><span class="lineno">  262</span>&#160;<span class="comment">        from the array length, and also supports strings containing null</span></div><div class="line"><a name="l00263"></a><span class="lineno">  263</span>&#160;<span class="comment">        characters.</span></div><div class="line"><a name="l00264"></a><span class="lineno">  264</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00265"></a><span class="lineno">  265</span>&#160;<span class="comment">        \tparam N length of the string, automatically inferred</span></div><div class="line"><a name="l00266"></a><span class="lineno">  266</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00267"></a><span class="lineno">  267</span>&#160;<span class="comment">        \param str Constant character array, lifetime assumed to be longer</span></div><div class="line"><a name="l00268"></a><span class="lineno">  268</span>&#160;<span class="comment">            than the use of the string in e.g. a GenericValue</span></div><div class="line"><a name="l00269"></a><span class="lineno">  269</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00270"></a><span class="lineno">  270</span>&#160;<span class="comment">        \post \ref s == str</span></div><div class="line"><a name="l00271"></a><span class="lineno">  271</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00272"></a><span class="lineno">  272</span>&#160;<span class="comment">        \note Constant complexity.</span></div><div class="line"><a name="l00273"></a><span class="lineno">  273</span>&#160;<span class="comment">        \note There is a hidden, private overload to disallow references to</span></div><div class="line"><a name="l00274"></a><span class="lineno">  274</span>&#160;<span class="comment">            non-const character arrays to be created via this constructor.</span></div><div class="line"><a name="l00275"></a><span class="lineno">  275</span>&#160;<span class="comment">            By this, e.g. function-scope arrays used to be filled via</span></div><div class="line"><a name="l00276"></a><span class="lineno">  276</span>&#160;<span class="comment">            \c snprintf are excluded from consideration.</span></div><div class="line"><a name="l00277"></a><span class="lineno">  277</span>&#160;<span class="comment">            In such cases, the referenced string should be \b copied to the</span></div><div class="line"><a name="l00278"></a><span class="lineno">  278</span>&#160;<span class="comment">            GenericValue instead.</span></div><div class="line"><a name="l00279"></a><span class="lineno">  279</span>&#160;<span class="comment">     */</span></div><div class="line"><a name="l00280"></a><span class="lineno">  280</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00281"></a><span class="lineno">  281</span>&#160;    <span class="keyword">template</span>&lt;SizeType N&gt;</div><div class="line"><a name="l00282"></a><span class="lineno"><a class="line" href="structrapidjson_1_1_generic_string_ref.html#acd4d5ebac2b610ce647356aa52998002">  282</a></span>&#160;    <a class="code" href="structrapidjson_1_1_generic_string_ref.html#acd4d5ebac2b610ce647356aa52998002">GenericStringRef</a>(<span class="keyword">const</span> CharType (&amp;str)[N]) RAPIDJSON_NOEXCEPT</div><div class="line"><a name="l00283"></a><span class="lineno">  283</span>&#160;        : s(str), length(N-1) {}</div><div class="line"><a name="l00284"></a><span class="lineno">  284</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00285"></a><span class="lineno">  285</span>&#160;<span class="comment">    //! Explicitly create string reference from \c const character pointer</span></div><div class="line"><a name="l00286"></a><span class="lineno">  286</span>&#160;<span class="comment"></span><span class="preprocessor">#ifndef __clang__ // -Wdocumentation</span></div><div class="line"><a name="l00287"></a><span class="lineno">  287</span>&#160;<span class="comment">    /*!</span></div><div class="line"><a name="l00288"></a><span class="lineno">  288</span>&#160;<span class="comment">        This constructor can be used to \b explicitly  create a reference to</span></div><div class="line"><a name="l00289"></a><span class="lineno">  289</span>&#160;<span class="comment">        a constant string pointer.</span></div><div class="line"><a name="l00290"></a><span class="lineno">  290</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00291"></a><span class="lineno">  291</span>&#160;<span class="comment">        \see StringRef(const CharType*)</span></div><div class="line"><a name="l00292"></a><span class="lineno">  292</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00293"></a><span class="lineno">  293</span>&#160;<span class="comment">        \param str Constant character pointer, lifetime assumed to be longer</span></div><div class="line"><a name="l00294"></a><span class="lineno">  294</span>&#160;<span class="comment">            than the use of the string in e.g. a GenericValue</span></div><div class="line"><a name="l00295"></a><span class="lineno">  295</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00296"></a><span class="lineno">  296</span>&#160;<span class="comment">        \post \ref s == str</span></div><div class="line"><a name="l00297"></a><span class="lineno">  297</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00298"></a><span class="lineno">  298</span>&#160;<span class="comment">        \note There is a hidden, private overload to disallow references to</span></div><div class="line"><a name="l00299"></a><span class="lineno">  299</span>&#160;<span class="comment">            non-const character arrays to be created via this constructor.</span></div><div class="line"><a name="l00300"></a><span class="lineno">  300</span>&#160;<span class="comment">            By this, e.g. function-scope arrays used to be filled via</span></div><div class="line"><a name="l00301"></a><span class="lineno">  301</span>&#160;<span class="comment">            \c snprintf are excluded from consideration.</span></div><div class="line"><a name="l00302"></a><span class="lineno">  302</span>&#160;<span class="comment">            In such cases, the referenced string should be \b copied to the</span></div><div class="line"><a name="l00303"></a><span class="lineno">  303</span>&#160;<span class="comment">            GenericValue instead.</span></div><div class="line"><a name="l00304"></a><span class="lineno">  304</span>&#160;<span class="comment">     */</span></div><div class="line"><a name="l00305"></a><span class="lineno">  305</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00306"></a><span class="lineno"><a class="line" href="structrapidjson_1_1_generic_string_ref.html#a29cf407c6aa2313f13dff78d6ce02687">  306</a></span>&#160;    <span class="keyword">explicit</span> <a class="code" href="structrapidjson_1_1_generic_string_ref.html#a29cf407c6aa2313f13dff78d6ce02687">GenericStringRef</a>(<span class="keyword">const</span> CharType* str)</div><div class="line"><a name="l00307"></a><span class="lineno">  307</span>&#160;        : s(str), length(NotNullStrLen(str)) {}</div><div class="line"><a name="l00308"></a><span class="lineno">  308</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00309"></a><span class="lineno">  309</span>&#160;<span class="comment">    //! Create constant string reference from pointer and length</span></div><div class="line"><a name="l00310"></a><span class="lineno">  310</span>&#160;<span class="comment"></span><span class="preprocessor">#ifndef __clang__ // -Wdocumentation</span></div><div class="line"><a name="l00311"></a><span class="lineno">  311</span>&#160;<span class="comment">    /*! \param str constant string, lifetime assumed to be longer than the use of the string in e.g. a GenericValue</span></div><div class="line"><a name="l00312"></a><span class="lineno">  312</span>&#160;<span class="comment">        \param len length of the string, excluding the trailing NULL terminator</span></div><div class="line"><a name="l00313"></a><span class="lineno">  313</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00314"></a><span class="lineno">  314</span>&#160;<span class="comment">        \post \ref s == str &amp;&amp; \ref length == len</span></div><div class="line"><a name="l00315"></a><span class="lineno">  315</span>&#160;<span class="comment">        \note Constant complexity.</span></div><div class="line"><a name="l00316"></a><span class="lineno">  316</span>&#160;<span class="comment">     */</span></div><div class="line"><a name="l00317"></a><span class="lineno">  317</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00318"></a><span class="lineno"><a class="line" href="structrapidjson_1_1_generic_string_ref.html#ad9eb120a58cee500ff3bd5706779c4e4">  318</a></span>&#160;    <a class="code" href="structrapidjson_1_1_generic_string_ref.html#ad9eb120a58cee500ff3bd5706779c4e4">GenericStringRef</a>(<span class="keyword">const</span> CharType* str, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> len)</div><div class="line"><a name="l00319"></a><span class="lineno">  319</span>&#160;        : s(<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga5dc14176a9e71ace282404b0bcda57a1">RAPIDJSON_LIKELY</a>(str) ? str : emptyString), length(len) { <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(str != 0 || len == 0u); }</div><div class="line"><a name="l00320"></a><span class="lineno">  320</span>&#160;</div><div class="line"><a name="l00321"></a><span class="lineno">  321</span>&#160;    <a class="code" href="structrapidjson_1_1_generic_string_ref.html">GenericStringRef</a>(<span class="keyword">const</span> <a class="code" href="structrapidjson_1_1_generic_string_ref.html">GenericStringRef</a>&amp; rhs) : s(rhs.<a class="code" href="structrapidjson_1_1_generic_string_ref.html#a001276ee57cbcbd3c14449045c71e994">s</a>), length(rhs.<a class="code" href="structrapidjson_1_1_generic_string_ref.html#ae223535ec20edf0c1db44a40b7735111">length</a>) {}</div><div class="line"><a name="l00322"></a><span class="lineno">  322</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00323"></a><span class="lineno">  323</span>&#160;<span class="comment">    //! implicit conversion to plain CharType pointer</span></div><div class="line"><a name="l00324"></a><span class="lineno"><a class="line" href="structrapidjson_1_1_generic_string_ref.html#a86d30bb594a41619a7a5ba6c8dcce2bd">  324</a></span>&#160;<span class="comment"></span>    <span class="keyword">operator</span> <span class="keyword">const</span> Ch *() <span class="keyword">const</span> { <span class="keywordflow">return</span> s; }</div><div class="line"><a name="l00325"></a><span class="lineno">  325</span>&#160;</div><div class="line"><a name="l00326"></a><span class="lineno"><a class="line" href="structrapidjson_1_1_generic_string_ref.html#a001276ee57cbcbd3c14449045c71e994">  326</a></span>&#160;    <span class="keyword">const</span> Ch* <span class="keyword">const</span> <a class="code" href="structrapidjson_1_1_generic_string_ref.html#a001276ee57cbcbd3c14449045c71e994">s</a>; <span class="comment">//!&lt; plain CharType pointer</span></div><div class="line"><a name="l00327"></a><span class="lineno"><a class="line" href="structrapidjson_1_1_generic_string_ref.html#ae223535ec20edf0c1db44a40b7735111">  327</a></span>&#160;<span class="comment"></span>    <span class="keyword">const</span> <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> <a class="code" href="structrapidjson_1_1_generic_string_ref.html#ae223535ec20edf0c1db44a40b7735111">length</a>; <span class="comment">//!&lt; length of the string (excluding the trailing NULL terminator)</span></div><div class="line"><a name="l00328"></a><span class="lineno">  328</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00329"></a><span class="lineno">  329</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00330"></a><span class="lineno">  330</span>&#160;    <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> NotNullStrLen(<span class="keyword">const</span> CharType* str) {</div><div class="line"><a name="l00331"></a><span class="lineno">  331</span>&#160;        <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(str != 0);</div><div class="line"><a name="l00332"></a><span class="lineno">  332</span>&#160;        <span class="keywordflow">return</span> internal::StrLen(str);</div><div class="line"><a name="l00333"></a><span class="lineno">  333</span>&#160;    }</div><div class="line"><a name="l00334"></a><span class="lineno">  334</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00335"></a><span class="lineno">  335</span>&#160;<span class="comment">    /// Empty string - used when passing in a NULL pointer</span></div><div class="line"><a name="l00336"></a><span class="lineno">  336</span>&#160;<span class="comment"></span>    <span class="keyword">static</span> <span class="keyword">const</span> Ch emptyString[];</div><div class="line"><a name="l00337"></a><span class="lineno">  337</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00338"></a><span class="lineno">  338</span>&#160;<span class="comment">    //! Disallow construction from non-const array</span></div><div class="line"><a name="l00339"></a><span class="lineno">  339</span>&#160;<span class="comment"></span>    <span class="keyword">template</span>&lt;SizeType N&gt;</div><div class="line"><a name="l00340"></a><span class="lineno">  340</span>&#160;    <a class="code" href="structrapidjson_1_1_generic_string_ref.html">GenericStringRef</a>(CharType (&amp;str)[N]) <span class="comment">/* = delete */</span>;<span class="comment"></span></div><div class="line"><a name="l00341"></a><span class="lineno">  341</span>&#160;<span class="comment">    //! Copy assignment operator not permitted - immutable type</span></div><div class="line"><a name="l00342"></a><span class="lineno">  342</span>&#160;<span class="comment"></span>    <a class="code" href="structrapidjson_1_1_generic_string_ref.html">GenericStringRef</a>&amp; operator=(<span class="keyword">const</span> <a class="code" href="structrapidjson_1_1_generic_string_ref.html">GenericStringRef</a>&amp; rhs) <span class="comment">/* = delete */</span>;</div><div class="line"><a name="l00343"></a><span class="lineno">  343</span>&#160;};</div><div class="line"><a name="l00344"></a><span class="lineno">  344</span>&#160;</div><div class="line"><a name="l00345"></a><span class="lineno">  345</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> CharType&gt;</div><div class="line"><a name="l00346"></a><span class="lineno">  346</span>&#160;<span class="keyword">const</span> CharType <a class="code" href="structrapidjson_1_1_generic_string_ref.html">GenericStringRef&lt;CharType&gt;::emptyString</a>[] = { CharType() };</div><div class="line"><a name="l00347"></a><span class="lineno">  347</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00348"></a><span class="lineno">  348</span>&#160;<span class="comment">//! Mark a character pointer as constant string</span></div><div class="line"><a name="l00349"></a><span class="lineno">  349</span>&#160;<span class="comment"></span><span class="comment">/*! Mark a plain character pointer as a &quot;string literal&quot;.  This function</span></div><div class="line"><a name="l00350"></a><span class="lineno">  350</span>&#160;<span class="comment">    can be used to avoid copying a character string to be referenced as a</span></div><div class="line"><a name="l00351"></a><span class="lineno">  351</span>&#160;<span class="comment">    value in a JSON GenericValue object, if the string&#39;s lifetime is known</span></div><div class="line"><a name="l00352"></a><span class="lineno">  352</span>&#160;<span class="comment">    to be valid long enough.</span></div><div class="line"><a name="l00353"></a><span class="lineno">  353</span>&#160;<span class="comment">    \tparam CharType Character type of the string</span></div><div class="line"><a name="l00354"></a><span class="lineno">  354</span>&#160;<span class="comment">    \param str Constant string, lifetime assumed to be longer than the use of the string in e.g. a GenericValue</span></div><div class="line"><a name="l00355"></a><span class="lineno">  355</span>&#160;<span class="comment">    \return GenericStringRef string reference object</span></div><div class="line"><a name="l00356"></a><span class="lineno">  356</span>&#160;<span class="comment">    \relatesalso GenericStringRef</span></div><div class="line"><a name="l00357"></a><span class="lineno">  357</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00358"></a><span class="lineno">  358</span>&#160;<span class="comment">    \see GenericValue::GenericValue(StringRefType), GenericValue::operator=(StringRefType), GenericValue::SetString(StringRefType), GenericValue::PushBack(StringRefType, Allocator&amp;), GenericValue::AddMember</span></div><div class="line"><a name="l00359"></a><span class="lineno">  359</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00360"></a><span class="lineno">  360</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> CharType&gt;</div><div class="line"><a name="l00361"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#aa6b9fd9f6aa49405a574c362ba9af6b5">  361</a></span>&#160;<span class="keyword">inline</span> <a class="code" href="structrapidjson_1_1_generic_string_ref.html">GenericStringRef&lt;CharType&gt;</a> <a class="code" href="namespacerapidjson.html#af94951529a5d51e8c4e6e770bb707c1f">StringRef</a>(<span class="keyword">const</span> CharType* str) {</div><div class="line"><a name="l00362"></a><span class="lineno">  362</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="structrapidjson_1_1_generic_string_ref.html">GenericStringRef&lt;CharType&gt;</a>(str);</div><div class="line"><a name="l00363"></a><span class="lineno">  363</span>&#160;}</div><div class="line"><a name="l00364"></a><span class="lineno">  364</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00365"></a><span class="lineno">  365</span>&#160;<span class="comment">//! Mark a character pointer as constant string</span></div><div class="line"><a name="l00366"></a><span class="lineno">  366</span>&#160;<span class="comment"></span><span class="comment">/*! Mark a plain character pointer as a &quot;string literal&quot;.  This function</span></div><div class="line"><a name="l00367"></a><span class="lineno">  367</span>&#160;<span class="comment">    can be used to avoid copying a character string to be referenced as a</span></div><div class="line"><a name="l00368"></a><span class="lineno">  368</span>&#160;<span class="comment">    value in a JSON GenericValue object, if the string&#39;s lifetime is known</span></div><div class="line"><a name="l00369"></a><span class="lineno">  369</span>&#160;<span class="comment">    to be valid long enough.</span></div><div class="line"><a name="l00370"></a><span class="lineno">  370</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00371"></a><span class="lineno">  371</span>&#160;<span class="comment">    This version has better performance with supplied length, and also</span></div><div class="line"><a name="l00372"></a><span class="lineno">  372</span>&#160;<span class="comment">    supports string containing null characters.</span></div><div class="line"><a name="l00373"></a><span class="lineno">  373</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00374"></a><span class="lineno">  374</span>&#160;<span class="comment">    \tparam CharType character type of the string</span></div><div class="line"><a name="l00375"></a><span class="lineno">  375</span>&#160;<span class="comment">    \param str Constant string, lifetime assumed to be longer than the use of the string in e.g. a GenericValue</span></div><div class="line"><a name="l00376"></a><span class="lineno">  376</span>&#160;<span class="comment">    \param length The length of source string.</span></div><div class="line"><a name="l00377"></a><span class="lineno">  377</span>&#160;<span class="comment">    \return GenericStringRef string reference object</span></div><div class="line"><a name="l00378"></a><span class="lineno">  378</span>&#160;<span class="comment">    \relatesalso GenericStringRef</span></div><div class="line"><a name="l00379"></a><span class="lineno">  379</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00380"></a><span class="lineno">  380</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> CharType&gt;</div><div class="line"><a name="l00381"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#a578c51ab574a50a9c760b9da7c7562f2">  381</a></span>&#160;<span class="keyword">inline</span> <a class="code" href="structrapidjson_1_1_generic_string_ref.html">GenericStringRef&lt;CharType&gt;</a> <a class="code" href="namespacerapidjson.html#af94951529a5d51e8c4e6e770bb707c1f">StringRef</a>(<span class="keyword">const</span> CharType* str, <span class="keywordtype">size_t</span> length) {</div><div class="line"><a name="l00382"></a><span class="lineno">  382</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="structrapidjson_1_1_generic_string_ref.html">GenericStringRef&lt;CharType&gt;</a>(str, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a>(length));</div><div class="line"><a name="l00383"></a><span class="lineno">  383</span>&#160;}</div><div class="line"><a name="l00384"></a><span class="lineno">  384</span>&#160;</div><div class="line"><a name="l00385"></a><span class="lineno">  385</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l00386"></a><span class="lineno">  386</span>&#160;<span class="comment">//! Mark a string object as constant string</span></div><div class="line"><a name="l00387"></a><span class="lineno">  387</span>&#160;<span class="comment"></span><span class="comment">/*! Mark a string object (e.g. \c std::string) as a &quot;string literal&quot;.</span></div><div class="line"><a name="l00388"></a><span class="lineno">  388</span>&#160;<span class="comment">    This function can be used to avoid copying a string to be referenced as a</span></div><div class="line"><a name="l00389"></a><span class="lineno">  389</span>&#160;<span class="comment">    value in a JSON GenericValue object, if the string&#39;s lifetime is known</span></div><div class="line"><a name="l00390"></a><span class="lineno">  390</span>&#160;<span class="comment">    to be valid long enough.</span></div><div class="line"><a name="l00391"></a><span class="lineno">  391</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00392"></a><span class="lineno">  392</span>&#160;<span class="comment">    \tparam CharType character type of the string</span></div><div class="line"><a name="l00393"></a><span class="lineno">  393</span>&#160;<span class="comment">    \param str Constant string, lifetime assumed to be longer than the use of the string in e.g. a GenericValue</span></div><div class="line"><a name="l00394"></a><span class="lineno">  394</span>&#160;<span class="comment">    \return GenericStringRef string reference object</span></div><div class="line"><a name="l00395"></a><span class="lineno">  395</span>&#160;<span class="comment">    \relatesalso GenericStringRef</span></div><div class="line"><a name="l00396"></a><span class="lineno">  396</span>&#160;<span class="comment">    \note Requires the definition of the preprocessor symbol \ref RAPIDJSON_HAS_STDSTRING.</span></div><div class="line"><a name="l00397"></a><span class="lineno">  397</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00398"></a><span class="lineno">  398</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> CharType&gt;</div><div class="line"><a name="l00399"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#af94951529a5d51e8c4e6e770bb707c1f">  399</a></span>&#160;<span class="keyword">inline</span> <a class="code" href="structrapidjson_1_1_generic_string_ref.html">GenericStringRef&lt;CharType&gt;</a> <a class="code" href="namespacerapidjson.html#af94951529a5d51e8c4e6e770bb707c1f">StringRef</a>(<span class="keyword">const</span> std::basic_string&lt;CharType&gt;&amp; str) {</div><div class="line"><a name="l00400"></a><span class="lineno">  400</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="structrapidjson_1_1_generic_string_ref.html">GenericStringRef&lt;CharType&gt;</a>(str.data(), <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a>(str.size()));</div><div class="line"><a name="l00401"></a><span class="lineno">  401</span>&#160;}</div><div class="line"><a name="l00402"></a><span class="lineno">  402</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00403"></a><span class="lineno">  403</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00404"></a><span class="lineno">  404</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00405"></a><span class="lineno">  405</span>&#160;<span class="comment"></span><span class="comment">// GenericValue type traits</span></div><div class="line"><a name="l00406"></a><span class="lineno">  406</span>&#160;<span class="keyword">namespace </span>internal {</div><div class="line"><a name="l00407"></a><span class="lineno">  407</span>&#160;</div><div class="line"><a name="l00408"></a><span class="lineno">  408</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T, <span class="keyword">typename</span> Encoding = <span class="keywordtype">void</span>, <span class="keyword">typename</span> Allocator = <span class="keywordtype">void</span>&gt;</div><div class="line"><a name="l00409"></a><span class="lineno">  409</span>&#160;<span class="keyword">struct </span>IsGenericValueImpl : FalseType {};</div><div class="line"><a name="l00410"></a><span class="lineno">  410</span>&#160;</div><div class="line"><a name="l00411"></a><span class="lineno">  411</span>&#160;<span class="comment">// select candidates according to nested encoding and allocator types</span></div><div class="line"><a name="l00412"></a><span class="lineno">  412</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt; <span class="keyword">struct </span>IsGenericValueImpl&lt;T, typename Void&lt;typename T::EncodingType&gt;<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">::Type</a>, typename Void&lt;typename T::AllocatorType&gt;<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">::Type</a>&gt;</div><div class="line"><a name="l00413"></a><span class="lineno">  413</span>&#160;    : IsBaseOf&lt;GenericValue&lt;typename T::EncodingType, typename T::AllocatorType&gt;, T&gt;<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">::Type</a> {};</div><div class="line"><a name="l00414"></a><span class="lineno">  414</span>&#160;</div><div class="line"><a name="l00415"></a><span class="lineno">  415</span>&#160;<span class="comment">// helper to match arbitrary GenericValue instantiations, including derived classes</span></div><div class="line"><a name="l00416"></a><span class="lineno">  416</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt; <span class="keyword">struct </span>IsGenericValue : IsGenericValueImpl&lt;T&gt;<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">::Type</a> {};</div><div class="line"><a name="l00417"></a><span class="lineno">  417</span>&#160;</div><div class="line"><a name="l00418"></a><span class="lineno">  418</span>&#160;} <span class="comment">// namespace internal</span></div><div class="line"><a name="l00419"></a><span class="lineno">  419</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00420"></a><span class="lineno">  420</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00421"></a><span class="lineno">  421</span>&#160;<span class="comment"></span><span class="comment">// TypeHelper</span></div><div class="line"><a name="l00422"></a><span class="lineno">  422</span>&#160;</div><div class="line"><a name="l00423"></a><span class="lineno">  423</span>&#160;<span class="keyword">namespace </span>internal {</div><div class="line"><a name="l00424"></a><span class="lineno">  424</span>&#160;</div><div class="line"><a name="l00425"></a><span class="lineno">  425</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> ValueType, <span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l00426"></a><span class="lineno">  426</span>&#160;<span class="keyword">struct </span>TypeHelper {};</div><div class="line"><a name="l00427"></a><span class="lineno">  427</span>&#160;</div><div class="line"><a name="l00428"></a><span class="lineno">  428</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> ValueType&gt; </div><div class="line"><a name="l00429"></a><span class="lineno">  429</span>&#160;<span class="keyword">struct </span>TypeHelper&lt;ValueType, bool&gt; {</div><div class="line"><a name="l00430"></a><span class="lineno">  430</span>&#160;    <span class="keyword">static</span> <span class="keywordtype">bool</span> Is(<span class="keyword">const</span> ValueType&amp; v) { <span class="keywordflow">return</span> v.IsBool(); }</div><div class="line"><a name="l00431"></a><span class="lineno">  431</span>&#160;    <span class="keyword">static</span> <span class="keywordtype">bool</span> Get(<span class="keyword">const</span> ValueType&amp; v) { <span class="keywordflow">return</span> v.GetBool(); }</div><div class="line"><a name="l00432"></a><span class="lineno">  432</span>&#160;    <span class="keyword">static</span> ValueType&amp; Set(ValueType&amp; v, <span class="keywordtype">bool</span> data) { <span class="keywordflow">return</span> v.SetBool(data); }</div><div class="line"><a name="l00433"></a><span class="lineno">  433</span>&#160;    <span class="keyword">static</span> ValueType&amp; Set(ValueType&amp; v, <span class="keywordtype">bool</span> data, <span class="keyword">typename</span> ValueType::AllocatorType&amp;) { <span class="keywordflow">return</span> v.SetBool(data); }</div><div class="line"><a name="l00434"></a><span class="lineno">  434</span>&#160;};</div><div class="line"><a name="l00435"></a><span class="lineno">  435</span>&#160;</div><div class="line"><a name="l00436"></a><span class="lineno">  436</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> ValueType&gt; </div><div class="line"><a name="l00437"></a><span class="lineno">  437</span>&#160;<span class="keyword">struct </span>TypeHelper&lt;ValueType, int&gt; {</div><div class="line"><a name="l00438"></a><span class="lineno">  438</span>&#160;    <span class="keyword">static</span> <span class="keywordtype">bool</span> Is(<span class="keyword">const</span> ValueType&amp; v) { <span class="keywordflow">return</span> v.IsInt(); }</div><div class="line"><a name="l00439"></a><span class="lineno">  439</span>&#160;    <span class="keyword">static</span> <span class="keywordtype">int</span> Get(<span class="keyword">const</span> ValueType&amp; v) { <span class="keywordflow">return</span> v.GetInt(); }</div><div class="line"><a name="l00440"></a><span class="lineno">  440</span>&#160;    <span class="keyword">static</span> ValueType&amp; Set(ValueType&amp; v, <span class="keywordtype">int</span> data) { <span class="keywordflow">return</span> v.SetInt(data); }</div><div class="line"><a name="l00441"></a><span class="lineno">  441</span>&#160;    <span class="keyword">static</span> ValueType&amp; Set(ValueType&amp; v, <span class="keywordtype">int</span> data, <span class="keyword">typename</span> ValueType::AllocatorType&amp;) { <span class="keywordflow">return</span> v.SetInt(data); }</div><div class="line"><a name="l00442"></a><span class="lineno">  442</span>&#160;};</div><div class="line"><a name="l00443"></a><span class="lineno">  443</span>&#160;</div><div class="line"><a name="l00444"></a><span class="lineno">  444</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> ValueType&gt; </div><div class="line"><a name="l00445"></a><span class="lineno">  445</span>&#160;<span class="keyword">struct </span>TypeHelper&lt;ValueType, unsigned&gt; {</div><div class="line"><a name="l00446"></a><span class="lineno">  446</span>&#160;    <span class="keyword">static</span> <span class="keywordtype">bool</span> Is(<span class="keyword">const</span> ValueType&amp; v) { <span class="keywordflow">return</span> v.IsUint(); }</div><div class="line"><a name="l00447"></a><span class="lineno">  447</span>&#160;    <span class="keyword">static</span> <span class="keywordtype">unsigned</span> Get(<span class="keyword">const</span> ValueType&amp; v) { <span class="keywordflow">return</span> v.GetUint(); }</div><div class="line"><a name="l00448"></a><span class="lineno">  448</span>&#160;    <span class="keyword">static</span> ValueType&amp; Set(ValueType&amp; v, <span class="keywordtype">unsigned</span> data) { <span class="keywordflow">return</span> v.SetUint(data); }</div><div class="line"><a name="l00449"></a><span class="lineno">  449</span>&#160;    <span class="keyword">static</span> ValueType&amp; Set(ValueType&amp; v, <span class="keywordtype">unsigned</span> data, <span class="keyword">typename</span> ValueType::AllocatorType&amp;) { <span class="keywordflow">return</span> v.SetUint(data); }</div><div class="line"><a name="l00450"></a><span class="lineno">  450</span>&#160;};</div><div class="line"><a name="l00451"></a><span class="lineno">  451</span>&#160;</div><div class="line"><a name="l00452"></a><span class="lineno">  452</span>&#160;<span class="preprocessor">#ifdef _MSC_VER</span></div><div class="line"><a name="l00453"></a><span class="lineno">  453</span>&#160;<a class="code" href="rapidjson_8h.html#af95188da1d8eb6d4b148fe9ce71cd7c4">RAPIDJSON_STATIC_ASSERT</a>(<span class="keyword">sizeof</span>(<span class="keywordtype">long</span>) == <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div><div class="line"><a name="l00454"></a><span class="lineno">  454</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> ValueType&gt;</div><div class="line"><a name="l00455"></a><span class="lineno">  455</span>&#160;<span class="keyword">struct </span>TypeHelper&lt;ValueType, long&gt; {</div><div class="line"><a name="l00456"></a><span class="lineno">  456</span>&#160;    <span class="keyword">static</span> <span class="keywordtype">bool</span> Is(<span class="keyword">const</span> ValueType&amp; v) { <span class="keywordflow">return</span> v.IsInt(); }</div><div class="line"><a name="l00457"></a><span class="lineno">  457</span>&#160;    <span class="keyword">static</span> <span class="keywordtype">long</span> Get(<span class="keyword">const</span> ValueType&amp; v) { <span class="keywordflow">return</span> v.GetInt(); }</div><div class="line"><a name="l00458"></a><span class="lineno">  458</span>&#160;    <span class="keyword">static</span> ValueType&amp; Set(ValueType&amp; v, <span class="keywordtype">long</span> data) { <span class="keywordflow">return</span> v.SetInt(data); }</div><div class="line"><a name="l00459"></a><span class="lineno">  459</span>&#160;    <span class="keyword">static</span> ValueType&amp; Set(ValueType&amp; v, <span class="keywordtype">long</span> data, <span class="keyword">typename</span> ValueType::AllocatorType&amp;) { <span class="keywordflow">return</span> v.SetInt(data); }</div><div class="line"><a name="l00460"></a><span class="lineno">  460</span>&#160;};</div><div class="line"><a name="l00461"></a><span class="lineno">  461</span>&#160;</div><div class="line"><a name="l00462"></a><span class="lineno">  462</span>&#160;<a class="code" href="rapidjson_8h.html#af95188da1d8eb6d4b148fe9ce71cd7c4">RAPIDJSON_STATIC_ASSERT</a>(<span class="keyword">sizeof</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>) == <span class="keyword">sizeof</span>(<span class="keywordtype">unsigned</span>));</div><div class="line"><a name="l00463"></a><span class="lineno">  463</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> ValueType&gt;</div><div class="line"><a name="l00464"></a><span class="lineno">  464</span>&#160;<span class="keyword">struct </span>TypeHelper&lt;ValueType, unsigned long&gt; {</div><div class="line"><a name="l00465"></a><span class="lineno">  465</span>&#160;    <span class="keyword">static</span> <span class="keywordtype">bool</span> Is(<span class="keyword">const</span> ValueType&amp; v) { <span class="keywordflow">return</span> v.IsUint(); }</div><div class="line"><a name="l00466"></a><span class="lineno">  466</span>&#160;    <span class="keyword">static</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> Get(<span class="keyword">const</span> ValueType&amp; v) { <span class="keywordflow">return</span> v.GetUint(); }</div><div class="line"><a name="l00467"></a><span class="lineno">  467</span>&#160;    <span class="keyword">static</span> ValueType&amp; Set(ValueType&amp; v, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> data) { <span class="keywordflow">return</span> v.SetUint(data); }</div><div class="line"><a name="l00468"></a><span class="lineno">  468</span>&#160;    <span class="keyword">static</span> ValueType&amp; Set(ValueType&amp; v, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> data, <span class="keyword">typename</span> ValueType::AllocatorType&amp;) { <span class="keywordflow">return</span> v.SetUint(data); }</div><div class="line"><a name="l00469"></a><span class="lineno">  469</span>&#160;};</div><div class="line"><a name="l00470"></a><span class="lineno">  470</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00471"></a><span class="lineno">  471</span>&#160;</div><div class="line"><a name="l00472"></a><span class="lineno">  472</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> ValueType&gt; </div><div class="line"><a name="l00473"></a><span class="lineno">  473</span>&#160;<span class="keyword">struct </span>TypeHelper&lt;ValueType, int64_t&gt; {</div><div class="line"><a name="l00474"></a><span class="lineno">  474</span>&#160;    <span class="keyword">static</span> <span class="keywordtype">bool</span> Is(<span class="keyword">const</span> ValueType&amp; v) { <span class="keywordflow">return</span> v.IsInt64(); }</div><div class="line"><a name="l00475"></a><span class="lineno">  475</span>&#160;    <span class="keyword">static</span> int64_t Get(<span class="keyword">const</span> ValueType&amp; v) { <span class="keywordflow">return</span> v.GetInt64(); }</div><div class="line"><a name="l00476"></a><span class="lineno">  476</span>&#160;    <span class="keyword">static</span> ValueType&amp; Set(ValueType&amp; v, int64_t data) { <span class="keywordflow">return</span> v.SetInt64(data); }</div><div class="line"><a name="l00477"></a><span class="lineno">  477</span>&#160;    <span class="keyword">static</span> ValueType&amp; Set(ValueType&amp; v, int64_t data, <span class="keyword">typename</span> ValueType::AllocatorType&amp;) { <span class="keywordflow">return</span> v.SetInt64(data); }</div><div class="line"><a name="l00478"></a><span class="lineno">  478</span>&#160;};</div><div class="line"><a name="l00479"></a><span class="lineno">  479</span>&#160;</div><div class="line"><a name="l00480"></a><span class="lineno">  480</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> ValueType&gt; </div><div class="line"><a name="l00481"></a><span class="lineno">  481</span>&#160;<span class="keyword">struct </span>TypeHelper&lt;ValueType, uint64_t&gt; {</div><div class="line"><a name="l00482"></a><span class="lineno">  482</span>&#160;    <span class="keyword">static</span> <span class="keywordtype">bool</span> Is(<span class="keyword">const</span> ValueType&amp; v) { <span class="keywordflow">return</span> v.IsUint64(); }</div><div class="line"><a name="l00483"></a><span class="lineno">  483</span>&#160;    <span class="keyword">static</span> uint64_t Get(<span class="keyword">const</span> ValueType&amp; v) { <span class="keywordflow">return</span> v.GetUint64(); }</div><div class="line"><a name="l00484"></a><span class="lineno">  484</span>&#160;    <span class="keyword">static</span> ValueType&amp; Set(ValueType&amp; v, uint64_t data) { <span class="keywordflow">return</span> v.SetUint64(data); }</div><div class="line"><a name="l00485"></a><span class="lineno">  485</span>&#160;    <span class="keyword">static</span> ValueType&amp; Set(ValueType&amp; v, uint64_t data, <span class="keyword">typename</span> ValueType::AllocatorType&amp;) { <span class="keywordflow">return</span> v.SetUint64(data); }</div><div class="line"><a name="l00486"></a><span class="lineno">  486</span>&#160;};</div><div class="line"><a name="l00487"></a><span class="lineno">  487</span>&#160;</div><div class="line"><a name="l00488"></a><span class="lineno">  488</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> ValueType&gt; </div><div class="line"><a name="l00489"></a><span class="lineno">  489</span>&#160;<span class="keyword">struct </span>TypeHelper&lt;ValueType, double&gt; {</div><div class="line"><a name="l00490"></a><span class="lineno">  490</span>&#160;    <span class="keyword">static</span> <span class="keywordtype">bool</span> Is(<span class="keyword">const</span> ValueType&amp; v) { <span class="keywordflow">return</span> v.IsDouble(); }</div><div class="line"><a name="l00491"></a><span class="lineno">  491</span>&#160;    <span class="keyword">static</span> <span class="keywordtype">double</span> Get(<span class="keyword">const</span> ValueType&amp; v) { <span class="keywordflow">return</span> v.GetDouble(); }</div><div class="line"><a name="l00492"></a><span class="lineno">  492</span>&#160;    <span class="keyword">static</span> ValueType&amp; Set(ValueType&amp; v, <span class="keywordtype">double</span> data) { <span class="keywordflow">return</span> v.SetDouble(data); }</div><div class="line"><a name="l00493"></a><span class="lineno">  493</span>&#160;    <span class="keyword">static</span> ValueType&amp; Set(ValueType&amp; v, <span class="keywordtype">double</span> data, <span class="keyword">typename</span> ValueType::AllocatorType&amp;) { <span class="keywordflow">return</span> v.SetDouble(data); }</div><div class="line"><a name="l00494"></a><span class="lineno">  494</span>&#160;};</div><div class="line"><a name="l00495"></a><span class="lineno">  495</span>&#160;</div><div class="line"><a name="l00496"></a><span class="lineno">  496</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> ValueType&gt; </div><div class="line"><a name="l00497"></a><span class="lineno">  497</span>&#160;<span class="keyword">struct </span>TypeHelper&lt;ValueType, float&gt; {</div><div class="line"><a name="l00498"></a><span class="lineno">  498</span>&#160;    <span class="keyword">static</span> <span class="keywordtype">bool</span> Is(<span class="keyword">const</span> ValueType&amp; v) { <span class="keywordflow">return</span> v.IsFloat(); }</div><div class="line"><a name="l00499"></a><span class="lineno">  499</span>&#160;    <span class="keyword">static</span> <span class="keywordtype">float</span> Get(<span class="keyword">const</span> ValueType&amp; v) { <span class="keywordflow">return</span> v.GetFloat(); }</div><div class="line"><a name="l00500"></a><span class="lineno">  500</span>&#160;    <span class="keyword">static</span> ValueType&amp; Set(ValueType&amp; v, <span class="keywordtype">float</span> data) { <span class="keywordflow">return</span> v.SetFloat(data); }</div><div class="line"><a name="l00501"></a><span class="lineno">  501</span>&#160;    <span class="keyword">static</span> ValueType&amp; Set(ValueType&amp; v, <span class="keywordtype">float</span> data, <span class="keyword">typename</span> ValueType::AllocatorType&amp;) { <span class="keywordflow">return</span> v.SetFloat(data); }</div><div class="line"><a name="l00502"></a><span class="lineno">  502</span>&#160;};</div><div class="line"><a name="l00503"></a><span class="lineno">  503</span>&#160;</div><div class="line"><a name="l00504"></a><span class="lineno">  504</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> ValueType&gt; </div><div class="line"><a name="l00505"></a><span class="lineno">  505</span>&#160;<span class="keyword">struct </span>TypeHelper&lt;ValueType, const typename ValueType::Ch*&gt; {</div><div class="line"><a name="l00506"></a><span class="lineno">  506</span>&#160;    <span class="keyword">typedef</span> <span class="keyword">const</span> <span class="keyword">typename</span> ValueType::Ch* StringType;</div><div class="line"><a name="l00507"></a><span class="lineno">  507</span>&#160;    <span class="keyword">static</span> <span class="keywordtype">bool</span> Is(<span class="keyword">const</span> ValueType&amp; v) { <span class="keywordflow">return</span> v.IsString(); }</div><div class="line"><a name="l00508"></a><span class="lineno">  508</span>&#160;    <span class="keyword">static</span> StringType Get(<span class="keyword">const</span> ValueType&amp; v) { <span class="keywordflow">return</span> v.GetString(); }</div><div class="line"><a name="l00509"></a><span class="lineno">  509</span>&#160;    <span class="keyword">static</span> ValueType&amp; Set(ValueType&amp; v, <span class="keyword">const</span> StringType data) { <span class="keywordflow">return</span> v.SetString(<span class="keyword">typename</span> ValueType::StringRefType(data)); }</div><div class="line"><a name="l00510"></a><span class="lineno">  510</span>&#160;    <span class="keyword">static</span> ValueType&amp; Set(ValueType&amp; v, <span class="keyword">const</span> StringType data, <span class="keyword">typename</span> ValueType::AllocatorType&amp; a) { <span class="keywordflow">return</span> v.SetString(data, a); }</div><div class="line"><a name="l00511"></a><span class="lineno">  511</span>&#160;};</div><div class="line"><a name="l00512"></a><span class="lineno">  512</span>&#160;</div><div class="line"><a name="l00513"></a><span class="lineno">  513</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l00514"></a><span class="lineno">  514</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> ValueType&gt; </div><div class="line"><a name="l00515"></a><span class="lineno">  515</span>&#160;<span class="keyword">struct </span>TypeHelper&lt;ValueType, std::basic_string&lt;typename ValueType::Ch&gt; &gt; {</div><div class="line"><a name="l00516"></a><span class="lineno">  516</span>&#160;    <span class="keyword">typedef</span> std::basic_string&lt;typename ValueType::Ch&gt; StringType;</div><div class="line"><a name="l00517"></a><span class="lineno">  517</span>&#160;    <span class="keyword">static</span> <span class="keywordtype">bool</span> Is(<span class="keyword">const</span> ValueType&amp; v) { <span class="keywordflow">return</span> v.IsString(); }</div><div class="line"><a name="l00518"></a><span class="lineno">  518</span>&#160;    <span class="keyword">static</span> StringType Get(<span class="keyword">const</span> ValueType&amp; v) { <span class="keywordflow">return</span> StringType(v.GetString(), v.GetStringLength()); }</div><div class="line"><a name="l00519"></a><span class="lineno">  519</span>&#160;    <span class="keyword">static</span> ValueType&amp; Set(ValueType&amp; v, <span class="keyword">const</span> StringType&amp; data, <span class="keyword">typename</span> ValueType::AllocatorType&amp; a) { <span class="keywordflow">return</span> v.SetString(data, a); }</div><div class="line"><a name="l00520"></a><span class="lineno">  520</span>&#160;};</div><div class="line"><a name="l00521"></a><span class="lineno">  521</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00522"></a><span class="lineno">  522</span>&#160;</div><div class="line"><a name="l00523"></a><span class="lineno">  523</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> ValueType&gt; </div><div class="line"><a name="l00524"></a><span class="lineno">  524</span>&#160;<span class="keyword">struct </span>TypeHelper&lt;ValueType, typename ValueType::Array&gt; {</div><div class="line"><a name="l00525"></a><span class="lineno">  525</span>&#160;    <span class="keyword">typedef</span> <span class="keyword">typename</span> ValueType::Array ArrayType;</div><div class="line"><a name="l00526"></a><span class="lineno">  526</span>&#160;    <span class="keyword">static</span> <span class="keywordtype">bool</span> Is(<span class="keyword">const</span> ValueType&amp; v) { <span class="keywordflow">return</span> v.IsArray(); }</div><div class="line"><a name="l00527"></a><span class="lineno">  527</span>&#160;    <span class="keyword">static</span> ArrayType Get(ValueType&amp; v) { <span class="keywordflow">return</span> v.GetArray(); }</div><div class="line"><a name="l00528"></a><span class="lineno">  528</span>&#160;    <span class="keyword">static</span> ValueType&amp; Set(ValueType&amp; v, ArrayType data) { <span class="keywordflow">return</span> v = data; }</div><div class="line"><a name="l00529"></a><span class="lineno">  529</span>&#160;    <span class="keyword">static</span> ValueType&amp; Set(ValueType&amp; v, ArrayType data, <span class="keyword">typename</span> ValueType::AllocatorType&amp;) { <span class="keywordflow">return</span> v = data; }</div><div class="line"><a name="l00530"></a><span class="lineno">  530</span>&#160;};</div><div class="line"><a name="l00531"></a><span class="lineno">  531</span>&#160;</div><div class="line"><a name="l00532"></a><span class="lineno">  532</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> ValueType&gt; </div><div class="line"><a name="l00533"></a><span class="lineno">  533</span>&#160;<span class="keyword">struct </span>TypeHelper&lt;ValueType, typename ValueType::ConstArray&gt; {</div><div class="line"><a name="l00534"></a><span class="lineno">  534</span>&#160;    <span class="keyword">typedef</span> <span class="keyword">typename</span> ValueType::ConstArray ArrayType;</div><div class="line"><a name="l00535"></a><span class="lineno">  535</span>&#160;    <span class="keyword">static</span> <span class="keywordtype">bool</span> Is(<span class="keyword">const</span> ValueType&amp; v) { <span class="keywordflow">return</span> v.IsArray(); }</div><div class="line"><a name="l00536"></a><span class="lineno">  536</span>&#160;    <span class="keyword">static</span> ArrayType Get(<span class="keyword">const</span> ValueType&amp; v) { <span class="keywordflow">return</span> v.GetArray(); }</div><div class="line"><a name="l00537"></a><span class="lineno">  537</span>&#160;};</div><div class="line"><a name="l00538"></a><span class="lineno">  538</span>&#160;</div><div class="line"><a name="l00539"></a><span class="lineno">  539</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> ValueType&gt; </div><div class="line"><a name="l00540"></a><span class="lineno">  540</span>&#160;<span class="keyword">struct </span>TypeHelper&lt;ValueType, typename ValueType::Object&gt; {</div><div class="line"><a name="l00541"></a><span class="lineno">  541</span>&#160;    <span class="keyword">typedef</span> <span class="keyword">typename</span> ValueType::Object ObjectType;</div><div class="line"><a name="l00542"></a><span class="lineno">  542</span>&#160;    <span class="keyword">static</span> <span class="keywordtype">bool</span> Is(<span class="keyword">const</span> ValueType&amp; v) { <span class="keywordflow">return</span> v.IsObject(); }</div><div class="line"><a name="l00543"></a><span class="lineno">  543</span>&#160;    <span class="keyword">static</span> ObjectType Get(ValueType&amp; v) { <span class="keywordflow">return</span> v.GetObject(); }</div><div class="line"><a name="l00544"></a><span class="lineno">  544</span>&#160;    <span class="keyword">static</span> ValueType&amp; Set(ValueType&amp; v, ObjectType data) { <span class="keywordflow">return</span> v = data; }</div><div class="line"><a name="l00545"></a><span class="lineno">  545</span>&#160;    <span class="keyword">static</span> ValueType&amp; Set(ValueType&amp; v, ObjectType data, <span class="keyword">typename</span> ValueType::AllocatorType&amp;) { <span class="keywordflow">return</span> v = data; }</div><div class="line"><a name="l00546"></a><span class="lineno">  546</span>&#160;};</div><div class="line"><a name="l00547"></a><span class="lineno">  547</span>&#160;</div><div class="line"><a name="l00548"></a><span class="lineno">  548</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> ValueType&gt; </div><div class="line"><a name="l00549"></a><span class="lineno">  549</span>&#160;<span class="keyword">struct </span>TypeHelper&lt;ValueType, typename ValueType::ConstObject&gt; {</div><div class="line"><a name="l00550"></a><span class="lineno">  550</span>&#160;    <span class="keyword">typedef</span> <span class="keyword">typename</span> ValueType::ConstObject ObjectType;</div><div class="line"><a name="l00551"></a><span class="lineno">  551</span>&#160;    <span class="keyword">static</span> <span class="keywordtype">bool</span> Is(<span class="keyword">const</span> ValueType&amp; v) { <span class="keywordflow">return</span> v.IsObject(); }</div><div class="line"><a name="l00552"></a><span class="lineno">  552</span>&#160;    <span class="keyword">static</span> ObjectType Get(<span class="keyword">const</span> ValueType&amp; v) { <span class="keywordflow">return</span> v.GetObject(); }</div><div class="line"><a name="l00553"></a><span class="lineno">  553</span>&#160;};</div><div class="line"><a name="l00554"></a><span class="lineno">  554</span>&#160;</div><div class="line"><a name="l00555"></a><span class="lineno">  555</span>&#160;} <span class="comment">// namespace internal</span></div><div class="line"><a name="l00556"></a><span class="lineno">  556</span>&#160;</div><div class="line"><a name="l00557"></a><span class="lineno">  557</span>&#160;<span class="comment">// Forward declarations</span></div><div class="line"><a name="l00558"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_array.html">  558</a></span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">bool</span>, <span class="keyword">typename</span>&gt; <span class="keyword">class </span><a class="code" href="classrapidjson_1_1_generic_array.html">GenericArray</a>;</div><div class="line"><a name="l00559"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_object.html">  559</a></span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">bool</span>, <span class="keyword">typename</span>&gt; <span class="keyword">class </span><a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject</a>;</div><div class="line"><a name="l00560"></a><span class="lineno">  560</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00561"></a><span class="lineno">  561</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00562"></a><span class="lineno">  562</span>&#160;<span class="comment"></span><span class="comment">// GenericValue</span></div><div class="line"><a name="l00563"></a><span class="lineno">  563</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00564"></a><span class="lineno">  564</span>&#160;<span class="comment">//! Represents a JSON value. Use Value for UTF8 encoding and default allocator.</span></div><div class="line"><a name="l00565"></a><span class="lineno">  565</span>&#160;<span class="comment"></span><span class="comment">/*!</span></div><div class="line"><a name="l00566"></a><span class="lineno">  566</span>&#160;<span class="comment">    A JSON value can be one of 7 types. This class is a variant type supporting</span></div><div class="line"><a name="l00567"></a><span class="lineno">  567</span>&#160;<span class="comment">    these types.</span></div><div class="line"><a name="l00568"></a><span class="lineno">  568</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00569"></a><span class="lineno">  569</span>&#160;<span class="comment">    Use the Value if UTF8 and default allocator</span></div><div class="line"><a name="l00570"></a><span class="lineno">  570</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00571"></a><span class="lineno">  571</span>&#160;<span class="comment">    \tparam Encoding    Encoding of the value. (Even non-string values need to have the same encoding in a document)</span></div><div class="line"><a name="l00572"></a><span class="lineno">  572</span>&#160;<span class="comment">    \tparam Allocator   Allocator type for allocating memory of object, array and string.</span></div><div class="line"><a name="l00573"></a><span class="lineno">  573</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00574"></a><span class="lineno">  574</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> Encoding, <span class="keyword">typename</span> Allocator = MemoryPoolAllocator&lt;&gt; &gt; </div><div class="line"><a name="l00575"></a><span class="lineno">  575</span>&#160;<span class="keyword">class </span><a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a> {</div><div class="line"><a name="l00576"></a><span class="lineno">  576</span>&#160;<span class="keyword">public</span>:<span class="comment"></span></div><div class="line"><a name="l00577"></a><span class="lineno">  577</span>&#160;<span class="comment">    //! Name-value pair in an object.</span></div><div class="line"><a name="l00578"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a0220ddebe2f023fa75b643a50e90e559">  578</a></span>&#160;<span class="comment"></span>    <span class="keyword">typedef</span> <a class="code" href="structrapidjson_1_1_generic_member.html">GenericMember&lt;Encoding, Allocator&gt;</a> <a class="code" href="classrapidjson_1_1_generic_value.html#a0220ddebe2f023fa75b643a50e90e559">Member</a>;</div><div class="line"><a name="l00579"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a05906384808645a2e798d29a9b2d441d">  579</a></span>&#160;    <span class="keyword">typedef</span> Encoding <a class="code" href="classrapidjson_1_1_generic_value.html#a05906384808645a2e798d29a9b2d441d">EncodingType</a>;                  <span class="comment">//!&lt; Encoding type from template parameter.</span></div><div class="line"><a name="l00580"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a5d47340c96346c5028fee4c9068d783d">  580</a></span>&#160;<span class="comment"></span>    <span class="keyword">typedef</span> Allocator <a class="code" href="classrapidjson_1_1_generic_value.html#a5d47340c96346c5028fee4c9068d783d">AllocatorType</a>;                <span class="comment">//!&lt; Allocator type from template parameter.</span></div><div class="line"><a name="l00581"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#adcdbc7fa85a9a41b78966d7e0dcc2ac4">  581</a></span>&#160;<span class="comment"></span>    <span class="keyword">typedef</span> <span class="keyword">typename</span> Encoding::Ch <a class="code" href="classrapidjson_1_1_generic_value.html#adcdbc7fa85a9a41b78966d7e0dcc2ac4">Ch</a>;               <span class="comment">//!&lt; Character type derived from Encoding.</span></div><div class="line"><a name="l00582"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a559eb9cea54364a35518b02f6d74f379">  582</a></span>&#160;<span class="comment"></span>    <span class="keyword">typedef</span> <a class="code" href="structrapidjson_1_1_generic_string_ref.html">GenericStringRef&lt;Ch&gt;</a> <a class="code" href="classrapidjson_1_1_generic_value.html#a559eb9cea54364a35518b02f6d74f379">StringRefType</a>;     <span class="comment">//!&lt; Reference to a constant string</span></div><div class="line"><a name="l00583"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#aca5596987335016c1a7c2a9467baf80b">  583</a></span>&#160;<span class="comment"></span>    <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">GenericMemberIterator&lt;false,Encoding,Allocator&gt;::Iterator</a> <a class="code" href="classrapidjson_1_1_generic_value.html#aca5596987335016c1a7c2a9467baf80b">MemberIterator</a>;  <span class="comment">//!&lt; Member iterator for iterating in object.</span></div><div class="line"><a name="l00584"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a6cd2b09795c48d2892bebc0ae350d51f">  584</a></span>&#160;<span class="comment"></span>    <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">GenericMemberIterator&lt;true,Encoding,Allocator&gt;::Iterator</a> <a class="code" href="classrapidjson_1_1_generic_value.html#a6cd2b09795c48d2892bebc0ae350d51f">ConstMemberIterator</a>;  <span class="comment">//!&lt; Constant member iterator for iterating in object.</span></div><div class="line"><a name="l00585"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a06ce0e14ec83b53c83e1b1699b53a25e">  585</a></span>&#160;<span class="comment"></span>    <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>* <a class="code" href="classrapidjson_1_1_generic_value.html#a06ce0e14ec83b53c83e1b1699b53a25e">ValueIterator</a>;            <span class="comment">//!&lt; Value iterator for iterating in array.</span></div><div class="line"><a name="l00586"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a89a6588121742fc3f154b10b8f15f45f">  586</a></span>&#160;<span class="comment"></span>    <span class="keyword">typedef</span> <span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>* <a class="code" href="classrapidjson_1_1_generic_value.html#a89a6588121742fc3f154b10b8f15f45f">ConstValueIterator</a>; <span class="comment">//!&lt; Constant value iterator for iterating in array.</span></div><div class="line"><a name="l00587"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#ad2935191ab28c2c2e472b739a9d58202">  587</a></span>&#160;<span class="comment"></span>    <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue&lt;Encoding, Allocator&gt;</a> <a class="code" href="classrapidjson_1_1_generic_value.html#ad2935191ab28c2c2e472b739a9d58202">ValueType</a>;    <span class="comment">//!&lt; Value type of itself.</span></div><div class="line"><a name="l00588"></a><span class="lineno">  588</span>&#160;<span class="comment"></span>    <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_array.html">GenericArray&lt;false, ValueType&gt;</a> <a class="code" href="classrapidjson_1_1_generic_array.html">Array</a>;</div><div class="line"><a name="l00589"></a><span class="lineno">  589</span>&#160;    <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_array.html">GenericArray&lt;true, ValueType&gt;</a> <a class="code" href="classrapidjson_1_1_generic_array.html">ConstArray</a>;</div><div class="line"><a name="l00590"></a><span class="lineno">  590</span>&#160;    <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject&lt;false, ValueType&gt;</a> <a class="code" href="classrapidjson_1_1_generic_object.html">Object</a>;</div><div class="line"><a name="l00591"></a><span class="lineno">  591</span>&#160;    <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject&lt;true, ValueType&gt;</a> <a class="code" href="classrapidjson_1_1_generic_object.html">ConstObject</a>;</div><div class="line"><a name="l00592"></a><span class="lineno">  592</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00593"></a><span class="lineno">  593</span>&#160;<span class="comment">    //!@name Constructors and destructor.</span></div><div class="line"><a name="l00594"></a><span class="lineno">  594</span>&#160;<span class="comment"></span><span class="comment">    //@{</span></div><div class="line"><a name="l00595"></a><span class="lineno">  595</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00596"></a><span class="lineno">  596</span>&#160;<span class="comment">    //! Default constructor creates a null value.</span></div><div class="line"><a name="l00597"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#ad1f8199e65662e0d52a13a1577d4e4a5">  597</a></span>&#160;<span class="comment"></span>    <a class="code" href="classrapidjson_1_1_generic_value.html#ad1f8199e65662e0d52a13a1577d4e4a5">GenericValue</a>() RAPIDJSON_NOEXCEPT : data_() { data_.f.flags = kNullFlag; }</div><div class="line"><a name="l00598"></a><span class="lineno">  598</span>&#160;</div><div class="line"><a name="l00599"></a><span class="lineno">  599</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l00600"></a><span class="lineno">  600</span>&#160;<span class="comment">    //! Move constructor in C++11</span></div><div class="line"><a name="l00601"></a><span class="lineno">  601</span>&#160;<span class="comment"></span>    <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp;&amp; rhs) RAPIDJSON_NOEXCEPT : data_(rhs.data_) {</div><div class="line"><a name="l00602"></a><span class="lineno">  602</span>&#160;        rhs.data_.f.flags = kNullFlag; <span class="comment">// give up contents</span></div><div class="line"><a name="l00603"></a><span class="lineno">  603</span>&#160;    }</div><div class="line"><a name="l00604"></a><span class="lineno">  604</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00605"></a><span class="lineno">  605</span>&#160;</div><div class="line"><a name="l00606"></a><span class="lineno">  606</span>&#160;<span class="keyword">private</span>:<span class="comment"></span></div><div class="line"><a name="l00607"></a><span class="lineno">  607</span>&#160;<span class="comment">    //! Copy constructor is not permitted.</span></div><div class="line"><a name="l00608"></a><span class="lineno">  608</span>&#160;<span class="comment"></span>    <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; rhs);</div><div class="line"><a name="l00609"></a><span class="lineno">  609</span>&#160;</div><div class="line"><a name="l00610"></a><span class="lineno">  610</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l00611"></a><span class="lineno">  611</span>&#160;<span class="comment">    //! Moving from a GenericDocument is not permitted.</span></div><div class="line"><a name="l00612"></a><span class="lineno">  612</span>&#160;<span class="comment"></span>    <span class="keyword">template</span> &lt;<span class="keyword">typename</span> StackAllocator&gt;</div><div class="line"><a name="l00613"></a><span class="lineno">  613</span>&#160;    <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(<a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument&lt;Encoding,Allocator,StackAllocator&gt;</a>&amp;&amp; rhs);</div><div class="line"><a name="l00614"></a><span class="lineno">  614</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00615"></a><span class="lineno">  615</span>&#160;<span class="comment">    //! Move assignment from a GenericDocument is not permitted.</span></div><div class="line"><a name="l00616"></a><span class="lineno">  616</span>&#160;<span class="comment"></span>    <span class="keyword">template</span> &lt;<span class="keyword">typename</span> StackAllocator&gt;</div><div class="line"><a name="l00617"></a><span class="lineno">  617</span>&#160;    <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; operator=(<a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument&lt;Encoding,Allocator,StackAllocator&gt;</a>&amp;&amp; rhs);</div><div class="line"><a name="l00618"></a><span class="lineno">  618</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00619"></a><span class="lineno">  619</span>&#160;</div><div class="line"><a name="l00620"></a><span class="lineno">  620</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00621"></a><span class="lineno">  621</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00622"></a><span class="lineno">  622</span>&#160;<span class="comment">    //! Constructor with JSON value type.</span></div><div class="line"><a name="l00623"></a><span class="lineno">  623</span>&#160;<span class="comment"></span><span class="comment">    /*! This creates a Value of specified type with default content.</span></div><div class="line"><a name="l00624"></a><span class="lineno">  624</span>&#160;<span class="comment">        \param type Type of the value.</span></div><div class="line"><a name="l00625"></a><span class="lineno">  625</span>&#160;<span class="comment">        \note Default content for number is zero.</span></div><div class="line"><a name="l00626"></a><span class="lineno">  626</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l00627"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a646b6d4d3d98799a0926d96ffa127a58">  627</a></span>&#160;    <span class="keyword">explicit</span> <a class="code" href="classrapidjson_1_1_generic_value.html#a646b6d4d3d98799a0926d96ffa127a58">GenericValue</a>(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">Type</a> type) RAPIDJSON_NOEXCEPT : data_() {</div><div class="line"><a name="l00628"></a><span class="lineno">  628</span>&#160;        <span class="keyword">static</span> <span class="keyword">const</span> uint16_t defaultFlags[7] = {</div><div class="line"><a name="l00629"></a><span class="lineno">  629</span>&#160;            kNullFlag, kFalseFlag, kTrueFlag, kObjectFlag, kArrayFlag, kShortStringFlag,</div><div class="line"><a name="l00630"></a><span class="lineno">  630</span>&#160;            kNumberAnyFlag</div><div class="line"><a name="l00631"></a><span class="lineno">  631</span>&#160;        };</div><div class="line"><a name="l00632"></a><span class="lineno">  632</span>&#160;        RAPIDJSON_NOEXCEPT_ASSERT(type &gt;= <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a952871e4326b527154fc8aac1ac1f6ff">kNullType</a> &amp;&amp; type &lt;= <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a">kNumberType</a>);</div><div class="line"><a name="l00633"></a><span class="lineno">  633</span>&#160;        data_.f.flags = defaultFlags[type];</div><div class="line"><a name="l00634"></a><span class="lineno">  634</span>&#160;</div><div class="line"><a name="l00635"></a><span class="lineno">  635</span>&#160;        <span class="comment">// Use ShortString to store empty string.</span></div><div class="line"><a name="l00636"></a><span class="lineno">  636</span>&#160;        <span class="keywordflow">if</span> (type == <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4ad6379da3dc04b83a591992bfb9fabba7">kStringType</a>)</div><div class="line"><a name="l00637"></a><span class="lineno">  637</span>&#160;            data_.ss.SetLength(0);</div><div class="line"><a name="l00638"></a><span class="lineno">  638</span>&#160;    }</div><div class="line"><a name="l00639"></a><span class="lineno">  639</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00640"></a><span class="lineno">  640</span>&#160;<span class="comment">    //! Explicit copy constructor (with allocator)</span></div><div class="line"><a name="l00641"></a><span class="lineno">  641</span>&#160;<span class="comment"></span><span class="comment">    /*! Creates a copy of a Value by using the given Allocator</span></div><div class="line"><a name="l00642"></a><span class="lineno">  642</span>&#160;<span class="comment">        \tparam SourceAllocator allocator of \c rhs</span></div><div class="line"><a name="l00643"></a><span class="lineno">  643</span>&#160;<span class="comment">        \param rhs Value to copy from (read-only)</span></div><div class="line"><a name="l00644"></a><span class="lineno">  644</span>&#160;<span class="comment">        \param allocator Allocator for allocating copied elements and buffers. Commonly use GenericDocument::GetAllocator().</span></div><div class="line"><a name="l00645"></a><span class="lineno">  645</span>&#160;<span class="comment">        \param copyConstStrings Force copying of constant strings (e.g. referencing an in-situ buffer)</span></div><div class="line"><a name="l00646"></a><span class="lineno">  646</span>&#160;<span class="comment">        \see CopyFrom()</span></div><div class="line"><a name="l00647"></a><span class="lineno">  647</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l00648"></a><span class="lineno">  648</span>&#160;    <span class="keyword">template</span> &lt;<span class="keyword">typename</span> SourceAllocator&gt;</div><div class="line"><a name="l00649"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#adca019775f68f012643781cd2c2515ac">  649</a></span>&#160;    <a class="code" href="classrapidjson_1_1_generic_value.html#adca019775f68f012643781cd2c2515ac">GenericValue</a>(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue&lt;Encoding,SourceAllocator&gt;</a>&amp; rhs, Allocator&amp; allocator, <span class="keywordtype">bool</span> copyConstStrings = <span class="keyword">false</span>) {</div><div class="line"><a name="l00650"></a><span class="lineno">  650</span>&#160;        <span class="keywordflow">switch</span> (rhs.GetType()) {</div><div class="line"><a name="l00651"></a><span class="lineno">  651</span>&#160;        <span class="keywordflow">case</span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4acf030b422a32c3647c7c5973bd4dd0a9">kObjectType</a>: {</div><div class="line"><a name="l00652"></a><span class="lineno">  652</span>&#160;                <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> count = rhs.data_.o.size;</div><div class="line"><a name="l00653"></a><span class="lineno">  653</span>&#160;                Member* lm = <span class="keyword">reinterpret_cast&lt;</span>Member*<span class="keyword">&gt;</span>(allocator.Malloc(count * <span class="keyword">sizeof</span>(Member)));</div><div class="line"><a name="l00654"></a><span class="lineno">  654</span>&#160;                <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="structrapidjson_1_1_generic_member.html">GenericValue&lt;Encoding,SourceAllocator&gt;::Member</a>* rm = rhs.GetMembersPointer();</div><div class="line"><a name="l00655"></a><span class="lineno">  655</span>&#160;                <span class="keywordflow">for</span> (<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> i = 0; i &lt; count; i++) {</div><div class="line"><a name="l00656"></a><span class="lineno">  656</span>&#160;                    <span class="keyword">new</span> (&amp;lm[i].<a class="code" href="structrapidjson_1_1_generic_member.html#ae820eaa74b415a9073f3f3855f6c6607">name</a>) <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(rm[i].name, allocator, copyConstStrings);</div><div class="line"><a name="l00657"></a><span class="lineno">  657</span>&#160;                    <span class="keyword">new</span> (&amp;lm[i].<a class="code" href="structrapidjson_1_1_generic_member.html#a8ffff2076e62d988a070a136da6ffca6">value</a>) <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(rm[i].value, allocator, copyConstStrings);</div><div class="line"><a name="l00658"></a><span class="lineno">  658</span>&#160;                }</div><div class="line"><a name="l00659"></a><span class="lineno">  659</span>&#160;                data_.f.flags = kObjectFlag;</div><div class="line"><a name="l00660"></a><span class="lineno">  660</span>&#160;                data_.o.size = data_.o.capacity = count;</div><div class="line"><a name="l00661"></a><span class="lineno">  661</span>&#160;                SetMembersPointer(lm);</div><div class="line"><a name="l00662"></a><span class="lineno">  662</span>&#160;            }</div><div class="line"><a name="l00663"></a><span class="lineno">  663</span>&#160;            <span class="keywordflow">break</span>;</div><div class="line"><a name="l00664"></a><span class="lineno">  664</span>&#160;        <span class="keywordflow">case</span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a058c622e1e7d59419ae58b895cbce468">kArrayType</a>: {</div><div class="line"><a name="l00665"></a><span class="lineno">  665</span>&#160;                <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> count = rhs.data_.a.size;</div><div class="line"><a name="l00666"></a><span class="lineno">  666</span>&#160;                <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>* le = <span class="keyword">reinterpret_cast&lt;</span><a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>*<span class="keyword">&gt;</span>(allocator.Malloc(count * <span class="keyword">sizeof</span>(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>)));</div><div class="line"><a name="l00667"></a><span class="lineno">  667</span>&#160;                <span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue&lt;Encoding,SourceAllocator&gt;</a>* re = rhs.GetElementsPointer();</div><div class="line"><a name="l00668"></a><span class="lineno">  668</span>&#160;                <span class="keywordflow">for</span> (<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> i = 0; i &lt; count; i++)</div><div class="line"><a name="l00669"></a><span class="lineno">  669</span>&#160;                    <span class="keyword">new</span> (&amp;le[i]) <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(re[i], allocator, copyConstStrings);</div><div class="line"><a name="l00670"></a><span class="lineno">  670</span>&#160;                data_.f.flags = kArrayFlag;</div><div class="line"><a name="l00671"></a><span class="lineno">  671</span>&#160;                data_.a.size = data_.a.capacity = count;</div><div class="line"><a name="l00672"></a><span class="lineno">  672</span>&#160;                SetElementsPointer(le);</div><div class="line"><a name="l00673"></a><span class="lineno">  673</span>&#160;            }</div><div class="line"><a name="l00674"></a><span class="lineno">  674</span>&#160;            <span class="keywordflow">break</span>;</div><div class="line"><a name="l00675"></a><span class="lineno">  675</span>&#160;        <span class="keywordflow">case</span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4ad6379da3dc04b83a591992bfb9fabba7">kStringType</a>:</div><div class="line"><a name="l00676"></a><span class="lineno">  676</span>&#160;            <span class="keywordflow">if</span> (rhs.data_.f.flags == kConstStringFlag &amp;&amp; !copyConstStrings) {</div><div class="line"><a name="l00677"></a><span class="lineno">  677</span>&#160;                data_.f.flags = rhs.data_.f.flags;</div><div class="line"><a name="l00678"></a><span class="lineno">  678</span>&#160;                data_  = *<span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span>Data*<span class="keyword">&gt;</span>(&amp;rhs.data_);</div><div class="line"><a name="l00679"></a><span class="lineno">  679</span>&#160;            }</div><div class="line"><a name="l00680"></a><span class="lineno">  680</span>&#160;            <span class="keywordflow">else</span></div><div class="line"><a name="l00681"></a><span class="lineno">  681</span>&#160;                SetStringRaw(<a class="code" href="namespacerapidjson.html#af94951529a5d51e8c4e6e770bb707c1f">StringRef</a>(rhs.GetString(), rhs.<a class="code" href="classrapidjson_1_1_generic_value.html#a18599e0d1a7e70a11b35f5e219390fea">GetStringLength</a>()), allocator);</div><div class="line"><a name="l00682"></a><span class="lineno">  682</span>&#160;            <span class="keywordflow">break</span>;</div><div class="line"><a name="l00683"></a><span class="lineno">  683</span>&#160;        <span class="keywordflow">default</span>:</div><div class="line"><a name="l00684"></a><span class="lineno">  684</span>&#160;            data_.f.flags = rhs.data_.f.flags;</div><div class="line"><a name="l00685"></a><span class="lineno">  685</span>&#160;            data_  = *<span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span>Data*<span class="keyword">&gt;</span>(&amp;rhs.data_);</div><div class="line"><a name="l00686"></a><span class="lineno">  686</span>&#160;            <span class="keywordflow">break</span>;</div><div class="line"><a name="l00687"></a><span class="lineno">  687</span>&#160;        }</div><div class="line"><a name="l00688"></a><span class="lineno">  688</span>&#160;    }</div><div class="line"><a name="l00689"></a><span class="lineno">  689</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00690"></a><span class="lineno">  690</span>&#160;<span class="comment">    //! Constructor for boolean value.</span></div><div class="line"><a name="l00691"></a><span class="lineno">  691</span>&#160;<span class="comment"></span><span class="comment">    /*! \param b Boolean value</span></div><div class="line"><a name="l00692"></a><span class="lineno">  692</span>&#160;<span class="comment">        \note This constructor is limited to \em real boolean values and rejects</span></div><div class="line"><a name="l00693"></a><span class="lineno">  693</span>&#160;<span class="comment">            implicitly converted types like arbitrary pointers.  Use an explicit cast</span></div><div class="line"><a name="l00694"></a><span class="lineno">  694</span>&#160;<span class="comment">            to \c bool, if you want to construct a boolean JSON value in such cases.</span></div><div class="line"><a name="l00695"></a><span class="lineno">  695</span>&#160;<span class="comment">     */</span></div><div class="line"><a name="l00696"></a><span class="lineno">  696</span>&#160;<span class="preprocessor">#ifndef RAPIDJSON_DOXYGEN_RUNNING // hide SFINAE from Doxygen</span></div><div class="line"><a name="l00697"></a><span class="lineno">  697</span>&#160;    <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l00698"></a><span class="lineno">  698</span>&#160;    <span class="keyword">explicit</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(T b, RAPIDJSON_ENABLEIF((internal::IsSame&lt;bool, T&gt;))) RAPIDJSON_NOEXCEPT  <span class="comment">// See #472</span></div><div class="line"><a name="l00699"></a><span class="lineno">  699</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00700"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#ab933ad7ff8c9d08f73cebaecb700dbe9">  700</a></span>&#160;    <span class="keyword">explicit</span> <a class="code" href="classrapidjson_1_1_generic_value.html#ab933ad7ff8c9d08f73cebaecb700dbe9">GenericValue</a>(<span class="keywordtype">bool</span> b) RAPIDJSON_NOEXCEPT</div><div class="line"><a name="l00701"></a><span class="lineno">  701</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00702"></a><span class="lineno">  702</span>&#160;        : data_() {</div><div class="line"><a name="l00703"></a><span class="lineno">  703</span>&#160;            <span class="comment">// safe-guard against failing SFINAE</span></div><div class="line"><a name="l00704"></a><span class="lineno">  704</span>&#160;            <a class="code" href="rapidjson_8h.html#af95188da1d8eb6d4b148fe9ce71cd7c4">RAPIDJSON_STATIC_ASSERT</a>((<a class="code" href="namespacerapidjson.html#aa65fc9fb381b2cbc54f98673eadd6505">internal::IsSame&lt;bool,T&gt;::Value</a>));</div><div class="line"><a name="l00705"></a><span class="lineno">  705</span>&#160;            data_.f.flags = b ? kTrueFlag : kFalseFlag;</div><div class="line"><a name="l00706"></a><span class="lineno">  706</span>&#160;    }</div><div class="line"><a name="l00707"></a><span class="lineno">  707</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00708"></a><span class="lineno">  708</span>&#160;<span class="comment">    //! Constructor for int value.</span></div><div class="line"><a name="l00709"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#abba0c9ccfd90726f916c36013a2e9e19">  709</a></span>&#160;<span class="comment"></span>    <span class="keyword">explicit</span> <a class="code" href="classrapidjson_1_1_generic_value.html#abba0c9ccfd90726f916c36013a2e9e19">GenericValue</a>(<span class="keywordtype">int</span> i) RAPIDJSON_NOEXCEPT : data_() {</div><div class="line"><a name="l00710"></a><span class="lineno">  710</span>&#160;        data_.n.i64 = i;</div><div class="line"><a name="l00711"></a><span class="lineno">  711</span>&#160;        data_.f.flags = (i &gt;= 0) ? (kNumberIntFlag | kUintFlag | kUint64Flag) : kNumberIntFlag;</div><div class="line"><a name="l00712"></a><span class="lineno">  712</span>&#160;    }</div><div class="line"><a name="l00713"></a><span class="lineno">  713</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00714"></a><span class="lineno">  714</span>&#160;<span class="comment">    //! Constructor for unsigned value.</span></div><div class="line"><a name="l00715"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a4a8060a42b7953a2981ad892180ca5a6">  715</a></span>&#160;<span class="comment"></span>    <span class="keyword">explicit</span> <a class="code" href="classrapidjson_1_1_generic_value.html#a4a8060a42b7953a2981ad892180ca5a6">GenericValue</a>(<span class="keywordtype">unsigned</span> u) RAPIDJSON_NOEXCEPT : data_() {</div><div class="line"><a name="l00716"></a><span class="lineno">  716</span>&#160;        data_.n.u64 = u; </div><div class="line"><a name="l00717"></a><span class="lineno">  717</span>&#160;        data_.f.flags = (u &amp; 0x80000000) ? kNumberUintFlag : (kNumberUintFlag | kIntFlag | kInt64Flag);</div><div class="line"><a name="l00718"></a><span class="lineno">  718</span>&#160;    }</div><div class="line"><a name="l00719"></a><span class="lineno">  719</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00720"></a><span class="lineno">  720</span>&#160;<span class="comment">    //! Constructor for int64_t value.</span></div><div class="line"><a name="l00721"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#acd4ae9a8dba4498d1d7cce6667529bb8">  721</a></span>&#160;<span class="comment"></span>    <span class="keyword">explicit</span> <a class="code" href="classrapidjson_1_1_generic_value.html#acd4ae9a8dba4498d1d7cce6667529bb8">GenericValue</a>(int64_t i64) RAPIDJSON_NOEXCEPT : data_() {</div><div class="line"><a name="l00722"></a><span class="lineno">  722</span>&#160;        data_.n.i64 = i64;</div><div class="line"><a name="l00723"></a><span class="lineno">  723</span>&#160;        data_.f.flags = kNumberInt64Flag;</div><div class="line"><a name="l00724"></a><span class="lineno">  724</span>&#160;        <span class="keywordflow">if</span> (i64 &gt;= 0) {</div><div class="line"><a name="l00725"></a><span class="lineno">  725</span>&#160;            data_.f.flags |= kNumberUint64Flag;</div><div class="line"><a name="l00726"></a><span class="lineno">  726</span>&#160;            <span class="keywordflow">if</span> (!(static_cast&lt;uint64_t&gt;(i64) &amp; <a class="code" href="rapidjson_8h.html#aaee1245f375a71be1ac9b8a07ba5fb8f">RAPIDJSON_UINT64_C2</a>(0xFFFFFFFF, 0x00000000)))</div><div class="line"><a name="l00727"></a><span class="lineno">  727</span>&#160;                data_.f.flags |= kUintFlag;</div><div class="line"><a name="l00728"></a><span class="lineno">  728</span>&#160;            <span class="keywordflow">if</span> (!(static_cast&lt;uint64_t&gt;(i64) &amp; <a class="code" href="rapidjson_8h.html#aaee1245f375a71be1ac9b8a07ba5fb8f">RAPIDJSON_UINT64_C2</a>(0xFFFFFFFF, 0x80000000)))</div><div class="line"><a name="l00729"></a><span class="lineno">  729</span>&#160;                data_.f.flags |= kIntFlag;</div><div class="line"><a name="l00730"></a><span class="lineno">  730</span>&#160;        }</div><div class="line"><a name="l00731"></a><span class="lineno">  731</span>&#160;        <span class="keywordflow">else</span> <span class="keywordflow">if</span> (i64 &gt;= static_cast&lt;int64_t&gt;(<a class="code" href="rapidjson_8h.html#aaee1245f375a71be1ac9b8a07ba5fb8f">RAPIDJSON_UINT64_C2</a>(0xFFFFFFFF, 0x80000000)))</div><div class="line"><a name="l00732"></a><span class="lineno">  732</span>&#160;            data_.f.flags |= kIntFlag;</div><div class="line"><a name="l00733"></a><span class="lineno">  733</span>&#160;    }</div><div class="line"><a name="l00734"></a><span class="lineno">  734</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00735"></a><span class="lineno">  735</span>&#160;<span class="comment">    //! Constructor for uint64_t value.</span></div><div class="line"><a name="l00736"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a1f125e735577aae64c0306345de45563">  736</a></span>&#160;<span class="comment"></span>    <span class="keyword">explicit</span> <a class="code" href="classrapidjson_1_1_generic_value.html#a1f125e735577aae64c0306345de45563">GenericValue</a>(uint64_t u64) RAPIDJSON_NOEXCEPT : data_() {</div><div class="line"><a name="l00737"></a><span class="lineno">  737</span>&#160;        data_.n.u64 = u64;</div><div class="line"><a name="l00738"></a><span class="lineno">  738</span>&#160;        data_.f.flags = kNumberUint64Flag;</div><div class="line"><a name="l00739"></a><span class="lineno">  739</span>&#160;        <span class="keywordflow">if</span> (!(u64 &amp; <a class="code" href="rapidjson_8h.html#aaee1245f375a71be1ac9b8a07ba5fb8f">RAPIDJSON_UINT64_C2</a>(0x80000000, 0x00000000)))</div><div class="line"><a name="l00740"></a><span class="lineno">  740</span>&#160;            data_.f.flags |= kInt64Flag;</div><div class="line"><a name="l00741"></a><span class="lineno">  741</span>&#160;        <span class="keywordflow">if</span> (!(u64 &amp; <a class="code" href="rapidjson_8h.html#aaee1245f375a71be1ac9b8a07ba5fb8f">RAPIDJSON_UINT64_C2</a>(0xFFFFFFFF, 0x00000000)))</div><div class="line"><a name="l00742"></a><span class="lineno">  742</span>&#160;            data_.f.flags |= kUintFlag;</div><div class="line"><a name="l00743"></a><span class="lineno">  743</span>&#160;        <span class="keywordflow">if</span> (!(u64 &amp; <a class="code" href="rapidjson_8h.html#aaee1245f375a71be1ac9b8a07ba5fb8f">RAPIDJSON_UINT64_C2</a>(0xFFFFFFFF, 0x80000000)))</div><div class="line"><a name="l00744"></a><span class="lineno">  744</span>&#160;            data_.f.flags |= kIntFlag;</div><div class="line"><a name="l00745"></a><span class="lineno">  745</span>&#160;    }</div><div class="line"><a name="l00746"></a><span class="lineno">  746</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00747"></a><span class="lineno">  747</span>&#160;<span class="comment">    //! Constructor for double value.</span></div><div class="line"><a name="l00748"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a71b9e2ec1f7bf9e2f034126ca7b4945a">  748</a></span>&#160;<span class="comment"></span>    <span class="keyword">explicit</span> <a class="code" href="classrapidjson_1_1_generic_value.html#a71b9e2ec1f7bf9e2f034126ca7b4945a">GenericValue</a>(<span class="keywordtype">double</span> d) RAPIDJSON_NOEXCEPT : data_() { data_.n.d = d; data_.f.flags = kNumberDoubleFlag; }</div><div class="line"><a name="l00749"></a><span class="lineno">  749</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00750"></a><span class="lineno">  750</span>&#160;<span class="comment">    //! Constructor for float value.</span></div><div class="line"><a name="l00751"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#afe94e5e86a5b1a3fb605a9f8422f048b">  751</a></span>&#160;<span class="comment"></span>    <span class="keyword">explicit</span> <a class="code" href="classrapidjson_1_1_generic_value.html#afe94e5e86a5b1a3fb605a9f8422f048b">GenericValue</a>(<span class="keywordtype">float</span> f) RAPIDJSON_NOEXCEPT : data_() { data_.n.d = <span class="keyword">static_cast&lt;</span><span class="keywordtype">double</span><span class="keyword">&gt;</span>(f); data_.f.flags = kNumberDoubleFlag; }</div><div class="line"><a name="l00752"></a><span class="lineno">  752</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00753"></a><span class="lineno">  753</span>&#160;<span class="comment">    //! Constructor for constant string (i.e. do not make a copy of string)</span></div><div class="line"><a name="l00754"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a51e93a4fb57f77a39767acb076bf43c1">  754</a></span>&#160;<span class="comment"></span>    <a class="code" href="classrapidjson_1_1_generic_value.html#a51e93a4fb57f77a39767acb076bf43c1">GenericValue</a>(<span class="keyword">const</span> Ch* s, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> length) RAPIDJSON_NOEXCEPT : data_() { SetStringRaw(<a class="code" href="namespacerapidjson.html#af94951529a5d51e8c4e6e770bb707c1f">StringRef</a>(s, length)); }</div><div class="line"><a name="l00755"></a><span class="lineno">  755</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00756"></a><span class="lineno">  756</span>&#160;<span class="comment">    //! Constructor for constant string (i.e. do not make a copy of string)</span></div><div class="line"><a name="l00757"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a65bfc3073fa80ee5eba8e985abe2f941">  757</a></span>&#160;<span class="comment"></span>    <span class="keyword">explicit</span> <a class="code" href="classrapidjson_1_1_generic_value.html#a65bfc3073fa80ee5eba8e985abe2f941">GenericValue</a>(StringRefType s) RAPIDJSON_NOEXCEPT : data_() { SetStringRaw(s); }</div><div class="line"><a name="l00758"></a><span class="lineno">  758</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00759"></a><span class="lineno">  759</span>&#160;<span class="comment">    //! Constructor for copy-string (i.e. do make a copy of string)</span></div><div class="line"><a name="l00760"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#ad9553bb9ccbfd19547c473a95405a8b2">  760</a></span>&#160;<span class="comment"></span>    <a class="code" href="classrapidjson_1_1_generic_value.html#ad9553bb9ccbfd19547c473a95405a8b2">GenericValue</a>(<span class="keyword">const</span> Ch* s, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> length, Allocator&amp; allocator) : data_() { SetStringRaw(<a class="code" href="namespacerapidjson.html#af94951529a5d51e8c4e6e770bb707c1f">StringRef</a>(s, length), allocator); }</div><div class="line"><a name="l00761"></a><span class="lineno">  761</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00762"></a><span class="lineno">  762</span>&#160;<span class="comment">    //! Constructor for copy-string (i.e. do make a copy of string)</span></div><div class="line"><a name="l00763"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a83ba61e8a5170c2e172fd60ebc11016f">  763</a></span>&#160;<span class="comment"></span>    <a class="code" href="classrapidjson_1_1_generic_value.html#a83ba61e8a5170c2e172fd60ebc11016f">GenericValue</a>(<span class="keyword">const</span> Ch*s, Allocator&amp; allocator) : data_() { SetStringRaw(<a class="code" href="namespacerapidjson.html#af94951529a5d51e8c4e6e770bb707c1f">StringRef</a>(s), allocator); }</div><div class="line"><a name="l00764"></a><span class="lineno">  764</span>&#160;</div><div class="line"><a name="l00765"></a><span class="lineno">  765</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l00766"></a><span class="lineno">  766</span>&#160;<span class="comment">    //! Constructor for copy-string from a string object (i.e. do make a copy of string)</span></div><div class="line"><a name="l00767"></a><span class="lineno">  767</span>&#160;<span class="comment"></span><span class="comment">    /*! \note Requires the definition of the preprocessor symbol \ref RAPIDJSON_HAS_STDSTRING.</span></div><div class="line"><a name="l00768"></a><span class="lineno">  768</span>&#160;<span class="comment">     */</span></div><div class="line"><a name="l00769"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a852788b35257762cd8d6c4bf5c5d77bc">  769</a></span>&#160;    <a class="code" href="classrapidjson_1_1_generic_value.html#a852788b35257762cd8d6c4bf5c5d77bc">GenericValue</a>(<span class="keyword">const</span> std::basic_string&lt;Ch&gt;&amp; s, Allocator&amp; allocator) : data_() { SetStringRaw(<a class="code" href="namespacerapidjson.html#af94951529a5d51e8c4e6e770bb707c1f">StringRef</a>(s), allocator); }</div><div class="line"><a name="l00770"></a><span class="lineno">  770</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00771"></a><span class="lineno">  771</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00772"></a><span class="lineno">  772</span>&#160;<span class="comment">    //! Constructor for Array.</span></div><div class="line"><a name="l00773"></a><span class="lineno">  773</span>&#160;<span class="comment"></span><span class="comment">    /*!</span></div><div class="line"><a name="l00774"></a><span class="lineno">  774</span>&#160;<span class="comment">        \param a An array obtained by \c GetArray().</span></div><div class="line"><a name="l00775"></a><span class="lineno">  775</span>&#160;<span class="comment">        \note \c Array is always pass-by-value.</span></div><div class="line"><a name="l00776"></a><span class="lineno">  776</span>&#160;<span class="comment">        \note the source array is moved into this value and the sourec array becomes empty.</span></div><div class="line"><a name="l00777"></a><span class="lineno">  777</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l00778"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a77b0f41557b3c34b57a180698312c4a8">  778</a></span>&#160;    <a class="code" href="classrapidjson_1_1_generic_value.html#a77b0f41557b3c34b57a180698312c4a8">GenericValue</a>(Array a) RAPIDJSON_NOEXCEPT : data_(a.value_.data_) {</div><div class="line"><a name="l00779"></a><span class="lineno">  779</span>&#160;        a.value_.data_ = Data();</div><div class="line"><a name="l00780"></a><span class="lineno">  780</span>&#160;        a.value_.data_.f.flags = kArrayFlag;</div><div class="line"><a name="l00781"></a><span class="lineno">  781</span>&#160;    }</div><div class="line"><a name="l00782"></a><span class="lineno">  782</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00783"></a><span class="lineno">  783</span>&#160;<span class="comment">    //! Constructor for Object.</span></div><div class="line"><a name="l00784"></a><span class="lineno">  784</span>&#160;<span class="comment"></span><span class="comment">    /*!</span></div><div class="line"><a name="l00785"></a><span class="lineno">  785</span>&#160;<span class="comment">        \param o An object obtained by \c GetObject().</span></div><div class="line"><a name="l00786"></a><span class="lineno">  786</span>&#160;<span class="comment">        \note \c Object is always pass-by-value.</span></div><div class="line"><a name="l00787"></a><span class="lineno">  787</span>&#160;<span class="comment">        \note the source object is moved into this value and the sourec object becomes empty.</span></div><div class="line"><a name="l00788"></a><span class="lineno">  788</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l00789"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a893da1069660536fd3943a0149206a6e">  789</a></span>&#160;    <a class="code" href="classrapidjson_1_1_generic_value.html#a893da1069660536fd3943a0149206a6e">GenericValue</a>(Object o) RAPIDJSON_NOEXCEPT : data_(o.value_.data_) {</div><div class="line"><a name="l00790"></a><span class="lineno">  790</span>&#160;        o.value_.data_ = Data();</div><div class="line"><a name="l00791"></a><span class="lineno">  791</span>&#160;        o.value_.data_.f.flags = kObjectFlag;</div><div class="line"><a name="l00792"></a><span class="lineno">  792</span>&#160;    }</div><div class="line"><a name="l00793"></a><span class="lineno">  793</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00794"></a><span class="lineno">  794</span>&#160;<span class="comment">    //! Destructor.</span></div><div class="line"><a name="l00795"></a><span class="lineno">  795</span>&#160;<span class="comment"></span><span class="comment">    /*! Need to destruct elements of array, members of object, or copy-string.</span></div><div class="line"><a name="l00796"></a><span class="lineno">  796</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l00797"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a433a64b466c80cadf7d1acaa6f065437">  797</a></span>&#160;    <a class="code" href="classrapidjson_1_1_generic_value.html#a433a64b466c80cadf7d1acaa6f065437">~GenericValue</a>() {</div><div class="line"><a name="l00798"></a><span class="lineno">  798</span>&#160;        <span class="keywordflow">if</span> (Allocator::kNeedFree) { <span class="comment">// Shortcut by Allocator&#39;s trait</span></div><div class="line"><a name="l00799"></a><span class="lineno">  799</span>&#160;            <span class="keywordflow">switch</span>(data_.f.flags) {</div><div class="line"><a name="l00800"></a><span class="lineno">  800</span>&#160;            <span class="keywordflow">case</span> kArrayFlag:</div><div class="line"><a name="l00801"></a><span class="lineno">  801</span>&#160;                {</div><div class="line"><a name="l00802"></a><span class="lineno">  802</span>&#160;                    <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>* e = GetElementsPointer();</div><div class="line"><a name="l00803"></a><span class="lineno">  803</span>&#160;                    <span class="keywordflow">for</span> (<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>* v = e; v != e + data_.a.size; ++v)</div><div class="line"><a name="l00804"></a><span class="lineno">  804</span>&#160;                        v-&gt;~GenericValue();</div><div class="line"><a name="l00805"></a><span class="lineno">  805</span>&#160;                    Allocator::Free(e);</div><div class="line"><a name="l00806"></a><span class="lineno">  806</span>&#160;                }</div><div class="line"><a name="l00807"></a><span class="lineno">  807</span>&#160;                <span class="keywordflow">break</span>;</div><div class="line"><a name="l00808"></a><span class="lineno">  808</span>&#160;</div><div class="line"><a name="l00809"></a><span class="lineno">  809</span>&#160;            <span class="keywordflow">case</span> kObjectFlag:</div><div class="line"><a name="l00810"></a><span class="lineno">  810</span>&#160;                <span class="keywordflow">for</span> (MemberIterator m = MemberBegin(); m != MemberEnd(); ++m)</div><div class="line"><a name="l00811"></a><span class="lineno">  811</span>&#160;                    m-&gt;~Member();</div><div class="line"><a name="l00812"></a><span class="lineno">  812</span>&#160;                Allocator::Free(GetMembersPointer());</div><div class="line"><a name="l00813"></a><span class="lineno">  813</span>&#160;                <span class="keywordflow">break</span>;</div><div class="line"><a name="l00814"></a><span class="lineno">  814</span>&#160;</div><div class="line"><a name="l00815"></a><span class="lineno">  815</span>&#160;            <span class="keywordflow">case</span> kCopyStringFlag:</div><div class="line"><a name="l00816"></a><span class="lineno">  816</span>&#160;                Allocator::Free(const_cast&lt;Ch*&gt;(GetStringPointer()));</div><div class="line"><a name="l00817"></a><span class="lineno">  817</span>&#160;                <span class="keywordflow">break</span>;</div><div class="line"><a name="l00818"></a><span class="lineno">  818</span>&#160;</div><div class="line"><a name="l00819"></a><span class="lineno">  819</span>&#160;            <span class="keywordflow">default</span>:</div><div class="line"><a name="l00820"></a><span class="lineno">  820</span>&#160;                <span class="keywordflow">break</span>;  <span class="comment">// Do nothing for other types.</span></div><div class="line"><a name="l00821"></a><span class="lineno">  821</span>&#160;            }</div><div class="line"><a name="l00822"></a><span class="lineno">  822</span>&#160;        }</div><div class="line"><a name="l00823"></a><span class="lineno">  823</span>&#160;    }</div><div class="line"><a name="l00824"></a><span class="lineno">  824</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00825"></a><span class="lineno">  825</span>&#160;<span class="comment">    //@}</span></div><div class="line"><a name="l00826"></a><span class="lineno">  826</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00827"></a><span class="lineno">  827</span>&#160;<span class="comment">    //!@name Assignment operators</span></div><div class="line"><a name="l00828"></a><span class="lineno">  828</span>&#160;<span class="comment"></span><span class="comment">    //@{</span></div><div class="line"><a name="l00829"></a><span class="lineno">  829</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00830"></a><span class="lineno">  830</span>&#160;<span class="comment">    //! Assignment with move semantics.</span></div><div class="line"><a name="l00831"></a><span class="lineno">  831</span>&#160;<span class="comment"></span><span class="comment">    /*! \param rhs Source of the assignment. It will become a null value after assignment.</span></div><div class="line"><a name="l00832"></a><span class="lineno">  832</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l00833"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#ae8bcedd951f50b69786aaaa1828e9fac">  833</a></span>&#160;    <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#ae8bcedd951f50b69786aaaa1828e9fac">operator=</a>(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; rhs) RAPIDJSON_NOEXCEPT {</div><div class="line"><a name="l00834"></a><span class="lineno">  834</span>&#160;        <span class="keywordflow">if</span> (<span class="keyword">this</span> != &amp;rhs) {</div><div class="line"><a name="l00835"></a><span class="lineno">  835</span>&#160;            this-&gt;~<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>();</div><div class="line"><a name="l00836"></a><span class="lineno">  836</span>&#160;            RawAssign(rhs);</div><div class="line"><a name="l00837"></a><span class="lineno">  837</span>&#160;        }</div><div class="line"><a name="l00838"></a><span class="lineno">  838</span>&#160;        <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00839"></a><span class="lineno">  839</span>&#160;    }</div><div class="line"><a name="l00840"></a><span class="lineno">  840</span>&#160;</div><div class="line"><a name="l00841"></a><span class="lineno">  841</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l00842"></a><span class="lineno">  842</span>&#160;<span class="comment">    //! Move assignment in C++11</span></div><div class="line"><a name="l00843"></a><span class="lineno">  843</span>&#160;<span class="comment"></span>    <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; operator=(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp;&amp; rhs) RAPIDJSON_NOEXCEPT {</div><div class="line"><a name="l00844"></a><span class="lineno">  844</span>&#160;        <span class="keywordflow">return</span> *<span class="keyword">this</span> = rhs.<a class="code" href="classrapidjson_1_1_generic_value.html#a07b19e65fb756cae13e5bdc515cfbd4b">Move</a>();</div><div class="line"><a name="l00845"></a><span class="lineno">  845</span>&#160;    }</div><div class="line"><a name="l00846"></a><span class="lineno">  846</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00847"></a><span class="lineno">  847</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00848"></a><span class="lineno">  848</span>&#160;<span class="comment">    //! Assignment of constant string reference (no copy)</span></div><div class="line"><a name="l00849"></a><span class="lineno">  849</span>&#160;<span class="comment"></span><span class="comment">    /*! \param str Constant string reference to be assigned</span></div><div class="line"><a name="l00850"></a><span class="lineno">  850</span>&#160;<span class="comment">        \note This overload is needed to avoid clashes with the generic primitive type assignment overload below.</span></div><div class="line"><a name="l00851"></a><span class="lineno">  851</span>&#160;<span class="comment">        \see GenericStringRef, operator=(T)</span></div><div class="line"><a name="l00852"></a><span class="lineno">  852</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l00853"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#aecc9d0a6aafe31f4fdf9f6e75e5f089c">  853</a></span>&#160;    <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#aecc9d0a6aafe31f4fdf9f6e75e5f089c">operator=</a>(StringRefType str) RAPIDJSON_NOEXCEPT {</div><div class="line"><a name="l00854"></a><span class="lineno">  854</span>&#160;        <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a> s(str);</div><div class="line"><a name="l00855"></a><span class="lineno">  855</span>&#160;        <span class="keywordflow">return</span> *<span class="keyword">this</span> = s;</div><div class="line"><a name="l00856"></a><span class="lineno">  856</span>&#160;    }</div><div class="line"><a name="l00857"></a><span class="lineno">  857</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00858"></a><span class="lineno">  858</span>&#160;<span class="comment">    //! Assignment with primitive types.</span></div><div class="line"><a name="l00859"></a><span class="lineno">  859</span>&#160;<span class="comment"></span><span class="comment">    /*! \tparam T Either \ref Type, \c int, \c unsigned, \c int64_t, \c uint64_t</span></div><div class="line"><a name="l00860"></a><span class="lineno">  860</span>&#160;<span class="comment">        \param value The value to be assigned.</span></div><div class="line"><a name="l00861"></a><span class="lineno">  861</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00862"></a><span class="lineno">  862</span>&#160;<span class="comment">        \note The source type \c T explicitly disallows all pointer types,</span></div><div class="line"><a name="l00863"></a><span class="lineno">  863</span>&#160;<span class="comment">            especially (\c const) \ref Ch*.  This helps avoiding implicitly</span></div><div class="line"><a name="l00864"></a><span class="lineno">  864</span>&#160;<span class="comment">            referencing character strings with insufficient lifetime, use</span></div><div class="line"><a name="l00865"></a><span class="lineno">  865</span>&#160;<span class="comment">            \ref SetString(const Ch*, Allocator&amp;) (for copying) or</span></div><div class="line"><a name="l00866"></a><span class="lineno">  866</span>&#160;<span class="comment">            \ref StringRef() (to explicitly mark the pointer as constant) instead.</span></div><div class="line"><a name="l00867"></a><span class="lineno">  867</span>&#160;<span class="comment">            All other pointer types would implicitly convert to \c bool,</span></div><div class="line"><a name="l00868"></a><span class="lineno">  868</span>&#160;<span class="comment">            use \ref SetBool() instead.</span></div><div class="line"><a name="l00869"></a><span class="lineno">  869</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l00870"></a><span class="lineno">  870</span>&#160;    <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l00871"></a><span class="lineno">  871</span>&#160;    RAPIDJSON_DISABLEIF_RETURN((internal::IsPointer&lt;T&gt;), (<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp;))</div><div class="line"><a name="l00872"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#ab7446da62fdc61d6d987d508cdb6ac13">  872</a></span>&#160;    operator=(T value) {</div><div class="line"><a name="l00873"></a><span class="lineno">  873</span>&#160;        <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a> v(value);</div><div class="line"><a name="l00874"></a><span class="lineno">  874</span>&#160;        <span class="keywordflow">return</span> *<span class="keyword">this</span> = v;</div><div class="line"><a name="l00875"></a><span class="lineno">  875</span>&#160;    }</div><div class="line"><a name="l00876"></a><span class="lineno">  876</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00877"></a><span class="lineno">  877</span>&#160;<span class="comment">    //! Deep-copy assignment from Value</span></div><div class="line"><a name="l00878"></a><span class="lineno">  878</span>&#160;<span class="comment"></span><span class="comment">    /*! Assigns a \b copy of the Value to the current Value object</span></div><div class="line"><a name="l00879"></a><span class="lineno">  879</span>&#160;<span class="comment">        \tparam SourceAllocator Allocator type of \c rhs</span></div><div class="line"><a name="l00880"></a><span class="lineno">  880</span>&#160;<span class="comment">        \param rhs Value to copy from (read-only)</span></div><div class="line"><a name="l00881"></a><span class="lineno">  881</span>&#160;<span class="comment">        \param allocator Allocator to use for copying</span></div><div class="line"><a name="l00882"></a><span class="lineno">  882</span>&#160;<span class="comment">        \param copyConstStrings Force copying of constant strings (e.g. referencing an in-situ buffer)</span></div><div class="line"><a name="l00883"></a><span class="lineno">  883</span>&#160;<span class="comment">     */</span></div><div class="line"><a name="l00884"></a><span class="lineno">  884</span>&#160;    <span class="keyword">template</span> &lt;<span class="keyword">typename</span> SourceAllocator&gt;</div><div class="line"><a name="l00885"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#ad9399a2a69444c44a9db2f63c3aa3eae">  885</a></span>&#160;    <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#ad9399a2a69444c44a9db2f63c3aa3eae">CopyFrom</a>(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue&lt;Encoding, SourceAllocator&gt;</a>&amp; rhs, Allocator&amp; allocator, <span class="keywordtype">bool</span> copyConstStrings = <span class="keyword">false</span>) {</div><div class="line"><a name="l00886"></a><span class="lineno">  886</span>&#160;        <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(static_cast&lt;void*&gt;(<span class="keyword">this</span>) != static_cast&lt;void const*&gt;(&amp;rhs));</div><div class="line"><a name="l00887"></a><span class="lineno">  887</span>&#160;        this-&gt;~<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>();</div><div class="line"><a name="l00888"></a><span class="lineno">  888</span>&#160;        <span class="keyword">new</span> (<span class="keyword">this</span>) <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(rhs, allocator, copyConstStrings);</div><div class="line"><a name="l00889"></a><span class="lineno">  889</span>&#160;        <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00890"></a><span class="lineno">  890</span>&#160;    }</div><div class="line"><a name="l00891"></a><span class="lineno">  891</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00892"></a><span class="lineno">  892</span>&#160;<span class="comment">    //! Exchange the contents of this value with those of other.</span></div><div class="line"><a name="l00893"></a><span class="lineno">  893</span>&#160;<span class="comment"></span><span class="comment">    /*!</span></div><div class="line"><a name="l00894"></a><span class="lineno">  894</span>&#160;<span class="comment">        \param other Another value.</span></div><div class="line"><a name="l00895"></a><span class="lineno">  895</span>&#160;<span class="comment">        \note Constant complexity.</span></div><div class="line"><a name="l00896"></a><span class="lineno">  896</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l00897"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a06f10ef54f5692ce08206c26624a21db">  897</a></span>&#160;    <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#a06f10ef54f5692ce08206c26624a21db">Swap</a>(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; other) RAPIDJSON_NOEXCEPT {</div><div class="line"><a name="l00898"></a><span class="lineno">  898</span>&#160;        <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a> temp;</div><div class="line"><a name="l00899"></a><span class="lineno">  899</span>&#160;        temp.RawAssign(*<span class="keyword">this</span>);</div><div class="line"><a name="l00900"></a><span class="lineno">  900</span>&#160;        RawAssign(other);</div><div class="line"><a name="l00901"></a><span class="lineno">  901</span>&#160;        other.RawAssign(temp);</div><div class="line"><a name="l00902"></a><span class="lineno">  902</span>&#160;        <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00903"></a><span class="lineno">  903</span>&#160;    }</div><div class="line"><a name="l00904"></a><span class="lineno">  904</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00905"></a><span class="lineno">  905</span>&#160;<span class="comment">    //! free-standing swap function helper</span></div><div class="line"><a name="l00906"></a><span class="lineno">  906</span>&#160;<span class="comment"></span><span class="comment">    /*!</span></div><div class="line"><a name="l00907"></a><span class="lineno">  907</span>&#160;<span class="comment">        Helper function to enable support for common swap implementation pattern based on \c std::swap:</span></div><div class="line"><a name="l00908"></a><span class="lineno">  908</span>&#160;<span class="comment">        \code</span></div><div class="line"><a name="l00909"></a><span class="lineno">  909</span>&#160;<span class="comment">        void swap(MyClass&amp; a, MyClass&amp; b) {</span></div><div class="line"><a name="l00910"></a><span class="lineno">  910</span>&#160;<span class="comment">            using std::swap;</span></div><div class="line"><a name="l00911"></a><span class="lineno">  911</span>&#160;<span class="comment">            swap(a.value, b.value);</span></div><div class="line"><a name="l00912"></a><span class="lineno">  912</span>&#160;<span class="comment">            // ...</span></div><div class="line"><a name="l00913"></a><span class="lineno">  913</span>&#160;<span class="comment">        }</span></div><div class="line"><a name="l00914"></a><span class="lineno">  914</span>&#160;<span class="comment">        \endcode</span></div><div class="line"><a name="l00915"></a><span class="lineno">  915</span>&#160;<span class="comment">        \see Swap()</span></div><div class="line"><a name="l00916"></a><span class="lineno">  916</span>&#160;<span class="comment">     */</span></div><div class="line"><a name="l00917"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a58ecce8a34fc029039b8079de246bdaa">  917</a></span>&#160;    <span class="keyword">friend</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classrapidjson_1_1_generic_value.html#a58ecce8a34fc029039b8079de246bdaa">swap</a>(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; a, <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; b) RAPIDJSON_NOEXCEPT { a.Swap(b); }</div><div class="line"><a name="l00918"></a><span class="lineno">  918</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00919"></a><span class="lineno">  919</span>&#160;<span class="comment">    //! Prepare Value for move semantics</span></div><div class="line"><a name="l00920"></a><span class="lineno">  920</span>&#160;<span class="comment"></span><span class="comment">    /*! \return *this */</span></div><div class="line"><a name="l00921"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a07b19e65fb756cae13e5bdc515cfbd4b">  921</a></span>&#160;    <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#a07b19e65fb756cae13e5bdc515cfbd4b">Move</a>() RAPIDJSON_NOEXCEPT { <span class="keywordflow">return</span> *<span class="keyword">this</span>; }<span class="comment"></span></div><div class="line"><a name="l00922"></a><span class="lineno">  922</span>&#160;<span class="comment">    //@}</span></div><div class="line"><a name="l00923"></a><span class="lineno">  923</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00924"></a><span class="lineno">  924</span>&#160;<span class="comment">    //!@name Equal-to and not-equal-to operators</span></div><div class="line"><a name="l00925"></a><span class="lineno">  925</span>&#160;<span class="comment"></span><span class="comment">    //@{</span></div><div class="line"><a name="l00926"></a><span class="lineno">  926</span>&#160;<span class="comment"></span><span class="comment">    //! Equal-to operator</span></div><div class="line"><a name="l00927"></a><span class="lineno">  927</span>&#160;<span class="comment"></span><span class="comment">    /*!</span></div><div class="line"><a name="l00928"></a><span class="lineno">  928</span>&#160;<span class="comment">        \note If an object contains duplicated named member, comparing equality with any object is always \c false.</span></div><div class="line"><a name="l00929"></a><span class="lineno">  929</span>&#160;<span class="comment">        \note Linear time complexity (number of all values in the subtree and total lengths of all strings).</span></div><div class="line"><a name="l00930"></a><span class="lineno">  930</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l00931"></a><span class="lineno">  931</span>&#160;    <span class="keyword">template</span> &lt;<span class="keyword">typename</span> SourceAllocator&gt;</div><div class="line"><a name="l00932"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#ab4e5285102bb686f39bca2855a17a181">  932</a></span>&#160;    <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_generic_value.html#ab4e5285102bb686f39bca2855a17a181">operator==</a>(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue&lt;Encoding, SourceAllocator&gt;</a>&amp; rhs)<span class="keyword"> const </span>{</div><div class="line"><a name="l00933"></a><span class="lineno">  933</span>&#160;        <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue&lt;Encoding, SourceAllocator&gt;</a> RhsType;</div><div class="line"><a name="l00934"></a><span class="lineno">  934</span>&#160;        <span class="keywordflow">if</span> (GetType() != rhs.GetType())</div><div class="line"><a name="l00935"></a><span class="lineno">  935</span>&#160;            <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00936"></a><span class="lineno">  936</span>&#160;</div><div class="line"><a name="l00937"></a><span class="lineno">  937</span>&#160;        <span class="keywordflow">switch</span> (GetType()) {</div><div class="line"><a name="l00938"></a><span class="lineno">  938</span>&#160;        <span class="keywordflow">case</span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4acf030b422a32c3647c7c5973bd4dd0a9">kObjectType</a>: <span class="comment">// Warning: O(n^2) inner-loop</span></div><div class="line"><a name="l00939"></a><span class="lineno">  939</span>&#160;            <span class="keywordflow">if</span> (data_.o.size != rhs.data_.o.size)</div><div class="line"><a name="l00940"></a><span class="lineno">  940</span>&#160;                <span class="keywordflow">return</span> <span class="keyword">false</span>;           </div><div class="line"><a name="l00941"></a><span class="lineno">  941</span>&#160;            <span class="keywordflow">for</span> (<a class="code" href="classrapidjson_1_1_generic_member_iterator.html">ConstMemberIterator</a> lhsMemberItr = MemberBegin(); lhsMemberItr != MemberEnd(); ++lhsMemberItr) {</div><div class="line"><a name="l00942"></a><span class="lineno">  942</span>&#160;                <span class="keyword">typename</span> RhsType::ConstMemberIterator rhsMemberItr = rhs.<a class="code" href="classrapidjson_1_1_generic_value.html#ad22fdeac87ec6c370dd43075d3586811">FindMember</a>(lhsMemberItr-&gt;name);</div><div class="line"><a name="l00943"></a><span class="lineno">  943</span>&#160;                <span class="keywordflow">if</span> (rhsMemberItr == rhs.<a class="code" href="classrapidjson_1_1_generic_value.html#a34ee3d75a7aa308043fb34b0743bfe7c">MemberEnd</a>() || lhsMemberItr-&gt;value != rhsMemberItr-&gt;value)</div><div class="line"><a name="l00944"></a><span class="lineno">  944</span>&#160;                    <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00945"></a><span class="lineno">  945</span>&#160;            }</div><div class="line"><a name="l00946"></a><span class="lineno">  946</span>&#160;            <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00947"></a><span class="lineno">  947</span>&#160;            </div><div class="line"><a name="l00948"></a><span class="lineno">  948</span>&#160;        <span class="keywordflow">case</span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a058c622e1e7d59419ae58b895cbce468">kArrayType</a>:</div><div class="line"><a name="l00949"></a><span class="lineno">  949</span>&#160;            <span class="keywordflow">if</span> (data_.a.size != rhs.data_.a.size)</div><div class="line"><a name="l00950"></a><span class="lineno">  950</span>&#160;                <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00951"></a><span class="lineno">  951</span>&#160;            <span class="keywordflow">for</span> (<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> i = 0; i &lt; data_.a.size; i++)</div><div class="line"><a name="l00952"></a><span class="lineno">  952</span>&#160;                <span class="keywordflow">if</span> ((*<span class="keyword">this</span>)[i] != rhs[i])</div><div class="line"><a name="l00953"></a><span class="lineno">  953</span>&#160;                    <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00954"></a><span class="lineno">  954</span>&#160;            <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00955"></a><span class="lineno">  955</span>&#160;</div><div class="line"><a name="l00956"></a><span class="lineno">  956</span>&#160;        <span class="keywordflow">case</span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4ad6379da3dc04b83a591992bfb9fabba7">kStringType</a>:</div><div class="line"><a name="l00957"></a><span class="lineno">  957</span>&#160;            <span class="keywordflow">return</span> StringEqual(rhs);</div><div class="line"><a name="l00958"></a><span class="lineno">  958</span>&#160;</div><div class="line"><a name="l00959"></a><span class="lineno">  959</span>&#160;        <span class="keywordflow">case</span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a">kNumberType</a>:</div><div class="line"><a name="l00960"></a><span class="lineno">  960</span>&#160;            <span class="keywordflow">if</span> (IsDouble() || rhs.IsDouble()) {</div><div class="line"><a name="l00961"></a><span class="lineno">  961</span>&#160;                <span class="keywordtype">double</span> a = GetDouble();     <span class="comment">// May convert from integer to double.</span></div><div class="line"><a name="l00962"></a><span class="lineno">  962</span>&#160;                <span class="keywordtype">double</span> b = rhs.<a class="code" href="classrapidjson_1_1_generic_value.html#aa27d086d265f0ce447b15b15f0a2ed6e">GetDouble</a>(); <span class="comment">// Ditto</span></div><div class="line"><a name="l00963"></a><span class="lineno">  963</span>&#160;                <span class="keywordflow">return</span> a &gt;= b &amp;&amp; a &lt;= b;    <span class="comment">// Prevent -Wfloat-equal</span></div><div class="line"><a name="l00964"></a><span class="lineno">  964</span>&#160;            }</div><div class="line"><a name="l00965"></a><span class="lineno">  965</span>&#160;            <span class="keywordflow">else</span></div><div class="line"><a name="l00966"></a><span class="lineno">  966</span>&#160;                <span class="keywordflow">return</span> data_.n.u64 == rhs.data_.n.u64;</div><div class="line"><a name="l00967"></a><span class="lineno">  967</span>&#160;</div><div class="line"><a name="l00968"></a><span class="lineno">  968</span>&#160;        <span class="keywordflow">default</span>:</div><div class="line"><a name="l00969"></a><span class="lineno">  969</span>&#160;            <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00970"></a><span class="lineno">  970</span>&#160;        }</div><div class="line"><a name="l00971"></a><span class="lineno">  971</span>&#160;    }</div><div class="line"><a name="l00972"></a><span class="lineno">  972</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00973"></a><span class="lineno">  973</span>&#160;<span class="comment">    //! Equal-to operator with const C-string pointer</span></div><div class="line"><a name="l00974"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#af03ef6020e188bbfceb018da5cd8becc">  974</a></span>&#160;<span class="comment"></span>    <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_generic_value.html#af03ef6020e188bbfceb018da5cd8becc">operator==</a>(<span class="keyword">const</span> Ch* rhs)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> *<span class="keyword">this</span> == <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(<a class="code" href="namespacerapidjson.html#af94951529a5d51e8c4e6e770bb707c1f">StringRef</a>(rhs)); }</div><div class="line"><a name="l00975"></a><span class="lineno">  975</span>&#160;</div><div class="line"><a name="l00976"></a><span class="lineno">  976</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l00977"></a><span class="lineno">  977</span>&#160;<span class="comment">    //! Equal-to operator with string object</span></div><div class="line"><a name="l00978"></a><span class="lineno">  978</span>&#160;<span class="comment"></span><span class="comment">    /*! \note Requires the definition of the preprocessor symbol \ref RAPIDJSON_HAS_STDSTRING.</span></div><div class="line"><a name="l00979"></a><span class="lineno">  979</span>&#160;<span class="comment">     */</span></div><div class="line"><a name="l00980"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#af089d2bee0386ca7504ff4fab466c87f">  980</a></span>&#160;    <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_generic_value.html#af089d2bee0386ca7504ff4fab466c87f">operator==</a>(<span class="keyword">const</span> std::basic_string&lt;Ch&gt;&amp; rhs)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> *<span class="keyword">this</span> == <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(<a class="code" href="namespacerapidjson.html#af94951529a5d51e8c4e6e770bb707c1f">StringRef</a>(rhs)); }</div><div class="line"><a name="l00981"></a><span class="lineno">  981</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00982"></a><span class="lineno">  982</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00983"></a><span class="lineno">  983</span>&#160;<span class="comment">    //! Equal-to operator with primitive types</span></div><div class="line"><a name="l00984"></a><span class="lineno">  984</span>&#160;<span class="comment"></span><span class="comment">    /*! \tparam T Either \ref Type, \c int, \c unsigned, \c int64_t, \c uint64_t, \c double, \c true, \c false</span></div><div class="line"><a name="l00985"></a><span class="lineno">  985</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l00986"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#aaddbbbb35cd783f209f889cf8dea9570">  986</a></span>&#160;    <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt; RAPIDJSON_DISABLEIF_RETURN((internal::OrExpr&lt;internal::IsPointer&lt;T&gt;,internal::IsGenericValue&lt;T&gt; &gt;), (<span class="keywordtype">bool</span>)) <a class="code" href="classrapidjson_1_1_generic_value.html#aaddbbbb35cd783f209f889cf8dea9570">operator==</a>(<span class="keyword">const</span> T&amp; rhs)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> *<span class="keyword">this</span> == <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(rhs); }</div><div class="line"><a name="l00987"></a><span class="lineno">  987</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00988"></a><span class="lineno">  988</span>&#160;<span class="comment">    //! Not-equal-to operator</span></div><div class="line"><a name="l00989"></a><span class="lineno">  989</span>&#160;<span class="comment"></span><span class="comment">    /*! \return !(*this == rhs)</span></div><div class="line"><a name="l00990"></a><span class="lineno">  990</span>&#160;<span class="comment">     */</span></div><div class="line"><a name="l00991"></a><span class="lineno">  991</span>&#160;    <span class="keyword">template</span> &lt;<span class="keyword">typename</span> SourceAllocator&gt;</div><div class="line"><a name="l00992"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#ad5bf5afd53f21f370f917041b3be4bfc">  992</a></span>&#160;    <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_generic_value.html#ad5bf5afd53f21f370f917041b3be4bfc">operator!=</a>(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue&lt;Encoding, SourceAllocator&gt;</a>&amp; rhs)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> !(*<span class="keyword">this</span> == rhs); }</div><div class="line"><a name="l00993"></a><span class="lineno">  993</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00994"></a><span class="lineno">  994</span>&#160;<span class="comment">    //! Not-equal-to operator with const C-string pointer</span></div><div class="line"><a name="l00995"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a6443cf5323fb46c4c51cd15a365da49b">  995</a></span>&#160;<span class="comment"></span>    <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_generic_value.html#a6443cf5323fb46c4c51cd15a365da49b">operator!=</a>(<span class="keyword">const</span> Ch* rhs)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> !(*<span class="keyword">this</span> == rhs); }</div><div class="line"><a name="l00996"></a><span class="lineno">  996</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00997"></a><span class="lineno">  997</span>&#160;<span class="comment">    //! Not-equal-to operator with arbitrary types</span></div><div class="line"><a name="l00998"></a><span class="lineno">  998</span>&#160;<span class="comment"></span><span class="comment">    /*! \return !(*this == rhs)</span></div><div class="line"><a name="l00999"></a><span class="lineno">  999</span>&#160;<span class="comment">     */</span></div><div class="line"><a name="l01000"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#ae6fe0576ff0336f6e2b09fe32f3ff809"> 1000</a></span>&#160;    <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt; RAPIDJSON_DISABLEIF_RETURN((internal::IsGenericValue&lt;T&gt;), (<span class="keywordtype">bool</span>)) <a class="code" href="classrapidjson_1_1_generic_value.html#ae6fe0576ff0336f6e2b09fe32f3ff809">operator!=</a>(<span class="keyword">const</span> T&amp; rhs)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> !(*<span class="keyword">this</span> == rhs); }</div><div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>&#160;<span class="comment">    //! Equal-to operator with arbitrary types (symmetric version)</span></div><div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>&#160;<span class="comment"></span><span class="comment">    /*! \return (rhs == lhs)</span></div><div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>&#160;<span class="comment">     */</span></div><div class="line"><a name="l01005"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#aaa465706fda1e1ef4513ce877e0b4b69"> 1005</a></span>&#160;    <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt; <span class="keyword">friend</span> RAPIDJSON_DISABLEIF_RETURN((internal::IsGenericValue&lt;T&gt;), (<span class="keywordtype">bool</span>)) <a class="code" href="classrapidjson_1_1_generic_value.html#aaa465706fda1e1ef4513ce877e0b4b69">operator==</a>(<span class="keyword">const</span> T&amp; lhs, <span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; rhs) { <span class="keywordflow">return</span> rhs == lhs; }</div><div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>&#160;<span class="comment">    //! Not-Equal-to operator with arbitrary types (symmetric version)</span></div><div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>&#160;<span class="comment"></span><span class="comment">    /*! \return !(rhs == lhs)</span></div><div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>&#160;<span class="comment">     */</span></div><div class="line"><a name="l01010"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#ae08898bef949f217f0e5d28e19f05992"> 1010</a></span>&#160;    <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt; <span class="keyword">friend</span> RAPIDJSON_DISABLEIF_RETURN((internal::IsGenericValue&lt;T&gt;), (<span class="keywordtype">bool</span>)) <a class="code" href="classrapidjson_1_1_generic_value.html#ae08898bef949f217f0e5d28e19f05992">operator!=</a>(<span class="keyword">const</span> T&amp; lhs, <span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; rhs) { <span class="keywordflow">return</span> !(rhs == lhs); }<span class="comment"></span></div><div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>&#160;<span class="comment">    //@}</span></div><div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>&#160;<span class="comment">    //!@name Type</span></div><div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>&#160;<span class="comment"></span><span class="comment">    //@{</span></div><div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>&#160;    <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">Type</a> GetType()<span class="keyword">  const </span>{ <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span><a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">Type</a><span class="keyword">&gt;</span>(data_.f.flags &amp; kTypeMask); }</div><div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>&#160;    <span class="keywordtype">bool</span> IsNull()<span class="keyword">   const </span>{ <span class="keywordflow">return</span> data_.f.flags == kNullFlag; }</div><div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>&#160;    <span class="keywordtype">bool</span> IsFalse()<span class="keyword">  const </span>{ <span class="keywordflow">return</span> data_.f.flags == kFalseFlag; }</div><div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>&#160;    <span class="keywordtype">bool</span> IsTrue()<span class="keyword">   const </span>{ <span class="keywordflow">return</span> data_.f.flags == kTrueFlag; }</div><div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>&#160;    <span class="keywordtype">bool</span> IsBool()<span class="keyword">   const </span>{ <span class="keywordflow">return</span> (data_.f.flags &amp; kBoolFlag) != 0; }</div><div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>&#160;    <span class="keywordtype">bool</span> IsObject()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> data_.f.flags == kObjectFlag; }</div><div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>&#160;    <span class="keywordtype">bool</span> IsArray()<span class="keyword">  const </span>{ <span class="keywordflow">return</span> data_.f.flags == kArrayFlag; }</div><div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>&#160;    <span class="keywordtype">bool</span> IsNumber()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (data_.f.flags &amp; kNumberFlag) != 0; }</div><div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>&#160;    <span class="keywordtype">bool</span> IsInt()<span class="keyword">    const </span>{ <span class="keywordflow">return</span> (data_.f.flags &amp; kIntFlag) != 0; }</div><div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>&#160;    <span class="keywordtype">bool</span> IsUint()<span class="keyword">   const </span>{ <span class="keywordflow">return</span> (data_.f.flags &amp; kUintFlag) != 0; }</div><div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>&#160;    <span class="keywordtype">bool</span> IsInt64()<span class="keyword">  const </span>{ <span class="keywordflow">return</span> (data_.f.flags &amp; kInt64Flag) != 0; }</div><div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>&#160;    <span class="keywordtype">bool</span> IsUint64()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (data_.f.flags &amp; kUint64Flag) != 0; }</div><div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>&#160;    <span class="keywordtype">bool</span> IsDouble()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (data_.f.flags &amp; kDoubleFlag) != 0; }</div><div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>&#160;    <span class="keywordtype">bool</span> IsString()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (data_.f.flags &amp; kStringFlag) != 0; }</div><div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>&#160;</div><div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>&#160;    <span class="comment">// Checks whether a number can be losslessly converted to a double.</span></div><div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>&#160;    <span class="keywordtype">bool</span> IsLosslessDouble()<span class="keyword"> const </span>{</div><div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>&#160;        <span class="keywordflow">if</span> (!IsNumber()) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>&#160;        <span class="keywordflow">if</span> (IsUint64()) {</div><div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>&#160;            uint64_t u = GetUint64();</div><div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>&#160;            <span class="keyword">volatile</span> <span class="keywordtype">double</span> d = <span class="keyword">static_cast&lt;</span><span class="keywordtype">double</span><span class="keyword">&gt;</span>(u);</div><div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>&#160;            <span class="keywordflow">return</span> (d &gt;= 0.0)</div><div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>&#160;                &amp;&amp; (d &lt; static_cast&lt;double&gt;((std::numeric_limits&lt;uint64_t&gt;::max)()))</div><div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>&#160;                &amp;&amp; (u == <span class="keyword">static_cast&lt;</span>uint64_t<span class="keyword">&gt;</span>(d));</div><div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>&#160;        }</div><div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>&#160;        <span class="keywordflow">if</span> (IsInt64()) {</div><div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>&#160;            int64_t i = GetInt64();</div><div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>&#160;            <span class="keyword">volatile</span> <span class="keywordtype">double</span> d = <span class="keyword">static_cast&lt;</span><span class="keywordtype">double</span><span class="keyword">&gt;</span>(i);</div><div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>&#160;            <span class="keywordflow">return</span> (d &gt;= static_cast&lt;double&gt;((std::numeric_limits&lt;int64_t&gt;::min)()))</div><div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>&#160;                &amp;&amp; (d &lt; static_cast&lt;double&gt;((std::numeric_limits&lt;int64_t&gt;::max)()))</div><div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>&#160;                &amp;&amp; (i == static_cast&lt;int64_t&gt;(d));</div><div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>&#160;        }</div><div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">true</span>; <span class="comment">// double, int, uint are always lossless</span></div><div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>&#160;    }</div><div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>&#160;</div><div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>&#160;    <span class="comment">// Checks whether a number is a float (possible lossy).</span></div><div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>&#160;    <span class="keywordtype">bool</span> IsFloat()<span class="keyword"> const  </span>{</div><div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>&#160;        <span class="keywordflow">if</span> ((data_.f.flags &amp; kDoubleFlag) == 0)</div><div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>&#160;            <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>&#160;        <span class="keywordtype">double</span> d = GetDouble();</div><div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>&#160;        <span class="keywordflow">return</span> d &gt;= -3.4028234e38 &amp;&amp; d &lt;= 3.4028234e38;</div><div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>&#160;    }</div><div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>&#160;    <span class="comment">// Checks whether a number can be losslessly converted to a float.</span></div><div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>&#160;    <span class="keywordtype">bool</span> IsLosslessFloat()<span class="keyword"> const </span>{</div><div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>&#160;        <span class="keywordflow">if</span> (!IsNumber()) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>&#160;        <span class="keywordtype">double</span> a = GetDouble();</div><div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>&#160;        <span class="keywordflow">if</span> (a &lt; static_cast&lt;double&gt;(-(std::numeric_limits&lt;float&gt;::max)())</div><div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>&#160;                || a &gt; static_cast&lt;double&gt;((std::numeric_limits&lt;float&gt;::max)()))</div><div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>&#160;            <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>&#160;        <span class="keywordtype">double</span> b = <span class="keyword">static_cast&lt;</span><span class="keywordtype">double</span><span class="keyword">&gt;</span>(<span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span>(a));</div><div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>&#160;        <span class="keywordflow">return</span> a &gt;= b &amp;&amp; a &lt;= b;    <span class="comment">// Prevent -Wfloat-equal</span></div><div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>&#160;    }</div><div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>&#160;<span class="comment">    //@}</span></div><div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>&#160;<span class="comment">    //!@name Null</span></div><div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>&#160;<span class="comment"></span><span class="comment">    //@{</span></div><div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>&#160;    <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; SetNull() { this-&gt;~<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(); <span class="keyword">new</span> (<span class="keyword">this</span>) <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>&#160;<span class="comment">    //@}</span></div><div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>&#160;<span class="comment">    //!@name Bool</span></div><div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>&#160;<span class="comment"></span><span class="comment">    //@{</span></div><div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01081"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a78d80b935babeedbfa71914a8fe5baa7"> 1081</a></span>&#160;    <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_generic_value.html#a78d80b935babeedbfa71914a8fe5baa7">GetBool</a>()<span class="keyword"> const </span>{ <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsBool()); <span class="keywordflow">return</span> data_.f.flags == kTrueFlag; }<span class="comment"></span></div><div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>&#160;<span class="comment">    //!&lt; Set boolean value</span></div><div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>&#160;<span class="comment"></span><span class="comment">    /*! \post IsBool() == true */</span></div><div class="line"><a name="l01084"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a5623c9039977ca0daf394e5c12f10c2d"> 1084</a></span>&#160;    <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#a5623c9039977ca0daf394e5c12f10c2d">SetBool</a>(<span class="keywordtype">bool</span> b) { this-&gt;~<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(); <span class="keyword">new</span> (<span class="keyword">this</span>) <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(b); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>&#160;<span class="comment">    //@}</span></div><div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>&#160;<span class="comment">    //!@name Object</span></div><div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>&#160;<span class="comment"></span><span class="comment">    //@{</span></div><div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>&#160;<span class="comment">    //! Set this value as an empty object.</span></div><div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>&#160;<span class="comment"></span><span class="comment">    /*! \post IsObject() == true */</span></div><div class="line"><a name="l01093"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a7cb3cbaefe4fb99aaf9f155fb4ee039b"> 1093</a></span>&#160;    <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#a7cb3cbaefe4fb99aaf9f155fb4ee039b">SetObject</a>() { this-&gt;~<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(); <span class="keyword">new</span> (<span class="keyword">this</span>) <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4acf030b422a32c3647c7c5973bd4dd0a9">kObjectType</a>); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>&#160;<span class="comment">    //! Get the number of members in the object.</span></div><div class="line"><a name="l01096"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a8b7e47c57a20d0de0cd19eee799ebd88"> 1096</a></span>&#160;<span class="comment"></span>    <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> <a class="code" href="classrapidjson_1_1_generic_value.html#a8b7e47c57a20d0de0cd19eee799ebd88">MemberCount</a>()<span class="keyword"> const </span>{ <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsObject()); <span class="keywordflow">return</span> data_.o.size; }</div><div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>&#160;<span class="comment">    //! Get the capacity of object.</span></div><div class="line"><a name="l01099"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#af2a406c67f2d6a7849f0c167025827b2"> 1099</a></span>&#160;<span class="comment"></span>    <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> <a class="code" href="classrapidjson_1_1_generic_value.html#af2a406c67f2d6a7849f0c167025827b2">MemberCapacity</a>()<span class="keyword"> const </span>{ <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsObject()); <span class="keywordflow">return</span> data_.o.capacity; }</div><div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>&#160;<span class="comment">    //! Check whether the object is empty.</span></div><div class="line"><a name="l01102"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a1f4835373e05abae52b91e1c6b7ec92c"> 1102</a></span>&#160;<span class="comment"></span>    <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_generic_value.html#a1f4835373e05abae52b91e1c6b7ec92c">ObjectEmpty</a>()<span class="keyword"> const </span>{ <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsObject()); <span class="keywordflow">return</span> data_.o.size == 0; }</div><div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>&#160;<span class="comment">    //! Get a value from an object associated with the name.</span></div><div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>&#160;<span class="comment"></span><span class="comment">    /*! \pre IsObject() == true</span></div><div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>&#160;<span class="comment">        \tparam T Either \c Ch or \c const \c Ch (template used for disambiguation with \ref operator[](SizeType))</span></div><div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>&#160;<span class="comment">        \note In version 0.1x, if the member is not found, this function returns a null value. This makes issue 7.</span></div><div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>&#160;<span class="comment">        Since 0.2, if the name is not correct, it will assert.</span></div><div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>&#160;<span class="comment">        If user is unsure whether a member exists, user should use HasMember() first.</span></div><div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>&#160;<span class="comment">        A better approach is to use FindMember().</span></div><div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>&#160;<span class="comment">        \note Linear time complexity.</span></div><div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>&#160;    <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l01114"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a8ec7fc7f221306925c7674dccbe02b07"> 1114</a></span>&#160;    RAPIDJSON_DISABLEIF_RETURN((internal::NotExpr&lt;internal::IsSame&lt;<span class="keyword">typename</span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">internal::RemoveConst&lt;T&gt;::Type</a>, Ch&gt; &gt;),(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp;)) <a class="code" href="classrapidjson_1_1_generic_value.html#a8ec7fc7f221306925c7674dccbe02b07">operator[]</a>(T* name) {</div><div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>&#160;        <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a> n(<a class="code" href="namespacerapidjson.html#af94951529a5d51e8c4e6e770bb707c1f">StringRef</a>(name));</div><div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>&#160;        <span class="keywordflow">return</span> (*<span class="keyword">this</span>)[n];</div><div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>&#160;    }</div><div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>&#160;    <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>&#160;    RAPIDJSON_DISABLEIF_RETURN((internal::NotExpr&lt;internal::IsSame&lt;<span class="keyword">typename</span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">internal::RemoveConst&lt;T&gt;::Type</a>, Ch&gt; &gt;),(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp;)) operator[](T* name)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">const_cast&lt;</span><a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp;<span class="keyword">&gt;</span>(*this)[name]; }</div><div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>&#160;<span class="comment">    //! Get a value from an object associated with the name.</span></div><div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>&#160;<span class="comment"></span><span class="comment">    /*! \pre IsObject() == true</span></div><div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>&#160;<span class="comment">        \tparam SourceAllocator Allocator of the \c name value</span></div><div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>&#160;<span class="comment">        \note Compared to \ref operator[](T*), this version is faster because it does not need a StrLen().</span></div><div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>&#160;<span class="comment">        And it can also handle strings with embedded null characters.</span></div><div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>&#160;<span class="comment">        \note Linear time complexity.</span></div><div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>&#160;    <span class="keyword">template</span> &lt;<span class="keyword">typename</span> SourceAllocator&gt;</div><div class="line"><a name="l01131"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#aa62b57746c96ce3d264b2fe178196062"> 1131</a></span>&#160;    <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#aa62b57746c96ce3d264b2fe178196062">operator[]</a>(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue&lt;Encoding, SourceAllocator&gt;</a>&amp; name) {</div><div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>&#160;        <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">MemberIterator</a> member = FindMember(name);</div><div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>&#160;        <span class="keywordflow">if</span> (member != MemberEnd())</div><div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>&#160;            <span class="keywordflow">return</span> member-&gt;value;</div><div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>&#160;        <span class="keywordflow">else</span> {</div><div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>&#160;            <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(<span class="keyword">false</span>);    <span class="comment">// see above note</span></div><div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>&#160;</div><div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>&#160;            <span class="comment">// This will generate -Wexit-time-destructors in clang</span></div><div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>&#160;            <span class="comment">// static GenericValue NullValue;</span></div><div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>&#160;            <span class="comment">// return NullValue;</span></div><div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>&#160;</div><div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>&#160;            <span class="comment">// Use static buffer and placement-new to prevent destruction</span></div><div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>&#160;            <span class="keyword">static</span> <span class="keywordtype">char</span> buffer[<span class="keyword">sizeof</span>(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>)];</div><div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>&#160;            <span class="keywordflow">return</span> *<span class="keyword">new</span> (buffer) <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>();</div><div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>&#160;        }</div><div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>&#160;    }</div><div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>&#160;    <span class="keyword">template</span> &lt;<span class="keyword">typename</span> SourceAllocator&gt;</div><div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>&#160;    <span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; operator[](<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue&lt;Encoding, SourceAllocator&gt;</a>&amp; name)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">const_cast&lt;</span><a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp;<span class="keyword">&gt;</span>(*this)[name]; }</div><div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>&#160;</div><div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>&#160;<span class="comment">    //! Get a value from an object associated with name (string object).</span></div><div class="line"><a name="l01152"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a4d337239ee3e2096462f6a36b9ab0811"> 1152</a></span>&#160;<span class="comment"></span>    <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#a4d337239ee3e2096462f6a36b9ab0811">operator[]</a>(<span class="keyword">const</span> std::basic_string&lt;Ch&gt;&amp; name) { <span class="keywordflow">return</span> (*<span class="keyword">this</span>)[<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(<a class="code" href="namespacerapidjson.html#af94951529a5d51e8c4e6e770bb707c1f">StringRef</a>(name))]; }</div><div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>&#160;    <span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; operator[](<span class="keyword">const</span> std::basic_string&lt;Ch&gt;&amp; name)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (*<span class="keyword">this</span>)[<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(<a class="code" href="namespacerapidjson.html#af94951529a5d51e8c4e6e770bb707c1f">StringRef</a>(name))]; }</div><div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>&#160;<span class="comment">    //! Const member iterator</span></div><div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>&#160;<span class="comment"></span><span class="comment">    /*! \pre IsObject() == true */</span></div><div class="line"><a name="l01158"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#ae89a77887aa3eb1f1f913727cbff6786"> 1158</a></span>&#160;    <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">ConstMemberIterator</a> <a class="code" href="classrapidjson_1_1_generic_value.html#ae89a77887aa3eb1f1f913727cbff6786">MemberBegin</a>()<span class="keyword"> const </span>{ <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsObject()); <span class="keywordflow">return</span> <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">ConstMemberIterator</a>(GetMembersPointer()); }<span class="comment"></span></div><div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>&#160;<span class="comment">    //! Const \em past-the-end member iterator</span></div><div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>&#160;<span class="comment"></span><span class="comment">    /*! \pre IsObject() == true */</span></div><div class="line"><a name="l01161"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a34ee3d75a7aa308043fb34b0743bfe7c"> 1161</a></span>&#160;    <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">ConstMemberIterator</a> <a class="code" href="classrapidjson_1_1_generic_value.html#a34ee3d75a7aa308043fb34b0743bfe7c">MemberEnd</a>()<span class="keyword"> const   </span>{ <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsObject()); <span class="keywordflow">return</span> <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">ConstMemberIterator</a>(GetMembersPointer() + data_.o.size); }<span class="comment"></span></div><div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>&#160;<span class="comment">    //! Member iterator</span></div><div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>&#160;<span class="comment"></span><span class="comment">    /*! \pre IsObject() == true */</span></div><div class="line"><a name="l01164"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a93f0f317f397c36a24a0f3c32648623a"> 1164</a></span>&#160;    <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">MemberIterator</a> <a class="code" href="classrapidjson_1_1_generic_value.html#a93f0f317f397c36a24a0f3c32648623a">MemberBegin</a>()            { <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsObject()); <span class="keywordflow">return</span> <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">MemberIterator</a>(GetMembersPointer()); }<span class="comment"></span></div><div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>&#160;<span class="comment">    //! \em Past-the-end member iterator</span></div><div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>&#160;<span class="comment"></span><span class="comment">    /*! \pre IsObject() == true */</span></div><div class="line"><a name="l01167"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#adb109ae9f12615efadf9277cb5e9c4ee"> 1167</a></span>&#160;    <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">MemberIterator</a> <a class="code" href="classrapidjson_1_1_generic_value.html#adb109ae9f12615efadf9277cb5e9c4ee">MemberEnd</a>()              { <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsObject()); <span class="keywordflow">return</span> <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">MemberIterator</a>(GetMembersPointer() + data_.o.size); }</div><div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>&#160;<span class="comment">    //! Request the object to have enough capacity to store members.</span></div><div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>&#160;<span class="comment"></span><span class="comment">    /*! \param newCapacity  The capacity that the object at least need to have.</span></div><div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>&#160;<span class="comment">        \param allocator    Allocator for reallocating memory. It must be the same one as used before. Commonly use GenericDocument::GetAllocator().</span></div><div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>&#160;<span class="comment">        \return The value itself for fluent API.</span></div><div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>&#160;<span class="comment">        \note Linear time complexity.</span></div><div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l01175"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a9131d6e49ac5a6bf8000d851381e4a25"> 1175</a></span>&#160;    <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#a9131d6e49ac5a6bf8000d851381e4a25">MemberReserve</a>(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> newCapacity, Allocator &amp;allocator) {</div><div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>&#160;        <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsObject());</div><div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>&#160;        <span class="keywordflow">if</span> (newCapacity &gt; data_.o.capacity) {</div><div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>&#160;            SetMembersPointer(reinterpret_cast&lt;Member*&gt;(allocator.Realloc(GetMembersPointer(), data_.o.capacity * <span class="keyword">sizeof</span>(<a class="code" href="structrapidjson_1_1_generic_member.html">Member</a>), newCapacity * <span class="keyword">sizeof</span>(<a class="code" href="structrapidjson_1_1_generic_member.html">Member</a>))));</div><div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>&#160;            data_.o.capacity = newCapacity;</div><div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>&#160;        }</div><div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>&#160;        <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>&#160;    }</div><div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>&#160;<span class="comment">    //! Check whether a member exists in the object.</span></div><div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>&#160;<span class="comment"></span><span class="comment">    /*!</span></div><div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>&#160;<span class="comment">        \param name Member name to be searched.</span></div><div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>&#160;<span class="comment">        \pre IsObject() == true</span></div><div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>&#160;<span class="comment">        \return Whether a member with that name exists.</span></div><div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>&#160;<span class="comment">        \note It is better to use FindMember() directly if you need the obtain the value as well.</span></div><div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>&#160;<span class="comment">        \note Linear time complexity.</span></div><div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l01192"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#aa78e2eb30c6b918826eccf03f04f166b"> 1192</a></span>&#160;    <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_generic_value.html#aa78e2eb30c6b918826eccf03f04f166b">HasMember</a>(<span class="keyword">const</span> Ch* name)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> FindMember(name) != MemberEnd(); }</div><div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>&#160;</div><div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>&#160;<span class="comment">    //! Check whether a member exists in the object with string object.</span></div><div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>&#160;<span class="comment"></span><span class="comment">    /*!</span></div><div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>&#160;<span class="comment">        \param name Member name to be searched.</span></div><div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>&#160;<span class="comment">        \pre IsObject() == true</span></div><div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>&#160;<span class="comment">        \return Whether a member with that name exists.</span></div><div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>&#160;<span class="comment">        \note It is better to use FindMember() directly if you need the obtain the value as well.</span></div><div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>&#160;<span class="comment">        \note Linear time complexity.</span></div><div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l01203"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a9b3b30acbe60d7a5b105afa05c1ddfb0"> 1203</a></span>&#160;    <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_generic_value.html#a9b3b30acbe60d7a5b105afa05c1ddfb0">HasMember</a>(<span class="keyword">const</span> std::basic_string&lt;Ch&gt;&amp; name)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> FindMember(name) != MemberEnd(); }</div><div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>&#160;<span class="comment">    //! Check whether a member exists in the object with GenericValue name.</span></div><div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>&#160;<span class="comment"></span><span class="comment">    /*!</span></div><div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>&#160;<span class="comment">        This version is faster because it does not need a StrLen(). It can also handle string with null character.</span></div><div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>&#160;<span class="comment">        \param name Member name to be searched.</span></div><div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>&#160;<span class="comment">        \pre IsObject() == true</span></div><div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>&#160;<span class="comment">        \return Whether a member with that name exists.</span></div><div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>&#160;<span class="comment">        \note It is better to use FindMember() directly if you need the obtain the value as well.</span></div><div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>&#160;<span class="comment">        \note Linear time complexity.</span></div><div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>&#160;    <span class="keyword">template</span> &lt;<span class="keyword">typename</span> SourceAllocator&gt;</div><div class="line"><a name="l01216"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a794129b8adffb97d123306a0c0ccaf71"> 1216</a></span>&#160;    <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_generic_value.html#a794129b8adffb97d123306a0c0ccaf71">HasMember</a>(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue&lt;Encoding, SourceAllocator&gt;</a>&amp; name)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> FindMember(name) != MemberEnd(); }</div><div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>&#160;<span class="comment">    //! Find member by name.</span></div><div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>&#160;<span class="comment"></span><span class="comment">    /*!</span></div><div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>&#160;<span class="comment">        \param name Member name to be searched.</span></div><div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>&#160;<span class="comment">        \pre IsObject() == true</span></div><div class="line"><a name="l01222"></a><span class="lineno"> 1222</span>&#160;<span class="comment">        \return Iterator to member, if it exists.</span></div><div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>&#160;<span class="comment">            Otherwise returns \ref MemberEnd().</span></div><div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>&#160;<span class="comment">        \note Earlier versions of Rapidjson returned a \c NULL pointer, in case</span></div><div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>&#160;<span class="comment">            the requested member doesn&#39;t exist. For consistency with e.g.</span></div><div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>&#160;<span class="comment">            \c std::map, this has been changed to MemberEnd() now.</span></div><div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>&#160;<span class="comment">        \note Linear time complexity.</span></div><div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l01230"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#ad22fdeac87ec6c370dd43075d3586811"> 1230</a></span>&#160;    <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">MemberIterator</a> <a class="code" href="classrapidjson_1_1_generic_value.html#ad22fdeac87ec6c370dd43075d3586811">FindMember</a>(<span class="keyword">const</span> Ch* name) {</div><div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>&#160;        <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a> n(<a class="code" href="namespacerapidjson.html#af94951529a5d51e8c4e6e770bb707c1f">StringRef</a>(name));</div><div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>&#160;        <span class="keywordflow">return</span> FindMember(n);</div><div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>&#160;    }</div><div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>&#160;</div><div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>&#160;    <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">ConstMemberIterator</a> FindMember(<span class="keyword">const</span> Ch* name)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">const_cast&lt;</span><a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp;<span class="keyword">&gt;</span>(*this).<a class="code" href="classrapidjson_1_1_generic_value.html#ad22fdeac87ec6c370dd43075d3586811">FindMember</a>(name); }</div><div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>&#160;<span class="comment">    //! Find member by name.</span></div><div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>&#160;<span class="comment"></span><span class="comment">    /*!</span></div><div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>&#160;<span class="comment">        This version is faster because it does not need a StrLen(). It can also handle string with null character.</span></div><div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>&#160;<span class="comment">        \param name Member name to be searched.</span></div><div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>&#160;<span class="comment">        \pre IsObject() == true</span></div><div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>&#160;<span class="comment">        \return Iterator to member, if it exists.</span></div><div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>&#160;<span class="comment">            Otherwise returns \ref MemberEnd().</span></div><div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>&#160;<span class="comment">        \note Earlier versions of Rapidjson returned a \c NULL pointer, in case</span></div><div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>&#160;<span class="comment">            the requested member doesn&#39;t exist. For consistency with e.g.</span></div><div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>&#160;<span class="comment">            \c std::map, this has been changed to MemberEnd() now.</span></div><div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>&#160;<span class="comment">        \note Linear time complexity.</span></div><div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>&#160;    <span class="keyword">template</span> &lt;<span class="keyword">typename</span> SourceAllocator&gt;</div><div class="line"><a name="l01251"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a8d75bf0c6c0fa4f8d340a4236e98539b"> 1251</a></span>&#160;    <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">MemberIterator</a> <a class="code" href="classrapidjson_1_1_generic_value.html#a8d75bf0c6c0fa4f8d340a4236e98539b">FindMember</a>(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue&lt;Encoding, SourceAllocator&gt;</a>&amp; name) {</div><div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>&#160;        <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsObject());</div><div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>&#160;        <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(name.IsString());</div><div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>&#160;        <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">MemberIterator</a> member = MemberBegin();</div><div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>&#160;        <span class="keywordflow">for</span> ( ; member != MemberEnd(); ++member)</div><div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>&#160;            <span class="keywordflow">if</span> (name.StringEqual(member-&gt;name))</div><div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>&#160;                <span class="keywordflow">break</span>;</div><div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>&#160;        <span class="keywordflow">return</span> member;</div><div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>&#160;    }</div><div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>&#160;    <span class="keyword">template</span> &lt;<span class="keyword">typename</span> SourceAllocator&gt; <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">ConstMemberIterator</a> FindMember(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue&lt;Encoding, SourceAllocator&gt;</a>&amp; name)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">const_cast&lt;</span><a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp;<span class="keyword">&gt;</span>(*this).<a class="code" href="classrapidjson_1_1_generic_value.html#ad22fdeac87ec6c370dd43075d3586811">FindMember</a>(name); }</div><div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>&#160;</div><div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>&#160;<span class="comment">    //! Find member by string object name.</span></div><div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>&#160;<span class="comment"></span><span class="comment">    /*!</span></div><div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>&#160;<span class="comment">        \param name Member name to be searched.</span></div><div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>&#160;<span class="comment">        \pre IsObject() == true</span></div><div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>&#160;<span class="comment">        \return Iterator to member, if it exists.</span></div><div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>&#160;<span class="comment">            Otherwise returns \ref MemberEnd().</span></div><div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l01270"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a278b420ea75b0ec18d88d4c9e9199d62"> 1270</a></span>&#160;    <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">MemberIterator</a> <a class="code" href="classrapidjson_1_1_generic_value.html#a278b420ea75b0ec18d88d4c9e9199d62">FindMember</a>(<span class="keyword">const</span> std::basic_string&lt;Ch&gt;&amp; name) { <span class="keywordflow">return</span> <a class="code" href="classrapidjson_1_1_generic_value.html#a278b420ea75b0ec18d88d4c9e9199d62">FindMember</a>(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(<a class="code" href="namespacerapidjson.html#af94951529a5d51e8c4e6e770bb707c1f">StringRef</a>(name))); }</div><div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>&#160;    <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">ConstMemberIterator</a> FindMember(<span class="keyword">const</span> std::basic_string&lt;Ch&gt;&amp; name)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> FindMember(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(<a class="code" href="namespacerapidjson.html#af94951529a5d51e8c4e6e770bb707c1f">StringRef</a>(name))); }</div><div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>&#160;<span class="comment">    //! Add a member (name-value pair) to the object.</span></div><div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>&#160;<span class="comment"></span><span class="comment">    /*! \param name A string value as name of member.</span></div><div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>&#160;<span class="comment">        \param value Value of any type.</span></div><div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>&#160;<span class="comment">        \param allocator    Allocator for reallocating memory. It must be the same one as used before. Commonly use GenericDocument::GetAllocator().</span></div><div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>&#160;<span class="comment">        \return The value itself for fluent API.</span></div><div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>&#160;<span class="comment">        \note The ownership of \c name and \c value will be transferred to this object on success.</span></div><div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>&#160;<span class="comment">        \pre  IsObject() &amp;&amp; name.IsString()</span></div><div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>&#160;<span class="comment">        \post name.IsNull() &amp;&amp; value.IsNull()</span></div><div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>&#160;<span class="comment">        \note Amortized Constant time complexity.</span></div><div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l01284"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#ab018d734d189532b27943bc45776ba68"> 1284</a></span>&#160;    <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#ab018d734d189532b27943bc45776ba68">AddMember</a>(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; name, <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; value, Allocator&amp; allocator) {</div><div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>&#160;        <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsObject());</div><div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>&#160;        <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(name.IsString());</div><div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>&#160;</div><div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>&#160;        ObjectData&amp; o = data_.o;</div><div class="line"><a name="l01289"></a><span class="lineno"> 1289</span>&#160;        <span class="keywordflow">if</span> (o.size &gt;= o.capacity)</div><div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>&#160;            MemberReserve(o.capacity == 0 ? kDefaultObjectCapacity : (o.capacity + (o.capacity + 1) / 2), allocator);</div><div class="line"><a name="l01291"></a><span class="lineno"> 1291</span>&#160;        <a class="code" href="structrapidjson_1_1_generic_member.html">Member</a>* members = GetMembersPointer();</div><div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>&#160;        members[o.size].<a class="code" href="structrapidjson_1_1_generic_member.html#ae820eaa74b415a9073f3f3855f6c6607">name</a>.RawAssign(name);</div><div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>&#160;        members[o.size].<a class="code" href="structrapidjson_1_1_generic_member.html#a8ffff2076e62d988a070a136da6ffca6">value</a>.RawAssign(value);</div><div class="line"><a name="l01294"></a><span class="lineno"> 1294</span>&#160;        o.size++;</div><div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>&#160;        <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>&#160;    }</div><div class="line"><a name="l01297"></a><span class="lineno"> 1297</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01298"></a><span class="lineno"> 1298</span>&#160;<span class="comment">    //! Add a constant string value as member (name-value pair) to the object.</span></div><div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>&#160;<span class="comment"></span><span class="comment">    /*! \param name A string value as name of member.</span></div><div class="line"><a name="l01300"></a><span class="lineno"> 1300</span>&#160;<span class="comment">        \param value constant string reference as value of member.</span></div><div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>&#160;<span class="comment">        \param allocator    Allocator for reallocating memory. It must be the same one as used before. Commonly use GenericDocument::GetAllocator().</span></div><div class="line"><a name="l01302"></a><span class="lineno"> 1302</span>&#160;<span class="comment">        \return The value itself for fluent API.</span></div><div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>&#160;<span class="comment">        \pre  IsObject()</span></div><div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>&#160;<span class="comment">        \note This overload is needed to avoid clashes with the generic primitive type AddMember(GenericValue&amp;,T,Allocator&amp;) overload below.</span></div><div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>&#160;<span class="comment">        \note Amortized Constant time complexity.</span></div><div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l01307"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#ad290f179591025e871bedbbac89ac276"> 1307</a></span>&#160;    <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#ad290f179591025e871bedbbac89ac276">AddMember</a>(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; name, <a class="code" href="structrapidjson_1_1_generic_string_ref.html">StringRefType</a> value, Allocator&amp; allocator) {</div><div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>&#160;        <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a> v(value);</div><div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>&#160;        <span class="keywordflow">return</span> AddMember(name, v, allocator);</div><div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>&#160;    }</div><div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>&#160;</div><div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l01313"></a><span class="lineno"> 1313</span>&#160;<span class="comment">    //! Add a string object as member (name-value pair) to the object.</span></div><div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>&#160;<span class="comment"></span><span class="comment">    /*! \param name A string value as name of member.</span></div><div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>&#160;<span class="comment">        \param value constant string reference as value of member.</span></div><div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>&#160;<span class="comment">        \param allocator    Allocator for reallocating memory. It must be the same one as used before. Commonly use GenericDocument::GetAllocator().</span></div><div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>&#160;<span class="comment">        \return The value itself for fluent API.</span></div><div class="line"><a name="l01318"></a><span class="lineno"> 1318</span>&#160;<span class="comment">        \pre  IsObject()</span></div><div class="line"><a name="l01319"></a><span class="lineno"> 1319</span>&#160;<span class="comment">        \note This overload is needed to avoid clashes with the generic primitive type AddMember(GenericValue&amp;,T,Allocator&amp;) overload below.</span></div><div class="line"><a name="l01320"></a><span class="lineno"> 1320</span>&#160;<span class="comment">        \note Amortized Constant time complexity.</span></div><div class="line"><a name="l01321"></a><span class="lineno"> 1321</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l01322"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a578e35f3350717db2aae534969b2346a"> 1322</a></span>&#160;    <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#a578e35f3350717db2aae534969b2346a">AddMember</a>(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; name, std::basic_string&lt;Ch&gt;&amp; value, Allocator&amp; allocator) {</div><div class="line"><a name="l01323"></a><span class="lineno"> 1323</span>&#160;        <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a> v(value, allocator);</div><div class="line"><a name="l01324"></a><span class="lineno"> 1324</span>&#160;        <span class="keywordflow">return</span> AddMember(name, v, allocator);</div><div class="line"><a name="l01325"></a><span class="lineno"> 1325</span>&#160;    }</div><div class="line"><a name="l01326"></a><span class="lineno"> 1326</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01327"></a><span class="lineno"> 1327</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01328"></a><span class="lineno"> 1328</span>&#160;<span class="comment">    //! Add any primitive value as member (name-value pair) to the object.</span></div><div class="line"><a name="l01329"></a><span class="lineno"> 1329</span>&#160;<span class="comment"></span><span class="comment">    /*! \tparam T Either \ref Type, \c int, \c unsigned, \c int64_t, \c uint64_t</span></div><div class="line"><a name="l01330"></a><span class="lineno"> 1330</span>&#160;<span class="comment">        \param name A string value as name of member.</span></div><div class="line"><a name="l01331"></a><span class="lineno"> 1331</span>&#160;<span class="comment">        \param value Value of primitive type \c T as value of member</span></div><div class="line"><a name="l01332"></a><span class="lineno"> 1332</span>&#160;<span class="comment">        \param allocator Allocator for reallocating memory. Commonly use GenericDocument::GetAllocator().</span></div><div class="line"><a name="l01333"></a><span class="lineno"> 1333</span>&#160;<span class="comment">        \return The value itself for fluent API.</span></div><div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>&#160;<span class="comment">        \pre  IsObject()</span></div><div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>&#160;<span class="comment">        \note The source type \c T explicitly disallows all pointer types,</span></div><div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>&#160;<span class="comment">            especially (\c const) \ref Ch*.  This helps avoiding implicitly</span></div><div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>&#160;<span class="comment">            referencing character strings with insufficient lifetime, use</span></div><div class="line"><a name="l01339"></a><span class="lineno"> 1339</span>&#160;<span class="comment">            \ref AddMember(StringRefType, GenericValue&amp;, Allocator&amp;) or \ref</span></div><div class="line"><a name="l01340"></a><span class="lineno"> 1340</span>&#160;<span class="comment">            AddMember(StringRefType, StringRefType, Allocator&amp;).</span></div><div class="line"><a name="l01341"></a><span class="lineno"> 1341</span>&#160;<span class="comment">            All other pointer types would implicitly convert to \c bool,</span></div><div class="line"><a name="l01342"></a><span class="lineno"> 1342</span>&#160;<span class="comment">            use an explicit cast instead, if needed.</span></div><div class="line"><a name="l01343"></a><span class="lineno"> 1343</span>&#160;<span class="comment">        \note Amortized Constant time complexity.</span></div><div class="line"><a name="l01344"></a><span class="lineno"> 1344</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l01345"></a><span class="lineno"> 1345</span>&#160;    <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l01346"></a><span class="lineno"> 1346</span>&#160;    RAPIDJSON_DISABLEIF_RETURN((internal::OrExpr&lt;internal::IsPointer&lt;T&gt;, internal::IsGenericValue&lt;T&gt; &gt;), (<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp;))</div><div class="line"><a name="l01347"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#ab705cb56bfb380005704cda2d0edf168"> 1347</a></span>&#160;    AddMember(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; name, T value, Allocator&amp; allocator) {</div><div class="line"><a name="l01348"></a><span class="lineno"> 1348</span>&#160;        <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a> v(value);</div><div class="line"><a name="l01349"></a><span class="lineno"> 1349</span>&#160;        <span class="keywordflow">return</span> AddMember(name, v, allocator);</div><div class="line"><a name="l01350"></a><span class="lineno"> 1350</span>&#160;    }</div><div class="line"><a name="l01351"></a><span class="lineno"> 1351</span>&#160;</div><div class="line"><a name="l01352"></a><span class="lineno"> 1352</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l01353"></a><span class="lineno"> 1353</span>&#160;    <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; AddMember(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp;&amp; name, <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp;&amp; value, Allocator&amp; allocator) {</div><div class="line"><a name="l01354"></a><span class="lineno"> 1354</span>&#160;        <span class="keywordflow">return</span> AddMember(name, value, allocator);</div><div class="line"><a name="l01355"></a><span class="lineno"> 1355</span>&#160;    }</div><div class="line"><a name="l01356"></a><span class="lineno"> 1356</span>&#160;    <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; AddMember(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp;&amp; name, <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; value, Allocator&amp; allocator) {</div><div class="line"><a name="l01357"></a><span class="lineno"> 1357</span>&#160;        <span class="keywordflow">return</span> AddMember(name, value, allocator);</div><div class="line"><a name="l01358"></a><span class="lineno"> 1358</span>&#160;    }</div><div class="line"><a name="l01359"></a><span class="lineno"> 1359</span>&#160;    <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; AddMember(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; name, <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp;&amp; value, Allocator&amp; allocator) {</div><div class="line"><a name="l01360"></a><span class="lineno"> 1360</span>&#160;        <span class="keywordflow">return</span> AddMember(name, value, allocator);</div><div class="line"><a name="l01361"></a><span class="lineno"> 1361</span>&#160;    }</div><div class="line"><a name="l01362"></a><span class="lineno"> 1362</span>&#160;    <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; AddMember(<a class="code" href="structrapidjson_1_1_generic_string_ref.html">StringRefType</a> name, <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp;&amp; value, Allocator&amp; allocator) {</div><div class="line"><a name="l01363"></a><span class="lineno"> 1363</span>&#160;        <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a> n(name);</div><div class="line"><a name="l01364"></a><span class="lineno"> 1364</span>&#160;        <span class="keywordflow">return</span> AddMember(n, value, allocator);</div><div class="line"><a name="l01365"></a><span class="lineno"> 1365</span>&#160;    }</div><div class="line"><a name="l01366"></a><span class="lineno"> 1366</span>&#160;<span class="preprocessor">#endif // RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l01367"></a><span class="lineno"> 1367</span>&#160;</div><div class="line"><a name="l01368"></a><span class="lineno"> 1368</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01369"></a><span class="lineno"> 1369</span>&#160;<span class="comment">    //! Add a member (name-value pair) to the object.</span></div><div class="line"><a name="l01370"></a><span class="lineno"> 1370</span>&#160;<span class="comment"></span><span class="comment">    /*! \param name A constant string reference as name of member.</span></div><div class="line"><a name="l01371"></a><span class="lineno"> 1371</span>&#160;<span class="comment">        \param value Value of any type.</span></div><div class="line"><a name="l01372"></a><span class="lineno"> 1372</span>&#160;<span class="comment">        \param allocator    Allocator for reallocating memory. It must be the same one as used before. Commonly use GenericDocument::GetAllocator().</span></div><div class="line"><a name="l01373"></a><span class="lineno"> 1373</span>&#160;<span class="comment">        \return The value itself for fluent API.</span></div><div class="line"><a name="l01374"></a><span class="lineno"> 1374</span>&#160;<span class="comment">        \note The ownership of \c value will be transferred to this object on success.</span></div><div class="line"><a name="l01375"></a><span class="lineno"> 1375</span>&#160;<span class="comment">        \pre  IsObject()</span></div><div class="line"><a name="l01376"></a><span class="lineno"> 1376</span>&#160;<span class="comment">        \post value.IsNull()</span></div><div class="line"><a name="l01377"></a><span class="lineno"> 1377</span>&#160;<span class="comment">        \note Amortized Constant time complexity.</span></div><div class="line"><a name="l01378"></a><span class="lineno"> 1378</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l01379"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a85dc131bdad8077ce970d580d333d15a"> 1379</a></span>&#160;    <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#a85dc131bdad8077ce970d580d333d15a">AddMember</a>(<a class="code" href="structrapidjson_1_1_generic_string_ref.html">StringRefType</a> name, <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; value, Allocator&amp; allocator) {</div><div class="line"><a name="l01380"></a><span class="lineno"> 1380</span>&#160;        <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a> n(name);</div><div class="line"><a name="l01381"></a><span class="lineno"> 1381</span>&#160;        <span class="keywordflow">return</span> AddMember(n, value, allocator);</div><div class="line"><a name="l01382"></a><span class="lineno"> 1382</span>&#160;    }</div><div class="line"><a name="l01383"></a><span class="lineno"> 1383</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01384"></a><span class="lineno"> 1384</span>&#160;<span class="comment">    //! Add a constant string value as member (name-value pair) to the object.</span></div><div class="line"><a name="l01385"></a><span class="lineno"> 1385</span>&#160;<span class="comment"></span><span class="comment">    /*! \param name A constant string reference as name of member.</span></div><div class="line"><a name="l01386"></a><span class="lineno"> 1386</span>&#160;<span class="comment">        \param value constant string reference as value of member.</span></div><div class="line"><a name="l01387"></a><span class="lineno"> 1387</span>&#160;<span class="comment">        \param allocator    Allocator for reallocating memory. It must be the same one as used before. Commonly use GenericDocument::GetAllocator().</span></div><div class="line"><a name="l01388"></a><span class="lineno"> 1388</span>&#160;<span class="comment">        \return The value itself for fluent API.</span></div><div class="line"><a name="l01389"></a><span class="lineno"> 1389</span>&#160;<span class="comment">        \pre  IsObject()</span></div><div class="line"><a name="l01390"></a><span class="lineno"> 1390</span>&#160;<span class="comment">        \note This overload is needed to avoid clashes with the generic primitive type AddMember(StringRefType,T,Allocator&amp;) overload below.</span></div><div class="line"><a name="l01391"></a><span class="lineno"> 1391</span>&#160;<span class="comment">        \note Amortized Constant time complexity.</span></div><div class="line"><a name="l01392"></a><span class="lineno"> 1392</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l01393"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a2ccb4736d0f2ec07f06f630d8fe54f8d"> 1393</a></span>&#160;    <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#a2ccb4736d0f2ec07f06f630d8fe54f8d">AddMember</a>(<a class="code" href="structrapidjson_1_1_generic_string_ref.html">StringRefType</a> name, <a class="code" href="structrapidjson_1_1_generic_string_ref.html">StringRefType</a> value, Allocator&amp; allocator) {</div><div class="line"><a name="l01394"></a><span class="lineno"> 1394</span>&#160;        <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a> v(value);</div><div class="line"><a name="l01395"></a><span class="lineno"> 1395</span>&#160;        <span class="keywordflow">return</span> AddMember(name, v, allocator);</div><div class="line"><a name="l01396"></a><span class="lineno"> 1396</span>&#160;    }</div><div class="line"><a name="l01397"></a><span class="lineno"> 1397</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01398"></a><span class="lineno"> 1398</span>&#160;<span class="comment">    //! Add any primitive value as member (name-value pair) to the object.</span></div><div class="line"><a name="l01399"></a><span class="lineno"> 1399</span>&#160;<span class="comment"></span><span class="comment">    /*! \tparam T Either \ref Type, \c int, \c unsigned, \c int64_t, \c uint64_t</span></div><div class="line"><a name="l01400"></a><span class="lineno"> 1400</span>&#160;<span class="comment">        \param name A constant string reference as name of member.</span></div><div class="line"><a name="l01401"></a><span class="lineno"> 1401</span>&#160;<span class="comment">        \param value Value of primitive type \c T as value of member</span></div><div class="line"><a name="l01402"></a><span class="lineno"> 1402</span>&#160;<span class="comment">        \param allocator Allocator for reallocating memory. Commonly use GenericDocument::GetAllocator().</span></div><div class="line"><a name="l01403"></a><span class="lineno"> 1403</span>&#160;<span class="comment">        \return The value itself for fluent API.</span></div><div class="line"><a name="l01404"></a><span class="lineno"> 1404</span>&#160;<span class="comment">        \pre  IsObject()</span></div><div class="line"><a name="l01405"></a><span class="lineno"> 1405</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01406"></a><span class="lineno"> 1406</span>&#160;<span class="comment">        \note The source type \c T explicitly disallows all pointer types,</span></div><div class="line"><a name="l01407"></a><span class="lineno"> 1407</span>&#160;<span class="comment">            especially (\c const) \ref Ch*.  This helps avoiding implicitly</span></div><div class="line"><a name="l01408"></a><span class="lineno"> 1408</span>&#160;<span class="comment">            referencing character strings with insufficient lifetime, use</span></div><div class="line"><a name="l01409"></a><span class="lineno"> 1409</span>&#160;<span class="comment">            \ref AddMember(StringRefType, GenericValue&amp;, Allocator&amp;) or \ref</span></div><div class="line"><a name="l01410"></a><span class="lineno"> 1410</span>&#160;<span class="comment">            AddMember(StringRefType, StringRefType, Allocator&amp;).</span></div><div class="line"><a name="l01411"></a><span class="lineno"> 1411</span>&#160;<span class="comment">            All other pointer types would implicitly convert to \c bool,</span></div><div class="line"><a name="l01412"></a><span class="lineno"> 1412</span>&#160;<span class="comment">            use an explicit cast instead, if needed.</span></div><div class="line"><a name="l01413"></a><span class="lineno"> 1413</span>&#160;<span class="comment">        \note Amortized Constant time complexity.</span></div><div class="line"><a name="l01414"></a><span class="lineno"> 1414</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l01415"></a><span class="lineno"> 1415</span>&#160;    <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l01416"></a><span class="lineno"> 1416</span>&#160;    RAPIDJSON_DISABLEIF_RETURN((internal::OrExpr&lt;internal::IsPointer&lt;T&gt;, internal::IsGenericValue&lt;T&gt; &gt;), (<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp;))</div><div class="line"><a name="l01417"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#aa70ada250f3a0c5aeee0ce138d136b06"> 1417</a></span>&#160;    AddMember(<a class="code" href="structrapidjson_1_1_generic_string_ref.html">StringRefType</a> name, T value, Allocator&amp; allocator) {</div><div class="line"><a name="l01418"></a><span class="lineno"> 1418</span>&#160;        <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a> n(name);</div><div class="line"><a name="l01419"></a><span class="lineno"> 1419</span>&#160;        <span class="keywordflow">return</span> AddMember(n, value, allocator);</div><div class="line"><a name="l01420"></a><span class="lineno"> 1420</span>&#160;    }</div><div class="line"><a name="l01421"></a><span class="lineno"> 1421</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01422"></a><span class="lineno"> 1422</span>&#160;<span class="comment">    //! Remove all members in the object.</span></div><div class="line"><a name="l01423"></a><span class="lineno"> 1423</span>&#160;<span class="comment"></span><span class="comment">    /*! This function do not deallocate memory in the object, i.e. the capacity is unchanged.</span></div><div class="line"><a name="l01424"></a><span class="lineno"> 1424</span>&#160;<span class="comment">        \note Linear time complexity.</span></div><div class="line"><a name="l01425"></a><span class="lineno"> 1425</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l01426"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a68d8d197ae1fb83d4dc202f9812af4cc"> 1426</a></span>&#160;    <span class="keywordtype">void</span> <a class="code" href="classrapidjson_1_1_generic_value.html#a68d8d197ae1fb83d4dc202f9812af4cc">RemoveAllMembers</a>() {</div><div class="line"><a name="l01427"></a><span class="lineno"> 1427</span>&#160;        <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsObject()); </div><div class="line"><a name="l01428"></a><span class="lineno"> 1428</span>&#160;        <span class="keywordflow">for</span> (<a class="code" href="classrapidjson_1_1_generic_member_iterator.html">MemberIterator</a> m = MemberBegin(); m != MemberEnd(); ++m)</div><div class="line"><a name="l01429"></a><span class="lineno"> 1429</span>&#160;            m-&gt;~Member();</div><div class="line"><a name="l01430"></a><span class="lineno"> 1430</span>&#160;        data_.o.size = 0;</div><div class="line"><a name="l01431"></a><span class="lineno"> 1431</span>&#160;    }</div><div class="line"><a name="l01432"></a><span class="lineno"> 1432</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01433"></a><span class="lineno"> 1433</span>&#160;<span class="comment">    //! Remove a member in object by its name.</span></div><div class="line"><a name="l01434"></a><span class="lineno"> 1434</span>&#160;<span class="comment"></span><span class="comment">    /*! \param name Name of member to be removed.</span></div><div class="line"><a name="l01435"></a><span class="lineno"> 1435</span>&#160;<span class="comment">        \return Whether the member existed.</span></div><div class="line"><a name="l01436"></a><span class="lineno"> 1436</span>&#160;<span class="comment">        \note This function may reorder the object members. Use \ref</span></div><div class="line"><a name="l01437"></a><span class="lineno"> 1437</span>&#160;<span class="comment">            EraseMember(ConstMemberIterator) if you need to preserve the</span></div><div class="line"><a name="l01438"></a><span class="lineno"> 1438</span>&#160;<span class="comment">            relative order of the remaining members.</span></div><div class="line"><a name="l01439"></a><span class="lineno"> 1439</span>&#160;<span class="comment">        \note Linear time complexity.</span></div><div class="line"><a name="l01440"></a><span class="lineno"> 1440</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l01441"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#aa60074f72a6d1651828a104b0c6387b1"> 1441</a></span>&#160;    <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_generic_value.html#aa60074f72a6d1651828a104b0c6387b1">RemoveMember</a>(<span class="keyword">const</span> Ch* name) {</div><div class="line"><a name="l01442"></a><span class="lineno"> 1442</span>&#160;        <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a> n(<a class="code" href="namespacerapidjson.html#af94951529a5d51e8c4e6e770bb707c1f">StringRef</a>(name));</div><div class="line"><a name="l01443"></a><span class="lineno"> 1443</span>&#160;        <span class="keywordflow">return</span> RemoveMember(n);</div><div class="line"><a name="l01444"></a><span class="lineno"> 1444</span>&#160;    }</div><div class="line"><a name="l01445"></a><span class="lineno"> 1445</span>&#160;</div><div class="line"><a name="l01446"></a><span class="lineno"> 1446</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l01447"></a><span class="lineno"> 1447</span>&#160;    <span class="keywordtype">bool</span> RemoveMember(<span class="keyword">const</span> std::basic_string&lt;Ch&gt;&amp; name) { <span class="keywordflow">return</span> RemoveMember(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(<a class="code" href="namespacerapidjson.html#af94951529a5d51e8c4e6e770bb707c1f">StringRef</a>(name))); }</div><div class="line"><a name="l01448"></a><span class="lineno"> 1448</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01449"></a><span class="lineno"> 1449</span>&#160;</div><div class="line"><a name="l01450"></a><span class="lineno"> 1450</span>&#160;    <span class="keyword">template</span> &lt;<span class="keyword">typename</span> SourceAllocator&gt;</div><div class="line"><a name="l01451"></a><span class="lineno"> 1451</span>&#160;    <span class="keywordtype">bool</span> RemoveMember(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue&lt;Encoding, SourceAllocator&gt;</a>&amp; name) {</div><div class="line"><a name="l01452"></a><span class="lineno"> 1452</span>&#160;        <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">MemberIterator</a> m = FindMember(name);</div><div class="line"><a name="l01453"></a><span class="lineno"> 1453</span>&#160;        <span class="keywordflow">if</span> (m != MemberEnd()) {</div><div class="line"><a name="l01454"></a><span class="lineno"> 1454</span>&#160;            RemoveMember(m);</div><div class="line"><a name="l01455"></a><span class="lineno"> 1455</span>&#160;            <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l01456"></a><span class="lineno"> 1456</span>&#160;        }</div><div class="line"><a name="l01457"></a><span class="lineno"> 1457</span>&#160;        <span class="keywordflow">else</span></div><div class="line"><a name="l01458"></a><span class="lineno"> 1458</span>&#160;            <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01459"></a><span class="lineno"> 1459</span>&#160;    }</div><div class="line"><a name="l01460"></a><span class="lineno"> 1460</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01461"></a><span class="lineno"> 1461</span>&#160;<span class="comment">    //! Remove a member in object by iterator.</span></div><div class="line"><a name="l01462"></a><span class="lineno"> 1462</span>&#160;<span class="comment"></span><span class="comment">    /*! \param m member iterator (obtained by FindMember() or MemberBegin()).</span></div><div class="line"><a name="l01463"></a><span class="lineno"> 1463</span>&#160;<span class="comment">        \return the new iterator after removal.</span></div><div class="line"><a name="l01464"></a><span class="lineno"> 1464</span>&#160;<span class="comment">        \note This function may reorder the object members. Use \ref</span></div><div class="line"><a name="l01465"></a><span class="lineno"> 1465</span>&#160;<span class="comment">            EraseMember(ConstMemberIterator) if you need to preserve the</span></div><div class="line"><a name="l01466"></a><span class="lineno"> 1466</span>&#160;<span class="comment">            relative order of the remaining members.</span></div><div class="line"><a name="l01467"></a><span class="lineno"> 1467</span>&#160;<span class="comment">        \note Constant time complexity.</span></div><div class="line"><a name="l01468"></a><span class="lineno"> 1468</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l01469"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#af91573ce61d798f0bc5dc88b00742697"> 1469</a></span>&#160;    <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">MemberIterator</a> <a class="code" href="classrapidjson_1_1_generic_value.html#af91573ce61d798f0bc5dc88b00742697">RemoveMember</a>(<a class="code" href="classrapidjson_1_1_generic_member_iterator.html">MemberIterator</a> m) {</div><div class="line"><a name="l01470"></a><span class="lineno"> 1470</span>&#160;        <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsObject());</div><div class="line"><a name="l01471"></a><span class="lineno"> 1471</span>&#160;        <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(data_.o.size &gt; 0);</div><div class="line"><a name="l01472"></a><span class="lineno"> 1472</span>&#160;        <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(GetMembersPointer() != 0);</div><div class="line"><a name="l01473"></a><span class="lineno"> 1473</span>&#160;        <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(m &gt;= MemberBegin() &amp;&amp; m &lt; MemberEnd());</div><div class="line"><a name="l01474"></a><span class="lineno"> 1474</span>&#160;</div><div class="line"><a name="l01475"></a><span class="lineno"> 1475</span>&#160;        <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">MemberIterator</a> last(GetMembersPointer() + (data_.o.size - 1));</div><div class="line"><a name="l01476"></a><span class="lineno"> 1476</span>&#160;        <span class="keywordflow">if</span> (data_.o.size &gt; 1 &amp;&amp; m != last)</div><div class="line"><a name="l01477"></a><span class="lineno"> 1477</span>&#160;            *m = *last; <span class="comment">// Move the last one to this place</span></div><div class="line"><a name="l01478"></a><span class="lineno"> 1478</span>&#160;        <span class="keywordflow">else</span></div><div class="line"><a name="l01479"></a><span class="lineno"> 1479</span>&#160;            m-&gt;~Member(); <span class="comment">// Only one left, just destroy</span></div><div class="line"><a name="l01480"></a><span class="lineno"> 1480</span>&#160;        --data_.o.size;</div><div class="line"><a name="l01481"></a><span class="lineno"> 1481</span>&#160;        <span class="keywordflow">return</span> m;</div><div class="line"><a name="l01482"></a><span class="lineno"> 1482</span>&#160;    }</div><div class="line"><a name="l01483"></a><span class="lineno"> 1483</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01484"></a><span class="lineno"> 1484</span>&#160;<span class="comment">    //! Remove a member from an object by iterator.</span></div><div class="line"><a name="l01485"></a><span class="lineno"> 1485</span>&#160;<span class="comment"></span><span class="comment">    /*! \param pos iterator to the member to remove</span></div><div class="line"><a name="l01486"></a><span class="lineno"> 1486</span>&#160;<span class="comment">        \pre IsObject() == true &amp;&amp; \ref MemberBegin() &lt;= \c pos &lt; \ref MemberEnd()</span></div><div class="line"><a name="l01487"></a><span class="lineno"> 1487</span>&#160;<span class="comment">        \return Iterator following the removed element.</span></div><div class="line"><a name="l01488"></a><span class="lineno"> 1488</span>&#160;<span class="comment">            If the iterator \c pos refers to the last element, the \ref MemberEnd() iterator is returned.</span></div><div class="line"><a name="l01489"></a><span class="lineno"> 1489</span>&#160;<span class="comment">        \note This function preserves the relative order of the remaining object</span></div><div class="line"><a name="l01490"></a><span class="lineno"> 1490</span>&#160;<span class="comment">            members. If you do not need this, use the more efficient \ref RemoveMember(MemberIterator).</span></div><div class="line"><a name="l01491"></a><span class="lineno"> 1491</span>&#160;<span class="comment">        \note Linear time complexity.</span></div><div class="line"><a name="l01492"></a><span class="lineno"> 1492</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l01493"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a163e60b101e5ae534597c050a6eba511"> 1493</a></span>&#160;    <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">MemberIterator</a> <a class="code" href="classrapidjson_1_1_generic_value.html#a163e60b101e5ae534597c050a6eba511">EraseMember</a>(<a class="code" href="classrapidjson_1_1_generic_member_iterator.html">ConstMemberIterator</a> pos) {</div><div class="line"><a name="l01494"></a><span class="lineno"> 1494</span>&#160;        <span class="keywordflow">return</span> EraseMember(pos, pos +1);</div><div class="line"><a name="l01495"></a><span class="lineno"> 1495</span>&#160;    }</div><div class="line"><a name="l01496"></a><span class="lineno"> 1496</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01497"></a><span class="lineno"> 1497</span>&#160;<span class="comment">    //! Remove members in the range [first, last) from an object.</span></div><div class="line"><a name="l01498"></a><span class="lineno"> 1498</span>&#160;<span class="comment"></span><span class="comment">    /*! \param first iterator to the first member to remove</span></div><div class="line"><a name="l01499"></a><span class="lineno"> 1499</span>&#160;<span class="comment">        \param last  iterator following the last member to remove</span></div><div class="line"><a name="l01500"></a><span class="lineno"> 1500</span>&#160;<span class="comment">        \pre IsObject() == true &amp;&amp; \ref MemberBegin() &lt;= \c first &lt;= \c last &lt;= \ref MemberEnd()</span></div><div class="line"><a name="l01501"></a><span class="lineno"> 1501</span>&#160;<span class="comment">        \return Iterator following the last removed element.</span></div><div class="line"><a name="l01502"></a><span class="lineno"> 1502</span>&#160;<span class="comment">        \note This function preserves the relative order of the remaining object</span></div><div class="line"><a name="l01503"></a><span class="lineno"> 1503</span>&#160;<span class="comment">            members.</span></div><div class="line"><a name="l01504"></a><span class="lineno"> 1504</span>&#160;<span class="comment">        \note Linear time complexity.</span></div><div class="line"><a name="l01505"></a><span class="lineno"> 1505</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l01506"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a121e40b5944be337189eb63b98b7e6ce"> 1506</a></span>&#160;    <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">MemberIterator</a> <a class="code" href="classrapidjson_1_1_generic_value.html#a121e40b5944be337189eb63b98b7e6ce">EraseMember</a>(<a class="code" href="classrapidjson_1_1_generic_member_iterator.html">ConstMemberIterator</a> first, <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">ConstMemberIterator</a> last) {</div><div class="line"><a name="l01507"></a><span class="lineno"> 1507</span>&#160;        <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsObject());</div><div class="line"><a name="l01508"></a><span class="lineno"> 1508</span>&#160;        <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(data_.o.size &gt; 0);</div><div class="line"><a name="l01509"></a><span class="lineno"> 1509</span>&#160;        <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(GetMembersPointer() != 0);</div><div class="line"><a name="l01510"></a><span class="lineno"> 1510</span>&#160;        <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(first &gt;= MemberBegin());</div><div class="line"><a name="l01511"></a><span class="lineno"> 1511</span>&#160;        <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(first &lt;= last);</div><div class="line"><a name="l01512"></a><span class="lineno"> 1512</span>&#160;        <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(last &lt;= MemberEnd());</div><div class="line"><a name="l01513"></a><span class="lineno"> 1513</span>&#160;</div><div class="line"><a name="l01514"></a><span class="lineno"> 1514</span>&#160;        <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">MemberIterator</a> pos = MemberBegin() + (first - MemberBegin());</div><div class="line"><a name="l01515"></a><span class="lineno"> 1515</span>&#160;        <span class="keywordflow">for</span> (<a class="code" href="classrapidjson_1_1_generic_member_iterator.html">MemberIterator</a> itr = pos; itr != last; ++itr)</div><div class="line"><a name="l01516"></a><span class="lineno"> 1516</span>&#160;            itr-&gt;~Member();</div><div class="line"><a name="l01517"></a><span class="lineno"> 1517</span>&#160;        std::memmove(static_cast&lt;void*&gt;(&amp;*pos), &amp;*last, static_cast&lt;size_t&gt;(MemberEnd() - last) * <span class="keyword">sizeof</span>(<a class="code" href="structrapidjson_1_1_generic_member.html">Member</a>));</div><div class="line"><a name="l01518"></a><span class="lineno"> 1518</span>&#160;        data_.o.size -= <span class="keyword">static_cast&lt;</span><a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a><span class="keyword">&gt;</span>(last - first);</div><div class="line"><a name="l01519"></a><span class="lineno"> 1519</span>&#160;        <span class="keywordflow">return</span> pos;</div><div class="line"><a name="l01520"></a><span class="lineno"> 1520</span>&#160;    }</div><div class="line"><a name="l01521"></a><span class="lineno"> 1521</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01522"></a><span class="lineno"> 1522</span>&#160;<span class="comment">    //! Erase a member in object by its name.</span></div><div class="line"><a name="l01523"></a><span class="lineno"> 1523</span>&#160;<span class="comment"></span><span class="comment">    /*! \param name Name of member to be removed.</span></div><div class="line"><a name="l01524"></a><span class="lineno"> 1524</span>&#160;<span class="comment">        \return Whether the member existed.</span></div><div class="line"><a name="l01525"></a><span class="lineno"> 1525</span>&#160;<span class="comment">        \note Linear time complexity.</span></div><div class="line"><a name="l01526"></a><span class="lineno"> 1526</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l01527"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#ac51a3b3046aaa12aa1d88ac876a28cec"> 1527</a></span>&#160;    <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_generic_value.html#ac51a3b3046aaa12aa1d88ac876a28cec">EraseMember</a>(<span class="keyword">const</span> Ch* name) {</div><div class="line"><a name="l01528"></a><span class="lineno"> 1528</span>&#160;        <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a> n(<a class="code" href="namespacerapidjson.html#af94951529a5d51e8c4e6e770bb707c1f">StringRef</a>(name));</div><div class="line"><a name="l01529"></a><span class="lineno"> 1529</span>&#160;        <span class="keywordflow">return</span> EraseMember(n);</div><div class="line"><a name="l01530"></a><span class="lineno"> 1530</span>&#160;    }</div><div class="line"><a name="l01531"></a><span class="lineno"> 1531</span>&#160;</div><div class="line"><a name="l01532"></a><span class="lineno"> 1532</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l01533"></a><span class="lineno"> 1533</span>&#160;    <span class="keywordtype">bool</span> EraseMember(<span class="keyword">const</span> std::basic_string&lt;Ch&gt;&amp; name) { <span class="keywordflow">return</span> EraseMember(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(<a class="code" href="namespacerapidjson.html#af94951529a5d51e8c4e6e770bb707c1f">StringRef</a>(name))); }</div><div class="line"><a name="l01534"></a><span class="lineno"> 1534</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01535"></a><span class="lineno"> 1535</span>&#160;</div><div class="line"><a name="l01536"></a><span class="lineno"> 1536</span>&#160;    <span class="keyword">template</span> &lt;<span class="keyword">typename</span> SourceAllocator&gt;</div><div class="line"><a name="l01537"></a><span class="lineno"> 1537</span>&#160;    <span class="keywordtype">bool</span> EraseMember(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue&lt;Encoding, SourceAllocator&gt;</a>&amp; name) {</div><div class="line"><a name="l01538"></a><span class="lineno"> 1538</span>&#160;        <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">MemberIterator</a> m = FindMember(name);</div><div class="line"><a name="l01539"></a><span class="lineno"> 1539</span>&#160;        <span class="keywordflow">if</span> (m != MemberEnd()) {</div><div class="line"><a name="l01540"></a><span class="lineno"> 1540</span>&#160;            EraseMember(m);</div><div class="line"><a name="l01541"></a><span class="lineno"> 1541</span>&#160;            <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l01542"></a><span class="lineno"> 1542</span>&#160;        }</div><div class="line"><a name="l01543"></a><span class="lineno"> 1543</span>&#160;        <span class="keywordflow">else</span></div><div class="line"><a name="l01544"></a><span class="lineno"> 1544</span>&#160;            <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01545"></a><span class="lineno"> 1545</span>&#160;    }</div><div class="line"><a name="l01546"></a><span class="lineno"> 1546</span>&#160;</div><div class="line"><a name="l01547"></a><span class="lineno"> 1547</span>&#160;    <a class="code" href="classrapidjson_1_1_generic_object.html">Object</a> GetObject() { <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsObject()); <span class="keywordflow">return</span> <a class="code" href="classrapidjson_1_1_generic_object.html">Object</a>(*<span class="keyword">this</span>); }</div><div class="line"><a name="l01548"></a><span class="lineno"> 1548</span>&#160;    <a class="code" href="classrapidjson_1_1_generic_object.html">ConstObject</a> GetObject()<span class="keyword"> const </span>{ <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsObject()); <span class="keywordflow">return</span> <a class="code" href="classrapidjson_1_1_generic_object.html">ConstObject</a>(*<span class="keyword">this</span>); }</div><div class="line"><a name="l01549"></a><span class="lineno"> 1549</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01550"></a><span class="lineno"> 1550</span>&#160;<span class="comment">    //@}</span></div><div class="line"><a name="l01551"></a><span class="lineno"> 1551</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l01552"></a><span class="lineno"> 1552</span>&#160;<span class="comment">    //!@name Array</span></div><div class="line"><a name="l01553"></a><span class="lineno"> 1553</span>&#160;<span class="comment"></span><span class="comment">    //@{</span></div><div class="line"><a name="l01554"></a><span class="lineno"> 1554</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l01555"></a><span class="lineno"> 1555</span>&#160;<span class="comment">    //! Set this value as an empty array.</span></div><div class="line"><a name="l01556"></a><span class="lineno"> 1556</span>&#160;<span class="comment"></span><span class="comment">    /*! \post IsArray == true */</span></div><div class="line"><a name="l01557"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a25069c76d045b058e54835d8c467c789"> 1557</a></span>&#160;    <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#a25069c76d045b058e54835d8c467c789">SetArray</a>() { this-&gt;~<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(); <span class="keyword">new</span> (<span class="keyword">this</span>) <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a058c622e1e7d59419ae58b895cbce468">kArrayType</a>); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l01558"></a><span class="lineno"> 1558</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01559"></a><span class="lineno"> 1559</span>&#160;<span class="comment">    //! Get the number of elements in array.</span></div><div class="line"><a name="l01560"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a799a8a2503989f486f3fc7a660266555"> 1560</a></span>&#160;<span class="comment"></span>    <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> <a class="code" href="classrapidjson_1_1_generic_value.html#a799a8a2503989f486f3fc7a660266555">Size</a>()<span class="keyword"> const </span>{ <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsArray()); <span class="keywordflow">return</span> data_.a.size; }</div><div class="line"><a name="l01561"></a><span class="lineno"> 1561</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01562"></a><span class="lineno"> 1562</span>&#160;<span class="comment">    //! Get the capacity of array.</span></div><div class="line"><a name="l01563"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a812e5c07f74a90566e7636330740eb6a"> 1563</a></span>&#160;<span class="comment"></span>    <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> <a class="code" href="classrapidjson_1_1_generic_value.html#a812e5c07f74a90566e7636330740eb6a">Capacity</a>()<span class="keyword"> const </span>{ <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsArray()); <span class="keywordflow">return</span> data_.a.capacity; }</div><div class="line"><a name="l01564"></a><span class="lineno"> 1564</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01565"></a><span class="lineno"> 1565</span>&#160;<span class="comment">    //! Check whether the array is empty.</span></div><div class="line"><a name="l01566"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#ad08a62c65a793ab1d0abe7eac03776fd"> 1566</a></span>&#160;<span class="comment"></span>    <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_generic_value.html#ad08a62c65a793ab1d0abe7eac03776fd">Empty</a>()<span class="keyword"> const </span>{ <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsArray()); <span class="keywordflow">return</span> data_.a.size == 0; }</div><div class="line"><a name="l01567"></a><span class="lineno"> 1567</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01568"></a><span class="lineno"> 1568</span>&#160;<span class="comment">    //! Remove all elements in the array.</span></div><div class="line"><a name="l01569"></a><span class="lineno"> 1569</span>&#160;<span class="comment"></span><span class="comment">    /*! This function do not deallocate memory in the array, i.e. the capacity is unchanged.</span></div><div class="line"><a name="l01570"></a><span class="lineno"> 1570</span>&#160;<span class="comment">        \note Linear time complexity.</span></div><div class="line"><a name="l01571"></a><span class="lineno"> 1571</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l01572"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#aa56b69bac5423622eff6998ce4802106"> 1572</a></span>&#160;    <span class="keywordtype">void</span> <a class="code" href="classrapidjson_1_1_generic_value.html#aa56b69bac5423622eff6998ce4802106">Clear</a>() {</div><div class="line"><a name="l01573"></a><span class="lineno"> 1573</span>&#160;        <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsArray()); </div><div class="line"><a name="l01574"></a><span class="lineno"> 1574</span>&#160;        <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>* e = GetElementsPointer();</div><div class="line"><a name="l01575"></a><span class="lineno"> 1575</span>&#160;        <span class="keywordflow">for</span> (<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>* v = e; v != e + data_.a.size; ++v)</div><div class="line"><a name="l01576"></a><span class="lineno"> 1576</span>&#160;            v-&gt;~GenericValue();</div><div class="line"><a name="l01577"></a><span class="lineno"> 1577</span>&#160;        data_.a.size = 0;</div><div class="line"><a name="l01578"></a><span class="lineno"> 1578</span>&#160;    }</div><div class="line"><a name="l01579"></a><span class="lineno"> 1579</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01580"></a><span class="lineno"> 1580</span>&#160;<span class="comment">    //! Get an element from array by index.</span></div><div class="line"><a name="l01581"></a><span class="lineno"> 1581</span>&#160;<span class="comment"></span><span class="comment">    /*! \pre IsArray() == true</span></div><div class="line"><a name="l01582"></a><span class="lineno"> 1582</span>&#160;<span class="comment">        \param index Zero-based index of element.</span></div><div class="line"><a name="l01583"></a><span class="lineno"> 1583</span>&#160;<span class="comment">        \see operator[](T*)</span></div><div class="line"><a name="l01584"></a><span class="lineno"> 1584</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l01585"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#adc312de070d03a63e6c692c9c61db156"> 1585</a></span>&#160;    <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#adc312de070d03a63e6c692c9c61db156">operator[]</a>(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> index) {</div><div class="line"><a name="l01586"></a><span class="lineno"> 1586</span>&#160;        <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsArray());</div><div class="line"><a name="l01587"></a><span class="lineno"> 1587</span>&#160;        <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(index &lt; data_.a.size);</div><div class="line"><a name="l01588"></a><span class="lineno"> 1588</span>&#160;        <span class="keywordflow">return</span> GetElementsPointer()[index];</div><div class="line"><a name="l01589"></a><span class="lineno"> 1589</span>&#160;    }</div><div class="line"><a name="l01590"></a><span class="lineno"> 1590</span>&#160;    <span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; operator[](<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> index)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">const_cast&lt;</span><a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp;<span class="keyword">&gt;</span>(*this)[index]; }</div><div class="line"><a name="l01591"></a><span class="lineno"> 1591</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01592"></a><span class="lineno"> 1592</span>&#160;<span class="comment">    //! Element iterator</span></div><div class="line"><a name="l01593"></a><span class="lineno"> 1593</span>&#160;<span class="comment"></span><span class="comment">    /*! \pre IsArray() == true */</span></div><div class="line"><a name="l01594"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a8d1040c479d89edb261db86400ebe603"> 1594</a></span>&#160;    <a class="code" href="classrapidjson_1_1_generic_value.html">ValueIterator</a> <a class="code" href="classrapidjson_1_1_generic_value.html#a8d1040c479d89edb261db86400ebe603">Begin</a>() { <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsArray()); <span class="keywordflow">return</span> GetElementsPointer(); }<span class="comment"></span></div><div class="line"><a name="l01595"></a><span class="lineno"> 1595</span>&#160;<span class="comment">    //! \em Past-the-end element iterator</span></div><div class="line"><a name="l01596"></a><span class="lineno"> 1596</span>&#160;<span class="comment"></span><span class="comment">    /*! \pre IsArray() == true */</span></div><div class="line"><a name="l01597"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#aaf58b9337ccc0cdf16aa9634c4645109"> 1597</a></span>&#160;    <a class="code" href="classrapidjson_1_1_generic_value.html">ValueIterator</a> <a class="code" href="classrapidjson_1_1_generic_value.html#aaf58b9337ccc0cdf16aa9634c4645109">End</a>() { <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsArray()); <span class="keywordflow">return</span> GetElementsPointer() + data_.a.size; }<span class="comment"></span></div><div class="line"><a name="l01598"></a><span class="lineno"> 1598</span>&#160;<span class="comment">    //! Constant element iterator</span></div><div class="line"><a name="l01599"></a><span class="lineno"> 1599</span>&#160;<span class="comment"></span><span class="comment">    /*! \pre IsArray() == true */</span></div><div class="line"><a name="l01600"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a07d947971c59c9ce884b3c5205c9238f"> 1600</a></span>&#160;    <a class="code" href="classrapidjson_1_1_generic_value.html">ConstValueIterator</a> <a class="code" href="classrapidjson_1_1_generic_value.html#a07d947971c59c9ce884b3c5205c9238f">Begin</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">const_cast&lt;</span><a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp;<span class="keyword">&gt;</span>(*this).<a class="code" href="classrapidjson_1_1_generic_value.html#a8d1040c479d89edb261db86400ebe603">Begin</a>(); }<span class="comment"></span></div><div class="line"><a name="l01601"></a><span class="lineno"> 1601</span>&#160;<span class="comment">    //! Constant \em past-the-end element iterator</span></div><div class="line"><a name="l01602"></a><span class="lineno"> 1602</span>&#160;<span class="comment"></span><span class="comment">    /*! \pre IsArray() == true */</span></div><div class="line"><a name="l01603"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#abdd6a3b703a03aada4c186a2365698e7"> 1603</a></span>&#160;    <a class="code" href="classrapidjson_1_1_generic_value.html">ConstValueIterator</a> <a class="code" href="classrapidjson_1_1_generic_value.html#abdd6a3b703a03aada4c186a2365698e7">End</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">const_cast&lt;</span><a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp;<span class="keyword">&gt;</span>(*this).<a class="code" href="classrapidjson_1_1_generic_value.html#aaf58b9337ccc0cdf16aa9634c4645109">End</a>(); }</div><div class="line"><a name="l01604"></a><span class="lineno"> 1604</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01605"></a><span class="lineno"> 1605</span>&#160;<span class="comment">    //! Request the array to have enough capacity to store elements.</span></div><div class="line"><a name="l01606"></a><span class="lineno"> 1606</span>&#160;<span class="comment"></span><span class="comment">    /*! \param newCapacity  The capacity that the array at least need to have.</span></div><div class="line"><a name="l01607"></a><span class="lineno"> 1607</span>&#160;<span class="comment">        \param allocator    Allocator for reallocating memory. It must be the same one as used before. Commonly use GenericDocument::GetAllocator().</span></div><div class="line"><a name="l01608"></a><span class="lineno"> 1608</span>&#160;<span class="comment">        \return The value itself for fluent API.</span></div><div class="line"><a name="l01609"></a><span class="lineno"> 1609</span>&#160;<span class="comment">        \note Linear time complexity.</span></div><div class="line"><a name="l01610"></a><span class="lineno"> 1610</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l01611"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a17971ba2bcd4eb1716098fdfe9182386"> 1611</a></span>&#160;    <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#a17971ba2bcd4eb1716098fdfe9182386">Reserve</a>(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> newCapacity, Allocator &amp;allocator) {</div><div class="line"><a name="l01612"></a><span class="lineno"> 1612</span>&#160;        <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsArray());</div><div class="line"><a name="l01613"></a><span class="lineno"> 1613</span>&#160;        <span class="keywordflow">if</span> (newCapacity &gt; data_.a.capacity) {</div><div class="line"><a name="l01614"></a><span class="lineno"> 1614</span>&#160;            SetElementsPointer(reinterpret_cast&lt;GenericValue*&gt;(allocator.Realloc(GetElementsPointer(), data_.a.capacity * <span class="keyword">sizeof</span>(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>), newCapacity * <span class="keyword">sizeof</span>(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>))));</div><div class="line"><a name="l01615"></a><span class="lineno"> 1615</span>&#160;            data_.a.capacity = newCapacity;</div><div class="line"><a name="l01616"></a><span class="lineno"> 1616</span>&#160;        }</div><div class="line"><a name="l01617"></a><span class="lineno"> 1617</span>&#160;        <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l01618"></a><span class="lineno"> 1618</span>&#160;    }</div><div class="line"><a name="l01619"></a><span class="lineno"> 1619</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01620"></a><span class="lineno"> 1620</span>&#160;<span class="comment">    //! Append a GenericValue at the end of the array.</span></div><div class="line"><a name="l01621"></a><span class="lineno"> 1621</span>&#160;<span class="comment"></span><span class="comment">    /*! \param value        Value to be appended.</span></div><div class="line"><a name="l01622"></a><span class="lineno"> 1622</span>&#160;<span class="comment">        \param allocator    Allocator for reallocating memory. It must be the same one as used before. Commonly use GenericDocument::GetAllocator().</span></div><div class="line"><a name="l01623"></a><span class="lineno"> 1623</span>&#160;<span class="comment">        \pre IsArray() == true</span></div><div class="line"><a name="l01624"></a><span class="lineno"> 1624</span>&#160;<span class="comment">        \post value.IsNull() == true</span></div><div class="line"><a name="l01625"></a><span class="lineno"> 1625</span>&#160;<span class="comment">        \return The value itself for fluent API.</span></div><div class="line"><a name="l01626"></a><span class="lineno"> 1626</span>&#160;<span class="comment">        \note The ownership of \c value will be transferred to this array on success.</span></div><div class="line"><a name="l01627"></a><span class="lineno"> 1627</span>&#160;<span class="comment">        \note If the number of elements to be appended is known, calls Reserve() once first may be more efficient.</span></div><div class="line"><a name="l01628"></a><span class="lineno"> 1628</span>&#160;<span class="comment">        \note Amortized constant time complexity.</span></div><div class="line"><a name="l01629"></a><span class="lineno"> 1629</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l01630"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a0ec9f34bef5890241d4bc882b73b1db4"> 1630</a></span>&#160;    <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#a0ec9f34bef5890241d4bc882b73b1db4">PushBack</a>(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; value, Allocator&amp; allocator) {</div><div class="line"><a name="l01631"></a><span class="lineno"> 1631</span>&#160;        <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsArray());</div><div class="line"><a name="l01632"></a><span class="lineno"> 1632</span>&#160;        <span class="keywordflow">if</span> (data_.a.size &gt;= data_.a.capacity)</div><div class="line"><a name="l01633"></a><span class="lineno"> 1633</span>&#160;            Reserve(data_.a.capacity == 0 ? kDefaultArrayCapacity : (data_.a.capacity + (data_.a.capacity + 1) / 2), allocator);</div><div class="line"><a name="l01634"></a><span class="lineno"> 1634</span>&#160;        GetElementsPointer()[data_.a.size++].RawAssign(value);</div><div class="line"><a name="l01635"></a><span class="lineno"> 1635</span>&#160;        <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l01636"></a><span class="lineno"> 1636</span>&#160;    }</div><div class="line"><a name="l01637"></a><span class="lineno"> 1637</span>&#160;</div><div class="line"><a name="l01638"></a><span class="lineno"> 1638</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l01639"></a><span class="lineno"> 1639</span>&#160;    <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; PushBack(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp;&amp; value, Allocator&amp; allocator) {</div><div class="line"><a name="l01640"></a><span class="lineno"> 1640</span>&#160;        <span class="keywordflow">return</span> PushBack(value, allocator);</div><div class="line"><a name="l01641"></a><span class="lineno"> 1641</span>&#160;    }</div><div class="line"><a name="l01642"></a><span class="lineno"> 1642</span>&#160;<span class="preprocessor">#endif // RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l01643"></a><span class="lineno"> 1643</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01644"></a><span class="lineno"> 1644</span>&#160;<span class="comment">    //! Append a constant string reference at the end of the array.</span></div><div class="line"><a name="l01645"></a><span class="lineno"> 1645</span>&#160;<span class="comment"></span><span class="comment">    /*! \param value        Constant string reference to be appended.</span></div><div class="line"><a name="l01646"></a><span class="lineno"> 1646</span>&#160;<span class="comment">        \param allocator    Allocator for reallocating memory. It must be the same one used previously. Commonly use GenericDocument::GetAllocator().</span></div><div class="line"><a name="l01647"></a><span class="lineno"> 1647</span>&#160;<span class="comment">        \pre IsArray() == true</span></div><div class="line"><a name="l01648"></a><span class="lineno"> 1648</span>&#160;<span class="comment">        \return The value itself for fluent API.</span></div><div class="line"><a name="l01649"></a><span class="lineno"> 1649</span>&#160;<span class="comment">        \note If the number of elements to be appended is known, calls Reserve() once first may be more efficient.</span></div><div class="line"><a name="l01650"></a><span class="lineno"> 1650</span>&#160;<span class="comment">        \note Amortized constant time complexity.</span></div><div class="line"><a name="l01651"></a><span class="lineno"> 1651</span>&#160;<span class="comment">        \see GenericStringRef</span></div><div class="line"><a name="l01652"></a><span class="lineno"> 1652</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l01653"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a41946915cb219a684f6ffc9341efee22"> 1653</a></span>&#160;    <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#a41946915cb219a684f6ffc9341efee22">PushBack</a>(<a class="code" href="structrapidjson_1_1_generic_string_ref.html">StringRefType</a> value, Allocator&amp; allocator) {</div><div class="line"><a name="l01654"></a><span class="lineno"> 1654</span>&#160;        <span class="keywordflow">return</span> (*this).template PushBack&lt;StringRefType&gt;(value, allocator);</div><div class="line"><a name="l01655"></a><span class="lineno"> 1655</span>&#160;    }</div><div class="line"><a name="l01656"></a><span class="lineno"> 1656</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01657"></a><span class="lineno"> 1657</span>&#160;<span class="comment">    //! Append a primitive value at the end of the array.</span></div><div class="line"><a name="l01658"></a><span class="lineno"> 1658</span>&#160;<span class="comment"></span><span class="comment">    /*! \tparam T Either \ref Type, \c int, \c unsigned, \c int64_t, \c uint64_t</span></div><div class="line"><a name="l01659"></a><span class="lineno"> 1659</span>&#160;<span class="comment">        \param value Value of primitive type T to be appended.</span></div><div class="line"><a name="l01660"></a><span class="lineno"> 1660</span>&#160;<span class="comment">        \param allocator    Allocator for reallocating memory. It must be the same one as used before. Commonly use GenericDocument::GetAllocator().</span></div><div class="line"><a name="l01661"></a><span class="lineno"> 1661</span>&#160;<span class="comment">        \pre IsArray() == true</span></div><div class="line"><a name="l01662"></a><span class="lineno"> 1662</span>&#160;<span class="comment">        \return The value itself for fluent API.</span></div><div class="line"><a name="l01663"></a><span class="lineno"> 1663</span>&#160;<span class="comment">        \note If the number of elements to be appended is known, calls Reserve() once first may be more efficient.</span></div><div class="line"><a name="l01664"></a><span class="lineno"> 1664</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01665"></a><span class="lineno"> 1665</span>&#160;<span class="comment">        \note The source type \c T explicitly disallows all pointer types,</span></div><div class="line"><a name="l01666"></a><span class="lineno"> 1666</span>&#160;<span class="comment">            especially (\c const) \ref Ch*.  This helps avoiding implicitly</span></div><div class="line"><a name="l01667"></a><span class="lineno"> 1667</span>&#160;<span class="comment">            referencing character strings with insufficient lifetime, use</span></div><div class="line"><a name="l01668"></a><span class="lineno"> 1668</span>&#160;<span class="comment">            \ref PushBack(GenericValue&amp;, Allocator&amp;) or \ref</span></div><div class="line"><a name="l01669"></a><span class="lineno"> 1669</span>&#160;<span class="comment">            PushBack(StringRefType, Allocator&amp;).</span></div><div class="line"><a name="l01670"></a><span class="lineno"> 1670</span>&#160;<span class="comment">            All other pointer types would implicitly convert to \c bool,</span></div><div class="line"><a name="l01671"></a><span class="lineno"> 1671</span>&#160;<span class="comment">            use an explicit cast instead, if needed.</span></div><div class="line"><a name="l01672"></a><span class="lineno"> 1672</span>&#160;<span class="comment">        \note Amortized constant time complexity.</span></div><div class="line"><a name="l01673"></a><span class="lineno"> 1673</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l01674"></a><span class="lineno"> 1674</span>&#160;    <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l01675"></a><span class="lineno"> 1675</span>&#160;    RAPIDJSON_DISABLEIF_RETURN((internal::OrExpr&lt;internal::IsPointer&lt;T&gt;, internal::IsGenericValue&lt;T&gt; &gt;), (<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp;))</div><div class="line"><a name="l01676"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#aa59273e0adfe2a9d0e6ac29d2537d9ed"> 1676</a></span>&#160;    PushBack(T value, Allocator&amp; allocator) {</div><div class="line"><a name="l01677"></a><span class="lineno"> 1677</span>&#160;        <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a> v(value);</div><div class="line"><a name="l01678"></a><span class="lineno"> 1678</span>&#160;        <span class="keywordflow">return</span> PushBack(v, allocator);</div><div class="line"><a name="l01679"></a><span class="lineno"> 1679</span>&#160;    }</div><div class="line"><a name="l01680"></a><span class="lineno"> 1680</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01681"></a><span class="lineno"> 1681</span>&#160;<span class="comment">    //! Remove the last element in the array.</span></div><div class="line"><a name="l01682"></a><span class="lineno"> 1682</span>&#160;<span class="comment"></span><span class="comment">    /*!</span></div><div class="line"><a name="l01683"></a><span class="lineno"> 1683</span>&#160;<span class="comment">        \note Constant time complexity.</span></div><div class="line"><a name="l01684"></a><span class="lineno"> 1684</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l01685"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#ae475f31fb851138ced40e2ff6cb43ca6"> 1685</a></span>&#160;    <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#ae475f31fb851138ced40e2ff6cb43ca6">PopBack</a>() {</div><div class="line"><a name="l01686"></a><span class="lineno"> 1686</span>&#160;        <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsArray());</div><div class="line"><a name="l01687"></a><span class="lineno"> 1687</span>&#160;        <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(!Empty());</div><div class="line"><a name="l01688"></a><span class="lineno"> 1688</span>&#160;        GetElementsPointer()[--data_.a.size].~GenericValue();</div><div class="line"><a name="l01689"></a><span class="lineno"> 1689</span>&#160;        <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l01690"></a><span class="lineno"> 1690</span>&#160;    }</div><div class="line"><a name="l01691"></a><span class="lineno"> 1691</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01692"></a><span class="lineno"> 1692</span>&#160;<span class="comment">    //! Remove an element of array by iterator.</span></div><div class="line"><a name="l01693"></a><span class="lineno"> 1693</span>&#160;<span class="comment"></span><span class="comment">    /*!</span></div><div class="line"><a name="l01694"></a><span class="lineno"> 1694</span>&#160;<span class="comment">        \param pos iterator to the element to remove</span></div><div class="line"><a name="l01695"></a><span class="lineno"> 1695</span>&#160;<span class="comment">        \pre IsArray() == true &amp;&amp; \ref Begin() &lt;= \c pos &lt; \ref End()</span></div><div class="line"><a name="l01696"></a><span class="lineno"> 1696</span>&#160;<span class="comment">        \return Iterator following the removed element. If the iterator pos refers to the last element, the End() iterator is returned.</span></div><div class="line"><a name="l01697"></a><span class="lineno"> 1697</span>&#160;<span class="comment">        \note Linear time complexity.</span></div><div class="line"><a name="l01698"></a><span class="lineno"> 1698</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l01699"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a68ba73eeda7b9429ca05267065d3cc99"> 1699</a></span>&#160;    <a class="code" href="classrapidjson_1_1_generic_value.html">ValueIterator</a> <a class="code" href="classrapidjson_1_1_generic_value.html#a68ba73eeda7b9429ca05267065d3cc99">Erase</a>(<a class="code" href="classrapidjson_1_1_generic_value.html">ConstValueIterator</a> pos) {</div><div class="line"><a name="l01700"></a><span class="lineno"> 1700</span>&#160;        <span class="keywordflow">return</span> Erase(pos, pos + 1);</div><div class="line"><a name="l01701"></a><span class="lineno"> 1701</span>&#160;    }</div><div class="line"><a name="l01702"></a><span class="lineno"> 1702</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01703"></a><span class="lineno"> 1703</span>&#160;<span class="comment">    //! Remove elements in the range [first, last) of the array.</span></div><div class="line"><a name="l01704"></a><span class="lineno"> 1704</span>&#160;<span class="comment"></span><span class="comment">    /*!</span></div><div class="line"><a name="l01705"></a><span class="lineno"> 1705</span>&#160;<span class="comment">        \param first iterator to the first element to remove</span></div><div class="line"><a name="l01706"></a><span class="lineno"> 1706</span>&#160;<span class="comment">        \param last  iterator following the last element to remove</span></div><div class="line"><a name="l01707"></a><span class="lineno"> 1707</span>&#160;<span class="comment">        \pre IsArray() == true &amp;&amp; \ref Begin() &lt;= \c first &lt;= \c last &lt;= \ref End()</span></div><div class="line"><a name="l01708"></a><span class="lineno"> 1708</span>&#160;<span class="comment">        \return Iterator following the last removed element.</span></div><div class="line"><a name="l01709"></a><span class="lineno"> 1709</span>&#160;<span class="comment">        \note Linear time complexity.</span></div><div class="line"><a name="l01710"></a><span class="lineno"> 1710</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l01711"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a916f443e02f9379d8fbde49a4d440f61"> 1711</a></span>&#160;    <a class="code" href="classrapidjson_1_1_generic_value.html">ValueIterator</a> <a class="code" href="classrapidjson_1_1_generic_value.html#a916f443e02f9379d8fbde49a4d440f61">Erase</a>(<a class="code" href="classrapidjson_1_1_generic_value.html">ConstValueIterator</a> first, <a class="code" href="classrapidjson_1_1_generic_value.html">ConstValueIterator</a> last) {</div><div class="line"><a name="l01712"></a><span class="lineno"> 1712</span>&#160;        <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsArray());</div><div class="line"><a name="l01713"></a><span class="lineno"> 1713</span>&#160;        <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(data_.a.size &gt; 0);</div><div class="line"><a name="l01714"></a><span class="lineno"> 1714</span>&#160;        <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(GetElementsPointer() != 0);</div><div class="line"><a name="l01715"></a><span class="lineno"> 1715</span>&#160;        <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(first &gt;= Begin());</div><div class="line"><a name="l01716"></a><span class="lineno"> 1716</span>&#160;        <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(first &lt;= last);</div><div class="line"><a name="l01717"></a><span class="lineno"> 1717</span>&#160;        <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(last &lt;= End());</div><div class="line"><a name="l01718"></a><span class="lineno"> 1718</span>&#160;        <a class="code" href="classrapidjson_1_1_generic_value.html">ValueIterator</a> pos = Begin() + (first - Begin());</div><div class="line"><a name="l01719"></a><span class="lineno"> 1719</span>&#160;        <span class="keywordflow">for</span> (<a class="code" href="classrapidjson_1_1_generic_value.html">ValueIterator</a> itr = pos; itr != last; ++itr)</div><div class="line"><a name="l01720"></a><span class="lineno"> 1720</span>&#160;            itr-&gt;<a class="code" href="classrapidjson_1_1_generic_value.html#a433a64b466c80cadf7d1acaa6f065437">~GenericValue</a>();</div><div class="line"><a name="l01721"></a><span class="lineno"> 1721</span>&#160;        std::memmove(static_cast&lt;void*&gt;(pos), last, static_cast&lt;size_t&gt;(End() - last) * <span class="keyword">sizeof</span>(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>));</div><div class="line"><a name="l01722"></a><span class="lineno"> 1722</span>&#160;        data_.a.size -= <span class="keyword">static_cast&lt;</span><a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a><span class="keyword">&gt;</span>(last - first);</div><div class="line"><a name="l01723"></a><span class="lineno"> 1723</span>&#160;        <span class="keywordflow">return</span> pos;</div><div class="line"><a name="l01724"></a><span class="lineno"> 1724</span>&#160;    }</div><div class="line"><a name="l01725"></a><span class="lineno"> 1725</span>&#160;</div><div class="line"><a name="l01726"></a><span class="lineno"> 1726</span>&#160;    <a class="code" href="classrapidjson_1_1_generic_array.html">Array</a> GetArray() { <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsArray()); <span class="keywordflow">return</span> <a class="code" href="classrapidjson_1_1_generic_array.html">Array</a>(*<span class="keyword">this</span>); }</div><div class="line"><a name="l01727"></a><span class="lineno"> 1727</span>&#160;    <a class="code" href="classrapidjson_1_1_generic_array.html">ConstArray</a> GetArray()<span class="keyword"> const </span>{ <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsArray()); <span class="keywordflow">return</span> <a class="code" href="classrapidjson_1_1_generic_array.html">ConstArray</a>(*<span class="keyword">this</span>); }</div><div class="line"><a name="l01728"></a><span class="lineno"> 1728</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01729"></a><span class="lineno"> 1729</span>&#160;<span class="comment">    //@}</span></div><div class="line"><a name="l01730"></a><span class="lineno"> 1730</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l01731"></a><span class="lineno"> 1731</span>&#160;<span class="comment">    //!@name Number</span></div><div class="line"><a name="l01732"></a><span class="lineno"> 1732</span>&#160;<span class="comment"></span><span class="comment">    //@{</span></div><div class="line"><a name="l01733"></a><span class="lineno"> 1733</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01734"></a><span class="lineno"> 1734</span>&#160;    <span class="keywordtype">int</span> GetInt()<span class="keyword"> const          </span>{ <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(data_.f.flags &amp; kIntFlag);   <span class="keywordflow">return</span> data_.n.i.i;   }</div><div class="line"><a name="l01735"></a><span class="lineno"> 1735</span>&#160;    <span class="keywordtype">unsigned</span> GetUint()<span class="keyword"> const    </span>{ <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(data_.f.flags &amp; kUintFlag);  <span class="keywordflow">return</span> data_.n.u.u;   }</div><div class="line"><a name="l01736"></a><span class="lineno"> 1736</span>&#160;    int64_t GetInt64()<span class="keyword"> const    </span>{ <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(data_.f.flags &amp; kInt64Flag); <span class="keywordflow">return</span> data_.n.i64; }</div><div class="line"><a name="l01737"></a><span class="lineno"> 1737</span>&#160;    uint64_t GetUint64()<span class="keyword"> const  </span>{ <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(data_.f.flags &amp; kUint64Flag); <span class="keywordflow">return</span> data_.n.u64; }</div><div class="line"><a name="l01738"></a><span class="lineno"> 1738</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01739"></a><span class="lineno"> 1739</span>&#160;<span class="comment">    //! Get the value as double type.</span></div><div class="line"><a name="l01740"></a><span class="lineno"> 1740</span>&#160;<span class="comment"></span><span class="comment">    /*! \note If the value is 64-bit integer type, it may lose precision. Use \c IsLosslessDouble() to check whether the converison is lossless.</span></div><div class="line"><a name="l01741"></a><span class="lineno"> 1741</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l01742"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#aa27d086d265f0ce447b15b15f0a2ed6e"> 1742</a></span>&#160;    <span class="keywordtype">double</span> <a class="code" href="classrapidjson_1_1_generic_value.html#aa27d086d265f0ce447b15b15f0a2ed6e">GetDouble</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l01743"></a><span class="lineno"> 1743</span>&#160;        <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsNumber());</div><div class="line"><a name="l01744"></a><span class="lineno"> 1744</span>&#160;        <span class="keywordflow">if</span> ((data_.f.flags &amp; kDoubleFlag) != 0)                <span class="keywordflow">return</span> data_.n.d;   <span class="comment">// exact type, no conversion.</span></div><div class="line"><a name="l01745"></a><span class="lineno"> 1745</span>&#160;        <span class="keywordflow">if</span> ((data_.f.flags &amp; kIntFlag) != 0)                   <span class="keywordflow">return</span> data_.n.i.i; <span class="comment">// int -&gt; double</span></div><div class="line"><a name="l01746"></a><span class="lineno"> 1746</span>&#160;        <span class="keywordflow">if</span> ((data_.f.flags &amp; kUintFlag) != 0)                  <span class="keywordflow">return</span> data_.n.u.u; <span class="comment">// unsigned -&gt; double</span></div><div class="line"><a name="l01747"></a><span class="lineno"> 1747</span>&#160;        <span class="keywordflow">if</span> ((data_.f.flags &amp; kInt64Flag) != 0)                 <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span><span class="keywordtype">double</span><span class="keyword">&gt;</span>(data_.n.i64); <span class="comment">// int64_t -&gt; double (may lose precision)</span></div><div class="line"><a name="l01748"></a><span class="lineno"> 1748</span>&#160;        <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>((data_.f.flags &amp; kUint64Flag) != 0);  <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span><span class="keywordtype">double</span><span class="keyword">&gt;</span>(data_.n.u64); <span class="comment">// uint64_t -&gt; double (may lose precision)</span></div><div class="line"><a name="l01749"></a><span class="lineno"> 1749</span>&#160;    }</div><div class="line"><a name="l01750"></a><span class="lineno"> 1750</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01751"></a><span class="lineno"> 1751</span>&#160;<span class="comment">    //! Get the value as float type.</span></div><div class="line"><a name="l01752"></a><span class="lineno"> 1752</span>&#160;<span class="comment"></span><span class="comment">    /*! \note If the value is 64-bit integer type, it may lose precision. Use \c IsLosslessFloat() to check whether the converison is lossless.</span></div><div class="line"><a name="l01753"></a><span class="lineno"> 1753</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l01754"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a573712808dd5d8814c103cf55fd761b4"> 1754</a></span>&#160;    <span class="keywordtype">float</span> <a class="code" href="classrapidjson_1_1_generic_value.html#a573712808dd5d8814c103cf55fd761b4">GetFloat</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l01755"></a><span class="lineno"> 1755</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span>(GetDouble());</div><div class="line"><a name="l01756"></a><span class="lineno"> 1756</span>&#160;    }</div><div class="line"><a name="l01757"></a><span class="lineno"> 1757</span>&#160;</div><div class="line"><a name="l01758"></a><span class="lineno"> 1758</span>&#160;    <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; SetInt(<span class="keywordtype">int</span> i)             { this-&gt;~<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(); <span class="keyword">new</span> (<span class="keyword">this</span>) <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(i);    <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l01759"></a><span class="lineno"> 1759</span>&#160;    <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; SetUint(<span class="keywordtype">unsigned</span> u)       { this-&gt;~<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(); <span class="keyword">new</span> (<span class="keyword">this</span>) <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(u);    <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l01760"></a><span class="lineno"> 1760</span>&#160;    <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; SetInt64(int64_t i64)     { this-&gt;~<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(); <span class="keyword">new</span> (<span class="keyword">this</span>) <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(i64);  <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l01761"></a><span class="lineno"> 1761</span>&#160;    <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; SetUint64(uint64_t u64)   { this-&gt;~<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(); <span class="keyword">new</span> (<span class="keyword">this</span>) <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(u64);  <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l01762"></a><span class="lineno"> 1762</span>&#160;    <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; SetDouble(<span class="keywordtype">double</span> d)       { this-&gt;~<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(); <span class="keyword">new</span> (<span class="keyword">this</span>) <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(d);    <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l01763"></a><span class="lineno"> 1763</span>&#160;    <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; SetFloat(<span class="keywordtype">float</span> f)         { this-&gt;~<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(); <span class="keyword">new</span> (<span class="keyword">this</span>) <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(static_cast&lt;double&gt;(f)); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l01764"></a><span class="lineno"> 1764</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01765"></a><span class="lineno"> 1765</span>&#160;<span class="comment">    //@}</span></div><div class="line"><a name="l01766"></a><span class="lineno"> 1766</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l01767"></a><span class="lineno"> 1767</span>&#160;<span class="comment">    //!@name String</span></div><div class="line"><a name="l01768"></a><span class="lineno"> 1768</span>&#160;<span class="comment"></span><span class="comment">    //@{</span></div><div class="line"><a name="l01769"></a><span class="lineno"> 1769</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01770"></a><span class="lineno"> 1770</span>&#160;    <span class="keyword">const</span> Ch* GetString()<span class="keyword"> const </span>{ <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsString()); <span class="keywordflow">return</span> (data_.f.flags &amp; kInlineStrFlag) ? data_.ss.str : GetStringPointer(); }</div><div class="line"><a name="l01771"></a><span class="lineno"> 1771</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01772"></a><span class="lineno"> 1772</span>&#160;<span class="comment">    //! Get the length of string.</span></div><div class="line"><a name="l01773"></a><span class="lineno"> 1773</span>&#160;<span class="comment"></span><span class="comment">    /*! Since rapidjson permits &quot;\\u0000&quot; in the json string, strlen(v.GetString()) may not equal to v.GetStringLength().</span></div><div class="line"><a name="l01774"></a><span class="lineno"> 1774</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l01775"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a18599e0d1a7e70a11b35f5e219390fea"> 1775</a></span>&#160;    <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> <a class="code" href="classrapidjson_1_1_generic_value.html#a18599e0d1a7e70a11b35f5e219390fea">GetStringLength</a>()<span class="keyword"> const </span>{ <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsString()); <span class="keywordflow">return</span> ((data_.f.flags &amp; kInlineStrFlag) ? (data_.ss.GetLength()) : data_.s.length); }</div><div class="line"><a name="l01776"></a><span class="lineno"> 1776</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01777"></a><span class="lineno"> 1777</span>&#160;<span class="comment">    //! Set this value as a string without copying source string.</span></div><div class="line"><a name="l01778"></a><span class="lineno"> 1778</span>&#160;<span class="comment"></span><span class="comment">    /*! This version has better performance with supplied length, and also support string containing null character.</span></div><div class="line"><a name="l01779"></a><span class="lineno"> 1779</span>&#160;<span class="comment">        \param s source string pointer. </span></div><div class="line"><a name="l01780"></a><span class="lineno"> 1780</span>&#160;<span class="comment">        \param length The length of source string, excluding the trailing null terminator.</span></div><div class="line"><a name="l01781"></a><span class="lineno"> 1781</span>&#160;<span class="comment">        \return The value itself for fluent API.</span></div><div class="line"><a name="l01782"></a><span class="lineno"> 1782</span>&#160;<span class="comment">        \post IsString() == true &amp;&amp; GetString() == s &amp;&amp; GetStringLength() == length</span></div><div class="line"><a name="l01783"></a><span class="lineno"> 1783</span>&#160;<span class="comment">        \see SetString(StringRefType)</span></div><div class="line"><a name="l01784"></a><span class="lineno"> 1784</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l01785"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#afb91480cc6242ca96ffc603e649c319f"> 1785</a></span>&#160;    <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#afb91480cc6242ca96ffc603e649c319f">SetString</a>(<span class="keyword">const</span> Ch* s, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> length) { <span class="keywordflow">return</span> <a class="code" href="classrapidjson_1_1_generic_value.html#afb91480cc6242ca96ffc603e649c319f">SetString</a>(<a class="code" href="namespacerapidjson.html#af94951529a5d51e8c4e6e770bb707c1f">StringRef</a>(s, length)); }</div><div class="line"><a name="l01786"></a><span class="lineno"> 1786</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01787"></a><span class="lineno"> 1787</span>&#160;<span class="comment">    //! Set this value as a string without copying source string.</span></div><div class="line"><a name="l01788"></a><span class="lineno"> 1788</span>&#160;<span class="comment"></span><span class="comment">    /*! \param s source string reference</span></div><div class="line"><a name="l01789"></a><span class="lineno"> 1789</span>&#160;<span class="comment">        \return The value itself for fluent API.</span></div><div class="line"><a name="l01790"></a><span class="lineno"> 1790</span>&#160;<span class="comment">        \post IsString() == true &amp;&amp; GetString() == s &amp;&amp; GetStringLength() == s.length</span></div><div class="line"><a name="l01791"></a><span class="lineno"> 1791</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l01792"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#aabb538578a3c1e60c86cda32d062bc1c"> 1792</a></span>&#160;    <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#aabb538578a3c1e60c86cda32d062bc1c">SetString</a>(<a class="code" href="structrapidjson_1_1_generic_string_ref.html">StringRefType</a> s) { this-&gt;~<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(); SetStringRaw(s); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l01793"></a><span class="lineno"> 1793</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01794"></a><span class="lineno"> 1794</span>&#160;<span class="comment">    //! Set this value as a string by copying from source string.</span></div><div class="line"><a name="l01795"></a><span class="lineno"> 1795</span>&#160;<span class="comment"></span><span class="comment">    /*! This version has better performance with supplied length, and also support string containing null character.</span></div><div class="line"><a name="l01796"></a><span class="lineno"> 1796</span>&#160;<span class="comment">        \param s source string. </span></div><div class="line"><a name="l01797"></a><span class="lineno"> 1797</span>&#160;<span class="comment">        \param length The length of source string, excluding the trailing null terminator.</span></div><div class="line"><a name="l01798"></a><span class="lineno"> 1798</span>&#160;<span class="comment">        \param allocator Allocator for allocating copied buffer. Commonly use GenericDocument::GetAllocator().</span></div><div class="line"><a name="l01799"></a><span class="lineno"> 1799</span>&#160;<span class="comment">        \return The value itself for fluent API.</span></div><div class="line"><a name="l01800"></a><span class="lineno"> 1800</span>&#160;<span class="comment">        \post IsString() == true &amp;&amp; GetString() != s &amp;&amp; strcmp(GetString(),s) == 0 &amp;&amp; GetStringLength() == length</span></div><div class="line"><a name="l01801"></a><span class="lineno"> 1801</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l01802"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#ae6351043ec30d8a151b0a072cfbc46d5"> 1802</a></span>&#160;    <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#ae6351043ec30d8a151b0a072cfbc46d5">SetString</a>(<span class="keyword">const</span> Ch* s, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> length, Allocator&amp; allocator) { <span class="keywordflow">return</span> <a class="code" href="classrapidjson_1_1_generic_value.html#ae6351043ec30d8a151b0a072cfbc46d5">SetString</a>(<a class="code" href="namespacerapidjson.html#af94951529a5d51e8c4e6e770bb707c1f">StringRef</a>(s, length), allocator); }</div><div class="line"><a name="l01803"></a><span class="lineno"> 1803</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01804"></a><span class="lineno"> 1804</span>&#160;<span class="comment">    //! Set this value as a string by copying from source string.</span></div><div class="line"><a name="l01805"></a><span class="lineno"> 1805</span>&#160;<span class="comment"></span><span class="comment">    /*! \param s source string. </span></div><div class="line"><a name="l01806"></a><span class="lineno"> 1806</span>&#160;<span class="comment">        \param allocator Allocator for allocating copied buffer. Commonly use GenericDocument::GetAllocator().</span></div><div class="line"><a name="l01807"></a><span class="lineno"> 1807</span>&#160;<span class="comment">        \return The value itself for fluent API.</span></div><div class="line"><a name="l01808"></a><span class="lineno"> 1808</span>&#160;<span class="comment">        \post IsString() == true &amp;&amp; GetString() != s &amp;&amp; strcmp(GetString(),s) == 0 &amp;&amp; GetStringLength() == length</span></div><div class="line"><a name="l01809"></a><span class="lineno"> 1809</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l01810"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#ab4babf200cac2dacb412a3ea279ddf5b"> 1810</a></span>&#160;    <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#ab4babf200cac2dacb412a3ea279ddf5b">SetString</a>(<span class="keyword">const</span> Ch* s, Allocator&amp; allocator) { <span class="keywordflow">return</span> <a class="code" href="classrapidjson_1_1_generic_value.html#ab4babf200cac2dacb412a3ea279ddf5b">SetString</a>(<a class="code" href="namespacerapidjson.html#af94951529a5d51e8c4e6e770bb707c1f">StringRef</a>(s), allocator); }</div><div class="line"><a name="l01811"></a><span class="lineno"> 1811</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01812"></a><span class="lineno"> 1812</span>&#160;<span class="comment">    //! Set this value as a string by copying from source string.</span></div><div class="line"><a name="l01813"></a><span class="lineno"> 1813</span>&#160;<span class="comment"></span><span class="comment">    /*! \param s source string reference</span></div><div class="line"><a name="l01814"></a><span class="lineno"> 1814</span>&#160;<span class="comment">        \param allocator Allocator for allocating copied buffer. Commonly use GenericDocument::GetAllocator().</span></div><div class="line"><a name="l01815"></a><span class="lineno"> 1815</span>&#160;<span class="comment">        \return The value itself for fluent API.</span></div><div class="line"><a name="l01816"></a><span class="lineno"> 1816</span>&#160;<span class="comment">        \post IsString() == true &amp;&amp; GetString() != s.s &amp;&amp; strcmp(GetString(),s) == 0 &amp;&amp; GetStringLength() == length</span></div><div class="line"><a name="l01817"></a><span class="lineno"> 1817</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l01818"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a9ba3d9d8a106d5b7e92fb49db897c21b"> 1818</a></span>&#160;    <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#a9ba3d9d8a106d5b7e92fb49db897c21b">SetString</a>(<a class="code" href="structrapidjson_1_1_generic_string_ref.html">StringRefType</a> s, Allocator&amp; allocator) { this-&gt;~<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>(); SetStringRaw(s, allocator); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l01819"></a><span class="lineno"> 1819</span>&#160;</div><div class="line"><a name="l01820"></a><span class="lineno"> 1820</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l01821"></a><span class="lineno"> 1821</span>&#160;<span class="comment">    //! Set this value as a string by copying from source string.</span></div><div class="line"><a name="l01822"></a><span class="lineno"> 1822</span>&#160;<span class="comment"></span><span class="comment">    /*! \param s source string.</span></div><div class="line"><a name="l01823"></a><span class="lineno"> 1823</span>&#160;<span class="comment">        \param allocator Allocator for allocating copied buffer. Commonly use GenericDocument::GetAllocator().</span></div><div class="line"><a name="l01824"></a><span class="lineno"> 1824</span>&#160;<span class="comment">        \return The value itself for fluent API.</span></div><div class="line"><a name="l01825"></a><span class="lineno"> 1825</span>&#160;<span class="comment">        \post IsString() == true &amp;&amp; GetString() != s.data() &amp;&amp; strcmp(GetString(),s.data() == 0 &amp;&amp; GetStringLength() == s.size()</span></div><div class="line"><a name="l01826"></a><span class="lineno"> 1826</span>&#160;<span class="comment">        \note Requires the definition of the preprocessor symbol \ref RAPIDJSON_HAS_STDSTRING.</span></div><div class="line"><a name="l01827"></a><span class="lineno"> 1827</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l01828"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#a3e930bffb40a78e570e3deef461f0532"> 1828</a></span>&#160;    <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; <a class="code" href="classrapidjson_1_1_generic_value.html#a3e930bffb40a78e570e3deef461f0532">SetString</a>(<span class="keyword">const</span> std::basic_string&lt;Ch&gt;&amp; s, Allocator&amp; allocator) { <span class="keywordflow">return</span> <a class="code" href="classrapidjson_1_1_generic_value.html#a3e930bffb40a78e570e3deef461f0532">SetString</a>(<a class="code" href="namespacerapidjson.html#af94951529a5d51e8c4e6e770bb707c1f">StringRef</a>(s), allocator); }</div><div class="line"><a name="l01829"></a><span class="lineno"> 1829</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01830"></a><span class="lineno"> 1830</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01831"></a><span class="lineno"> 1831</span>&#160;<span class="comment">    //@}</span></div><div class="line"><a name="l01832"></a><span class="lineno"> 1832</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l01833"></a><span class="lineno"> 1833</span>&#160;<span class="comment">    //!@name Array</span></div><div class="line"><a name="l01834"></a><span class="lineno"> 1834</span>&#160;<span class="comment"></span><span class="comment">    //@{</span></div><div class="line"><a name="l01835"></a><span class="lineno"> 1835</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l01836"></a><span class="lineno"> 1836</span>&#160;<span class="comment">    //! Templated version for checking whether this value is type T.</span></div><div class="line"><a name="l01837"></a><span class="lineno"> 1837</span>&#160;<span class="comment"></span><span class="comment">    /*!</span></div><div class="line"><a name="l01838"></a><span class="lineno"> 1838</span>&#160;<span class="comment">        \tparam T Either \c bool, \c int, \c unsigned, \c int64_t, \c uint64_t, \c double, \c float, \c const \c char*, \c std::basic_string&lt;Ch&gt;</span></div><div class="line"><a name="l01839"></a><span class="lineno"> 1839</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l01840"></a><span class="lineno"> 1840</span>&#160;    <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l01841"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#acc6b1791cca8daef18521918136264b7"> 1841</a></span>&#160;    <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_generic_value.html#acc6b1791cca8daef18521918136264b7">Is</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> internal::TypeHelper&lt;ValueType, T&gt;::Is(*<span class="keyword">this</span>); }</div><div class="line"><a name="l01842"></a><span class="lineno"> 1842</span>&#160;</div><div class="line"><a name="l01843"></a><span class="lineno"> 1843</span>&#160;    <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l01844"></a><span class="lineno"> 1844</span>&#160;    T Get()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> internal::TypeHelper&lt;ValueType, T&gt;::Get(*<span class="keyword">this</span>); }</div><div class="line"><a name="l01845"></a><span class="lineno"> 1845</span>&#160;</div><div class="line"><a name="l01846"></a><span class="lineno"> 1846</span>&#160;    <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l01847"></a><span class="lineno"> 1847</span>&#160;    T Get() { <span class="keywordflow">return</span> internal::TypeHelper&lt;ValueType, T&gt;::Get(*<span class="keyword">this</span>); }</div><div class="line"><a name="l01848"></a><span class="lineno"> 1848</span>&#160;</div><div class="line"><a name="l01849"></a><span class="lineno"> 1849</span>&#160;    <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l01850"></a><span class="lineno"> 1850</span>&#160;    <a class="code" href="classrapidjson_1_1_generic_value.html">ValueType</a>&amp; Set(<span class="keyword">const</span> T&amp; data) { <span class="keywordflow">return</span> internal::TypeHelper&lt;ValueType, T&gt;::Set(*<span class="keyword">this</span>, data); }</div><div class="line"><a name="l01851"></a><span class="lineno"> 1851</span>&#160;</div><div class="line"><a name="l01852"></a><span class="lineno"> 1852</span>&#160;    <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l01853"></a><span class="lineno"> 1853</span>&#160;    <a class="code" href="classrapidjson_1_1_generic_value.html">ValueType</a>&amp; Set(<span class="keyword">const</span> T&amp; data, <a class="code" href="classrapidjson_1_1_allocator.html">AllocatorType</a>&amp; allocator) { <span class="keywordflow">return</span> internal::TypeHelper&lt;ValueType, T&gt;::Set(*<span class="keyword">this</span>, data, allocator); }</div><div class="line"><a name="l01854"></a><span class="lineno"> 1854</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01855"></a><span class="lineno"> 1855</span>&#160;<span class="comment">    //@}</span></div><div class="line"><a name="l01856"></a><span class="lineno"> 1856</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l01857"></a><span class="lineno"> 1857</span>&#160;<span class="comment">    //! Generate events of this value to a Handler.</span></div><div class="line"><a name="l01858"></a><span class="lineno"> 1858</span>&#160;<span class="comment"></span><span class="comment">    /*! This function adopts the GoF visitor pattern.</span></div><div class="line"><a name="l01859"></a><span class="lineno"> 1859</span>&#160;<span class="comment">        Typical usage is to output this JSON value as JSON text via Writer, which is a Handler.</span></div><div class="line"><a name="l01860"></a><span class="lineno"> 1860</span>&#160;<span class="comment">        It can also be used to deep clone this value via GenericDocument, which is also a Handler.</span></div><div class="line"><a name="l01861"></a><span class="lineno"> 1861</span>&#160;<span class="comment">        \tparam Handler type of handler.</span></div><div class="line"><a name="l01862"></a><span class="lineno"> 1862</span>&#160;<span class="comment">        \param handler An object implementing concept Handler.</span></div><div class="line"><a name="l01863"></a><span class="lineno"> 1863</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l01864"></a><span class="lineno"> 1864</span>&#160;    <span class="keyword">template</span> &lt;<span class="keyword">typename</span> Handler&gt;</div><div class="line"><a name="l01865"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_value.html#ad3ebfa73796f4db4836ec47c2261700c"> 1865</a></span>&#160;    <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_generic_value.html#ad3ebfa73796f4db4836ec47c2261700c">Accept</a>(<a class="code" href="classrapidjson_1_1_handler.html">Handler</a>&amp; handler)<span class="keyword"> const </span>{</div><div class="line"><a name="l01866"></a><span class="lineno"> 1866</span>&#160;        <span class="keywordflow">switch</span>(GetType()) {</div><div class="line"><a name="l01867"></a><span class="lineno"> 1867</span>&#160;        <span class="keywordflow">case</span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a952871e4326b527154fc8aac1ac1f6ff">kNullType</a>:     <span class="keywordflow">return</span> handler.Null();</div><div class="line"><a name="l01868"></a><span class="lineno"> 1868</span>&#160;        <span class="keywordflow">case</span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a9f2e7047832dce1029551b5de0f05607">kFalseType</a>:    <span class="keywordflow">return</span> handler.Bool(<span class="keyword">false</span>);</div><div class="line"><a name="l01869"></a><span class="lineno"> 1869</span>&#160;        <span class="keywordflow">case</span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a80d9f25b083abce45edbfdd3ba006c8e">kTrueType</a>:     <span class="keywordflow">return</span> handler.Bool(<span class="keyword">true</span>);</div><div class="line"><a name="l01870"></a><span class="lineno"> 1870</span>&#160;</div><div class="line"><a name="l01871"></a><span class="lineno"> 1871</span>&#160;        <span class="keywordflow">case</span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4acf030b422a32c3647c7c5973bd4dd0a9">kObjectType</a>:</div><div class="line"><a name="l01872"></a><span class="lineno"> 1872</span>&#160;            <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(!handler.StartObject()))</div><div class="line"><a name="l01873"></a><span class="lineno"> 1873</span>&#160;                <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01874"></a><span class="lineno"> 1874</span>&#160;            <span class="keywordflow">for</span> (<a class="code" href="classrapidjson_1_1_generic_member_iterator.html">ConstMemberIterator</a> m = MemberBegin(); m != MemberEnd(); ++m) {</div><div class="line"><a name="l01875"></a><span class="lineno"> 1875</span>&#160;                <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(m-&gt;name.IsString()); <span class="comment">// User may change the type of name by MemberIterator.</span></div><div class="line"><a name="l01876"></a><span class="lineno"> 1876</span>&#160;                <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(!handler.Key(m-&gt;name.GetString(), m-&gt;name.GetStringLength(), (m-&gt;name.data_.f.flags &amp; kCopyFlag) != 0)))</div><div class="line"><a name="l01877"></a><span class="lineno"> 1877</span>&#160;                    <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01878"></a><span class="lineno"> 1878</span>&#160;                <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(!m-&gt;value.Accept(handler)))</div><div class="line"><a name="l01879"></a><span class="lineno"> 1879</span>&#160;                    <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01880"></a><span class="lineno"> 1880</span>&#160;            }</div><div class="line"><a name="l01881"></a><span class="lineno"> 1881</span>&#160;            <span class="keywordflow">return</span> handler.EndObject(data_.o.size);</div><div class="line"><a name="l01882"></a><span class="lineno"> 1882</span>&#160;</div><div class="line"><a name="l01883"></a><span class="lineno"> 1883</span>&#160;        <span class="keywordflow">case</span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a058c622e1e7d59419ae58b895cbce468">kArrayType</a>:</div><div class="line"><a name="l01884"></a><span class="lineno"> 1884</span>&#160;            <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(!handler.StartArray()))</div><div class="line"><a name="l01885"></a><span class="lineno"> 1885</span>&#160;                <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01886"></a><span class="lineno"> 1886</span>&#160;            <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>* v = Begin(); v != End(); ++v)</div><div class="line"><a name="l01887"></a><span class="lineno"> 1887</span>&#160;                <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(!v-&gt;Accept(handler)))</div><div class="line"><a name="l01888"></a><span class="lineno"> 1888</span>&#160;                    <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01889"></a><span class="lineno"> 1889</span>&#160;            <span class="keywordflow">return</span> handler.EndArray(data_.a.size);</div><div class="line"><a name="l01890"></a><span class="lineno"> 1890</span>&#160;    </div><div class="line"><a name="l01891"></a><span class="lineno"> 1891</span>&#160;        <span class="keywordflow">case</span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4ad6379da3dc04b83a591992bfb9fabba7">kStringType</a>:</div><div class="line"><a name="l01892"></a><span class="lineno"> 1892</span>&#160;            <span class="keywordflow">return</span> handler.String(GetString(), GetStringLength(), (data_.f.flags &amp; kCopyFlag) != 0);</div><div class="line"><a name="l01893"></a><span class="lineno"> 1893</span>&#160;    </div><div class="line"><a name="l01894"></a><span class="lineno"> 1894</span>&#160;        <span class="keywordflow">default</span>:</div><div class="line"><a name="l01895"></a><span class="lineno"> 1895</span>&#160;            <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(GetType() == <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a">kNumberType</a>);</div><div class="line"><a name="l01896"></a><span class="lineno"> 1896</span>&#160;            <span class="keywordflow">if</span> (IsDouble())         <span class="keywordflow">return</span> handler.Double(data_.n.d);</div><div class="line"><a name="l01897"></a><span class="lineno"> 1897</span>&#160;            <span class="keywordflow">else</span> <span class="keywordflow">if</span> (IsInt())       <span class="keywordflow">return</span> handler.Int(data_.n.i.i);</div><div class="line"><a name="l01898"></a><span class="lineno"> 1898</span>&#160;            <span class="keywordflow">else</span> <span class="keywordflow">if</span> (IsUint())      <span class="keywordflow">return</span> handler.Uint(data_.n.u.u);</div><div class="line"><a name="l01899"></a><span class="lineno"> 1899</span>&#160;            <span class="keywordflow">else</span> <span class="keywordflow">if</span> (IsInt64())     <span class="keywordflow">return</span> handler.Int64(data_.n.i64);</div><div class="line"><a name="l01900"></a><span class="lineno"> 1900</span>&#160;            <span class="keywordflow">else</span>                    <span class="keywordflow">return</span> handler.Uint64(data_.n.u64);</div><div class="line"><a name="l01901"></a><span class="lineno"> 1901</span>&#160;        }</div><div class="line"><a name="l01902"></a><span class="lineno"> 1902</span>&#160;    }</div><div class="line"><a name="l01903"></a><span class="lineno"> 1903</span>&#160;</div><div class="line"><a name="l01904"></a><span class="lineno"> 1904</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l01905"></a><span class="lineno"> 1905</span>&#160;    <span class="keyword">template</span> &lt;<span class="keyword">typename</span>, <span class="keyword">typename</span>&gt; <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>;</div><div class="line"><a name="l01906"></a><span class="lineno"> 1906</span>&#160;    <span class="keyword">template</span> &lt;<span class="keyword">typename</span>, <span class="keyword">typename</span>, <span class="keyword">typename</span>&gt; <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>;</div><div class="line"><a name="l01907"></a><span class="lineno"> 1907</span>&#160;</div><div class="line"><a name="l01908"></a><span class="lineno"> 1908</span>&#160;    <span class="keyword">enum</span> {</div><div class="line"><a name="l01909"></a><span class="lineno"> 1909</span>&#160;        kBoolFlag       = 0x0008,</div><div class="line"><a name="l01910"></a><span class="lineno"> 1910</span>&#160;        kNumberFlag     = 0x0010,</div><div class="line"><a name="l01911"></a><span class="lineno"> 1911</span>&#160;        kIntFlag        = 0x0020,</div><div class="line"><a name="l01912"></a><span class="lineno"> 1912</span>&#160;        kUintFlag       = 0x0040,</div><div class="line"><a name="l01913"></a><span class="lineno"> 1913</span>&#160;        kInt64Flag      = 0x0080,</div><div class="line"><a name="l01914"></a><span class="lineno"> 1914</span>&#160;        kUint64Flag     = 0x0100,</div><div class="line"><a name="l01915"></a><span class="lineno"> 1915</span>&#160;        kDoubleFlag     = 0x0200,</div><div class="line"><a name="l01916"></a><span class="lineno"> 1916</span>&#160;        kStringFlag     = 0x0400,</div><div class="line"><a name="l01917"></a><span class="lineno"> 1917</span>&#160;        kCopyFlag       = 0x0800,</div><div class="line"><a name="l01918"></a><span class="lineno"> 1918</span>&#160;        kInlineStrFlag  = 0x1000,</div><div class="line"><a name="l01919"></a><span class="lineno"> 1919</span>&#160;</div><div class="line"><a name="l01920"></a><span class="lineno"> 1920</span>&#160;        <span class="comment">// Initial flags of different types.</span></div><div class="line"><a name="l01921"></a><span class="lineno"> 1921</span>&#160;        kNullFlag = <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a952871e4326b527154fc8aac1ac1f6ff">kNullType</a>,</div><div class="line"><a name="l01922"></a><span class="lineno"> 1922</span>&#160;        kTrueFlag = <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a80d9f25b083abce45edbfdd3ba006c8e">kTrueType</a> | kBoolFlag,</div><div class="line"><a name="l01923"></a><span class="lineno"> 1923</span>&#160;        kFalseFlag = <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a9f2e7047832dce1029551b5de0f05607">kFalseType</a> | kBoolFlag,</div><div class="line"><a name="l01924"></a><span class="lineno"> 1924</span>&#160;        kNumberIntFlag = <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a">kNumberType</a> | kNumberFlag | kIntFlag | kInt64Flag,</div><div class="line"><a name="l01925"></a><span class="lineno"> 1925</span>&#160;        kNumberUintFlag = <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a">kNumberType</a> | kNumberFlag | kUintFlag | kUint64Flag | kInt64Flag,</div><div class="line"><a name="l01926"></a><span class="lineno"> 1926</span>&#160;        kNumberInt64Flag = <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a">kNumberType</a> | kNumberFlag | kInt64Flag,</div><div class="line"><a name="l01927"></a><span class="lineno"> 1927</span>&#160;        kNumberUint64Flag = <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a">kNumberType</a> | kNumberFlag | kUint64Flag,</div><div class="line"><a name="l01928"></a><span class="lineno"> 1928</span>&#160;        kNumberDoubleFlag = <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a">kNumberType</a> | kNumberFlag | kDoubleFlag,</div><div class="line"><a name="l01929"></a><span class="lineno"> 1929</span>&#160;        kNumberAnyFlag = <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a">kNumberType</a> | kNumberFlag | kIntFlag | kInt64Flag | kUintFlag | kUint64Flag | kDoubleFlag,</div><div class="line"><a name="l01930"></a><span class="lineno"> 1930</span>&#160;        kConstStringFlag = <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4ad6379da3dc04b83a591992bfb9fabba7">kStringType</a> | kStringFlag,</div><div class="line"><a name="l01931"></a><span class="lineno"> 1931</span>&#160;        kCopyStringFlag = <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4ad6379da3dc04b83a591992bfb9fabba7">kStringType</a> | kStringFlag | kCopyFlag,</div><div class="line"><a name="l01932"></a><span class="lineno"> 1932</span>&#160;        kShortStringFlag = <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4ad6379da3dc04b83a591992bfb9fabba7">kStringType</a> | kStringFlag | kCopyFlag | kInlineStrFlag,</div><div class="line"><a name="l01933"></a><span class="lineno"> 1933</span>&#160;        kObjectFlag = <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4acf030b422a32c3647c7c5973bd4dd0a9">kObjectType</a>,</div><div class="line"><a name="l01934"></a><span class="lineno"> 1934</span>&#160;        kArrayFlag = <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a058c622e1e7d59419ae58b895cbce468">kArrayType</a>,</div><div class="line"><a name="l01935"></a><span class="lineno"> 1935</span>&#160;</div><div class="line"><a name="l01936"></a><span class="lineno"> 1936</span>&#160;        kTypeMask = 0x07</div><div class="line"><a name="l01937"></a><span class="lineno"> 1937</span>&#160;    };</div><div class="line"><a name="l01938"></a><span class="lineno"> 1938</span>&#160;</div><div class="line"><a name="l01939"></a><span class="lineno"> 1939</span>&#160;    <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> kDefaultArrayCapacity = 16;</div><div class="line"><a name="l01940"></a><span class="lineno"> 1940</span>&#160;    <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> kDefaultObjectCapacity = 16;</div><div class="line"><a name="l01941"></a><span class="lineno"> 1941</span>&#160;</div><div class="line"><a name="l01942"></a><span class="lineno"> 1942</span>&#160;    <span class="keyword">struct </span>Flag {</div><div class="line"><a name="l01943"></a><span class="lineno"> 1943</span>&#160;<span class="preprocessor">#if RAPIDJSON_48BITPOINTER_OPTIMIZATION</span></div><div class="line"><a name="l01944"></a><span class="lineno"> 1944</span>&#160;        <span class="keywordtype">char</span> payload[<span class="keyword">sizeof</span>(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a>) * 2 + 6];     <span class="comment">// 2 x SizeType + lower 48-bit pointer</span></div><div class="line"><a name="l01945"></a><span class="lineno"> 1945</span>&#160;<span class="preprocessor">#elif RAPIDJSON_64BIT</span></div><div class="line"><a name="l01946"></a><span class="lineno"> 1946</span>&#160;        <span class="keywordtype">char</span> payload[<span class="keyword">sizeof</span>(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a>) * 2 + <span class="keyword">sizeof</span>(<span class="keywordtype">void</span>*) + 6]; <span class="comment">// 6 padding bytes</span></div><div class="line"><a name="l01947"></a><span class="lineno"> 1947</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l01948"></a><span class="lineno"> 1948</span>&#160;        <span class="keywordtype">char</span> payload[<span class="keyword">sizeof</span>(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a>) * 2 + <span class="keyword">sizeof</span>(<span class="keywordtype">void</span>*) + 2]; <span class="comment">// 2 padding bytes</span></div><div class="line"><a name="l01949"></a><span class="lineno"> 1949</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01950"></a><span class="lineno"> 1950</span>&#160;        uint16_t flags;</div><div class="line"><a name="l01951"></a><span class="lineno"> 1951</span>&#160;    };</div><div class="line"><a name="l01952"></a><span class="lineno"> 1952</span>&#160;</div><div class="line"><a name="l01953"></a><span class="lineno"> 1953</span>&#160;    <span class="keyword">struct </span>String {</div><div class="line"><a name="l01954"></a><span class="lineno"> 1954</span>&#160;        <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> length;</div><div class="line"><a name="l01955"></a><span class="lineno"> 1955</span>&#160;        <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> hashcode;  <span class="comment">//!&lt; reserved</span></div><div class="line"><a name="l01956"></a><span class="lineno"> 1956</span>&#160;<span class="comment"></span>        <span class="keyword">const</span> Ch* str;</div><div class="line"><a name="l01957"></a><span class="lineno"> 1957</span>&#160;    };  <span class="comment">// 12 bytes in 32-bit mode, 16 bytes in 64-bit mode</span></div><div class="line"><a name="l01958"></a><span class="lineno"> 1958</span>&#160;</div><div class="line"><a name="l01959"></a><span class="lineno"> 1959</span>&#160;    <span class="comment">// implementation detail: ShortString can represent zero-terminated strings up to MaxSize chars</span></div><div class="line"><a name="l01960"></a><span class="lineno"> 1960</span>&#160;    <span class="comment">// (excluding the terminating zero) and store a value to determine the length of the contained</span></div><div class="line"><a name="l01961"></a><span class="lineno"> 1961</span>&#160;    <span class="comment">// string in the last character str[LenPos] by storing &quot;MaxSize - length&quot; there. If the string</span></div><div class="line"><a name="l01962"></a><span class="lineno"> 1962</span>&#160;    <span class="comment">// to store has the maximal length of MaxSize then str[LenPos] will be 0 and therefore act as</span></div><div class="line"><a name="l01963"></a><span class="lineno"> 1963</span>&#160;    <span class="comment">// the string terminator as well. For getting the string length back from that value just use</span></div><div class="line"><a name="l01964"></a><span class="lineno"> 1964</span>&#160;    <span class="comment">// &quot;MaxSize - str[LenPos]&quot;.</span></div><div class="line"><a name="l01965"></a><span class="lineno"> 1965</span>&#160;    <span class="comment">// This allows to store 13-chars strings in 32-bit mode, 21-chars strings in 64-bit mode,</span></div><div class="line"><a name="l01966"></a><span class="lineno"> 1966</span>&#160;    <span class="comment">// 13-chars strings for RAPIDJSON_48BITPOINTER_OPTIMIZATION=1 inline (for `UTF8`-encoded strings).</span></div><div class="line"><a name="l01967"></a><span class="lineno"> 1967</span>&#160;    <span class="keyword">struct </span>ShortString {</div><div class="line"><a name="l01968"></a><span class="lineno"> 1968</span>&#160;        <span class="keyword">enum</span> { MaxChars = <span class="keyword">sizeof</span>(<span class="keyword">static_cast&lt;</span>Flag*<span class="keyword">&gt;</span>(0)-&gt;payload) / <span class="keyword">sizeof</span>(Ch), MaxSize = MaxChars - 1, LenPos = MaxSize };</div><div class="line"><a name="l01969"></a><span class="lineno"> 1969</span>&#160;        Ch str[MaxChars];</div><div class="line"><a name="l01970"></a><span class="lineno"> 1970</span>&#160;</div><div class="line"><a name="l01971"></a><span class="lineno"> 1971</span>&#160;        <span class="keyword">inline</span> <span class="keyword">static</span> <span class="keywordtype">bool</span> Usable(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> len) { <span class="keywordflow">return</span>                       (MaxSize &gt;= len); }</div><div class="line"><a name="l01972"></a><span class="lineno"> 1972</span>&#160;        <span class="keyword">inline</span> <span class="keywordtype">void</span>     SetLength(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> len) { str[LenPos] = <span class="keyword">static_cast&lt;</span>Ch<span class="keyword">&gt;</span>(MaxSize -  len); }</div><div class="line"><a name="l01973"></a><span class="lineno"> 1973</span>&#160;        <span class="keyword">inline</span> <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> GetLength()<span class="keyword"> const       </span>{ <span class="keywordflow">return</span>  <span class="keyword">static_cast&lt;</span><a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a><span class="keyword">&gt;</span>(MaxSize -  str[LenPos]); }</div><div class="line"><a name="l01974"></a><span class="lineno"> 1974</span>&#160;    };  <span class="comment">// at most as many bytes as &quot;String&quot; above =&gt; 12 bytes in 32-bit mode, 16 bytes in 64-bit mode</span></div><div class="line"><a name="l01975"></a><span class="lineno"> 1975</span>&#160;</div><div class="line"><a name="l01976"></a><span class="lineno"> 1976</span>&#160;    <span class="comment">// By using proper binary layout, retrieval of different integer types do not need conversions.</span></div><div class="line"><a name="l01977"></a><span class="lineno"> 1977</span>&#160;    <span class="keyword">union </span>Number {</div><div class="line"><a name="l01978"></a><span class="lineno"> 1978</span>&#160;<span class="preprocessor">#if RAPIDJSON_ENDIAN == RAPIDJSON_LITTLEENDIAN</span></div><div class="line"><a name="l01979"></a><span class="lineno"> 1979</span>&#160;        <span class="keyword">struct </span>I {</div><div class="line"><a name="l01980"></a><span class="lineno"> 1980</span>&#160;            <span class="keywordtype">int</span> i;</div><div class="line"><a name="l01981"></a><span class="lineno"> 1981</span>&#160;            <span class="keywordtype">char</span> padding[4];</div><div class="line"><a name="l01982"></a><span class="lineno"> 1982</span>&#160;        }i;</div><div class="line"><a name="l01983"></a><span class="lineno"> 1983</span>&#160;        <span class="keyword">struct </span>U {</div><div class="line"><a name="l01984"></a><span class="lineno"> 1984</span>&#160;            <span class="keywordtype">unsigned</span> u;</div><div class="line"><a name="l01985"></a><span class="lineno"> 1985</span>&#160;            <span class="keywordtype">char</span> padding2[4];</div><div class="line"><a name="l01986"></a><span class="lineno"> 1986</span>&#160;        }u;</div><div class="line"><a name="l01987"></a><span class="lineno"> 1987</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l01988"></a><span class="lineno"><a class="line" href="structrapidjson_1_1_generic_value_1_1_number_1_1_i.html"> 1988</a></span>&#160;        <span class="keyword">struct </span><a class="code" href="structrapidjson_1_1_generic_value_1_1_number_1_1_i.html">I</a> {</div><div class="line"><a name="l01989"></a><span class="lineno"> 1989</span>&#160;            <span class="keywordtype">char</span> padding[4];</div><div class="line"><a name="l01990"></a><span class="lineno"> 1990</span>&#160;            <span class="keywordtype">int</span> i;</div><div class="line"><a name="l01991"></a><span class="lineno"> 1991</span>&#160;        }i;</div><div class="line"><a name="l01992"></a><span class="lineno"><a class="line" href="structrapidjson_1_1_generic_value_1_1_number_1_1_u.html"> 1992</a></span>&#160;        <span class="keyword">struct </span><a class="code" href="structrapidjson_1_1_generic_value_1_1_number_1_1_u.html">U</a> {</div><div class="line"><a name="l01993"></a><span class="lineno"> 1993</span>&#160;            <span class="keywordtype">char</span> padding2[4];</div><div class="line"><a name="l01994"></a><span class="lineno"> 1994</span>&#160;            <span class="keywordtype">unsigned</span> u;</div><div class="line"><a name="l01995"></a><span class="lineno"> 1995</span>&#160;        }u;</div><div class="line"><a name="l01996"></a><span class="lineno"> 1996</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01997"></a><span class="lineno"> 1997</span>&#160;        int64_t i64;</div><div class="line"><a name="l01998"></a><span class="lineno"> 1998</span>&#160;        uint64_t u64;</div><div class="line"><a name="l01999"></a><span class="lineno"> 1999</span>&#160;        <span class="keywordtype">double</span> d;</div><div class="line"><a name="l02000"></a><span class="lineno"> 2000</span>&#160;    };  <span class="comment">// 8 bytes</span></div><div class="line"><a name="l02001"></a><span class="lineno"> 2001</span>&#160;</div><div class="line"><a name="l02002"></a><span class="lineno"> 2002</span>&#160;    <span class="keyword">struct </span>ObjectData {</div><div class="line"><a name="l02003"></a><span class="lineno"> 2003</span>&#160;        <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> size;</div><div class="line"><a name="l02004"></a><span class="lineno"> 2004</span>&#160;        <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> capacity;</div><div class="line"><a name="l02005"></a><span class="lineno"> 2005</span>&#160;        <a class="code" href="structrapidjson_1_1_generic_member.html">Member</a>* members;</div><div class="line"><a name="l02006"></a><span class="lineno"> 2006</span>&#160;    };  <span class="comment">// 12 bytes in 32-bit mode, 16 bytes in 64-bit mode</span></div><div class="line"><a name="l02007"></a><span class="lineno"> 2007</span>&#160;</div><div class="line"><a name="l02008"></a><span class="lineno"> 2008</span>&#160;    <span class="keyword">struct </span>ArrayData {</div><div class="line"><a name="l02009"></a><span class="lineno"> 2009</span>&#160;        <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> size;</div><div class="line"><a name="l02010"></a><span class="lineno"> 2010</span>&#160;        <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> capacity;</div><div class="line"><a name="l02011"></a><span class="lineno"> 2011</span>&#160;        <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>* elements;</div><div class="line"><a name="l02012"></a><span class="lineno"> 2012</span>&#160;    };  <span class="comment">// 12 bytes in 32-bit mode, 16 bytes in 64-bit mode</span></div><div class="line"><a name="l02013"></a><span class="lineno"> 2013</span>&#160;</div><div class="line"><a name="l02014"></a><span class="lineno"> 2014</span>&#160;    <span class="keyword">union </span>Data {</div><div class="line"><a name="l02015"></a><span class="lineno"> 2015</span>&#160;        String s;</div><div class="line"><a name="l02016"></a><span class="lineno"> 2016</span>&#160;        ShortString ss;</div><div class="line"><a name="l02017"></a><span class="lineno"> 2017</span>&#160;        Number n;</div><div class="line"><a name="l02018"></a><span class="lineno"> 2018</span>&#160;        ObjectData o;</div><div class="line"><a name="l02019"></a><span class="lineno"> 2019</span>&#160;        ArrayData a;</div><div class="line"><a name="l02020"></a><span class="lineno"> 2020</span>&#160;        Flag f;</div><div class="line"><a name="l02021"></a><span class="lineno"> 2021</span>&#160;    };  <span class="comment">// 16 bytes in 32-bit mode, 24 bytes in 64-bit mode, 16 bytes in 64-bit with RAPIDJSON_48BITPOINTER_OPTIMIZATION</span></div><div class="line"><a name="l02022"></a><span class="lineno"> 2022</span>&#160;</div><div class="line"><a name="l02023"></a><span class="lineno"> 2023</span>&#160;    RAPIDJSON_FORCEINLINE <span class="keyword">const</span> Ch* GetStringPointer()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> RAPIDJSON_GETPOINTER(Ch, data_.s.str); }</div><div class="line"><a name="l02024"></a><span class="lineno"> 2024</span>&#160;    RAPIDJSON_FORCEINLINE <span class="keyword">const</span> Ch* SetStringPointer(<span class="keyword">const</span> Ch* str) { <span class="keywordflow">return</span> RAPIDJSON_SETPOINTER(Ch, data_.s.str, str); }</div><div class="line"><a name="l02025"></a><span class="lineno"> 2025</span>&#160;    RAPIDJSON_FORCEINLINE <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>* GetElementsPointer()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> RAPIDJSON_GETPOINTER(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>, data_.a.elements); }</div><div class="line"><a name="l02026"></a><span class="lineno"> 2026</span>&#160;    RAPIDJSON_FORCEINLINE <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>* SetElementsPointer(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>* elements) { <span class="keywordflow">return</span> RAPIDJSON_SETPOINTER(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>, data_.a.elements, elements); }</div><div class="line"><a name="l02027"></a><span class="lineno"> 2027</span>&#160;    RAPIDJSON_FORCEINLINE <a class="code" href="structrapidjson_1_1_generic_member.html">Member</a>* GetMembersPointer()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> RAPIDJSON_GETPOINTER(<a class="code" href="structrapidjson_1_1_generic_member.html">Member</a>, data_.o.members); }</div><div class="line"><a name="l02028"></a><span class="lineno"> 2028</span>&#160;    RAPIDJSON_FORCEINLINE <a class="code" href="structrapidjson_1_1_generic_member.html">Member</a>* SetMembersPointer(<a class="code" href="structrapidjson_1_1_generic_member.html">Member</a>* members) { <span class="keywordflow">return</span> RAPIDJSON_SETPOINTER(<a class="code" href="structrapidjson_1_1_generic_member.html">Member</a>, data_.o.members, members); }</div><div class="line"><a name="l02029"></a><span class="lineno"> 2029</span>&#160;</div><div class="line"><a name="l02030"></a><span class="lineno"> 2030</span>&#160;    <span class="comment">// Initialize this value as array with initial data, without calling destructor.</span></div><div class="line"><a name="l02031"></a><span class="lineno"> 2031</span>&#160;    <span class="keywordtype">void</span> SetArrayRaw(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>* values, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> count, Allocator&amp; allocator) {</div><div class="line"><a name="l02032"></a><span class="lineno"> 2032</span>&#160;        data_.f.flags = kArrayFlag;</div><div class="line"><a name="l02033"></a><span class="lineno"> 2033</span>&#160;        <span class="keywordflow">if</span> (count) {</div><div class="line"><a name="l02034"></a><span class="lineno"> 2034</span>&#160;            <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>* e = <span class="keyword">static_cast&lt;</span><a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>*<span class="keyword">&gt;</span>(allocator.Malloc(count * <span class="keyword">sizeof</span>(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>)));</div><div class="line"><a name="l02035"></a><span class="lineno"> 2035</span>&#160;            SetElementsPointer(e);</div><div class="line"><a name="l02036"></a><span class="lineno"> 2036</span>&#160;            std::memcpy(static_cast&lt;void*&gt;(e), values, count * <span class="keyword">sizeof</span>(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>));</div><div class="line"><a name="l02037"></a><span class="lineno"> 2037</span>&#160;        }</div><div class="line"><a name="l02038"></a><span class="lineno"> 2038</span>&#160;        <span class="keywordflow">else</span></div><div class="line"><a name="l02039"></a><span class="lineno"> 2039</span>&#160;            SetElementsPointer(0);</div><div class="line"><a name="l02040"></a><span class="lineno"> 2040</span>&#160;        data_.a.size = data_.a.capacity = count;</div><div class="line"><a name="l02041"></a><span class="lineno"> 2041</span>&#160;    }</div><div class="line"><a name="l02042"></a><span class="lineno"> 2042</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02043"></a><span class="lineno"> 2043</span>&#160;<span class="comment">    //! Initialize this value as object with initial data, without calling destructor.</span></div><div class="line"><a name="l02044"></a><span class="lineno"> 2044</span>&#160;<span class="comment"></span>    <span class="keywordtype">void</span> SetObjectRaw(<a class="code" href="structrapidjson_1_1_generic_member.html">Member</a>* members, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> count, Allocator&amp; allocator) {</div><div class="line"><a name="l02045"></a><span class="lineno"> 2045</span>&#160;        data_.f.flags = kObjectFlag;</div><div class="line"><a name="l02046"></a><span class="lineno"> 2046</span>&#160;        <span class="keywordflow">if</span> (count) {</div><div class="line"><a name="l02047"></a><span class="lineno"> 2047</span>&#160;            <a class="code" href="structrapidjson_1_1_generic_member.html">Member</a>* m = <span class="keyword">static_cast&lt;</span><a class="code" href="structrapidjson_1_1_generic_member.html">Member</a>*<span class="keyword">&gt;</span>(allocator.Malloc(count * <span class="keyword">sizeof</span>(<a class="code" href="structrapidjson_1_1_generic_member.html">Member</a>)));</div><div class="line"><a name="l02048"></a><span class="lineno"> 2048</span>&#160;            SetMembersPointer(m);</div><div class="line"><a name="l02049"></a><span class="lineno"> 2049</span>&#160;            std::memcpy(static_cast&lt;void*&gt;(m), members, count * <span class="keyword">sizeof</span>(<a class="code" href="structrapidjson_1_1_generic_member.html">Member</a>));</div><div class="line"><a name="l02050"></a><span class="lineno"> 2050</span>&#160;        }</div><div class="line"><a name="l02051"></a><span class="lineno"> 2051</span>&#160;        <span class="keywordflow">else</span></div><div class="line"><a name="l02052"></a><span class="lineno"> 2052</span>&#160;            SetMembersPointer(0);</div><div class="line"><a name="l02053"></a><span class="lineno"> 2053</span>&#160;        data_.o.size = data_.o.capacity = count;</div><div class="line"><a name="l02054"></a><span class="lineno"> 2054</span>&#160;    }</div><div class="line"><a name="l02055"></a><span class="lineno"> 2055</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02056"></a><span class="lineno"> 2056</span>&#160;<span class="comment">    //! Initialize this value as constant string, without calling destructor.</span></div><div class="line"><a name="l02057"></a><span class="lineno"> 2057</span>&#160;<span class="comment"></span>    <span class="keywordtype">void</span> SetStringRaw(<a class="code" href="structrapidjson_1_1_generic_string_ref.html">StringRefType</a> s) RAPIDJSON_NOEXCEPT {</div><div class="line"><a name="l02058"></a><span class="lineno"> 2058</span>&#160;        data_.f.flags = kConstStringFlag;</div><div class="line"><a name="l02059"></a><span class="lineno"> 2059</span>&#160;        SetStringPointer(s);</div><div class="line"><a name="l02060"></a><span class="lineno"> 2060</span>&#160;        data_.s.length = s.<a class="code" href="structrapidjson_1_1_generic_string_ref.html#ae223535ec20edf0c1db44a40b7735111">length</a>;</div><div class="line"><a name="l02061"></a><span class="lineno"> 2061</span>&#160;    }</div><div class="line"><a name="l02062"></a><span class="lineno"> 2062</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02063"></a><span class="lineno"> 2063</span>&#160;<span class="comment">    //! Initialize this value as copy string with initial data, without calling destructor.</span></div><div class="line"><a name="l02064"></a><span class="lineno"> 2064</span>&#160;<span class="comment"></span>    <span class="keywordtype">void</span> SetStringRaw(<a class="code" href="structrapidjson_1_1_generic_string_ref.html">StringRefType</a> s, Allocator&amp; allocator) {</div><div class="line"><a name="l02065"></a><span class="lineno"> 2065</span>&#160;        Ch* str = 0;</div><div class="line"><a name="l02066"></a><span class="lineno"> 2066</span>&#160;        <span class="keywordflow">if</span> (ShortString::Usable(s.<a class="code" href="structrapidjson_1_1_generic_string_ref.html#ae223535ec20edf0c1db44a40b7735111">length</a>)) {</div><div class="line"><a name="l02067"></a><span class="lineno"> 2067</span>&#160;            data_.f.flags = kShortStringFlag;</div><div class="line"><a name="l02068"></a><span class="lineno"> 2068</span>&#160;            data_.ss.SetLength(s.<a class="code" href="structrapidjson_1_1_generic_string_ref.html#ae223535ec20edf0c1db44a40b7735111">length</a>);</div><div class="line"><a name="l02069"></a><span class="lineno"> 2069</span>&#160;            str = data_.ss.str;</div><div class="line"><a name="l02070"></a><span class="lineno"> 2070</span>&#160;        } <span class="keywordflow">else</span> {</div><div class="line"><a name="l02071"></a><span class="lineno"> 2071</span>&#160;            data_.f.flags = kCopyStringFlag;</div><div class="line"><a name="l02072"></a><span class="lineno"> 2072</span>&#160;            data_.s.length = s.<a class="code" href="structrapidjson_1_1_generic_string_ref.html#ae223535ec20edf0c1db44a40b7735111">length</a>;</div><div class="line"><a name="l02073"></a><span class="lineno"> 2073</span>&#160;            str = <span class="keyword">static_cast&lt;</span>Ch *<span class="keyword">&gt;</span>(allocator.Malloc((s.<a class="code" href="structrapidjson_1_1_generic_string_ref.html#ae223535ec20edf0c1db44a40b7735111">length</a> + 1) * <span class="keyword">sizeof</span>(Ch)));</div><div class="line"><a name="l02074"></a><span class="lineno"> 2074</span>&#160;            SetStringPointer(str);</div><div class="line"><a name="l02075"></a><span class="lineno"> 2075</span>&#160;        }</div><div class="line"><a name="l02076"></a><span class="lineno"> 2076</span>&#160;        std::memcpy(str, s, s.<a class="code" href="structrapidjson_1_1_generic_string_ref.html#ae223535ec20edf0c1db44a40b7735111">length</a> * <span class="keyword">sizeof</span>(Ch));</div><div class="line"><a name="l02077"></a><span class="lineno"> 2077</span>&#160;        str[s.<a class="code" href="structrapidjson_1_1_generic_string_ref.html#ae223535ec20edf0c1db44a40b7735111">length</a>] = <span class="charliteral">&#39;\0&#39;</span>;</div><div class="line"><a name="l02078"></a><span class="lineno"> 2078</span>&#160;    }</div><div class="line"><a name="l02079"></a><span class="lineno"> 2079</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02080"></a><span class="lineno"> 2080</span>&#160;<span class="comment">    //! Assignment without calling destructor</span></div><div class="line"><a name="l02081"></a><span class="lineno"> 2081</span>&#160;<span class="comment"></span>    <span class="keywordtype">void</span> RawAssign(<a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&amp; rhs) RAPIDJSON_NOEXCEPT {</div><div class="line"><a name="l02082"></a><span class="lineno"> 2082</span>&#160;        data_ = rhs.data_;</div><div class="line"><a name="l02083"></a><span class="lineno"> 2083</span>&#160;        <span class="comment">// data_.f.flags = rhs.data_.f.flags;</span></div><div class="line"><a name="l02084"></a><span class="lineno"> 2084</span>&#160;        rhs.data_.f.flags = kNullFlag;</div><div class="line"><a name="l02085"></a><span class="lineno"> 2085</span>&#160;    }</div><div class="line"><a name="l02086"></a><span class="lineno"> 2086</span>&#160;</div><div class="line"><a name="l02087"></a><span class="lineno"> 2087</span>&#160;    <span class="keyword">template</span> &lt;<span class="keyword">typename</span> SourceAllocator&gt;</div><div class="line"><a name="l02088"></a><span class="lineno"> 2088</span>&#160;    <span class="keywordtype">bool</span> StringEqual(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue&lt;Encoding, SourceAllocator&gt;</a>&amp; rhs)<span class="keyword"> const </span>{</div><div class="line"><a name="l02089"></a><span class="lineno"> 2089</span>&#160;        <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsString());</div><div class="line"><a name="l02090"></a><span class="lineno"> 2090</span>&#160;        <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(rhs.IsString());</div><div class="line"><a name="l02091"></a><span class="lineno"> 2091</span>&#160;</div><div class="line"><a name="l02092"></a><span class="lineno"> 2092</span>&#160;        <span class="keyword">const</span> <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> len1 = GetStringLength();</div><div class="line"><a name="l02093"></a><span class="lineno"> 2093</span>&#160;        <span class="keyword">const</span> <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> len2 = rhs.<a class="code" href="classrapidjson_1_1_generic_value.html#a18599e0d1a7e70a11b35f5e219390fea">GetStringLength</a>();</div><div class="line"><a name="l02094"></a><span class="lineno"> 2094</span>&#160;        <span class="keywordflow">if</span>(len1 != len2) { <span class="keywordflow">return</span> <span class="keyword">false</span>; }</div><div class="line"><a name="l02095"></a><span class="lineno"> 2095</span>&#160;</div><div class="line"><a name="l02096"></a><span class="lineno"> 2096</span>&#160;        <span class="keyword">const</span> Ch* <span class="keyword">const</span> str1 = GetString();</div><div class="line"><a name="l02097"></a><span class="lineno"> 2097</span>&#160;        <span class="keyword">const</span> Ch* <span class="keyword">const</span> str2 = rhs.GetString();</div><div class="line"><a name="l02098"></a><span class="lineno"> 2098</span>&#160;        <span class="keywordflow">if</span>(str1 == str2) { <span class="keywordflow">return</span> <span class="keyword">true</span>; } <span class="comment">// fast path for constant string</span></div><div class="line"><a name="l02099"></a><span class="lineno"> 2099</span>&#160;</div><div class="line"><a name="l02100"></a><span class="lineno"> 2100</span>&#160;        <span class="keywordflow">return</span> (std::memcmp(str1, str2, <span class="keyword">sizeof</span>(Ch) * len1) == 0);</div><div class="line"><a name="l02101"></a><span class="lineno"> 2101</span>&#160;    }</div><div class="line"><a name="l02102"></a><span class="lineno"> 2102</span>&#160;</div><div class="line"><a name="l02103"></a><span class="lineno"> 2103</span>&#160;    Data data_;</div><div class="line"><a name="l02104"></a><span class="lineno"> 2104</span>&#160;};</div><div class="line"><a name="l02105"></a><span class="lineno"> 2105</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02106"></a><span class="lineno"> 2106</span>&#160;<span class="comment">//! GenericValue with UTF8 encoding</span></div><div class="line"><a name="l02107"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#aa65fc9fb381b2cbc54f98673eadd6505"> 2107</a></span>&#160;<span class="comment"></span><span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue&lt;UTF8&lt;&gt;</a> &gt; <a class="code" href="namespacerapidjson.html#aa65fc9fb381b2cbc54f98673eadd6505">Value</a>;</div><div class="line"><a name="l02108"></a><span class="lineno"> 2108</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02109"></a><span class="lineno"> 2109</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l02110"></a><span class="lineno"> 2110</span>&#160;<span class="comment"></span><span class="comment">// GenericDocument </span></div><div class="line"><a name="l02111"></a><span class="lineno"> 2111</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02112"></a><span class="lineno"> 2112</span>&#160;<span class="comment">//! A document for parsing JSON text as DOM.</span></div><div class="line"><a name="l02113"></a><span class="lineno"> 2113</span>&#160;<span class="comment"></span><span class="comment">/*!</span></div><div class="line"><a name="l02114"></a><span class="lineno"> 2114</span>&#160;<span class="comment">    \note implements Handler concept</span></div><div class="line"><a name="l02115"></a><span class="lineno"> 2115</span>&#160;<span class="comment">    \tparam Encoding Encoding for both parsing and string storage.</span></div><div class="line"><a name="l02116"></a><span class="lineno"> 2116</span>&#160;<span class="comment">    \tparam Allocator Allocator for allocating memory for the DOM</span></div><div class="line"><a name="l02117"></a><span class="lineno"> 2117</span>&#160;<span class="comment">    \tparam StackAllocator Allocator for allocating memory for stack during parsing.</span></div><div class="line"><a name="l02118"></a><span class="lineno"> 2118</span>&#160;<span class="comment">    \warning Although GenericDocument inherits from GenericValue, the API does \b not provide any virtual functions, especially no virtual destructor.  To avoid memory leaks, do not \c delete a GenericDocument object via a pointer to a GenericValue.</span></div><div class="line"><a name="l02119"></a><span class="lineno"> 2119</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l02120"></a><span class="lineno"> 2120</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> Encoding, <span class="keyword">typename</span> Allocator = MemoryPoolAllocator&lt;&gt;, <span class="keyword">typename</span> StackAllocator = CrtAllocator&gt;</div><div class="line"><a name="l02121"></a><span class="lineno"> 2121</span>&#160;<span class="keyword">class </span><a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a> : <span class="keyword">public</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&lt;Encoding, Allocator&gt; {</div><div class="line"><a name="l02122"></a><span class="lineno"> 2122</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l02123"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_document.html#a8367a827588dd91d02e21ef945bec9f5"> 2123</a></span>&#160;    <span class="keyword">typedef</span> <span class="keyword">typename</span> Encoding::Ch <a class="code" href="classrapidjson_1_1_generic_document.html#a8367a827588dd91d02e21ef945bec9f5">Ch</a>;                       <span class="comment">//!&lt; Character type derived from Encoding.</span></div><div class="line"><a name="l02124"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_document.html#a41bbec044c421e870a9d355075d741bc"> 2124</a></span>&#160;<span class="comment"></span>    <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue&lt;Encoding, Allocator&gt;</a> <a class="code" href="classrapidjson_1_1_generic_document.html#a41bbec044c421e870a9d355075d741bc">ValueType</a>;    <span class="comment">//!&lt; Value type of the document.</span></div><div class="line"><a name="l02125"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_document.html#a4c85243a28c9dcf2d1357da00fcaa773"> 2125</a></span>&#160;<span class="comment"></span>    <span class="keyword">typedef</span> Allocator <a class="code" href="classrapidjson_1_1_generic_document.html#a4c85243a28c9dcf2d1357da00fcaa773">AllocatorType</a>;                        <span class="comment">//!&lt; Allocator type from template parameter.</span></div><div class="line"><a name="l02126"></a><span class="lineno"> 2126</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l02127"></a><span class="lineno"> 2127</span>&#160;<span class="comment">    //! Constructor</span></div><div class="line"><a name="l02128"></a><span class="lineno"> 2128</span>&#160;<span class="comment"></span><span class="comment">    /*! Creates an empty document of specified type.</span></div><div class="line"><a name="l02129"></a><span class="lineno"> 2129</span>&#160;<span class="comment">        \param type             Mandatory type of object to create.</span></div><div class="line"><a name="l02130"></a><span class="lineno"> 2130</span>&#160;<span class="comment">        \param allocator        Optional allocator for allocating memory.</span></div><div class="line"><a name="l02131"></a><span class="lineno"> 2131</span>&#160;<span class="comment">        \param stackCapacity    Optional initial capacity of stack in bytes.</span></div><div class="line"><a name="l02132"></a><span class="lineno"> 2132</span>&#160;<span class="comment">        \param stackAllocator   Optional allocator for allocating memory for stack.</span></div><div class="line"><a name="l02133"></a><span class="lineno"> 2133</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l02134"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_document.html#aa52c3016961f25ecd989d82839bce4e5"> 2134</a></span>&#160;    <span class="keyword">explicit</span> <a class="code" href="classrapidjson_1_1_generic_document.html#aa52c3016961f25ecd989d82839bce4e5">GenericDocument</a>(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">Type</a> type, Allocator* allocator = 0, <span class="keywordtype">size_t</span> stackCapacity = kDefaultStackCapacity, StackAllocator* stackAllocator = 0) :</div><div class="line"><a name="l02135"></a><span class="lineno"> 2135</span>&#160;        <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>&lt;Encoding, Allocator&gt;(type),  allocator_(allocator), ownAllocator_(0), stack_(stackAllocator, stackCapacity), parseResult_()</div><div class="line"><a name="l02136"></a><span class="lineno"> 2136</span>&#160;    {</div><div class="line"><a name="l02137"></a><span class="lineno"> 2137</span>&#160;        <span class="keywordflow">if</span> (!allocator_)</div><div class="line"><a name="l02138"></a><span class="lineno"> 2138</span>&#160;            ownAllocator_ = allocator_ = <a class="code" href="rapidjson_8h.html#abdc7cd7902748ffe6626d71c59a73c3b">RAPIDJSON_NEW</a>(Allocator)();</div><div class="line"><a name="l02139"></a><span class="lineno"> 2139</span>&#160;    }</div><div class="line"><a name="l02140"></a><span class="lineno"> 2140</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02141"></a><span class="lineno"> 2141</span>&#160;<span class="comment">    //! Constructor</span></div><div class="line"><a name="l02142"></a><span class="lineno"> 2142</span>&#160;<span class="comment"></span><span class="comment">    /*! Creates an empty document which type is Null. </span></div><div class="line"><a name="l02143"></a><span class="lineno"> 2143</span>&#160;<span class="comment">        \param allocator        Optional allocator for allocating memory.</span></div><div class="line"><a name="l02144"></a><span class="lineno"> 2144</span>&#160;<span class="comment">        \param stackCapacity    Optional initial capacity of stack in bytes.</span></div><div class="line"><a name="l02145"></a><span class="lineno"> 2145</span>&#160;<span class="comment">        \param stackAllocator   Optional allocator for allocating memory for stack.</span></div><div class="line"><a name="l02146"></a><span class="lineno"> 2146</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l02147"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_document.html#a82b27e7b228eb46a23f99720063ab4fb"> 2147</a></span>&#160;    <a class="code" href="classrapidjson_1_1_generic_document.html#a82b27e7b228eb46a23f99720063ab4fb">GenericDocument</a>(Allocator* allocator = 0, <span class="keywordtype">size_t</span> stackCapacity = kDefaultStackCapacity, StackAllocator* stackAllocator = 0) : </div><div class="line"><a name="l02148"></a><span class="lineno"> 2148</span>&#160;        allocator_(allocator), ownAllocator_(0), stack_(stackAllocator, stackCapacity), parseResult_()</div><div class="line"><a name="l02149"></a><span class="lineno"> 2149</span>&#160;    {</div><div class="line"><a name="l02150"></a><span class="lineno"> 2150</span>&#160;        <span class="keywordflow">if</span> (!allocator_)</div><div class="line"><a name="l02151"></a><span class="lineno"> 2151</span>&#160;            ownAllocator_ = allocator_ = <a class="code" href="rapidjson_8h.html#abdc7cd7902748ffe6626d71c59a73c3b">RAPIDJSON_NEW</a>(Allocator)();</div><div class="line"><a name="l02152"></a><span class="lineno"> 2152</span>&#160;    }</div><div class="line"><a name="l02153"></a><span class="lineno"> 2153</span>&#160;</div><div class="line"><a name="l02154"></a><span class="lineno"> 2154</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l02155"></a><span class="lineno"> 2155</span>&#160;<span class="comment">    //! Move constructor in C++11</span></div><div class="line"><a name="l02156"></a><span class="lineno"> 2156</span>&#160;<span class="comment"></span>    <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>(<a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>&amp;&amp; rhs) RAPIDJSON_NOEXCEPT</div><div class="line"><a name="l02157"></a><span class="lineno"> 2157</span>&#160;        : ValueType(std::forward&lt;ValueType&gt;(rhs)), <span class="comment">// explicit cast to avoid prohibited move from Document</span></div><div class="line"><a name="l02158"></a><span class="lineno"> 2158</span>&#160;          allocator_(rhs.allocator_),</div><div class="line"><a name="l02159"></a><span class="lineno"> 2159</span>&#160;          ownAllocator_(rhs.ownAllocator_),</div><div class="line"><a name="l02160"></a><span class="lineno"> 2160</span>&#160;          stack_(std::move(rhs.stack_)),</div><div class="line"><a name="l02161"></a><span class="lineno"> 2161</span>&#160;          parseResult_(rhs.parseResult_)</div><div class="line"><a name="l02162"></a><span class="lineno"> 2162</span>&#160;    {</div><div class="line"><a name="l02163"></a><span class="lineno"> 2163</span>&#160;        rhs.allocator_ = 0;</div><div class="line"><a name="l02164"></a><span class="lineno"> 2164</span>&#160;        rhs.ownAllocator_ = 0;</div><div class="line"><a name="l02165"></a><span class="lineno"> 2165</span>&#160;        rhs.parseResult_ = <a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#structrapidjson_1_1_parse_result">ParseResult</a>();</div><div class="line"><a name="l02166"></a><span class="lineno"> 2166</span>&#160;    }</div><div class="line"><a name="l02167"></a><span class="lineno"> 2167</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02168"></a><span class="lineno"> 2168</span>&#160;</div><div class="line"><a name="l02169"></a><span class="lineno"> 2169</span>&#160;    ~<a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>() {</div><div class="line"><a name="l02170"></a><span class="lineno"> 2170</span>&#160;        Destroy();</div><div class="line"><a name="l02171"></a><span class="lineno"> 2171</span>&#160;    }</div><div class="line"><a name="l02172"></a><span class="lineno"> 2172</span>&#160;</div><div class="line"><a name="l02173"></a><span class="lineno"> 2173</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l02174"></a><span class="lineno"> 2174</span>&#160;<span class="comment">    //! Move assignment in C++11</span></div><div class="line"><a name="l02175"></a><span class="lineno"> 2175</span>&#160;<span class="comment"></span>    <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>&amp; operator=(<a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>&amp;&amp; rhs) RAPIDJSON_NOEXCEPT</div><div class="line"><a name="l02176"></a><span class="lineno"> 2176</span>&#160;    {</div><div class="line"><a name="l02177"></a><span class="lineno"> 2177</span>&#160;        <span class="comment">// The cast to ValueType is necessary here, because otherwise it would</span></div><div class="line"><a name="l02178"></a><span class="lineno"> 2178</span>&#160;        <span class="comment">// attempt to call GenericValue&#39;s templated assignment operator.</span></div><div class="line"><a name="l02179"></a><span class="lineno"> 2179</span>&#160;        ValueType::operator=(std::forward&lt;ValueType&gt;(rhs));</div><div class="line"><a name="l02180"></a><span class="lineno"> 2180</span>&#160;</div><div class="line"><a name="l02181"></a><span class="lineno"> 2181</span>&#160;        <span class="comment">// Calling the destructor here would prematurely call stack_&#39;s destructor</span></div><div class="line"><a name="l02182"></a><span class="lineno"> 2182</span>&#160;        Destroy();</div><div class="line"><a name="l02183"></a><span class="lineno"> 2183</span>&#160;</div><div class="line"><a name="l02184"></a><span class="lineno"> 2184</span>&#160;        allocator_ = rhs.allocator_;</div><div class="line"><a name="l02185"></a><span class="lineno"> 2185</span>&#160;        ownAllocator_ = rhs.ownAllocator_;</div><div class="line"><a name="l02186"></a><span class="lineno"> 2186</span>&#160;        stack_ = std::move(rhs.stack_);</div><div class="line"><a name="l02187"></a><span class="lineno"> 2187</span>&#160;        parseResult_ = rhs.parseResult_;</div><div class="line"><a name="l02188"></a><span class="lineno"> 2188</span>&#160;</div><div class="line"><a name="l02189"></a><span class="lineno"> 2189</span>&#160;        rhs.allocator_ = 0;</div><div class="line"><a name="l02190"></a><span class="lineno"> 2190</span>&#160;        rhs.ownAllocator_ = 0;</div><div class="line"><a name="l02191"></a><span class="lineno"> 2191</span>&#160;        rhs.parseResult_ = <a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#structrapidjson_1_1_parse_result">ParseResult</a>();</div><div class="line"><a name="l02192"></a><span class="lineno"> 2192</span>&#160;</div><div class="line"><a name="l02193"></a><span class="lineno"> 2193</span>&#160;        <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l02194"></a><span class="lineno"> 2194</span>&#160;    }</div><div class="line"><a name="l02195"></a><span class="lineno"> 2195</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02196"></a><span class="lineno"> 2196</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02197"></a><span class="lineno"> 2197</span>&#160;<span class="comment">    //! Exchange the contents of this document with those of another.</span></div><div class="line"><a name="l02198"></a><span class="lineno"> 2198</span>&#160;<span class="comment"></span><span class="comment">    /*!</span></div><div class="line"><a name="l02199"></a><span class="lineno"> 2199</span>&#160;<span class="comment">        \param rhs Another document.</span></div><div class="line"><a name="l02200"></a><span class="lineno"> 2200</span>&#160;<span class="comment">        \note Constant complexity.</span></div><div class="line"><a name="l02201"></a><span class="lineno"> 2201</span>&#160;<span class="comment">        \see GenericValue::Swap</span></div><div class="line"><a name="l02202"></a><span class="lineno"> 2202</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l02203"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_document.html#abf1cbab989b856f9d260787b2575750b"> 2203</a></span>&#160;    <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>&amp; <a class="code" href="classrapidjson_1_1_generic_document.html#abf1cbab989b856f9d260787b2575750b">Swap</a>(<a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>&amp; rhs) RAPIDJSON_NOEXCEPT {</div><div class="line"><a name="l02204"></a><span class="lineno"> 2204</span>&#160;        ValueType::Swap(rhs);</div><div class="line"><a name="l02205"></a><span class="lineno"> 2205</span>&#160;        stack_.Swap(rhs.stack_);</div><div class="line"><a name="l02206"></a><span class="lineno"> 2206</span>&#160;        internal::Swap(allocator_, rhs.allocator_);</div><div class="line"><a name="l02207"></a><span class="lineno"> 2207</span>&#160;        internal::Swap(ownAllocator_, rhs.ownAllocator_);</div><div class="line"><a name="l02208"></a><span class="lineno"> 2208</span>&#160;        internal::Swap(parseResult_, rhs.parseResult_);</div><div class="line"><a name="l02209"></a><span class="lineno"> 2209</span>&#160;        <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l02210"></a><span class="lineno"> 2210</span>&#160;    }</div><div class="line"><a name="l02211"></a><span class="lineno"> 2211</span>&#160;</div><div class="line"><a name="l02212"></a><span class="lineno"> 2212</span>&#160;    <span class="comment">// Allow Swap with ValueType.</span></div><div class="line"><a name="l02213"></a><span class="lineno"> 2213</span>&#160;    <span class="comment">// Refer to Effective C++ 3rd Edition/Item 33: Avoid hiding inherited names.</span></div><div class="line"><a name="l02214"></a><span class="lineno"> 2214</span>&#160;    <span class="keyword">using</span> ValueType::Swap;</div><div class="line"><a name="l02215"></a><span class="lineno"> 2215</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02216"></a><span class="lineno"> 2216</span>&#160;<span class="comment">    //! free-standing swap function helper</span></div><div class="line"><a name="l02217"></a><span class="lineno"> 2217</span>&#160;<span class="comment"></span><span class="comment">    /*!</span></div><div class="line"><a name="l02218"></a><span class="lineno"> 2218</span>&#160;<span class="comment">        Helper function to enable support for common swap implementation pattern based on \c std::swap:</span></div><div class="line"><a name="l02219"></a><span class="lineno"> 2219</span>&#160;<span class="comment">        \code</span></div><div class="line"><a name="l02220"></a><span class="lineno"> 2220</span>&#160;<span class="comment">        void swap(MyClass&amp; a, MyClass&amp; b) {</span></div><div class="line"><a name="l02221"></a><span class="lineno"> 2221</span>&#160;<span class="comment">            using std::swap;</span></div><div class="line"><a name="l02222"></a><span class="lineno"> 2222</span>&#160;<span class="comment">            swap(a.doc, b.doc);</span></div><div class="line"><a name="l02223"></a><span class="lineno"> 2223</span>&#160;<span class="comment">            // ...</span></div><div class="line"><a name="l02224"></a><span class="lineno"> 2224</span>&#160;<span class="comment">        }</span></div><div class="line"><a name="l02225"></a><span class="lineno"> 2225</span>&#160;<span class="comment">        \endcode</span></div><div class="line"><a name="l02226"></a><span class="lineno"> 2226</span>&#160;<span class="comment">        \see Swap()</span></div><div class="line"><a name="l02227"></a><span class="lineno"> 2227</span>&#160;<span class="comment">     */</span></div><div class="line"><a name="l02228"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_document.html#a0d63efcc43758ac3aed77e868233369d"> 2228</a></span>&#160;    <span class="keyword">friend</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classrapidjson_1_1_generic_document.html#a0d63efcc43758ac3aed77e868233369d">swap</a>(<a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>&amp; a, <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>&amp; b) RAPIDJSON_NOEXCEPT { a.Swap(b); }</div><div class="line"><a name="l02229"></a><span class="lineno"> 2229</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02230"></a><span class="lineno"> 2230</span>&#160;<span class="comment">    //! Populate this document by a generator which produces SAX events.</span></div><div class="line"><a name="l02231"></a><span class="lineno"> 2231</span>&#160;<span class="comment"></span><span class="comment">    /*! \tparam Generator A functor with &lt;tt&gt;bool f(Handler)&lt;/tt&gt; prototype.</span></div><div class="line"><a name="l02232"></a><span class="lineno"> 2232</span>&#160;<span class="comment">        \param g Generator functor which sends SAX events to the parameter.</span></div><div class="line"><a name="l02233"></a><span class="lineno"> 2233</span>&#160;<span class="comment">        \return The document itself for fluent API.</span></div><div class="line"><a name="l02234"></a><span class="lineno"> 2234</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l02235"></a><span class="lineno"> 2235</span>&#160;    <span class="keyword">template</span> &lt;<span class="keyword">typename</span> Generator&gt;</div><div class="line"><a name="l02236"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_document.html#a63e18887979da500ece6f0bd10d29b64"> 2236</a></span>&#160;    <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>&amp; <a class="code" href="classrapidjson_1_1_generic_document.html#a63e18887979da500ece6f0bd10d29b64">Populate</a>(Generator&amp; g) {</div><div class="line"><a name="l02237"></a><span class="lineno"> 2237</span>&#160;        ClearStackOnExit scope(*<span class="keyword">this</span>);</div><div class="line"><a name="l02238"></a><span class="lineno"> 2238</span>&#160;        <span class="keywordflow">if</span> (g(*<span class="keyword">this</span>)) {</div><div class="line"><a name="l02239"></a><span class="lineno"> 2239</span>&#160;            <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(stack_.GetSize() == <span class="keyword">sizeof</span>(ValueType)); <span class="comment">// Got one and only one root object</span></div><div class="line"><a name="l02240"></a><span class="lineno"> 2240</span>&#160;            ValueType::operator=(*stack_.template Pop&lt;ValueType&gt;(1));<span class="comment">// Move value from stack to document</span></div><div class="line"><a name="l02241"></a><span class="lineno"> 2241</span>&#160;        }</div><div class="line"><a name="l02242"></a><span class="lineno"> 2242</span>&#160;        <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l02243"></a><span class="lineno"> 2243</span>&#160;    }</div><div class="line"><a name="l02244"></a><span class="lineno"> 2244</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02245"></a><span class="lineno"> 2245</span>&#160;<span class="comment">    //!@name Parse from stream</span></div><div class="line"><a name="l02246"></a><span class="lineno"> 2246</span>&#160;<span class="comment">    //!@{</span></div><div class="line"><a name="l02247"></a><span class="lineno"> 2247</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l02248"></a><span class="lineno"> 2248</span>&#160;<span class="comment">    //! Parse JSON text from an input stream (with Encoding conversion)</span></div><div class="line"><a name="l02249"></a><span class="lineno"> 2249</span>&#160;<span class="comment"></span><span class="comment">    /*! \tparam parseFlags Combination of \ref ParseFlag.</span></div><div class="line"><a name="l02250"></a><span class="lineno"> 2250</span>&#160;<span class="comment">        \tparam SourceEncoding Encoding of input stream</span></div><div class="line"><a name="l02251"></a><span class="lineno"> 2251</span>&#160;<span class="comment">        \tparam InputStream Type of input stream, implementing Stream concept</span></div><div class="line"><a name="l02252"></a><span class="lineno"> 2252</span>&#160;<span class="comment">        \param is Input stream to be parsed.</span></div><div class="line"><a name="l02253"></a><span class="lineno"> 2253</span>&#160;<span class="comment">        \return The document itself for fluent API.</span></div><div class="line"><a name="l02254"></a><span class="lineno"> 2254</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l02255"></a><span class="lineno"> 2255</span>&#160;    <span class="keyword">template</span> &lt;<span class="keywordtype">unsigned</span> parseFlags, <span class="keyword">typename</span> SourceEncoding, <span class="keyword">typename</span> InputStream&gt;</div><div class="line"><a name="l02256"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_document.html#a3ae97682cf04685c7db9d89ebc399b85"> 2256</a></span>&#160;    <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>&amp; <a class="code" href="classrapidjson_1_1_generic_document.html#a3ae97682cf04685c7db9d89ebc399b85">ParseStream</a>(InputStream&amp; is) {</div><div class="line"><a name="l02257"></a><span class="lineno"> 2257</span>&#160;        <a class="code" href="classrapidjson_1_1_generic_reader.html">GenericReader&lt;SourceEncoding, Encoding, StackAllocator&gt;</a> reader(</div><div class="line"><a name="l02258"></a><span class="lineno"> 2258</span>&#160;            stack_.HasAllocator() ? &amp;stack_.GetAllocator() : 0);</div><div class="line"><a name="l02259"></a><span class="lineno"> 2259</span>&#160;        ClearStackOnExit scope(*<span class="keyword">this</span>);</div><div class="line"><a name="l02260"></a><span class="lineno"> 2260</span>&#160;        parseResult_ = reader.template Parse&lt;parseFlags&gt;(is, *<span class="keyword">this</span>);</div><div class="line"><a name="l02261"></a><span class="lineno"> 2261</span>&#160;        <span class="keywordflow">if</span> (parseResult_) {</div><div class="line"><a name="l02262"></a><span class="lineno"> 2262</span>&#160;            <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(stack_.GetSize() == <span class="keyword">sizeof</span>(ValueType)); <span class="comment">// Got one and only one root object</span></div><div class="line"><a name="l02263"></a><span class="lineno"> 2263</span>&#160;            ValueType::operator=(*stack_.template Pop&lt;ValueType&gt;(1));<span class="comment">// Move value from stack to document</span></div><div class="line"><a name="l02264"></a><span class="lineno"> 2264</span>&#160;        }</div><div class="line"><a name="l02265"></a><span class="lineno"> 2265</span>&#160;        <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l02266"></a><span class="lineno"> 2266</span>&#160;    }</div><div class="line"><a name="l02267"></a><span class="lineno"> 2267</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02268"></a><span class="lineno"> 2268</span>&#160;<span class="comment">    //! Parse JSON text from an input stream</span></div><div class="line"><a name="l02269"></a><span class="lineno"> 2269</span>&#160;<span class="comment"></span><span class="comment">    /*! \tparam parseFlags Combination of \ref ParseFlag.</span></div><div class="line"><a name="l02270"></a><span class="lineno"> 2270</span>&#160;<span class="comment">        \tparam InputStream Type of input stream, implementing Stream concept</span></div><div class="line"><a name="l02271"></a><span class="lineno"> 2271</span>&#160;<span class="comment">        \param is Input stream to be parsed.</span></div><div class="line"><a name="l02272"></a><span class="lineno"> 2272</span>&#160;<span class="comment">        \return The document itself for fluent API.</span></div><div class="line"><a name="l02273"></a><span class="lineno"> 2273</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l02274"></a><span class="lineno"> 2274</span>&#160;    <span class="keyword">template</span> &lt;<span class="keywordtype">unsigned</span> parseFlags, <span class="keyword">typename</span> InputStream&gt;</div><div class="line"><a name="l02275"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_document.html#ae4ee7d86b8c906c83dbe15e57eb6ac6a"> 2275</a></span>&#160;    <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>&amp; <a class="code" href="classrapidjson_1_1_generic_document.html#ae4ee7d86b8c906c83dbe15e57eb6ac6a">ParseStream</a>(InputStream&amp; is) {</div><div class="line"><a name="l02276"></a><span class="lineno"> 2276</span>&#160;        <span class="keywordflow">return</span> ParseStream&lt;parseFlags, Encoding, InputStream&gt;(is);</div><div class="line"><a name="l02277"></a><span class="lineno"> 2277</span>&#160;    }</div><div class="line"><a name="l02278"></a><span class="lineno"> 2278</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02279"></a><span class="lineno"> 2279</span>&#160;<span class="comment">    //! Parse JSON text from an input stream (with \ref kParseDefaultFlags)</span></div><div class="line"><a name="l02280"></a><span class="lineno"> 2280</span>&#160;<span class="comment"></span><span class="comment">    /*! \tparam InputStream Type of input stream, implementing Stream concept</span></div><div class="line"><a name="l02281"></a><span class="lineno"> 2281</span>&#160;<span class="comment">        \param is Input stream to be parsed.</span></div><div class="line"><a name="l02282"></a><span class="lineno"> 2282</span>&#160;<span class="comment">        \return The document itself for fluent API.</span></div><div class="line"><a name="l02283"></a><span class="lineno"> 2283</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l02284"></a><span class="lineno"> 2284</span>&#160;    <span class="keyword">template</span> &lt;<span class="keyword">typename</span> InputStream&gt;</div><div class="line"><a name="l02285"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_document.html#acf96a3c7fd61486d049c701b1fe5d414"> 2285</a></span>&#160;    <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>&amp; <a class="code" href="classrapidjson_1_1_generic_document.html#acf96a3c7fd61486d049c701b1fe5d414">ParseStream</a>(InputStream&amp; is) {</div><div class="line"><a name="l02286"></a><span class="lineno"> 2286</span>&#160;        <span class="keywordflow">return</span> ParseStream&lt;kParseDefaultFlags, Encoding, InputStream&gt;(is);</div><div class="line"><a name="l02287"></a><span class="lineno"> 2287</span>&#160;    }<span class="comment"></span></div><div class="line"><a name="l02288"></a><span class="lineno"> 2288</span>&#160;<span class="comment">    //!@}</span></div><div class="line"><a name="l02289"></a><span class="lineno"> 2289</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l02290"></a><span class="lineno"> 2290</span>&#160;<span class="comment">    //!@name Parse in-place from mutable string</span></div><div class="line"><a name="l02291"></a><span class="lineno"> 2291</span>&#160;<span class="comment">    //!@{</span></div><div class="line"><a name="l02292"></a><span class="lineno"> 2292</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l02293"></a><span class="lineno"> 2293</span>&#160;<span class="comment">    //! Parse JSON text from a mutable string</span></div><div class="line"><a name="l02294"></a><span class="lineno"> 2294</span>&#160;<span class="comment"></span><span class="comment">    /*! \tparam parseFlags Combination of \ref ParseFlag.</span></div><div class="line"><a name="l02295"></a><span class="lineno"> 2295</span>&#160;<span class="comment">        \param str Mutable zero-terminated string to be parsed.</span></div><div class="line"><a name="l02296"></a><span class="lineno"> 2296</span>&#160;<span class="comment">        \return The document itself for fluent API.</span></div><div class="line"><a name="l02297"></a><span class="lineno"> 2297</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l02298"></a><span class="lineno"> 2298</span>&#160;    <span class="keyword">template</span> &lt;<span class="keywordtype">unsigned</span> parseFlags&gt;</div><div class="line"><a name="l02299"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_document.html#a7ba626bf84eb45a9bca0b7723bf47f3f"> 2299</a></span>&#160;    <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>&amp; <a class="code" href="classrapidjson_1_1_generic_document.html#a7ba626bf84eb45a9bca0b7723bf47f3f">ParseInsitu</a>(Ch* str) {</div><div class="line"><a name="l02300"></a><span class="lineno"> 2300</span>&#160;        <a class="code" href="structrapidjson_1_1_generic_insitu_string_stream.html">GenericInsituStringStream&lt;Encoding&gt;</a> s(str);</div><div class="line"><a name="l02301"></a><span class="lineno"> 2301</span>&#160;        <span class="keywordflow">return</span> ParseStream&lt;parseFlags | kParseInsituFlag&gt;(s);</div><div class="line"><a name="l02302"></a><span class="lineno"> 2302</span>&#160;    }</div><div class="line"><a name="l02303"></a><span class="lineno"> 2303</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02304"></a><span class="lineno"> 2304</span>&#160;<span class="comment">    //! Parse JSON text from a mutable string (with \ref kParseDefaultFlags)</span></div><div class="line"><a name="l02305"></a><span class="lineno"> 2305</span>&#160;<span class="comment"></span><span class="comment">    /*! \param str Mutable zero-terminated string to be parsed.</span></div><div class="line"><a name="l02306"></a><span class="lineno"> 2306</span>&#160;<span class="comment">        \return The document itself for fluent API.</span></div><div class="line"><a name="l02307"></a><span class="lineno"> 2307</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l02308"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_document.html#af061c039a990c2970dc31e5626149367"> 2308</a></span>&#160;    <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>&amp; <a class="code" href="classrapidjson_1_1_generic_document.html#af061c039a990c2970dc31e5626149367">ParseInsitu</a>(Ch* str) {</div><div class="line"><a name="l02309"></a><span class="lineno"> 2309</span>&#160;        <span class="keywordflow">return</span> ParseInsitu&lt;kParseDefaultFlags&gt;(str);</div><div class="line"><a name="l02310"></a><span class="lineno"> 2310</span>&#160;    }<span class="comment"></span></div><div class="line"><a name="l02311"></a><span class="lineno"> 2311</span>&#160;<span class="comment">    //!@}</span></div><div class="line"><a name="l02312"></a><span class="lineno"> 2312</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l02313"></a><span class="lineno"> 2313</span>&#160;<span class="comment">    //!@name Parse from read-only string</span></div><div class="line"><a name="l02314"></a><span class="lineno"> 2314</span>&#160;<span class="comment">    //!@{</span></div><div class="line"><a name="l02315"></a><span class="lineno"> 2315</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l02316"></a><span class="lineno"> 2316</span>&#160;<span class="comment">    //! Parse JSON text from a read-only string (with Encoding conversion)</span></div><div class="line"><a name="l02317"></a><span class="lineno"> 2317</span>&#160;<span class="comment"></span><span class="comment">    /*! \tparam parseFlags Combination of \ref ParseFlag (must not contain \ref kParseInsituFlag).</span></div><div class="line"><a name="l02318"></a><span class="lineno"> 2318</span>&#160;<span class="comment">        \tparam SourceEncoding Transcoding from input Encoding</span></div><div class="line"><a name="l02319"></a><span class="lineno"> 2319</span>&#160;<span class="comment">        \param str Read-only zero-terminated string to be parsed.</span></div><div class="line"><a name="l02320"></a><span class="lineno"> 2320</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l02321"></a><span class="lineno"> 2321</span>&#160;    <span class="keyword">template</span> &lt;<span class="keywordtype">unsigned</span> parseFlags, <span class="keyword">typename</span> SourceEncoding&gt;</div><div class="line"><a name="l02322"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_document.html#aea842b533a858c9a3861451ad9e8642c"> 2322</a></span>&#160;    <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>&amp; <a class="code" href="classrapidjson_1_1_generic_document.html#aea842b533a858c9a3861451ad9e8642c">Parse</a>(<span class="keyword">const</span> <span class="keyword">typename</span> SourceEncoding::Ch* str) {</div><div class="line"><a name="l02323"></a><span class="lineno"> 2323</span>&#160;        <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(!(parseFlags &amp; <a class="code" href="namespacerapidjson.html#a81379eb4e94a0386d71d15fda882ebc9a02748971d6ea0c5e22c69b8aa7f344ea">kParseInsituFlag</a>));</div><div class="line"><a name="l02324"></a><span class="lineno"> 2324</span>&#160;        <a class="code" href="structrapidjson_1_1_generic_string_stream.html">GenericStringStream&lt;SourceEncoding&gt;</a> s(str);</div><div class="line"><a name="l02325"></a><span class="lineno"> 2325</span>&#160;        <span class="keywordflow">return</span> ParseStream&lt;parseFlags, SourceEncoding&gt;(s);</div><div class="line"><a name="l02326"></a><span class="lineno"> 2326</span>&#160;    }</div><div class="line"><a name="l02327"></a><span class="lineno"> 2327</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02328"></a><span class="lineno"> 2328</span>&#160;<span class="comment">    //! Parse JSON text from a read-only string</span></div><div class="line"><a name="l02329"></a><span class="lineno"> 2329</span>&#160;<span class="comment"></span><span class="comment">    /*! \tparam parseFlags Combination of \ref ParseFlag (must not contain \ref kParseInsituFlag).</span></div><div class="line"><a name="l02330"></a><span class="lineno"> 2330</span>&#160;<span class="comment">        \param str Read-only zero-terminated string to be parsed.</span></div><div class="line"><a name="l02331"></a><span class="lineno"> 2331</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l02332"></a><span class="lineno"> 2332</span>&#160;    <span class="keyword">template</span> &lt;<span class="keywordtype">unsigned</span> parseFlags&gt;</div><div class="line"><a name="l02333"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_document.html#a42c35e2f64c288f14b74fec2792500c8"> 2333</a></span>&#160;    <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>&amp; <a class="code" href="classrapidjson_1_1_generic_document.html#a42c35e2f64c288f14b74fec2792500c8">Parse</a>(<span class="keyword">const</span> Ch* str) {</div><div class="line"><a name="l02334"></a><span class="lineno"> 2334</span>&#160;        <span class="keywordflow">return</span> Parse&lt;parseFlags, Encoding&gt;(str);</div><div class="line"><a name="l02335"></a><span class="lineno"> 2335</span>&#160;    }</div><div class="line"><a name="l02336"></a><span class="lineno"> 2336</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02337"></a><span class="lineno"> 2337</span>&#160;<span class="comment">    //! Parse JSON text from a read-only string (with \ref kParseDefaultFlags)</span></div><div class="line"><a name="l02338"></a><span class="lineno"> 2338</span>&#160;<span class="comment"></span><span class="comment">    /*! \param str Read-only zero-terminated string to be parsed.</span></div><div class="line"><a name="l02339"></a><span class="lineno"> 2339</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l02340"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_document.html#ab031375318d133f83a114314b75703de"> 2340</a></span>&#160;    <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>&amp; <a class="code" href="classrapidjson_1_1_generic_document.html#ab031375318d133f83a114314b75703de">Parse</a>(<span class="keyword">const</span> Ch* str) {</div><div class="line"><a name="l02341"></a><span class="lineno"> 2341</span>&#160;        <span class="keywordflow">return</span> Parse&lt;kParseDefaultFlags&gt;(str);</div><div class="line"><a name="l02342"></a><span class="lineno"> 2342</span>&#160;    }</div><div class="line"><a name="l02343"></a><span class="lineno"> 2343</span>&#160;</div><div class="line"><a name="l02344"></a><span class="lineno"> 2344</span>&#160;    <span class="keyword">template</span> &lt;<span class="keywordtype">unsigned</span> parseFlags, <span class="keyword">typename</span> SourceEncoding&gt;</div><div class="line"><a name="l02345"></a><span class="lineno"> 2345</span>&#160;    <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>&amp; Parse(<span class="keyword">const</span> <span class="keyword">typename</span> SourceEncoding::Ch* str, <span class="keywordtype">size_t</span> length) {</div><div class="line"><a name="l02346"></a><span class="lineno"> 2346</span>&#160;        <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(!(parseFlags &amp; <a class="code" href="namespacerapidjson.html#a81379eb4e94a0386d71d15fda882ebc9a02748971d6ea0c5e22c69b8aa7f344ea">kParseInsituFlag</a>));</div><div class="line"><a name="l02347"></a><span class="lineno"> 2347</span>&#160;        <a class="code" href="structrapidjson_1_1_memory_stream.html">MemoryStream</a> ms(reinterpret_cast&lt;const char*&gt;(str), length * <span class="keyword">sizeof</span>(<span class="keyword">typename</span> SourceEncoding::Ch));</div><div class="line"><a name="l02348"></a><span class="lineno"> 2348</span>&#160;        <a class="code" href="classrapidjson_1_1_encoded_input_stream.html">EncodedInputStream&lt;SourceEncoding, MemoryStream&gt;</a> is(ms);</div><div class="line"><a name="l02349"></a><span class="lineno"> 2349</span>&#160;        ParseStream&lt;parseFlags, SourceEncoding&gt;(is);</div><div class="line"><a name="l02350"></a><span class="lineno"> 2350</span>&#160;        <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l02351"></a><span class="lineno"> 2351</span>&#160;    }</div><div class="line"><a name="l02352"></a><span class="lineno"> 2352</span>&#160;</div><div class="line"><a name="l02353"></a><span class="lineno"> 2353</span>&#160;    <span class="keyword">template</span> &lt;<span class="keywordtype">unsigned</span> parseFlags&gt;</div><div class="line"><a name="l02354"></a><span class="lineno"> 2354</span>&#160;    <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>&amp; Parse(<span class="keyword">const</span> Ch* str, <span class="keywordtype">size_t</span> length) {</div><div class="line"><a name="l02355"></a><span class="lineno"> 2355</span>&#160;        <span class="keywordflow">return</span> Parse&lt;parseFlags, Encoding&gt;(str, length);</div><div class="line"><a name="l02356"></a><span class="lineno"> 2356</span>&#160;    }</div><div class="line"><a name="l02357"></a><span class="lineno"> 2357</span>&#160;    </div><div class="line"><a name="l02358"></a><span class="lineno"> 2358</span>&#160;    <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>&amp; Parse(<span class="keyword">const</span> Ch* str, <span class="keywordtype">size_t</span> length) {</div><div class="line"><a name="l02359"></a><span class="lineno"> 2359</span>&#160;        <span class="keywordflow">return</span> Parse&lt;kParseDefaultFlags&gt;(str, length);</div><div class="line"><a name="l02360"></a><span class="lineno"> 2360</span>&#160;    }</div><div class="line"><a name="l02361"></a><span class="lineno"> 2361</span>&#160;</div><div class="line"><a name="l02362"></a><span class="lineno"> 2362</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l02363"></a><span class="lineno"> 2363</span>&#160;    <span class="keyword">template</span> &lt;<span class="keywordtype">unsigned</span> parseFlags, <span class="keyword">typename</span> SourceEncoding&gt;</div><div class="line"><a name="l02364"></a><span class="lineno"> 2364</span>&#160;    <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>&amp; Parse(<span class="keyword">const</span> std::basic_string&lt;typename SourceEncoding::Ch&gt;&amp; str) {</div><div class="line"><a name="l02365"></a><span class="lineno"> 2365</span>&#160;        <span class="comment">// c_str() is constant complexity according to standard. Should be faster than Parse(const char*, size_t)</span></div><div class="line"><a name="l02366"></a><span class="lineno"> 2366</span>&#160;        <span class="keywordflow">return</span> Parse&lt;parseFlags, SourceEncoding&gt;(str.c_str());</div><div class="line"><a name="l02367"></a><span class="lineno"> 2367</span>&#160;    }</div><div class="line"><a name="l02368"></a><span class="lineno"> 2368</span>&#160;</div><div class="line"><a name="l02369"></a><span class="lineno"> 2369</span>&#160;    <span class="keyword">template</span> &lt;<span class="keywordtype">unsigned</span> parseFlags&gt;</div><div class="line"><a name="l02370"></a><span class="lineno"> 2370</span>&#160;    <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>&amp; Parse(<span class="keyword">const</span> std::basic_string&lt;Ch&gt;&amp; str) {</div><div class="line"><a name="l02371"></a><span class="lineno"> 2371</span>&#160;        <span class="keywordflow">return</span> Parse&lt;parseFlags, Encoding&gt;(str.c_str());</div><div class="line"><a name="l02372"></a><span class="lineno"> 2372</span>&#160;    }</div><div class="line"><a name="l02373"></a><span class="lineno"> 2373</span>&#160;</div><div class="line"><a name="l02374"></a><span class="lineno"> 2374</span>&#160;    <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>&amp; Parse(<span class="keyword">const</span> std::basic_string&lt;Ch&gt;&amp; str) {</div><div class="line"><a name="l02375"></a><span class="lineno"> 2375</span>&#160;        <span class="keywordflow">return</span> Parse&lt;kParseDefaultFlags&gt;(str);</div><div class="line"><a name="l02376"></a><span class="lineno"> 2376</span>&#160;    }</div><div class="line"><a name="l02377"></a><span class="lineno"> 2377</span>&#160;<span class="preprocessor">#endif // RAPIDJSON_HAS_STDSTRING    </span></div><div class="line"><a name="l02378"></a><span class="lineno"> 2378</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02379"></a><span class="lineno"> 2379</span>&#160;<span class="comment">    //!@}</span></div><div class="line"><a name="l02380"></a><span class="lineno"> 2380</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l02381"></a><span class="lineno"> 2381</span>&#160;<span class="comment">    //!@name Handling parse errors</span></div><div class="line"><a name="l02382"></a><span class="lineno"> 2382</span>&#160;<span class="comment">    //!@{</span></div><div class="line"><a name="l02383"></a><span class="lineno"> 2383</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l02384"></a><span class="lineno"> 2384</span>&#160;<span class="comment">    //! Whether a parse error has occurred in the last parsing.</span></div><div class="line"><a name="l02385"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_document.html#a7607bb42b51547e44bfd4cab35d8f20e"> 2385</a></span>&#160;<span class="comment"></span>    <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_generic_document.html#a7607bb42b51547e44bfd4cab35d8f20e">HasParseError</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> parseResult_.IsError(); }</div><div class="line"><a name="l02386"></a><span class="lineno"> 2386</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02387"></a><span class="lineno"> 2387</span>&#160;<span class="comment">    //! Get the \ref ParseErrorCode of last parsing.</span></div><div class="line"><a name="l02388"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_document.html#ab94c280c079a6837a24951cb4d8f337b"> 2388</a></span>&#160;<span class="comment"></span>    <a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#ga7d3acf640886b1f2552dc8c4cd6dea60">ParseErrorCode</a> <a class="code" href="classrapidjson_1_1_generic_document.html#ab94c280c079a6837a24951cb4d8f337b">GetParseError</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> parseResult_.Code(); }</div><div class="line"><a name="l02389"></a><span class="lineno"> 2389</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02390"></a><span class="lineno"> 2390</span>&#160;<span class="comment">    //! Get the position of last parsing error in input, 0 otherwise.</span></div><div class="line"><a name="l02391"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_document.html#af532179ca5ad5434a5e8af63f5da4c5f"> 2391</a></span>&#160;<span class="comment"></span>    <span class="keywordtype">size_t</span> <a class="code" href="classrapidjson_1_1_generic_document.html#af532179ca5ad5434a5e8af63f5da4c5f">GetErrorOffset</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> parseResult_.Offset(); }</div><div class="line"><a name="l02392"></a><span class="lineno"> 2392</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02393"></a><span class="lineno"> 2393</span>&#160;<span class="comment">    //! Implicit conversion to get the last parse result</span></div><div class="line"><a name="l02394"></a><span class="lineno"> 2394</span>&#160;<span class="comment"></span><span class="preprocessor">#ifndef __clang // -Wdocumentation</span></div><div class="line"><a name="l02395"></a><span class="lineno"> 2395</span>&#160;<span class="comment">    /*! \return \ref ParseResult of the last parse operation</span></div><div class="line"><a name="l02396"></a><span class="lineno"> 2396</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02397"></a><span class="lineno"> 2397</span>&#160;<span class="comment">        \code</span></div><div class="line"><a name="l02398"></a><span class="lineno"> 2398</span>&#160;<span class="comment">          Document doc;</span></div><div class="line"><a name="l02399"></a><span class="lineno"> 2399</span>&#160;<span class="comment">          ParseResult ok = doc.Parse(json);</span></div><div class="line"><a name="l02400"></a><span class="lineno"> 2400</span>&#160;<span class="comment">          if (!ok)</span></div><div class="line"><a name="l02401"></a><span class="lineno"> 2401</span>&#160;<span class="comment">            printf( &quot;JSON parse error: %s (%u)\n&quot;, GetParseError_En(ok.Code()), ok.Offset());</span></div><div class="line"><a name="l02402"></a><span class="lineno"> 2402</span>&#160;<span class="comment">        \endcode</span></div><div class="line"><a name="l02403"></a><span class="lineno"> 2403</span>&#160;<span class="comment">     */</span></div><div class="line"><a name="l02404"></a><span class="lineno"> 2404</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02405"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_document.html#a36d19989c9221b27036675455516a974"> 2405</a></span>&#160;    <span class="keyword">operator</span> <a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#structrapidjson_1_1_parse_result">ParseResult</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> parseResult_; }<span class="comment"></span></div><div class="line"><a name="l02406"></a><span class="lineno"> 2406</span>&#160;<span class="comment">    //!@}</span></div><div class="line"><a name="l02407"></a><span class="lineno"> 2407</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l02408"></a><span class="lineno"> 2408</span>&#160;<span class="comment">    //! Get the allocator of this document.</span></div><div class="line"><a name="l02409"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_document.html#ad92c6cd025d411258d1f2ad890e2ee3f"> 2409</a></span>&#160;<span class="comment"></span>    Allocator&amp; <a class="code" href="classrapidjson_1_1_generic_document.html#ad92c6cd025d411258d1f2ad890e2ee3f">GetAllocator</a>() {</div><div class="line"><a name="l02410"></a><span class="lineno"> 2410</span>&#160;        <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(allocator_);</div><div class="line"><a name="l02411"></a><span class="lineno"> 2411</span>&#160;        <span class="keywordflow">return</span> *allocator_;</div><div class="line"><a name="l02412"></a><span class="lineno"> 2412</span>&#160;    }</div><div class="line"><a name="l02413"></a><span class="lineno"> 2413</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02414"></a><span class="lineno"> 2414</span>&#160;<span class="comment">    //! Get the capacity of stack in bytes.</span></div><div class="line"><a name="l02415"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_document.html#a153e5a065ca9660673974f9df203be4b"> 2415</a></span>&#160;<span class="comment"></span>    <span class="keywordtype">size_t</span> <a class="code" href="classrapidjson_1_1_generic_document.html#a153e5a065ca9660673974f9df203be4b">GetStackCapacity</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> stack_.GetCapacity(); }</div><div class="line"><a name="l02416"></a><span class="lineno"> 2416</span>&#160;</div><div class="line"><a name="l02417"></a><span class="lineno"> 2417</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l02418"></a><span class="lineno"> 2418</span>&#160;    <span class="comment">// clear stack on any exit from ParseStream, e.g. due to exception</span></div><div class="line"><a name="l02419"></a><span class="lineno"> 2419</span>&#160;    <span class="keyword">struct </span>ClearStackOnExit {</div><div class="line"><a name="l02420"></a><span class="lineno"> 2420</span>&#160;        <span class="keyword">explicit</span> ClearStackOnExit(<a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>&amp; d) : d_(d) {}</div><div class="line"><a name="l02421"></a><span class="lineno"> 2421</span>&#160;        ~ClearStackOnExit() { d_.ClearStack(); }</div><div class="line"><a name="l02422"></a><span class="lineno"> 2422</span>&#160;    <span class="keyword">private</span>:</div><div class="line"><a name="l02423"></a><span class="lineno"> 2423</span>&#160;        ClearStackOnExit(<span class="keyword">const</span> ClearStackOnExit&amp;);</div><div class="line"><a name="l02424"></a><span class="lineno"> 2424</span>&#160;        ClearStackOnExit&amp; operator=(<span class="keyword">const</span> ClearStackOnExit&amp;);</div><div class="line"><a name="l02425"></a><span class="lineno"> 2425</span>&#160;        <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>&amp; d_;</div><div class="line"><a name="l02426"></a><span class="lineno"> 2426</span>&#160;    };</div><div class="line"><a name="l02427"></a><span class="lineno"> 2427</span>&#160;</div><div class="line"><a name="l02428"></a><span class="lineno"> 2428</span>&#160;    <span class="comment">// callers of the following private Handler functions</span></div><div class="line"><a name="l02429"></a><span class="lineno"> 2429</span>&#160;    <span class="comment">// template &lt;typename,typename,typename&gt; friend class GenericReader; // for parsing</span></div><div class="line"><a name="l02430"></a><span class="lineno"> 2430</span>&#160;    <span class="keyword">template</span> &lt;<span class="keyword">typename</span>, <span class="keyword">typename</span>&gt; <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>; <span class="comment">// for deep copying</span></div><div class="line"><a name="l02431"></a><span class="lineno"> 2431</span>&#160;</div><div class="line"><a name="l02432"></a><span class="lineno"> 2432</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l02433"></a><span class="lineno"> 2433</span>&#160;    <span class="comment">// Implementation of Handler</span></div><div class="line"><a name="l02434"></a><span class="lineno"> 2434</span>&#160;    <span class="keywordtype">bool</span> Null() { <span class="keyword">new</span> (stack_.template Push&lt;ValueType&gt;()) ValueType(); <span class="keywordflow">return</span> <span class="keyword">true</span>; }</div><div class="line"><a name="l02435"></a><span class="lineno"> 2435</span>&#160;    <span class="keywordtype">bool</span> Bool(<span class="keywordtype">bool</span> b) { <span class="keyword">new</span> (stack_.template Push&lt;ValueType&gt;()) ValueType(b); <span class="keywordflow">return</span> <span class="keyword">true</span>; }</div><div class="line"><a name="l02436"></a><span class="lineno"> 2436</span>&#160;    <span class="keywordtype">bool</span> Int(<span class="keywordtype">int</span> i) { <span class="keyword">new</span> (stack_.template Push&lt;ValueType&gt;()) ValueType(i); <span class="keywordflow">return</span> <span class="keyword">true</span>; }</div><div class="line"><a name="l02437"></a><span class="lineno"> 2437</span>&#160;    <span class="keywordtype">bool</span> Uint(<span class="keywordtype">unsigned</span> i) { <span class="keyword">new</span> (stack_.template Push&lt;ValueType&gt;()) ValueType(i); <span class="keywordflow">return</span> <span class="keyword">true</span>; }</div><div class="line"><a name="l02438"></a><span class="lineno"> 2438</span>&#160;    <span class="keywordtype">bool</span> Int64(int64_t i) { <span class="keyword">new</span> (stack_.template Push&lt;ValueType&gt;()) ValueType(i); <span class="keywordflow">return</span> <span class="keyword">true</span>; }</div><div class="line"><a name="l02439"></a><span class="lineno"> 2439</span>&#160;    <span class="keywordtype">bool</span> Uint64(uint64_t i) { <span class="keyword">new</span> (stack_.template Push&lt;ValueType&gt;()) ValueType(i); <span class="keywordflow">return</span> <span class="keyword">true</span>; }</div><div class="line"><a name="l02440"></a><span class="lineno"> 2440</span>&#160;    <span class="keywordtype">bool</span> Double(<span class="keywordtype">double</span> d) { <span class="keyword">new</span> (stack_.template Push&lt;ValueType&gt;()) ValueType(d); <span class="keywordflow">return</span> <span class="keyword">true</span>; }</div><div class="line"><a name="l02441"></a><span class="lineno"> 2441</span>&#160;</div><div class="line"><a name="l02442"></a><span class="lineno"> 2442</span>&#160;    <span class="keywordtype">bool</span> RawNumber(<span class="keyword">const</span> Ch* str, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> length, <span class="keywordtype">bool</span> copy) { </div><div class="line"><a name="l02443"></a><span class="lineno"> 2443</span>&#160;        <span class="keywordflow">if</span> (copy) </div><div class="line"><a name="l02444"></a><span class="lineno"> 2444</span>&#160;            <span class="keyword">new</span> (stack_.template Push&lt;ValueType&gt;()) ValueType(str, length, GetAllocator());</div><div class="line"><a name="l02445"></a><span class="lineno"> 2445</span>&#160;        <span class="keywordflow">else</span></div><div class="line"><a name="l02446"></a><span class="lineno"> 2446</span>&#160;            <span class="keyword">new</span> (stack_.template Push&lt;ValueType&gt;()) ValueType(str, length);</div><div class="line"><a name="l02447"></a><span class="lineno"> 2447</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l02448"></a><span class="lineno"> 2448</span>&#160;    }</div><div class="line"><a name="l02449"></a><span class="lineno"> 2449</span>&#160;</div><div class="line"><a name="l02450"></a><span class="lineno"> 2450</span>&#160;    <span class="keywordtype">bool</span> String(<span class="keyword">const</span> Ch* str, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> length, <span class="keywordtype">bool</span> copy) { </div><div class="line"><a name="l02451"></a><span class="lineno"> 2451</span>&#160;        <span class="keywordflow">if</span> (copy) </div><div class="line"><a name="l02452"></a><span class="lineno"> 2452</span>&#160;            <span class="keyword">new</span> (stack_.template Push&lt;ValueType&gt;()) ValueType(str, length, GetAllocator());</div><div class="line"><a name="l02453"></a><span class="lineno"> 2453</span>&#160;        <span class="keywordflow">else</span></div><div class="line"><a name="l02454"></a><span class="lineno"> 2454</span>&#160;            <span class="keyword">new</span> (stack_.template Push&lt;ValueType&gt;()) ValueType(str, length);</div><div class="line"><a name="l02455"></a><span class="lineno"> 2455</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l02456"></a><span class="lineno"> 2456</span>&#160;    }</div><div class="line"><a name="l02457"></a><span class="lineno"> 2457</span>&#160;</div><div class="line"><a name="l02458"></a><span class="lineno"> 2458</span>&#160;    <span class="keywordtype">bool</span> StartObject() { <span class="keyword">new</span> (stack_.template Push&lt;ValueType&gt;()) ValueType(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4acf030b422a32c3647c7c5973bd4dd0a9">kObjectType</a>); <span class="keywordflow">return</span> <span class="keyword">true</span>; }</div><div class="line"><a name="l02459"></a><span class="lineno"> 2459</span>&#160;    </div><div class="line"><a name="l02460"></a><span class="lineno"> 2460</span>&#160;    <span class="keywordtype">bool</span> Key(<span class="keyword">const</span> Ch* str, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> length, <span class="keywordtype">bool</span> copy) { <span class="keywordflow">return</span> String(str, length, copy); }</div><div class="line"><a name="l02461"></a><span class="lineno"> 2461</span>&#160;</div><div class="line"><a name="l02462"></a><span class="lineno"> 2462</span>&#160;    <span class="keywordtype">bool</span> EndObject(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> memberCount) {</div><div class="line"><a name="l02463"></a><span class="lineno"> 2463</span>&#160;        <span class="keyword">typename</span> <a class="code" href="structrapidjson_1_1_generic_member.html">ValueType::Member</a>* members = stack_.template Pop&lt;typename ValueType::Member&gt;(memberCount);</div><div class="line"><a name="l02464"></a><span class="lineno"> 2464</span>&#160;        stack_.template Top&lt;ValueType&gt;()-&gt;SetObjectRaw(members, memberCount, GetAllocator());</div><div class="line"><a name="l02465"></a><span class="lineno"> 2465</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l02466"></a><span class="lineno"> 2466</span>&#160;    }</div><div class="line"><a name="l02467"></a><span class="lineno"> 2467</span>&#160;</div><div class="line"><a name="l02468"></a><span class="lineno"> 2468</span>&#160;    <span class="keywordtype">bool</span> StartArray() { <span class="keyword">new</span> (stack_.template Push&lt;ValueType&gt;()) ValueType(<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a058c622e1e7d59419ae58b895cbce468">kArrayType</a>); <span class="keywordflow">return</span> <span class="keyword">true</span>; }</div><div class="line"><a name="l02469"></a><span class="lineno"> 2469</span>&#160;    </div><div class="line"><a name="l02470"></a><span class="lineno"> 2470</span>&#160;    <span class="keywordtype">bool</span> EndArray(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> elementCount) {</div><div class="line"><a name="l02471"></a><span class="lineno"> 2471</span>&#160;        ValueType* elements = stack_.template Pop&lt;ValueType&gt;(elementCount);</div><div class="line"><a name="l02472"></a><span class="lineno"> 2472</span>&#160;        stack_.template Top&lt;ValueType&gt;()-&gt;SetArrayRaw(elements, elementCount, GetAllocator());</div><div class="line"><a name="l02473"></a><span class="lineno"> 2473</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l02474"></a><span class="lineno"> 2474</span>&#160;    }</div><div class="line"><a name="l02475"></a><span class="lineno"> 2475</span>&#160;</div><div class="line"><a name="l02476"></a><span class="lineno"> 2476</span>&#160;<span class="keyword">private</span>:<span class="comment"></span></div><div class="line"><a name="l02477"></a><span class="lineno"> 2477</span>&#160;<span class="comment">    //! Prohibit copying</span></div><div class="line"><a name="l02478"></a><span class="lineno"> 2478</span>&#160;<span class="comment"></span>    <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>&amp;);<span class="comment"></span></div><div class="line"><a name="l02479"></a><span class="lineno"> 2479</span>&#160;<span class="comment">    //! Prohibit assignment</span></div><div class="line"><a name="l02480"></a><span class="lineno"> 2480</span>&#160;<span class="comment"></span>    <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>&amp; operator=(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>&amp;);</div><div class="line"><a name="l02481"></a><span class="lineno"> 2481</span>&#160;</div><div class="line"><a name="l02482"></a><span class="lineno"> 2482</span>&#160;    <span class="keywordtype">void</span> ClearStack() {</div><div class="line"><a name="l02483"></a><span class="lineno"> 2483</span>&#160;        <span class="keywordflow">if</span> (Allocator::kNeedFree)</div><div class="line"><a name="l02484"></a><span class="lineno"> 2484</span>&#160;            <span class="keywordflow">while</span> (stack_.GetSize() &gt; 0)    <span class="comment">// Here assumes all elements in stack array are GenericValue (Member is actually 2 GenericValue objects)</span></div><div class="line"><a name="l02485"></a><span class="lineno"> 2485</span>&#160;                (stack_.template Pop&lt;ValueType&gt;(1))-&gt;~ValueType();</div><div class="line"><a name="l02486"></a><span class="lineno"> 2486</span>&#160;        <span class="keywordflow">else</span></div><div class="line"><a name="l02487"></a><span class="lineno"> 2487</span>&#160;            stack_.Clear();</div><div class="line"><a name="l02488"></a><span class="lineno"> 2488</span>&#160;        stack_.ShrinkToFit();</div><div class="line"><a name="l02489"></a><span class="lineno"> 2489</span>&#160;    }</div><div class="line"><a name="l02490"></a><span class="lineno"> 2490</span>&#160;</div><div class="line"><a name="l02491"></a><span class="lineno"> 2491</span>&#160;    <span class="keywordtype">void</span> Destroy() {</div><div class="line"><a name="l02492"></a><span class="lineno"> 2492</span>&#160;        <a class="code" href="rapidjson_8h.html#a52c941c3fdd646527cdcd42aa846a28a">RAPIDJSON_DELETE</a>(ownAllocator_);</div><div class="line"><a name="l02493"></a><span class="lineno"> 2493</span>&#160;    }</div><div class="line"><a name="l02494"></a><span class="lineno"> 2494</span>&#160;</div><div class="line"><a name="l02495"></a><span class="lineno"> 2495</span>&#160;    <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">size_t</span> kDefaultStackCapacity = 1024;</div><div class="line"><a name="l02496"></a><span class="lineno"> 2496</span>&#160;    Allocator* allocator_;</div><div class="line"><a name="l02497"></a><span class="lineno"> 2497</span>&#160;    Allocator* ownAllocator_;</div><div class="line"><a name="l02498"></a><span class="lineno"> 2498</span>&#160;    internal::Stack&lt;StackAllocator&gt; stack_;</div><div class="line"><a name="l02499"></a><span class="lineno"> 2499</span>&#160;    <a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#structrapidjson_1_1_parse_result">ParseResult</a> parseResult_;</div><div class="line"><a name="l02500"></a><span class="lineno"> 2500</span>&#160;};</div><div class="line"><a name="l02501"></a><span class="lineno"> 2501</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02502"></a><span class="lineno"> 2502</span>&#160;<span class="comment">//! GenericDocument with UTF8 encoding</span></div><div class="line"><a name="l02503"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#ace11b5b575baf1cccd5ba5f8586dcdc8"> 2503</a></span>&#160;<span class="comment"></span><span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument&lt;UTF8&lt;&gt;</a> &gt; <a class="code" href="namespacerapidjson.html#ace11b5b575baf1cccd5ba5f8586dcdc8">Document</a>;</div><div class="line"><a name="l02504"></a><span class="lineno"> 2504</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02505"></a><span class="lineno"> 2505</span>&#160;<span class="comment">//! Helper class for accessing Value of array type.</span></div><div class="line"><a name="l02506"></a><span class="lineno"> 2506</span>&#160;<span class="comment"></span><span class="comment">/*!</span></div><div class="line"><a name="l02507"></a><span class="lineno"> 2507</span>&#160;<span class="comment">    Instance of this helper class is obtained by \c GenericValue::GetArray().</span></div><div class="line"><a name="l02508"></a><span class="lineno"> 2508</span>&#160;<span class="comment">    In addition to all APIs for array type, it provides range-based for loop if \c RAPIDJSON_HAS_CXX11_RANGE_FOR=1.</span></div><div class="line"><a name="l02509"></a><span class="lineno"> 2509</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l02510"></a><span class="lineno"> 2510</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">bool</span> Const, <span class="keyword">typename</span> ValueT&gt;</div><div class="line"><a name="l02511"></a><span class="lineno"> 2511</span>&#160;<span class="keyword">class </span><a class="code" href="classrapidjson_1_1_generic_array.html">GenericArray</a> {</div><div class="line"><a name="l02512"></a><span class="lineno"> 2512</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l02513"></a><span class="lineno"> 2513</span>&#160;    <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_array.html">GenericArray&lt;true, ValueT&gt;</a> ConstArray;</div><div class="line"><a name="l02514"></a><span class="lineno"> 2514</span>&#160;    <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_array.html">GenericArray&lt;false, ValueT&gt;</a> Array;</div><div class="line"><a name="l02515"></a><span class="lineno"> 2515</span>&#160;    <span class="keyword">typedef</span> ValueT PlainType;</div><div class="line"><a name="l02516"></a><span class="lineno"> 2516</span>&#160;    <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">internal::MaybeAddConst&lt;Const,PlainType&gt;::Type</a> ValueType;</div><div class="line"><a name="l02517"></a><span class="lineno"> 2517</span>&#160;    <span class="keyword">typedef</span> ValueType* ValueIterator;  <span class="comment">// This may be const or non-const iterator</span></div><div class="line"><a name="l02518"></a><span class="lineno"> 2518</span>&#160;    <span class="keyword">typedef</span> <span class="keyword">const</span> ValueT* ConstValueIterator;</div><div class="line"><a name="l02519"></a><span class="lineno"> 2519</span>&#160;    <span class="keyword">typedef</span> <span class="keyword">typename</span> ValueType::AllocatorType AllocatorType;</div><div class="line"><a name="l02520"></a><span class="lineno"> 2520</span>&#160;    <span class="keyword">typedef</span> <span class="keyword">typename</span> ValueType::StringRefType StringRefType;</div><div class="line"><a name="l02521"></a><span class="lineno"> 2521</span>&#160;</div><div class="line"><a name="l02522"></a><span class="lineno"> 2522</span>&#160;    <span class="keyword">template</span> &lt;<span class="keyword">typename</span>, <span class="keyword">typename</span>&gt;</div><div class="line"><a name="l02523"></a><span class="lineno"> 2523</span>&#160;    <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>;</div><div class="line"><a name="l02524"></a><span class="lineno"> 2524</span>&#160;</div><div class="line"><a name="l02525"></a><span class="lineno"> 2525</span>&#160;    <a class="code" href="classrapidjson_1_1_generic_array.html">GenericArray</a>(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_array.html">GenericArray</a>&amp; rhs) : value_(rhs.value_) {}</div><div class="line"><a name="l02526"></a><span class="lineno"> 2526</span>&#160;    <a class="code" href="classrapidjson_1_1_generic_array.html">GenericArray</a>&amp; operator=(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_array.html">GenericArray</a>&amp; rhs) { value_ = rhs.value_; <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l02527"></a><span class="lineno"> 2527</span>&#160;    ~<a class="code" href="classrapidjson_1_1_generic_array.html">GenericArray</a>() {}</div><div class="line"><a name="l02528"></a><span class="lineno"> 2528</span>&#160;</div><div class="line"><a name="l02529"></a><span class="lineno"> 2529</span>&#160;    <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> Size()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.Size(); }</div><div class="line"><a name="l02530"></a><span class="lineno"> 2530</span>&#160;    <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> Capacity()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.Capacity(); }</div><div class="line"><a name="l02531"></a><span class="lineno"> 2531</span>&#160;    <span class="keywordtype">bool</span> Empty()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.Empty(); }</div><div class="line"><a name="l02532"></a><span class="lineno"> 2532</span>&#160;    <span class="keywordtype">void</span> Clear()<span class="keyword"> const </span>{ value_.Clear(); }</div><div class="line"><a name="l02533"></a><span class="lineno"> 2533</span>&#160;    ValueType&amp; operator[](<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> index)<span class="keyword"> const </span>{  <span class="keywordflow">return</span> value_[index]; }</div><div class="line"><a name="l02534"></a><span class="lineno"> 2534</span>&#160;    ValueIterator Begin()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.Begin(); }</div><div class="line"><a name="l02535"></a><span class="lineno"> 2535</span>&#160;    ValueIterator End()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.End(); }</div><div class="line"><a name="l02536"></a><span class="lineno"> 2536</span>&#160;    <a class="code" href="classrapidjson_1_1_generic_array.html">GenericArray</a> Reserve(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> newCapacity, AllocatorType &amp;allocator)<span class="keyword"> const </span>{ value_.Reserve(newCapacity, allocator); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l02537"></a><span class="lineno"> 2537</span>&#160;    <a class="code" href="classrapidjson_1_1_generic_array.html">GenericArray</a> PushBack(ValueType&amp; value, AllocatorType&amp; allocator)<span class="keyword"> const </span>{ value_.PushBack(value, allocator); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l02538"></a><span class="lineno"> 2538</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l02539"></a><span class="lineno"> 2539</span>&#160;    <a class="code" href="classrapidjson_1_1_generic_array.html">GenericArray</a> PushBack(ValueType&amp;&amp; value, AllocatorType&amp; allocator)<span class="keyword"> const </span>{ value_.PushBack(value, allocator); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l02540"></a><span class="lineno"> 2540</span>&#160;<span class="preprocessor">#endif // RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l02541"></a><span class="lineno"> 2541</span>&#160;    <a class="code" href="classrapidjson_1_1_generic_array.html">GenericArray</a> PushBack(StringRefType value, AllocatorType&amp; allocator)<span class="keyword"> const </span>{ value_.PushBack(value, allocator); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l02542"></a><span class="lineno"> 2542</span>&#160;    <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt; RAPIDJSON_DISABLEIF_RETURN((internal::OrExpr&lt;internal::IsPointer&lt;T&gt;, internal::IsGenericValue&lt;T&gt; &gt;), (<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_array.html">GenericArray</a>&amp;)) PushBack(T value, AllocatorType&amp; allocator)<span class="keyword"> const </span>{ value_.PushBack(value, allocator); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l02543"></a><span class="lineno"> 2543</span>&#160;    <a class="code" href="classrapidjson_1_1_generic_array.html">GenericArray</a> PopBack()<span class="keyword"> const </span>{ value_.PopBack(); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l02544"></a><span class="lineno"> 2544</span>&#160;    ValueIterator Erase(ConstValueIterator pos)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.Erase(pos); }</div><div class="line"><a name="l02545"></a><span class="lineno"> 2545</span>&#160;    ValueIterator Erase(ConstValueIterator first, ConstValueIterator last)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.Erase(first, last); }</div><div class="line"><a name="l02546"></a><span class="lineno"> 2546</span>&#160;</div><div class="line"><a name="l02547"></a><span class="lineno"> 2547</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_CXX11_RANGE_FOR</span></div><div class="line"><a name="l02548"></a><span class="lineno"> 2548</span>&#160;    ValueIterator begin()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.Begin(); }</div><div class="line"><a name="l02549"></a><span class="lineno"> 2549</span>&#160;    ValueIterator end()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.End(); }</div><div class="line"><a name="l02550"></a><span class="lineno"> 2550</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02551"></a><span class="lineno"> 2551</span>&#160;</div><div class="line"><a name="l02552"></a><span class="lineno"> 2552</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l02553"></a><span class="lineno"> 2553</span>&#160;    <a class="code" href="classrapidjson_1_1_generic_array.html">GenericArray</a>();</div><div class="line"><a name="l02554"></a><span class="lineno"> 2554</span>&#160;    <a class="code" href="classrapidjson_1_1_generic_array.html">GenericArray</a>(ValueType&amp; value) : value_(value) {}</div><div class="line"><a name="l02555"></a><span class="lineno"> 2555</span>&#160;    ValueType&amp; value_;</div><div class="line"><a name="l02556"></a><span class="lineno"> 2556</span>&#160;};</div><div class="line"><a name="l02557"></a><span class="lineno"> 2557</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02558"></a><span class="lineno"> 2558</span>&#160;<span class="comment">//! Helper class for accessing Value of object type.</span></div><div class="line"><a name="l02559"></a><span class="lineno"> 2559</span>&#160;<span class="comment"></span><span class="comment">/*!</span></div><div class="line"><a name="l02560"></a><span class="lineno"> 2560</span>&#160;<span class="comment">    Instance of this helper class is obtained by \c GenericValue::GetObject().</span></div><div class="line"><a name="l02561"></a><span class="lineno"> 2561</span>&#160;<span class="comment">    In addition to all APIs for array type, it provides range-based for loop if \c RAPIDJSON_HAS_CXX11_RANGE_FOR=1.</span></div><div class="line"><a name="l02562"></a><span class="lineno"> 2562</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l02563"></a><span class="lineno"> 2563</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">bool</span> Const, <span class="keyword">typename</span> ValueT&gt;</div><div class="line"><a name="l02564"></a><span class="lineno"> 2564</span>&#160;<span class="keyword">class </span><a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject</a> {</div><div class="line"><a name="l02565"></a><span class="lineno"> 2565</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l02566"></a><span class="lineno"> 2566</span>&#160;    <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject&lt;true, ValueT&gt;</a> ConstObject;</div><div class="line"><a name="l02567"></a><span class="lineno"> 2567</span>&#160;    <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject&lt;false, ValueT&gt;</a> Object;</div><div class="line"><a name="l02568"></a><span class="lineno"> 2568</span>&#160;    <span class="keyword">typedef</span> ValueT PlainType;</div><div class="line"><a name="l02569"></a><span class="lineno"> 2569</span>&#160;    <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">internal::MaybeAddConst&lt;Const,PlainType&gt;::Type</a> ValueType;</div><div class="line"><a name="l02570"></a><span class="lineno"> 2570</span>&#160;    <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">GenericMemberIterator&lt;Const, typename ValueT::EncodingType, typename ValueT::AllocatorType&gt;</a> MemberIterator;  <span class="comment">// This may be const or non-const iterator</span></div><div class="line"><a name="l02571"></a><span class="lineno"> 2571</span>&#160;    <span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_member_iterator.html">GenericMemberIterator&lt;true, typename ValueT::EncodingType, typename ValueT::AllocatorType&gt;</a> ConstMemberIterator;</div><div class="line"><a name="l02572"></a><span class="lineno"> 2572</span>&#160;    <span class="keyword">typedef</span> <span class="keyword">typename</span> ValueType::AllocatorType AllocatorType;</div><div class="line"><a name="l02573"></a><span class="lineno"> 2573</span>&#160;    <span class="keyword">typedef</span> <span class="keyword">typename</span> ValueType::StringRefType StringRefType;</div><div class="line"><a name="l02574"></a><span class="lineno"> 2574</span>&#160;    <span class="keyword">typedef</span> <span class="keyword">typename</span> ValueType::EncodingType EncodingType;</div><div class="line"><a name="l02575"></a><span class="lineno"> 2575</span>&#160;    <span class="keyword">typedef</span> <span class="keyword">typename</span> ValueType::Ch Ch;</div><div class="line"><a name="l02576"></a><span class="lineno"> 2576</span>&#160;</div><div class="line"><a name="l02577"></a><span class="lineno"> 2577</span>&#160;    <span class="keyword">template</span> &lt;<span class="keyword">typename</span>, <span class="keyword">typename</span>&gt;</div><div class="line"><a name="l02578"></a><span class="lineno"> 2578</span>&#160;    <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue</a>;</div><div class="line"><a name="l02579"></a><span class="lineno"> 2579</span>&#160;</div><div class="line"><a name="l02580"></a><span class="lineno"> 2580</span>&#160;    <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject</a>(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject</a>&amp; rhs) : value_(rhs.value_) {}</div><div class="line"><a name="l02581"></a><span class="lineno"> 2581</span>&#160;    <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject</a>&amp; operator=(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject</a>&amp; rhs) { value_ = rhs.value_; <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l02582"></a><span class="lineno"> 2582</span>&#160;    ~<a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject</a>() {}</div><div class="line"><a name="l02583"></a><span class="lineno"> 2583</span>&#160;</div><div class="line"><a name="l02584"></a><span class="lineno"> 2584</span>&#160;    <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> MemberCount()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.MemberCount(); }</div><div class="line"><a name="l02585"></a><span class="lineno"> 2585</span>&#160;    <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> MemberCapacity()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.MemberCapacity(); }</div><div class="line"><a name="l02586"></a><span class="lineno"> 2586</span>&#160;    <span class="keywordtype">bool</span> ObjectEmpty()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.ObjectEmpty(); }</div><div class="line"><a name="l02587"></a><span class="lineno"> 2587</span>&#160;    <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt; ValueType&amp; operator[](T* name)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_[name]; }</div><div class="line"><a name="l02588"></a><span class="lineno"> 2588</span>&#160;    <span class="keyword">template</span> &lt;<span class="keyword">typename</span> SourceAllocator&gt; ValueType&amp; operator[](<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue&lt;EncodingType, SourceAllocator&gt;</a>&amp; name)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_[name]; }</div><div class="line"><a name="l02589"></a><span class="lineno"> 2589</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l02590"></a><span class="lineno"> 2590</span>&#160;    ValueType&amp; operator[](<span class="keyword">const</span> std::basic_string&lt;Ch&gt;&amp; name)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_[name]; }</div><div class="line"><a name="l02591"></a><span class="lineno"> 2591</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02592"></a><span class="lineno"> 2592</span>&#160;    MemberIterator MemberBegin()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.MemberBegin(); }</div><div class="line"><a name="l02593"></a><span class="lineno"> 2593</span>&#160;    MemberIterator MemberEnd()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.MemberEnd(); }</div><div class="line"><a name="l02594"></a><span class="lineno"> 2594</span>&#160;    <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject</a> MemberReserve(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> newCapacity, AllocatorType &amp;allocator)<span class="keyword"> const </span>{ value_.MemberReserve(newCapacity, allocator); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l02595"></a><span class="lineno"> 2595</span>&#160;    <span class="keywordtype">bool</span> HasMember(<span class="keyword">const</span> Ch* name)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.HasMember(name); }</div><div class="line"><a name="l02596"></a><span class="lineno"> 2596</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l02597"></a><span class="lineno"> 2597</span>&#160;    <span class="keywordtype">bool</span> HasMember(<span class="keyword">const</span> std::basic_string&lt;Ch&gt;&amp; name)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.HasMember(name); }</div><div class="line"><a name="l02598"></a><span class="lineno"> 2598</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02599"></a><span class="lineno"> 2599</span>&#160;    <span class="keyword">template</span> &lt;<span class="keyword">typename</span> SourceAllocator&gt; <span class="keywordtype">bool</span> HasMember(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue&lt;EncodingType, SourceAllocator&gt;</a>&amp; name)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.HasMember(name); }</div><div class="line"><a name="l02600"></a><span class="lineno"> 2600</span>&#160;    MemberIterator FindMember(<span class="keyword">const</span> Ch* name)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.FindMember(name); }</div><div class="line"><a name="l02601"></a><span class="lineno"> 2601</span>&#160;    <span class="keyword">template</span> &lt;<span class="keyword">typename</span> SourceAllocator&gt; MemberIterator FindMember(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue&lt;EncodingType, SourceAllocator&gt;</a>&amp; name)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.FindMember(name); }</div><div class="line"><a name="l02602"></a><span class="lineno"> 2602</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l02603"></a><span class="lineno"> 2603</span>&#160;    MemberIterator FindMember(<span class="keyword">const</span> std::basic_string&lt;Ch&gt;&amp; name)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.FindMember(name); }</div><div class="line"><a name="l02604"></a><span class="lineno"> 2604</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02605"></a><span class="lineno"> 2605</span>&#160;    <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject</a> AddMember(ValueType&amp; name, ValueType&amp; value, AllocatorType&amp; allocator)<span class="keyword"> const </span>{ value_.AddMember(name, value, allocator); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l02606"></a><span class="lineno"> 2606</span>&#160;    <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject</a> AddMember(ValueType&amp; name, StringRefType value, AllocatorType&amp; allocator)<span class="keyword"> const </span>{ value_.AddMember(name, value, allocator); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l02607"></a><span class="lineno"> 2607</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l02608"></a><span class="lineno"> 2608</span>&#160;    <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject</a> AddMember(ValueType&amp; name, std::basic_string&lt;Ch&gt;&amp; value, AllocatorType&amp; allocator)<span class="keyword"> const </span>{ value_.AddMember(name, value, allocator); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l02609"></a><span class="lineno"> 2609</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02610"></a><span class="lineno"> 2610</span>&#160;    <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt; RAPIDJSON_DISABLEIF_RETURN((internal::OrExpr&lt;internal::IsPointer&lt;T&gt;, internal::IsGenericValue&lt;T&gt; &gt;), (ValueType&amp;)) AddMember(ValueType&amp; name, T value, AllocatorType&amp; allocator)<span class="keyword"> const </span>{ value_.AddMember(name, value, allocator); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l02611"></a><span class="lineno"> 2611</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l02612"></a><span class="lineno"> 2612</span>&#160;    <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject</a> AddMember(ValueType&amp;&amp; name, ValueType&amp;&amp; value, AllocatorType&amp; allocator)<span class="keyword"> const </span>{ value_.AddMember(name, value, allocator); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l02613"></a><span class="lineno"> 2613</span>&#160;    <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject</a> AddMember(ValueType&amp;&amp; name, ValueType&amp; value, AllocatorType&amp; allocator)<span class="keyword"> const </span>{ value_.AddMember(name, value, allocator); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l02614"></a><span class="lineno"> 2614</span>&#160;    <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject</a> AddMember(ValueType&amp; name, ValueType&amp;&amp; value, AllocatorType&amp; allocator)<span class="keyword"> const </span>{ value_.AddMember(name, value, allocator); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l02615"></a><span class="lineno"> 2615</span>&#160;    <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject</a> AddMember(StringRefType name, ValueType&amp;&amp; value, AllocatorType&amp; allocator)<span class="keyword"> const </span>{ value_.AddMember(name, value, allocator); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l02616"></a><span class="lineno"> 2616</span>&#160;<span class="preprocessor">#endif // RAPIDJSON_HAS_CXX11_RVALUE_REFS</span></div><div class="line"><a name="l02617"></a><span class="lineno"> 2617</span>&#160;    <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject</a> AddMember(StringRefType name, ValueType&amp; value, AllocatorType&amp; allocator)<span class="keyword"> const </span>{ value_.AddMember(name, value, allocator); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l02618"></a><span class="lineno"> 2618</span>&#160;    <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject</a> AddMember(StringRefType name, StringRefType value, AllocatorType&amp; allocator)<span class="keyword"> const </span>{ value_.AddMember(name, value, allocator); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l02619"></a><span class="lineno"> 2619</span>&#160;    <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt; RAPIDJSON_DISABLEIF_RETURN((internal::OrExpr&lt;internal::IsPointer&lt;T&gt;, internal::IsGenericValue&lt;T&gt; &gt;), (<a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject</a>)) AddMember(StringRefType name, T value, AllocatorType&amp; allocator)<span class="keyword"> const </span>{ value_.AddMember(name, value, allocator); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l02620"></a><span class="lineno"> 2620</span>&#160;    <span class="keywordtype">void</span> RemoveAllMembers() { value_.RemoveAllMembers(); }</div><div class="line"><a name="l02621"></a><span class="lineno"> 2621</span>&#160;    <span class="keywordtype">bool</span> RemoveMember(<span class="keyword">const</span> Ch* name)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.RemoveMember(name); }</div><div class="line"><a name="l02622"></a><span class="lineno"> 2622</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l02623"></a><span class="lineno"> 2623</span>&#160;    <span class="keywordtype">bool</span> RemoveMember(<span class="keyword">const</span> std::basic_string&lt;Ch&gt;&amp; name)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.RemoveMember(name); }</div><div class="line"><a name="l02624"></a><span class="lineno"> 2624</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02625"></a><span class="lineno"> 2625</span>&#160;    <span class="keyword">template</span> &lt;<span class="keyword">typename</span> SourceAllocator&gt; <span class="keywordtype">bool</span> RemoveMember(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue&lt;EncodingType, SourceAllocator&gt;</a>&amp; name)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.RemoveMember(name); }</div><div class="line"><a name="l02626"></a><span class="lineno"> 2626</span>&#160;    MemberIterator RemoveMember(MemberIterator m)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.RemoveMember(m); }</div><div class="line"><a name="l02627"></a><span class="lineno"> 2627</span>&#160;    MemberIterator EraseMember(ConstMemberIterator pos)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.EraseMember(pos); }</div><div class="line"><a name="l02628"></a><span class="lineno"> 2628</span>&#160;    MemberIterator EraseMember(ConstMemberIterator first, ConstMemberIterator last)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.EraseMember(first, last); }</div><div class="line"><a name="l02629"></a><span class="lineno"> 2629</span>&#160;    <span class="keywordtype">bool</span> EraseMember(<span class="keyword">const</span> Ch* name)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.EraseMember(name); }</div><div class="line"><a name="l02630"></a><span class="lineno"> 2630</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l02631"></a><span class="lineno"> 2631</span>&#160;    <span class="keywordtype">bool</span> EraseMember(<span class="keyword">const</span> std::basic_string&lt;Ch&gt;&amp; name)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> EraseMember(ValueType(<a class="code" href="namespacerapidjson.html#af94951529a5d51e8c4e6e770bb707c1f">StringRef</a>(name))); }</div><div class="line"><a name="l02632"></a><span class="lineno"> 2632</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02633"></a><span class="lineno"> 2633</span>&#160;    <span class="keyword">template</span> &lt;<span class="keyword">typename</span> SourceAllocator&gt; <span class="keywordtype">bool</span> EraseMember(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_value.html">GenericValue&lt;EncodingType, SourceAllocator&gt;</a>&amp; name)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.EraseMember(name); }</div><div class="line"><a name="l02634"></a><span class="lineno"> 2634</span>&#160;</div><div class="line"><a name="l02635"></a><span class="lineno"> 2635</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_CXX11_RANGE_FOR</span></div><div class="line"><a name="l02636"></a><span class="lineno"> 2636</span>&#160;    MemberIterator begin()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.MemberBegin(); }</div><div class="line"><a name="l02637"></a><span class="lineno"> 2637</span>&#160;    MemberIterator end()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_.MemberEnd(); }</div><div class="line"><a name="l02638"></a><span class="lineno"> 2638</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02639"></a><span class="lineno"> 2639</span>&#160;</div><div class="line"><a name="l02640"></a><span class="lineno"> 2640</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l02641"></a><span class="lineno"> 2641</span>&#160;    <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject</a>();</div><div class="line"><a name="l02642"></a><span class="lineno"> 2642</span>&#160;    <a class="code" href="classrapidjson_1_1_generic_object.html">GenericObject</a>(ValueType&amp; value) : value_(value) {}</div><div class="line"><a name="l02643"></a><span class="lineno"> 2643</span>&#160;    ValueType&amp; value_;</div><div class="line"><a name="l02644"></a><span class="lineno"> 2644</span>&#160;};</div><div class="line"><a name="l02645"></a><span class="lineno"> 2645</span>&#160;</div><div class="line"><a name="l02646"></a><span class="lineno"> 2646</span>&#160;RAPIDJSON_NAMESPACE_END</div><div class="line"><a name="l02647"></a><span class="lineno"> 2647</span>&#160;RAPIDJSON_DIAG_POP</div><div class="line"><a name="l02648"></a><span class="lineno"> 2648</span>&#160;</div><div class="line"><a name="l02649"></a><span class="lineno"> 2649</span>&#160;<span class="preprocessor">#endif // RAPIDJSON_DOCUMENT_H_</span></div><div class="ttc" id="classrapidjson_1_1_generic_document_html_a41bbec044c421e870a9d355075d741bc"><div class="ttname"><a href="classrapidjson_1_1_generic_document.html#a41bbec044c421e870a9d355075d741bc">rapidjson::GenericDocument::ValueType</a></div><div class="ttdeci">GenericValue&lt; Encoding, Allocator &gt; ValueType</div><div class="ttdoc">Value type of the document. </div><div class="ttdef"><b>Definition:</b> document.h:2124</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_a4a8060a42b7953a2981ad892180ca5a6"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a4a8060a42b7953a2981ad892180ca5a6">rapidjson::GenericValue::GenericValue</a></div><div class="ttdeci">GenericValue(unsigned u) RAPIDJSON_NOEXCEPT</div><div class="ttdoc">Constructor for unsigned value. </div><div class="ttdef"><b>Definition:</b> document.h:715</div></div>
<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4a80d9f25b083abce45edbfdd3ba006c8e"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a80d9f25b083abce45edbfdd3ba006c8e">rapidjson::kTrueType</a></div><div class="ttdoc">true </div><div class="ttdef"><b>Definition:</b> rapidjson.h:634</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_a916f443e02f9379d8fbde49a4d440f61"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a916f443e02f9379d8fbde49a4d440f61">rapidjson::GenericValue::Erase</a></div><div class="ttdeci">ValueIterator Erase(ConstValueIterator first, ConstValueIterator last)</div><div class="ttdoc">Remove elements in the range [first, last) of the array. </div><div class="ttdef"><b>Definition:</b> document.h:1711</div></div>
<div class="ttc" id="structrapidjson_1_1_generic_value_1_1_number_1_1_i_html"><div class="ttname"><a href="structrapidjson_1_1_generic_value_1_1_number_1_1_i.html">rapidjson::GenericValue::Number::I</a></div><div class="ttdef"><b>Definition:</b> document.h:1988</div></div>
<div class="ttc" id="structrapidjson_1_1_generic_string_stream_html"><div class="ttname"><a href="structrapidjson_1_1_generic_string_stream.html">rapidjson::GenericStringStream</a></div><div class="ttdoc">Read-only string stream. </div><div class="ttdef"><b>Definition:</b> fwd.h:47</div></div>
<div class="ttc" id="classrapidjson_1_1_handler_html"><div class="ttname"><a href="classrapidjson_1_1_handler.html">rapidjson::Handler</a></div><div class="ttdoc">Concept for receiving events from GenericReader upon parsing. The functions return true if no error o...</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_a07b19e65fb756cae13e5bdc515cfbd4b"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a07b19e65fb756cae13e5bdc515cfbd4b">rapidjson::GenericValue::Move</a></div><div class="ttdeci">GenericValue &amp; Move() RAPIDJSON_NOEXCEPT</div><div class="ttdoc">Prepare Value for move semantics </div><div class="ttdef"><b>Definition:</b> document.h:921</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_ab4e5285102bb686f39bca2855a17a181"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#ab4e5285102bb686f39bca2855a17a181">rapidjson::GenericValue::operator==</a></div><div class="ttdeci">bool operator==(const GenericValue&lt; Encoding, SourceAllocator &gt; &amp;rhs) const</div><div class="ttdoc">Equal-to operator </div><div class="ttdef"><b>Definition:</b> document.h:932</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_a9ba3d9d8a106d5b7e92fb49db897c21b"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a9ba3d9d8a106d5b7e92fb49db897c21b">rapidjson::GenericValue::SetString</a></div><div class="ttdeci">GenericValue &amp; SetString(StringRefType s, Allocator &amp;allocator)</div><div class="ttdoc">Set this value as a string by copying from source string. </div><div class="ttdef"><b>Definition:</b> document.h:1818</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_a8d1040c479d89edb261db86400ebe603"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a8d1040c479d89edb261db86400ebe603">rapidjson::GenericValue::Begin</a></div><div class="ttdeci">ValueIterator Begin()</div><div class="ttdoc">Element iterator </div><div class="ttdef"><b>Definition:</b> document.h:1594</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_member_iterator_html_a61b9a9ba8a5917d90406532f104605cc"><div class="ttname"><a href="classrapidjson_1_1_generic_member_iterator.html#a61b9a9ba8a5917d90406532f104605cc">rapidjson::GenericMemberIterator::ConstIterator</a></div><div class="ttdeci">GenericMemberIterator&lt; true, Encoding, Allocator &gt; ConstIterator</div><div class="ttdoc">Constant iterator type </div><div class="ttdef"><b>Definition:</b> document.h:111</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_ad9553bb9ccbfd19547c473a95405a8b2"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#ad9553bb9ccbfd19547c473a95405a8b2">rapidjson::GenericValue::GenericValue</a></div><div class="ttdeci">GenericValue(const Ch *s, SizeType length, Allocator &amp;allocator)</div><div class="ttdoc">Constructor for copy-string (i.e. do make a copy of string) </div><div class="ttdef"><b>Definition:</b> document.h:760</div></div>
<div class="ttc" id="namespacerapidjson_html_aa65fc9fb381b2cbc54f98673eadd6505"><div class="ttname"><a href="namespacerapidjson.html#aa65fc9fb381b2cbc54f98673eadd6505">rapidjson::Value</a></div><div class="ttdeci">GenericValue&lt; UTF8&lt;&gt; &gt; Value</div><div class="ttdoc">GenericValue with UTF8 encoding </div><div class="ttdef"><b>Definition:</b> document.h:2107</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_acd4ae9a8dba4498d1d7cce6667529bb8"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#acd4ae9a8dba4498d1d7cce6667529bb8">rapidjson::GenericValue::GenericValue</a></div><div class="ttdeci">GenericValue(int64_t i64) RAPIDJSON_NOEXCEPT</div><div class="ttdoc">Constructor for int64_t value. </div><div class="ttdef"><b>Definition:</b> document.h:721</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_af089d2bee0386ca7504ff4fab466c87f"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#af089d2bee0386ca7504ff4fab466c87f">rapidjson::GenericValue::operator==</a></div><div class="ttdeci">bool operator==(const std::basic_string&lt; Ch &gt; &amp;rhs) const</div><div class="ttdoc">Equal-to operator with string object </div><div class="ttdef"><b>Definition:</b> document.h:980</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_a433a64b466c80cadf7d1acaa6f065437"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a433a64b466c80cadf7d1acaa6f065437">rapidjson::GenericValue::~GenericValue</a></div><div class="ttdeci">~GenericValue()</div><div class="ttdoc">Destructor. </div><div class="ttdef"><b>Definition:</b> document.h:797</div></div>
<div class="ttc" id="rapidjson_8h_html_aaee1245f375a71be1ac9b8a07ba5fb8f"><div class="ttname"><a href="rapidjson_8h.html#aaee1245f375a71be1ac9b8a07ba5fb8f">RAPIDJSON_UINT64_C2</a></div><div class="ttdeci">#define RAPIDJSON_UINT64_C2(high32, low32)</div><div class="ttdoc">Construct a 64-bit literal by a pair of 32-bit integer. </div><div class="ttdef"><b>Definition:</b> rapidjson.h:289</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_reader_html"><div class="ttname"><a href="classrapidjson_1_1_generic_reader.html">rapidjson::GenericReader</a></div><div class="ttdoc">SAX-style JSON parser. Use Reader for UTF8 encoding and default allocator. </div><div class="ttdef"><b>Definition:</b> fwd.h:88</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_document_html_acf96a3c7fd61486d049c701b1fe5d414"><div class="ttname"><a href="classrapidjson_1_1_generic_document.html#acf96a3c7fd61486d049c701b1fe5d414">rapidjson::GenericDocument::ParseStream</a></div><div class="ttdeci">GenericDocument &amp; ParseStream(InputStream &amp;is)</div><div class="ttdoc">Parse JSON text from an input stream (with kParseDefaultFlags) </div><div class="ttdef"><b>Definition:</b> document.h:2285</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_a893da1069660536fd3943a0149206a6e"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a893da1069660536fd3943a0149206a6e">rapidjson::GenericValue::GenericValue</a></div><div class="ttdeci">GenericValue(Object o) RAPIDJSON_NOEXCEPT</div><div class="ttdoc">Constructor for Object. </div><div class="ttdef"><b>Definition:</b> document.h:789</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_a65bfc3073fa80ee5eba8e985abe2f941"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a65bfc3073fa80ee5eba8e985abe2f941">rapidjson::GenericValue::GenericValue</a></div><div class="ttdeci">GenericValue(StringRefType s) RAPIDJSON_NOEXCEPT</div><div class="ttdoc">Constructor for constant string (i.e. do not make a copy of string) </div><div class="ttdef"><b>Definition:</b> document.h:757</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_a3e930bffb40a78e570e3deef461f0532"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a3e930bffb40a78e570e3deef461f0532">rapidjson::GenericValue::SetString</a></div><div class="ttdeci">GenericValue &amp; SetString(const std::basic_string&lt; Ch &gt; &amp;s, Allocator &amp;allocator)</div><div class="ttdoc">Set this value as a string by copying from source string. </div><div class="ttdef"><b>Definition:</b> document.h:1828</div></div>
<div class="ttc" id="reader_8h_html"><div class="ttname"><a href="reader_8h.html">reader.h</a></div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_a9b3b30acbe60d7a5b105afa05c1ddfb0"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a9b3b30acbe60d7a5b105afa05c1ddfb0">rapidjson::GenericValue::HasMember</a></div><div class="ttdeci">bool HasMember(const std::basic_string&lt; Ch &gt; &amp;name) const</div><div class="ttdoc">Check whether a member exists in the object with string object. </div><div class="ttdef"><b>Definition:</b> document.h:1203</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_a7cb3cbaefe4fb99aaf9f155fb4ee039b"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a7cb3cbaefe4fb99aaf9f155fb4ee039b">rapidjson::GenericValue::SetObject</a></div><div class="ttdeci">GenericValue &amp; SetObject()</div><div class="ttdoc">Set this value as an empty object. </div><div class="ttdef"><b>Definition:</b> document.h:1093</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_a559eb9cea54364a35518b02f6d74f379"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a559eb9cea54364a35518b02f6d74f379">rapidjson::GenericValue::StringRefType</a></div><div class="ttdeci">GenericStringRef&lt; Ch &gt; StringRefType</div><div class="ttdoc">Reference to a constant string </div><div class="ttdef"><b>Definition:</b> document.h:582</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_member_iterator_html_a37091c3dd8470486ef5188f3c1108653"><div class="ttname"><a href="classrapidjson_1_1_generic_member_iterator.html#a37091c3dd8470486ef5188f3c1108653">rapidjson::GenericMemberIterator::Iterator</a></div><div class="ttdeci">GenericMemberIterator Iterator</div><div class="ttdoc">Iterator type itself </div><div class="ttdef"><b>Definition:</b> document.h:109</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_adca019775f68f012643781cd2c2515ac"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#adca019775f68f012643781cd2c2515ac">rapidjson::GenericValue::GenericValue</a></div><div class="ttdeci">GenericValue(const GenericValue&lt; Encoding, SourceAllocator &gt; &amp;rhs, Allocator &amp;allocator, bool copyConstStrings=false)</div><div class="ttdoc">Explicit copy constructor (with allocator) </div><div class="ttdef"><b>Definition:</b> document.h:649</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_ae8bcedd951f50b69786aaaa1828e9fac"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#ae8bcedd951f50b69786aaaa1828e9fac">rapidjson::GenericValue::operator=</a></div><div class="ttdeci">GenericValue &amp; operator=(GenericValue &amp;rhs) RAPIDJSON_NOEXCEPT</div><div class="ttdoc">Assignment with move semantics. </div><div class="ttdef"><b>Definition:</b> document.h:833</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_af03ef6020e188bbfceb018da5cd8becc"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#af03ef6020e188bbfceb018da5cd8becc">rapidjson::GenericValue::operator==</a></div><div class="ttdeci">bool operator==(const Ch *rhs) const</div><div class="ttdoc">Equal-to operator with const C-string pointer </div><div class="ttdef"><b>Definition:</b> document.h:974</div></div>
<div class="ttc" id="namespacerapidjson_html_a44eb33eaa523e36d466b1ced64b85c84"><div class="ttname"><a href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">rapidjson::SizeType</a></div><div class="ttdeci">unsigned SizeType</div><div class="ttdoc">Size type (for string lengths, array sizes, etc.) </div><div class="ttdef"><b>Definition:</b> rapidjson.h:384</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_member_iterator_html_a1a91868fa388664bb301061e3e24badb"><div class="ttname"><a href="classrapidjson_1_1_generic_member_iterator.html#a1a91868fa388664bb301061e3e24badb">rapidjson::GenericMemberIterator::NonConstIterator</a></div><div class="ttdeci">GenericMemberIterator&lt; false, Encoding, Allocator &gt; NonConstIterator</div><div class="ttdoc">Non-constant iterator type </div><div class="ttdef"><b>Definition:</b> document.h:113</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_array_html"><div class="ttname"><a href="classrapidjson_1_1_generic_array.html">rapidjson::GenericArray</a></div><div class="ttdoc">Helper class for accessing Value of array type. </div><div class="ttdef"><b>Definition:</b> document.h:558</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_a799a8a2503989f486f3fc7a660266555"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a799a8a2503989f486f3fc7a660266555">rapidjson::GenericValue::Size</a></div><div class="ttdeci">SizeType Size() const</div><div class="ttdoc">Get the number of elements in array. </div><div class="ttdef"><b>Definition:</b> document.h:1560</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_document_html_a4c85243a28c9dcf2d1357da00fcaa773"><div class="ttname"><a href="classrapidjson_1_1_generic_document.html#a4c85243a28c9dcf2d1357da00fcaa773">rapidjson::GenericDocument::AllocatorType</a></div><div class="ttdeci">Allocator AllocatorType</div><div class="ttdoc">Allocator type from template parameter. </div><div class="ttdef"><b>Definition:</b> document.h:2125</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_a8d75bf0c6c0fa4f8d340a4236e98539b"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a8d75bf0c6c0fa4f8d340a4236e98539b">rapidjson::GenericValue::FindMember</a></div><div class="ttdeci">MemberIterator FindMember(const GenericValue&lt; Encoding, SourceAllocator &gt; &amp;name)</div><div class="ttdoc">Find member by name. </div><div class="ttdef"><b>Definition:</b> document.h:1251</div></div>
<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4a9f2e7047832dce1029551b5de0f05607"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a9f2e7047832dce1029551b5de0f05607">rapidjson::kFalseType</a></div><div class="ttdoc">false </div><div class="ttdef"><b>Definition:</b> rapidjson.h:633</div></div>
<div class="ttc" id="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="rapidjson_8h_html_af95188da1d8eb6d4b148fe9ce71cd7c4"><div class="ttname"><a href="rapidjson_8h.html#af95188da1d8eb6d4b148fe9ce71cd7c4">RAPIDJSON_STATIC_ASSERT</a></div><div class="ttdeci">#define RAPIDJSON_STATIC_ASSERT(x)</div><div class="ttdoc">(Internal) macro to check for conditions at compile-time </div><div class="ttdef"><b>Definition:</b> rapidjson.h:445</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_a83ba61e8a5170c2e172fd60ebc11016f"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a83ba61e8a5170c2e172fd60ebc11016f">rapidjson::GenericValue::GenericValue</a></div><div class="ttdeci">GenericValue(const Ch *s, Allocator &amp;allocator)</div><div class="ttdoc">Constructor for copy-string (i.e. do make a copy of string) </div><div class="ttdef"><b>Definition:</b> document.h:763</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_ae08898bef949f217f0e5d28e19f05992"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#ae08898bef949f217f0e5d28e19f05992">rapidjson::GenericValue::operator!=</a></div><div class="ttdeci">friend bool operator!=(const T &amp;lhs, const GenericValue &amp;rhs)</div><div class="ttdoc">Not-Equal-to operator with arbitrary types (symmetric version) </div><div class="ttdef"><b>Definition:</b> document.h:1010</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_member_iterator_html_aff2739a9265639a7a4be8c3e6216b31a"><div class="ttname"><a href="classrapidjson_1_1_generic_member_iterator.html#aff2739a9265639a7a4be8c3e6216b31a">rapidjson::GenericMemberIterator::DifferenceType</a></div><div class="ttdeci">difference_type DifferenceType</div><div class="ttdoc">Signed integer type (e.g. ptrdiff_t) </div><div class="ttdef"><b>Definition:</b> document.h:129</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_aa60074f72a6d1651828a104b0c6387b1"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#aa60074f72a6d1651828a104b0c6387b1">rapidjson::GenericValue::RemoveMember</a></div><div class="ttdeci">bool RemoveMember(const Ch *name)</div><div class="ttdoc">Remove a member in object by its name. </div><div class="ttdef"><b>Definition:</b> document.h:1441</div></div>
<div class="ttc" id="structrapidjson_1_1_memory_stream_html"><div class="ttname"><a href="structrapidjson_1_1_memory_stream.html">rapidjson::MemoryStream</a></div><div class="ttdoc">Represents an in-memory input byte stream. </div><div class="ttdef"><b>Definition:</b> memorystream.h:40</div></div>
<div class="ttc" id="namespacerapidjson_html_af94951529a5d51e8c4e6e770bb707c1f"><div class="ttname"><a href="namespacerapidjson.html#af94951529a5d51e8c4e6e770bb707c1f">rapidjson::StringRef</a></div><div class="ttdeci">GenericStringRef&lt; CharType &gt; StringRef(const std::basic_string&lt; CharType &gt; &amp;str)</div><div class="ttdoc">Mark a string object as constant string </div><div class="ttdef"><b>Definition:</b> document.h:399</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_member_iterator_html_abe27838f8dc71fdb38028ef27ae0b4f2"><div class="ttname"><a href="classrapidjson_1_1_generic_member_iterator.html#abe27838f8dc71fdb38028ef27ae0b4f2">rapidjson::GenericMemberIterator::Reference</a></div><div class="ttdeci">reference Reference</div><div class="ttdoc">Reference to (const) GenericMember </div><div class="ttdef"><b>Definition:</b> document.h:127</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_ae475f31fb851138ced40e2ff6cb43ca6"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#ae475f31fb851138ced40e2ff6cb43ca6">rapidjson::GenericValue::PopBack</a></div><div class="ttdeci">GenericValue &amp; PopBack()</div><div class="ttdoc">Remove the last element in the array. </div><div class="ttdef"><b>Definition:</b> document.h:1685</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_a17971ba2bcd4eb1716098fdfe9182386"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a17971ba2bcd4eb1716098fdfe9182386">rapidjson::GenericValue::Reserve</a></div><div class="ttdeci">GenericValue &amp; Reserve(SizeType newCapacity, Allocator &amp;allocator)</div><div class="ttdoc">Request the array to have enough capacity to store elements. </div><div class="ttdef"><b>Definition:</b> document.h:1611</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_aaf58b9337ccc0cdf16aa9634c4645109"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#aaf58b9337ccc0cdf16aa9634c4645109">rapidjson::GenericValue::End</a></div><div class="ttdeci">ValueIterator End()</div><div class="ttdoc">Past-the-end element iterator </div><div class="ttdef"><b>Definition:</b> document.h:1597</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_a6443cf5323fb46c4c51cd15a365da49b"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a6443cf5323fb46c4c51cd15a365da49b">rapidjson::GenericValue::operator!=</a></div><div class="ttdeci">bool operator!=(const Ch *rhs) const</div><div class="ttdoc">Not-equal-to operator with const C-string pointer </div><div class="ttdef"><b>Definition:</b> document.h:995</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_ac51a3b3046aaa12aa1d88ac876a28cec"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#ac51a3b3046aaa12aa1d88ac876a28cec">rapidjson::GenericValue::EraseMember</a></div><div class="ttdeci">bool EraseMember(const Ch *name)</div><div class="ttdoc">Erase a member in object by its name. </div><div class="ttdef"><b>Definition:</b> document.h:1527</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_document_html_ab031375318d133f83a114314b75703de"><div class="ttname"><a href="classrapidjson_1_1_generic_document.html#ab031375318d133f83a114314b75703de">rapidjson::GenericDocument::Parse</a></div><div class="ttdeci">GenericDocument &amp; Parse(const Ch *str)</div><div class="ttdoc">Parse JSON text from a read-only string (with kParseDefaultFlags) </div><div class="ttdef"><b>Definition:</b> document.h:2340</div></div>
<div class="ttc" id="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g_html_ga5dc14176a9e71ace282404b0bcda57a1"><div class="ttname"><a href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga5dc14176a9e71ace282404b0bcda57a1">RAPIDJSON_LIKELY</a></div><div class="ttdeci">#define RAPIDJSON_LIKELY(x)</div><div class="ttdoc">Compiler branching hint for expression with high probability to be true. </div><div class="ttdef"><b>Definition:</b> rapidjson.h:463</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_af91573ce61d798f0bc5dc88b00742697"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#af91573ce61d798f0bc5dc88b00742697">rapidjson::GenericValue::RemoveMember</a></div><div class="ttdeci">MemberIterator RemoveMember(MemberIterator m)</div><div class="ttdoc">Remove a member in object by iterator. </div><div class="ttdef"><b>Definition:</b> document.h:1469</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_member_iterator_html_aa9d53504374c7c6bdf46775482c5b107"><div class="ttname"><a href="classrapidjson_1_1_generic_member_iterator.html#aa9d53504374c7c6bdf46775482c5b107">rapidjson::GenericMemberIterator::Pointer</a></div><div class="ttdeci">pointer Pointer</div><div class="ttdoc">Pointer to (const) GenericMember </div><div class="ttdef"><b>Definition:</b> document.h:125</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_a93f0f317f397c36a24a0f3c32648623a"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a93f0f317f397c36a24a0f3c32648623a">rapidjson::GenericValue::MemberBegin</a></div><div class="ttdeci">MemberIterator MemberBegin()</div><div class="ttdoc">Member iterator </div><div class="ttdef"><b>Definition:</b> document.h:1164</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_a58ecce8a34fc029039b8079de246bdaa"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a58ecce8a34fc029039b8079de246bdaa">rapidjson::GenericValue::swap</a></div><div class="ttdeci">friend void swap(GenericValue &amp;a, GenericValue &amp;b) RAPIDJSON_NOEXCEPT</div><div class="ttdoc">free-standing swap function helper </div><div class="ttdef"><b>Definition:</b> document.h:917</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_a5d47340c96346c5028fee4c9068d783d"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a5d47340c96346c5028fee4c9068d783d">rapidjson::GenericValue::AllocatorType</a></div><div class="ttdeci">Allocator AllocatorType</div><div class="ttdoc">Allocator type from template parameter. </div><div class="ttdef"><b>Definition:</b> document.h:580</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_ad08a62c65a793ab1d0abe7eac03776fd"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#ad08a62c65a793ab1d0abe7eac03776fd">rapidjson::GenericValue::Empty</a></div><div class="ttdeci">bool Empty() const</div><div class="ttdoc">Check whether the array is empty. </div><div class="ttdef"><b>Definition:</b> document.h:1566</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_a2ccb4736d0f2ec07f06f630d8fe54f8d"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a2ccb4736d0f2ec07f06f630d8fe54f8d">rapidjson::GenericValue::AddMember</a></div><div class="ttdeci">GenericValue &amp; AddMember(StringRefType name, StringRefType value, Allocator &amp;allocator)</div><div class="ttdoc">Add a constant string value as member (name-value pair) to the object. </div><div class="ttdef"><b>Definition:</b> document.h:1393</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_ae89a77887aa3eb1f1f913727cbff6786"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#ae89a77887aa3eb1f1f913727cbff6786">rapidjson::GenericValue::MemberBegin</a></div><div class="ttdeci">ConstMemberIterator MemberBegin() const</div><div class="ttdoc">Const member iterator </div><div class="ttdef"><b>Definition:</b> document.h:1158</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_a578e35f3350717db2aae534969b2346a"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a578e35f3350717db2aae534969b2346a">rapidjson::GenericValue::AddMember</a></div><div class="ttdeci">GenericValue &amp; AddMember(GenericValue &amp;name, std::basic_string&lt; Ch &gt; &amp;value, Allocator &amp;allocator)</div><div class="ttdoc">Add a string object as member (name-value pair) to the object. </div><div class="ttdef"><b>Definition:</b> document.h:1322</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_af2a406c67f2d6a7849f0c167025827b2"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#af2a406c67f2d6a7849f0c167025827b2">rapidjson::GenericValue::MemberCapacity</a></div><div class="ttdeci">SizeType MemberCapacity() const</div><div class="ttdoc">Get the capacity of object. </div><div class="ttdef"><b>Definition:</b> document.h:1099</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_a4d337239ee3e2096462f6a36b9ab0811"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a4d337239ee3e2096462f6a36b9ab0811">rapidjson::GenericValue::operator[]</a></div><div class="ttdeci">GenericValue &amp; operator[](const std::basic_string&lt; Ch &gt; &amp;name)</div><div class="ttdoc">Get a value from an object associated with name (string object). </div><div class="ttdef"><b>Definition:</b> document.h:1152</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_a51e93a4fb57f77a39767acb076bf43c1"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a51e93a4fb57f77a39767acb076bf43c1">rapidjson::GenericValue::GenericValue</a></div><div class="ttdeci">GenericValue(const Ch *s, SizeType length) RAPIDJSON_NOEXCEPT</div><div class="ttdoc">Constructor for constant string (i.e. do not make a copy of string) </div><div class="ttdef"><b>Definition:</b> document.h:754</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_aa62b57746c96ce3d264b2fe178196062"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#aa62b57746c96ce3d264b2fe178196062">rapidjson::GenericValue::operator[]</a></div><div class="ttdeci">GenericValue &amp; operator[](const GenericValue&lt; Encoding, SourceAllocator &gt; &amp;name)</div><div class="ttdoc">Get a value from an object associated with the name. </div><div class="ttdef"><b>Definition:</b> document.h:1131</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_ae6351043ec30d8a151b0a072cfbc46d5"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#ae6351043ec30d8a151b0a072cfbc46d5">rapidjson::GenericValue::SetString</a></div><div class="ttdeci">GenericValue &amp; SetString(const Ch *s, SizeType length, Allocator &amp;allocator)</div><div class="ttdoc">Set this value as a string by copying from source string. </div><div class="ttdef"><b>Definition:</b> document.h:1802</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_a163e60b101e5ae534597c050a6eba511"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a163e60b101e5ae534597c050a6eba511">rapidjson::GenericValue::EraseMember</a></div><div class="ttdeci">MemberIterator EraseMember(ConstMemberIterator pos)</div><div class="ttdoc">Remove a member from an object by iterator. </div><div class="ttdef"><b>Definition:</b> document.h:1493</div></div>
<div class="ttc" id="structrapidjson_1_1_generic_string_ref_html_ad9eb120a58cee500ff3bd5706779c4e4"><div class="ttname"><a href="structrapidjson_1_1_generic_string_ref.html#ad9eb120a58cee500ff3bd5706779c4e4">rapidjson::GenericStringRef::GenericStringRef</a></div><div class="ttdeci">GenericStringRef(const CharType *str, SizeType len)</div><div class="ttdoc">Create constant string reference from pointer and length </div><div class="ttdef"><b>Definition:</b> document.h:318</div></div>
<div class="ttc" id="structrapidjson_1_1_generic_member_html"><div class="ttname"><a href="structrapidjson_1_1_generic_member.html">rapidjson::GenericMember</a></div><div class="ttdoc">Name-value pair in a JSON object value. </div><div class="ttdef"><b>Definition:</b> document.h:69</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_afb91480cc6242ca96ffc603e649c319f"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#afb91480cc6242ca96ffc603e649c319f">rapidjson::GenericValue::SetString</a></div><div class="ttdeci">GenericValue &amp; SetString(const Ch *s, SizeType length)</div><div class="ttdoc">Set this value as a string without copying source string. </div><div class="ttdef"><b>Definition:</b> document.h:1785</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_acc6b1791cca8daef18521918136264b7"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#acc6b1791cca8daef18521918136264b7">rapidjson::GenericValue::Is</a></div><div class="ttdeci">bool Is() const</div><div class="ttdoc">Templated version for checking whether this value is type T. </div><div class="ttdef"><b>Definition:</b> document.h:1841</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_document_html_af061c039a990c2970dc31e5626149367"><div class="ttname"><a href="classrapidjson_1_1_generic_document.html#af061c039a990c2970dc31e5626149367">rapidjson::GenericDocument::ParseInsitu</a></div><div class="ttdeci">GenericDocument &amp; ParseInsitu(Ch *str)</div><div class="ttdoc">Parse JSON text from a mutable string (with kParseDefaultFlags) </div><div class="ttdef"><b>Definition:</b> document.h:2308</div></div>
<div class="ttc" id="rapidjson_8h_html_abdc7cd7902748ffe6626d71c59a73c3b"><div class="ttname"><a href="rapidjson_8h.html#abdc7cd7902748ffe6626d71c59a73c3b">RAPIDJSON_NEW</a></div><div class="ttdeci">#define RAPIDJSON_NEW(TypeName)</div><div class="ttdoc">! customization point for global new </div><div class="ttdef"><b>Definition:</b> rapidjson.h:614</div></div>
<div class="ttc" id="structrapidjson_1_1_generic_string_ref_html_ae223535ec20edf0c1db44a40b7735111"><div class="ttname"><a href="structrapidjson_1_1_generic_string_ref.html#ae223535ec20edf0c1db44a40b7735111">rapidjson::GenericStringRef::length</a></div><div class="ttdeci">const SizeType length</div><div class="ttdoc">length of the string (excluding the trailing NULL terminator) </div><div class="ttdef"><b>Definition:</b> document.h:327</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_document_html_af532179ca5ad5434a5e8af63f5da4c5f"><div class="ttname"><a href="classrapidjson_1_1_generic_document.html#af532179ca5ad5434a5e8af63f5da4c5f">rapidjson::GenericDocument::GetErrorOffset</a></div><div class="ttdeci">size_t GetErrorOffset() const</div><div class="ttdoc">Get the position of last parsing error in input, 0 otherwise. </div><div class="ttdef"><b>Definition:</b> document.h:2391</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_a89a6588121742fc3f154b10b8f15f45f"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a89a6588121742fc3f154b10b8f15f45f">rapidjson::GenericValue::ConstValueIterator</a></div><div class="ttdeci">const GenericValue * ConstValueIterator</div><div class="ttdoc">Constant value iterator for iterating in array. </div><div class="ttdef"><b>Definition:</b> document.h:586</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_a278b420ea75b0ec18d88d4c9e9199d62"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a278b420ea75b0ec18d88d4c9e9199d62">rapidjson::GenericValue::FindMember</a></div><div class="ttdeci">MemberIterator FindMember(const std::basic_string&lt; Ch &gt; &amp;name)</div><div class="ttdoc">Find member by string object name. </div><div class="ttdef"><b>Definition:</b> document.h:1270</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_ab018d734d189532b27943bc45776ba68"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#ab018d734d189532b27943bc45776ba68">rapidjson::GenericValue::AddMember</a></div><div class="ttdeci">GenericValue &amp; AddMember(GenericValue &amp;name, GenericValue &amp;value, Allocator &amp;allocator)</div><div class="ttdoc">Add a member (name-value pair) to the object. </div><div class="ttdef"><b>Definition:</b> document.h:1284</div></div>
<div class="ttc" id="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s_html_structrapidjson_1_1_parse_result"><div class="ttname"><a href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#structrapidjson_1_1_parse_result">rapidjson::ParseResult</a></div><div class="ttdoc">Result of parsing (wraps ParseErrorCode) </div><div class="ttdef"><b>Definition:</b> error.h:106</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_document_html_a3ae97682cf04685c7db9d89ebc399b85"><div class="ttname"><a href="classrapidjson_1_1_generic_document.html#a3ae97682cf04685c7db9d89ebc399b85">rapidjson::GenericDocument::ParseStream</a></div><div class="ttdeci">GenericDocument &amp; ParseStream(InputStream &amp;is)</div><div class="ttdoc">Parse JSON text from an input stream (with Encoding conversion) </div><div class="ttdef"><b>Definition:</b> document.h:2256</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_ad22fdeac87ec6c370dd43075d3586811"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#ad22fdeac87ec6c370dd43075d3586811">rapidjson::GenericValue::FindMember</a></div><div class="ttdeci">MemberIterator FindMember(const Ch *name)</div><div class="ttdoc">Find member by name. </div><div class="ttdef"><b>Definition:</b> document.h:1230</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_a77b0f41557b3c34b57a180698312c4a8"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a77b0f41557b3c34b57a180698312c4a8">rapidjson::GenericValue::GenericValue</a></div><div class="ttdeci">GenericValue(Array a) RAPIDJSON_NOEXCEPT</div><div class="ttdoc">Constructor for Array. </div><div class="ttdef"><b>Definition:</b> document.h:778</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_aa27d086d265f0ce447b15b15f0a2ed6e"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#aa27d086d265f0ce447b15b15f0a2ed6e">rapidjson::GenericValue::GetDouble</a></div><div class="ttdeci">double GetDouble() const</div><div class="ttdoc">Get the value as double type. </div><div class="ttdef"><b>Definition:</b> document.h:1742</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_a794129b8adffb97d123306a0c0ccaf71"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a794129b8adffb97d123306a0c0ccaf71">rapidjson::GenericValue::HasMember</a></div><div class="ttdeci">bool HasMember(const GenericValue&lt; Encoding, SourceAllocator &gt; &amp;name) const</div><div class="ttdoc">Check whether a member exists in the object with GenericValue name. </div><div class="ttdef"><b>Definition:</b> document.h:1216</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_aa56b69bac5423622eff6998ce4802106"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#aa56b69bac5423622eff6998ce4802106">rapidjson::GenericValue::Clear</a></div><div class="ttdeci">void Clear()</div><div class="ttdoc">Remove all elements in the array. </div><div class="ttdef"><b>Definition:</b> document.h:1572</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_document_html_a42c35e2f64c288f14b74fec2792500c8"><div class="ttname"><a href="classrapidjson_1_1_generic_document.html#a42c35e2f64c288f14b74fec2792500c8">rapidjson::GenericDocument::Parse</a></div><div class="ttdeci">GenericDocument &amp; Parse(const Ch *str)</div><div class="ttdoc">Parse JSON text from a read-only string </div><div class="ttdef"><b>Definition:</b> document.h:2333</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_aaa465706fda1e1ef4513ce877e0b4b69"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#aaa465706fda1e1ef4513ce877e0b4b69">rapidjson::GenericValue::operator==</a></div><div class="ttdeci">friend bool operator==(const T &amp;lhs, const GenericValue &amp;rhs)</div><div class="ttdoc">Equal-to operator with arbitrary types (symmetric version) </div><div class="ttdef"><b>Definition:</b> document.h:1005</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_a573712808dd5d8814c103cf55fd761b4"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a573712808dd5d8814c103cf55fd761b4">rapidjson::GenericValue::GetFloat</a></div><div class="ttdeci">float GetFloat() const</div><div class="ttdoc">Get the value as float type. </div><div class="ttdef"><b>Definition:</b> document.h:1754</div></div>
<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">rapidjson::Type</a></div><div class="ttdeci">Type</div><div class="ttdoc">Type of JSON value </div><div class="ttdef"><b>Definition:</b> rapidjson.h:631</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_document_html_a8367a827588dd91d02e21ef945bec9f5"><div class="ttname"><a href="classrapidjson_1_1_generic_document.html#a8367a827588dd91d02e21ef945bec9f5">rapidjson::GenericDocument::Ch</a></div><div class="ttdeci">Encoding::Ch Ch</div><div class="ttdoc">Character type derived from Encoding. </div><div class="ttdef"><b>Definition:</b> document.h:2123</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_document_html_aa52c3016961f25ecd989d82839bce4e5"><div class="ttname"><a href="classrapidjson_1_1_generic_document.html#aa52c3016961f25ecd989d82839bce4e5">rapidjson::GenericDocument::GenericDocument</a></div><div class="ttdeci">GenericDocument(Type type, Allocator *allocator=0, size_t stackCapacity=kDefaultStackCapacity, StackAllocator *stackAllocator=0)</div><div class="ttdoc">Constructor </div><div class="ttdef"><b>Definition:</b> document.h:2134</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_adc312de070d03a63e6c692c9c61db156"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#adc312de070d03a63e6c692c9c61db156">rapidjson::GenericValue::operator[]</a></div><div class="ttdeci">GenericValue &amp; operator[](SizeType index)</div><div class="ttdoc">Get an element from array by index. </div><div class="ttdef"><b>Definition:</b> document.h:1585</div></div>
<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4acf030b422a32c3647c7c5973bd4dd0a9"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4acf030b422a32c3647c7c5973bd4dd0a9">rapidjson::kObjectType</a></div><div class="ttdoc">object </div><div class="ttdef"><b>Definition:</b> rapidjson.h:635</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_a0ec9f34bef5890241d4bc882b73b1db4"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a0ec9f34bef5890241d4bc882b73b1db4">rapidjson::GenericValue::PushBack</a></div><div class="ttdeci">GenericValue &amp; PushBack(GenericValue &amp;value, Allocator &amp;allocator)</div><div class="ttdoc">Append a GenericValue at the end of the array. </div><div class="ttdef"><b>Definition:</b> document.h:1630</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_a8ec7fc7f221306925c7674dccbe02b07"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a8ec7fc7f221306925c7674dccbe02b07">rapidjson::GenericValue::operator[]</a></div><div class="ttdeci">GenericValue &amp; operator[](T *name)</div><div class="ttdoc">Get a value from an object associated with the name. </div><div class="ttdef"><b>Definition:</b> document.h:1114</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_a06f10ef54f5692ce08206c26624a21db"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a06f10ef54f5692ce08206c26624a21db">rapidjson::GenericValue::Swap</a></div><div class="ttdeci">GenericValue &amp; Swap(GenericValue &amp;other) RAPIDJSON_NOEXCEPT</div><div class="ttdoc">Exchange the contents of this value with those of other. </div><div class="ttdef"><b>Definition:</b> document.h:897</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_adb109ae9f12615efadf9277cb5e9c4ee"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#adb109ae9f12615efadf9277cb5e9c4ee">rapidjson::GenericValue::MemberEnd</a></div><div class="ttdeci">MemberIterator MemberEnd()</div><div class="ttdoc">Past-the-end member iterator </div><div class="ttdef"><b>Definition:</b> document.h:1167</div></div>
<div class="ttc" id="structrapidjson_1_1_generic_string_ref_html_acd4d5ebac2b610ce647356aa52998002"><div class="ttname"><a href="structrapidjson_1_1_generic_string_ref.html#acd4d5ebac2b610ce647356aa52998002">rapidjson::GenericStringRef::GenericStringRef</a></div><div class="ttdeci">GenericStringRef(const CharType(&amp;str)[N]) RAPIDJSON_NOEXCEPT</div><div class="ttdoc">Create string reference from const character array </div><div class="ttdef"><b>Definition:</b> document.h:282</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_a852788b35257762cd8d6c4bf5c5d77bc"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a852788b35257762cd8d6c4bf5c5d77bc">rapidjson::GenericValue::GenericValue</a></div><div class="ttdeci">GenericValue(const std::basic_string&lt; Ch &gt; &amp;s, Allocator &amp;allocator)</div><div class="ttdoc">Constructor for copy-string from a string object (i.e. do make a copy of string) </div><div class="ttdef"><b>Definition:</b> document.h:769</div></div>
<div class="ttc" id="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g_html_ga6a2b1695c13e77ae425e3cbac980ccb5"><div class="ttname"><a href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a></div><div class="ttdeci">#define RAPIDJSON_UNLIKELY(x)</div><div class="ttdoc">Compiler branching hint for expression with low probability to be true. </div><div class="ttdef"><b>Definition:</b> rapidjson.h:476</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_a646b6d4d3d98799a0926d96ffa127a58"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a646b6d4d3d98799a0926d96ffa127a58">rapidjson::GenericValue::GenericValue</a></div><div class="ttdeci">GenericValue(Type type) RAPIDJSON_NOEXCEPT</div><div class="ttdoc">Constructor with JSON value type. </div><div class="ttdef"><b>Definition:</b> document.h:627</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_document_html"><div class="ttname"><a href="classrapidjson_1_1_generic_document.html">rapidjson::GenericDocument</a></div><div class="ttdoc">A document for parsing JSON text as DOM. </div><div class="ttdef"><b>Definition:</b> document.h:60</div></div>
<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4a058c622e1e7d59419ae58b895cbce468"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a058c622e1e7d59419ae58b895cbce468">rapidjson::kArrayType</a></div><div class="ttdoc">array </div><div class="ttdef"><b>Definition:</b> rapidjson.h:636</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_a06ce0e14ec83b53c83e1b1699b53a25e"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a06ce0e14ec83b53c83e1b1699b53a25e">rapidjson::GenericValue::ValueIterator</a></div><div class="ttdeci">GenericValue * ValueIterator</div><div class="ttdoc">Value iterator for iterating in array. </div><div class="ttdef"><b>Definition:</b> document.h:585</div></div>
<div class="ttc" id="rapidjson_8h_html_a52c941c3fdd646527cdcd42aa846a28a"><div class="ttname"><a href="rapidjson_8h.html#a52c941c3fdd646527cdcd42aa846a28a">RAPIDJSON_DELETE</a></div><div class="ttdeci">#define RAPIDJSON_DELETE(x)</div><div class="ttdoc">! customization point for global delete </div><div class="ttdef"><b>Definition:</b> rapidjson.h:618</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_adcdbc7fa85a9a41b78966d7e0dcc2ac4"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#adcdbc7fa85a9a41b78966d7e0dcc2ac4">rapidjson::GenericValue::Ch</a></div><div class="ttdeci">Encoding::Ch Ch</div><div class="ttdoc">Character type derived from Encoding. </div><div class="ttdef"><b>Definition:</b> document.h:581</div></div>
<div class="ttc" id="structrapidjson_1_1_generic_value_1_1_number_1_1_u_html"><div class="ttname"><a href="structrapidjson_1_1_generic_value_1_1_number_1_1_u.html">rapidjson::GenericValue::Number::U</a></div><div class="ttdef"><b>Definition:</b> document.h:1992</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_aca5596987335016c1a7c2a9467baf80b"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#aca5596987335016c1a7c2a9467baf80b">rapidjson::GenericValue::MemberIterator</a></div><div class="ttdeci">GenericMemberIterator&lt; false, Encoding, Allocator &gt;::Iterator MemberIterator</div><div class="ttdoc">Member iterator for iterating in object. </div><div class="ttdef"><b>Definition:</b> document.h:583</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_ab933ad7ff8c9d08f73cebaecb700dbe9"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#ab933ad7ff8c9d08f73cebaecb700dbe9">rapidjson::GenericValue::GenericValue</a></div><div class="ttdeci">GenericValue(bool b) RAPIDJSON_NOEXCEPT</div><div class="ttdoc">Constructor for boolean value. </div><div class="ttdef"><b>Definition:</b> document.h:700</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_abba0c9ccfd90726f916c36013a2e9e19"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#abba0c9ccfd90726f916c36013a2e9e19">rapidjson::GenericValue::GenericValue</a></div><div class="ttdeci">GenericValue(int i) RAPIDJSON_NOEXCEPT</div><div class="ttdoc">Constructor for int value. </div><div class="ttdef"><b>Definition:</b> document.h:709</div></div>
<div class="ttc" id="structrapidjson_1_1_generic_member_html_a8ffff2076e62d988a070a136da6ffca6"><div class="ttname"><a href="structrapidjson_1_1_generic_member.html#a8ffff2076e62d988a070a136da6ffca6">rapidjson::GenericMember::value</a></div><div class="ttdeci">GenericValue&lt; Encoding, Allocator &gt; value</div><div class="ttdoc">value of member. </div><div class="ttdef"><b>Definition:</b> document.h:71</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_ad1f8199e65662e0d52a13a1577d4e4a5"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#ad1f8199e65662e0d52a13a1577d4e4a5">rapidjson::GenericValue::GenericValue</a></div><div class="ttdeci">GenericValue() RAPIDJSON_NOEXCEPT</div><div class="ttdoc">Default constructor creates a null value. </div><div class="ttdef"><b>Definition:</b> document.h:597</div></div>
<div class="ttc" id="structrapidjson_1_1_generic_string_ref_html_a29cf407c6aa2313f13dff78d6ce02687"><div class="ttname"><a href="structrapidjson_1_1_generic_string_ref.html#a29cf407c6aa2313f13dff78d6ce02687">rapidjson::GenericStringRef::GenericStringRef</a></div><div class="ttdeci">GenericStringRef(const CharType *str)</div><div class="ttdoc">Explicitly create string reference from const character pointer </div><div class="ttdef"><b>Definition:</b> document.h:306</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_a8b7e47c57a20d0de0cd19eee799ebd88"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a8b7e47c57a20d0de0cd19eee799ebd88">rapidjson::GenericValue::MemberCount</a></div><div class="ttdeci">SizeType MemberCount() const</div><div class="ttdoc">Get the number of members in the object. </div><div class="ttdef"><b>Definition:</b> document.h:1096</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_document_html_a0d63efcc43758ac3aed77e868233369d"><div class="ttname"><a href="classrapidjson_1_1_generic_document.html#a0d63efcc43758ac3aed77e868233369d">rapidjson::GenericDocument::swap</a></div><div class="ttdeci">friend void swap(GenericDocument &amp;a, GenericDocument &amp;b) RAPIDJSON_NOEXCEPT</div><div class="ttdoc">free-standing swap function helper </div><div class="ttdef"><b>Definition:</b> document.h:2228</div></div>
<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4a952871e4326b527154fc8aac1ac1f6ff"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a952871e4326b527154fc8aac1ac1f6ff">rapidjson::kNullType</a></div><div class="ttdoc">null </div><div class="ttdef"><b>Definition:</b> rapidjson.h:632</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_document_html_a82b27e7b228eb46a23f99720063ab4fb"><div class="ttname"><a href="classrapidjson_1_1_generic_document.html#a82b27e7b228eb46a23f99720063ab4fb">rapidjson::GenericDocument::GenericDocument</a></div><div class="ttdeci">GenericDocument(Allocator *allocator=0, size_t stackCapacity=kDefaultStackCapacity, StackAllocator *stackAllocator=0)</div><div class="ttdoc">Constructor </div><div class="ttdef"><b>Definition:</b> document.h:2147</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_document_html_ab94c280c079a6837a24951cb4d8f337b"><div class="ttname"><a href="classrapidjson_1_1_generic_document.html#ab94c280c079a6837a24951cb4d8f337b">rapidjson::GenericDocument::GetParseError</a></div><div class="ttdeci">ParseErrorCode GetParseError() const</div><div class="ttdoc">Get the ParseErrorCode of last parsing. </div><div class="ttdef"><b>Definition:</b> document.h:2388</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_member_iterator_html_abfad2c34a97f82178cbf9464e958e2c2"><div class="ttname"><a href="classrapidjson_1_1_generic_member_iterator.html#abfad2c34a97f82178cbf9464e958e2c2">rapidjson::GenericMemberIterator::operator-</a></div><div class="ttdeci">DifferenceType operator-(ConstIterator that) const</div><div class="ttdoc">Distance </div><div class="ttdef"><b>Definition:</b> document.h:191</div></div>
<div class="ttc" id="structrapidjson_1_1_generic_member_html_ae820eaa74b415a9073f3f3855f6c6607"><div class="ttname"><a href="structrapidjson_1_1_generic_member.html#ae820eaa74b415a9073f3f3855f6c6607">rapidjson::GenericMember::name</a></div><div class="ttdeci">GenericValue&lt; Encoding, Allocator &gt; name</div><div class="ttdoc">name of member (must be a string) </div><div class="ttdef"><b>Definition:</b> document.h:70</div></div>
<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4ad6379da3dc04b83a591992bfb9fabba7"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4ad6379da3dc04b83a591992bfb9fabba7">rapidjson::kStringType</a></div><div class="ttdoc">string </div><div class="ttdef"><b>Definition:</b> rapidjson.h:637</div></div>
<div class="ttc" id="classrapidjson_1_1_encoded_input_stream_html"><div class="ttname"><a href="classrapidjson_1_1_encoded_input_stream.html">rapidjson::EncodedInputStream</a></div><div class="ttdoc">Input byte stream wrapper with a statically bound encoding. </div><div class="ttdef"><b>Definition:</b> encodedstream.h:39</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_document_html_ad92c6cd025d411258d1f2ad890e2ee3f"><div class="ttname"><a href="classrapidjson_1_1_generic_document.html#ad92c6cd025d411258d1f2ad890e2ee3f">rapidjson::GenericDocument::GetAllocator</a></div><div class="ttdeci">Allocator &amp; GetAllocator()</div><div class="ttdoc">Get the allocator of this document. </div><div class="ttdef"><b>Definition:</b> document.h:2409</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_a0220ddebe2f023fa75b643a50e90e559"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a0220ddebe2f023fa75b643a50e90e559">rapidjson::GenericValue::Member</a></div><div class="ttdeci">GenericMember&lt; Encoding, Allocator &gt; Member</div><div class="ttdoc">Name-value pair in an object. </div><div class="ttdef"><b>Definition:</b> document.h:578</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_a9131d6e49ac5a6bf8000d851381e4a25"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a9131d6e49ac5a6bf8000d851381e4a25">rapidjson::GenericValue::MemberReserve</a></div><div class="ttdeci">GenericValue &amp; MemberReserve(SizeType newCapacity, Allocator &amp;allocator)</div><div class="ttdoc">Request the object to have enough capacity to store members. </div><div class="ttdef"><b>Definition:</b> document.h:1175</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_document_html_ae4ee7d86b8c906c83dbe15e57eb6ac6a"><div class="ttname"><a href="classrapidjson_1_1_generic_document.html#ae4ee7d86b8c906c83dbe15e57eb6ac6a">rapidjson::GenericDocument::ParseStream</a></div><div class="ttdeci">GenericDocument &amp; ParseStream(InputStream &amp;is)</div><div class="ttdoc">Parse JSON text from an input stream </div><div class="ttdef"><b>Definition:</b> document.h:2275</div></div>
<div class="ttc" id="structrapidjson_1_1_generic_string_ref_html_aa2a8eccae3d7eb14c30bc21afb7d6fba"><div class="ttname"><a href="structrapidjson_1_1_generic_string_ref.html#aa2a8eccae3d7eb14c30bc21afb7d6fba">rapidjson::GenericStringRef::Ch</a></div><div class="ttdeci">CharType Ch</div><div class="ttdoc">character type of the string </div><div class="ttdef"><b>Definition:</b> document.h:254</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_a05906384808645a2e798d29a9b2d441d"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a05906384808645a2e798d29a9b2d441d">rapidjson::GenericValue::EncodingType</a></div><div class="ttdeci">Encoding EncodingType</div><div class="ttdoc">Encoding type from template parameter. </div><div class="ttdef"><b>Definition:</b> document.h:579</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_a1f4835373e05abae52b91e1c6b7ec92c"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a1f4835373e05abae52b91e1c6b7ec92c">rapidjson::GenericValue::ObjectEmpty</a></div><div class="ttdeci">bool ObjectEmpty() const</div><div class="ttdoc">Check whether the object is empty. </div><div class="ttdef"><b>Definition:</b> document.h:1102</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_a78d80b935babeedbfa71914a8fe5baa7"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a78d80b935babeedbfa71914a8fe5baa7">rapidjson::GenericValue::GetBool</a></div><div class="ttdeci">bool GetBool() const</div><div class="ttdoc">Set boolean value </div><div class="ttdef"><b>Definition:</b> document.h:1081</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_document_html_aea842b533a858c9a3861451ad9e8642c"><div class="ttname"><a href="classrapidjson_1_1_generic_document.html#aea842b533a858c9a3861451ad9e8642c">rapidjson::GenericDocument::Parse</a></div><div class="ttdeci">GenericDocument &amp; Parse(const typename SourceEncoding::Ch *str)</div><div class="ttdoc">Parse JSON text from a read-only string (with Encoding conversion) </div><div class="ttdef"><b>Definition:</b> document.h:2322</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_aabb538578a3c1e60c86cda32d062bc1c"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#aabb538578a3c1e60c86cda32d062bc1c">rapidjson::GenericValue::SetString</a></div><div class="ttdeci">GenericValue &amp; SetString(StringRefType s)</div><div class="ttdoc">Set this value as a string without copying source string. </div><div class="ttdef"><b>Definition:</b> document.h:1792</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_a68d8d197ae1fb83d4dc202f9812af4cc"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a68d8d197ae1fb83d4dc202f9812af4cc">rapidjson::GenericValue::RemoveAllMembers</a></div><div class="ttdeci">void RemoveAllMembers()</div><div class="ttdoc">Remove all members in the object. </div><div class="ttdef"><b>Definition:</b> document.h:1426</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_member_iterator_html_aa30ffef74b3f4978b403024d81b484e4"><div class="ttname"><a href="classrapidjson_1_1_generic_member_iterator.html#aa30ffef74b3f4978b403024d81b484e4">rapidjson::GenericMemberIterator::GenericMemberIterator</a></div><div class="ttdeci">GenericMemberIterator(const NonConstIterator &amp;it)</div><div class="ttdoc">Iterator conversions to more const </div><div class="ttdef"><b>Definition:</b> document.h:153</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_aecc9d0a6aafe31f4fdf9f6e75e5f089c"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#aecc9d0a6aafe31f4fdf9f6e75e5f089c">rapidjson::GenericValue::operator=</a></div><div class="ttdeci">GenericValue &amp; operator=(StringRefType str) RAPIDJSON_NOEXCEPT</div><div class="ttdoc">Assignment of constant string reference (no copy) </div><div class="ttdef"><b>Definition:</b> document.h:853</div></div>
<div class="ttc" id="namespacerapidjson_html_ace11b5b575baf1cccd5ba5f8586dcdc8"><div class="ttname"><a href="namespacerapidjson.html#ace11b5b575baf1cccd5ba5f8586dcdc8">rapidjson::Document</a></div><div class="ttdeci">GenericDocument&lt; UTF8&lt;&gt; &gt; Document</div><div class="ttdoc">GenericDocument with UTF8 encoding </div><div class="ttdef"><b>Definition:</b> document.h:2503</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_document_html_abf1cbab989b856f9d260787b2575750b"><div class="ttname"><a href="classrapidjson_1_1_generic_document.html#abf1cbab989b856f9d260787b2575750b">rapidjson::GenericDocument::Swap</a></div><div class="ttdeci">GenericDocument &amp; Swap(GenericDocument &amp;rhs) RAPIDJSON_NOEXCEPT</div><div class="ttdoc">Exchange the contents of this document with those of another. </div><div class="ttdef"><b>Definition:</b> document.h:2203</div></div>
<div class="ttc" id="namespacerapidjson_html_a81379eb4e94a0386d71d15fda882ebc9a02748971d6ea0c5e22c69b8aa7f344ea"><div class="ttname"><a href="namespacerapidjson.html#a81379eb4e94a0386d71d15fda882ebc9a02748971d6ea0c5e22c69b8aa7f344ea">rapidjson::kParseInsituFlag</a></div><div class="ttdoc">In-situ(destructive) parsing. </div><div class="ttdef"><b>Definition:</b> reader.h:147</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_document_html_a7607bb42b51547e44bfd4cab35d8f20e"><div class="ttname"><a href="classrapidjson_1_1_generic_document.html#a7607bb42b51547e44bfd4cab35d8f20e">rapidjson::GenericDocument::HasParseError</a></div><div class="ttdeci">bool HasParseError() const</div><div class="ttdoc">Whether a parse error has occurred in the last parsing. </div><div class="ttdef"><b>Definition:</b> document.h:2385</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_document_html_a63e18887979da500ece6f0bd10d29b64"><div class="ttname"><a href="classrapidjson_1_1_generic_document.html#a63e18887979da500ece6f0bd10d29b64">rapidjson::GenericDocument::Populate</a></div><div class="ttdeci">GenericDocument &amp; Populate(Generator &amp;g)</div><div class="ttdoc">Populate this document by a generator which produces SAX events. </div><div class="ttdef"><b>Definition:</b> document.h:2236</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_a812e5c07f74a90566e7636330740eb6a"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a812e5c07f74a90566e7636330740eb6a">rapidjson::GenericValue::Capacity</a></div><div class="ttdeci">SizeType Capacity() const</div><div class="ttdoc">Get the capacity of array. </div><div class="ttdef"><b>Definition:</b> document.h:1563</div></div>
<div class="ttc" id="structrapidjson_1_1_generic_string_ref_html"><div class="ttname"><a href="structrapidjson_1_1_generic_string_ref.html">rapidjson::GenericStringRef</a></div><div class="ttdoc">Reference to a constant string (not taking a copy) </div><div class="ttdef"><b>Definition:</b> document.h:253</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_a71b9e2ec1f7bf9e2f034126ca7b4945a"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a71b9e2ec1f7bf9e2f034126ca7b4945a">rapidjson::GenericValue::GenericValue</a></div><div class="ttdeci">GenericValue(double d) RAPIDJSON_NOEXCEPT</div><div class="ttdoc">Constructor for double value. </div><div class="ttdef"><b>Definition:</b> document.h:748</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_a5623c9039977ca0daf394e5c12f10c2d"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a5623c9039977ca0daf394e5c12f10c2d">rapidjson::GenericValue::SetBool</a></div><div class="ttdeci">GenericValue &amp; SetBool(bool b)</div><div class="ttdef"><b>Definition:</b> document.h:1084</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_abdd6a3b703a03aada4c186a2365698e7"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#abdd6a3b703a03aada4c186a2365698e7">rapidjson::GenericValue::End</a></div><div class="ttdeci">ConstValueIterator End() const</div><div class="ttdoc">Constant past-the-end element iterator </div><div class="ttdef"><b>Definition:</b> document.h:1603</div></div>
<div class="ttc" id="classrapidjson_1_1_allocator_html"><div class="ttname"><a href="classrapidjson_1_1_allocator.html">rapidjson::Allocator</a></div><div class="ttdoc">Concept for allocating, resizing and freeing memory block. </div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_aaddbbbb35cd783f209f889cf8dea9570"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#aaddbbbb35cd783f209f889cf8dea9570">rapidjson::GenericValue::operator==</a></div><div class="ttdeci">bool operator==(const T &amp;rhs) const</div><div class="ttdoc">Equal-to operator with primitive types </div><div class="ttdef"><b>Definition:</b> document.h:986</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html">rapidjson::GenericValue</a></div><div class="ttdoc">Represents a JSON value. Use Value for UTF8 encoding and default allocator. </div><div class="ttdef"><b>Definition:</b> document.h:57</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_ad9399a2a69444c44a9db2f63c3aa3eae"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#ad9399a2a69444c44a9db2f63c3aa3eae">rapidjson::GenericValue::CopyFrom</a></div><div class="ttdeci">GenericValue &amp; CopyFrom(const GenericValue&lt; Encoding, SourceAllocator &gt; &amp;rhs, Allocator &amp;allocator, bool copyConstStrings=false)</div><div class="ttdoc">Deep-copy assignment from Value </div><div class="ttdef"><b>Definition:</b> document.h:885</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_a25069c76d045b058e54835d8c467c789"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a25069c76d045b058e54835d8c467c789">rapidjson::GenericValue::SetArray</a></div><div class="ttdeci">GenericValue &amp; SetArray()</div><div class="ttdoc">Set this value as an empty array. </div><div class="ttdef"><b>Definition:</b> document.h:1557</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_member_iterator_html"><div class="ttname"><a href="classrapidjson_1_1_generic_member_iterator.html">rapidjson::GenericMemberIterator</a></div><div class="ttdoc">(Constant) member iterator for a JSON object value </div><div class="ttdef"><b>Definition:</b> document.h:99</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_ab4babf200cac2dacb412a3ea279ddf5b"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#ab4babf200cac2dacb412a3ea279ddf5b">rapidjson::GenericValue::SetString</a></div><div class="ttdeci">GenericValue &amp; SetString(const Ch *s, Allocator &amp;allocator)</div><div class="ttdoc">Set this value as a string by copying from source string. </div><div class="ttdef"><b>Definition:</b> document.h:1810</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_ad3ebfa73796f4db4836ec47c2261700c"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#ad3ebfa73796f4db4836ec47c2261700c">rapidjson::GenericValue::Accept</a></div><div class="ttdeci">bool Accept(Handler &amp;handler) const</div><div class="ttdoc">Generate events of this value to a Handler. </div><div class="ttdef"><b>Definition:</b> document.h:1865</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_afe94e5e86a5b1a3fb605a9f8422f048b"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#afe94e5e86a5b1a3fb605a9f8422f048b">rapidjson::GenericValue::GenericValue</a></div><div class="ttdeci">GenericValue(float f) RAPIDJSON_NOEXCEPT</div><div class="ttdoc">Constructor for float value. </div><div class="ttdef"><b>Definition:</b> document.h:751</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_a121e40b5944be337189eb63b98b7e6ce"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a121e40b5944be337189eb63b98b7e6ce">rapidjson::GenericValue::EraseMember</a></div><div class="ttdeci">MemberIterator EraseMember(ConstMemberIterator first, ConstMemberIterator last)</div><div class="ttdoc">Remove members in the range [first, last) from an object. </div><div class="ttdef"><b>Definition:</b> document.h:1506</div></div>
<div class="ttc" id="structrapidjson_1_1_generic_string_ref_html_a001276ee57cbcbd3c14449045c71e994"><div class="ttname"><a href="structrapidjson_1_1_generic_string_ref.html#a001276ee57cbcbd3c14449045c71e994">rapidjson::GenericStringRef::s</a></div><div class="ttdeci">const Ch *const s</div><div class="ttdoc">plain CharType pointer </div><div class="ttdef"><b>Definition:</b> document.h:326</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_object_html"><div class="ttname"><a href="classrapidjson_1_1_generic_object.html">rapidjson::GenericObject</a></div><div class="ttdoc">Helper class for accessing Value of object type. </div><div class="ttdef"><b>Definition:</b> document.h:559</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_a07d947971c59c9ce884b3c5205c9238f"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a07d947971c59c9ce884b3c5205c9238f">rapidjson::GenericValue::Begin</a></div><div class="ttdeci">ConstValueIterator Begin() const</div><div class="ttdoc">Constant element iterator </div><div class="ttdef"><b>Definition:</b> document.h:1600</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_a6cd2b09795c48d2892bebc0ae350d51f"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a6cd2b09795c48d2892bebc0ae350d51f">rapidjson::GenericValue::ConstMemberIterator</a></div><div class="ttdeci">GenericMemberIterator&lt; true, Encoding, Allocator &gt;::Iterator ConstMemberIterator</div><div class="ttdoc">Constant member iterator for iterating in object. </div><div class="ttdef"><b>Definition:</b> document.h:584</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_member_iterator_html_ac920af483c9e31a6746c22acf0dffc50"><div class="ttname"><a href="classrapidjson_1_1_generic_member_iterator.html#ac920af483c9e31a6746c22acf0dffc50">rapidjson::GenericMemberIterator::GenericMemberIterator</a></div><div class="ttdeci">GenericMemberIterator()</div><div class="ttdoc">Default constructor (singular value) </div><div class="ttdef"><b>Definition:</b> document.h:135</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_ad290f179591025e871bedbbac89ac276"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#ad290f179591025e871bedbbac89ac276">rapidjson::GenericValue::AddMember</a></div><div class="ttdeci">GenericValue &amp; AddMember(GenericValue &amp;name, StringRefType value, Allocator &amp;allocator)</div><div class="ttdoc">Add a constant string value as member (name-value pair) to the object. </div><div class="ttdef"><b>Definition:</b> document.h:1307</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_ad2935191ab28c2c2e472b739a9d58202"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#ad2935191ab28c2c2e472b739a9d58202">rapidjson::GenericValue::ValueType</a></div><div class="ttdeci">GenericValue&lt; Encoding, Allocator &gt; ValueType</div><div class="ttdoc">Value type of itself. </div><div class="ttdef"><b>Definition:</b> document.h:587</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_a41946915cb219a684f6ffc9341efee22"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a41946915cb219a684f6ffc9341efee22">rapidjson::GenericValue::PushBack</a></div><div class="ttdeci">GenericValue &amp; PushBack(StringRefType value, Allocator &amp;allocator)</div><div class="ttdoc">Append a constant string reference at the end of the array. </div><div class="ttdef"><b>Definition:</b> document.h:1653</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_a85dc131bdad8077ce970d580d333d15a"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a85dc131bdad8077ce970d580d333d15a">rapidjson::GenericValue::AddMember</a></div><div class="ttdeci">GenericValue &amp; AddMember(StringRefType name, GenericValue &amp;value, Allocator &amp;allocator)</div><div class="ttdoc">Add a member (name-value pair) to the object. </div><div class="ttdef"><b>Definition:</b> document.h:1379</div></div>
<div class="ttc" id="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g_html_gabeba18d612187bad2ac62aed9276d47c"><div class="ttname"><a href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a></div><div class="ttdeci">#define RAPIDJSON_ASSERT(x)</div><div class="ttdoc">Assertion. </div><div class="ttdef"><b>Definition:</b> rapidjson.h:406</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_aa78e2eb30c6b918826eccf03f04f166b"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#aa78e2eb30c6b918826eccf03f04f166b">rapidjson::GenericValue::HasMember</a></div><div class="ttdeci">bool HasMember(const Ch *name) const</div><div class="ttdoc">Check whether a member exists in the object. </div><div class="ttdef"><b>Definition:</b> document.h:1192</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_ae6fe0576ff0336f6e2b09fe32f3ff809"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#ae6fe0576ff0336f6e2b09fe32f3ff809">rapidjson::GenericValue::operator!=</a></div><div class="ttdeci">bool operator!=(const T &amp;rhs) const</div><div class="ttdoc">Not-equal-to operator with arbitrary types </div><div class="ttdef"><b>Definition:</b> document.h:1000</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_a1f125e735577aae64c0306345de45563"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a1f125e735577aae64c0306345de45563">rapidjson::GenericValue::GenericValue</a></div><div class="ttdeci">GenericValue(uint64_t u64) RAPIDJSON_NOEXCEPT</div><div class="ttdoc">Constructor for uint64_t value. </div><div class="ttdef"><b>Definition:</b> document.h:736</div></div>
<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4abe572cb44ce198e467ccf9d63d50d82a">rapidjson::kNumberType</a></div><div class="ttdoc">number </div><div class="ttdef"><b>Definition:</b> rapidjson.h:638</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_a18599e0d1a7e70a11b35f5e219390fea"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a18599e0d1a7e70a11b35f5e219390fea">rapidjson::GenericValue::GetStringLength</a></div><div class="ttdeci">SizeType GetStringLength() const</div><div class="ttdoc">Get the length of string. </div><div class="ttdef"><b>Definition:</b> document.h:1775</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_ad5bf5afd53f21f370f917041b3be4bfc"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#ad5bf5afd53f21f370f917041b3be4bfc">rapidjson::GenericValue::operator!=</a></div><div class="ttdeci">bool operator!=(const GenericValue&lt; Encoding, SourceAllocator &gt; &amp;rhs) const</div><div class="ttdoc">Not-equal-to operator </div><div class="ttdef"><b>Definition:</b> document.h:992</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_document_html_a7ba626bf84eb45a9bca0b7723bf47f3f"><div class="ttname"><a href="classrapidjson_1_1_generic_document.html#a7ba626bf84eb45a9bca0b7723bf47f3f">rapidjson::GenericDocument::ParseInsitu</a></div><div class="ttdeci">GenericDocument &amp; ParseInsitu(Ch *str)</div><div class="ttdoc">Parse JSON text from a mutable string </div><div class="ttdef"><b>Definition:</b> document.h:2299</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_document_html_a153e5a065ca9660673974f9df203be4b"><div class="ttname"><a href="classrapidjson_1_1_generic_document.html#a153e5a065ca9660673974f9df203be4b">rapidjson::GenericDocument::GetStackCapacity</a></div><div class="ttdeci">size_t GetStackCapacity() const</div><div class="ttdoc">Get the capacity of stack in bytes. </div><div class="ttdef"><b>Definition:</b> document.h:2415</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_value_html_a68ba73eeda7b9429ca05267065d3cc99"><div class="ttname"><a href="classrapidjson_1_1_generic_value.html#a68ba73eeda7b9429ca05267065d3cc99">rapidjson::GenericValue::Erase</a></div><div class="ttdeci">ValueIterator Erase(ConstValueIterator pos)</div><div class="ttdoc">Remove an element of array by iterator. </div><div class="ttdef"><b>Definition:</b> document.h:1699</div></div>
<div class="ttc" id="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 -->
<!-- HTML footer for doxygen 1.8.7-->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
  <ul>
    <li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_32fb88e4d38e67d524aa70efbc36f66b.html">rapidjson</a></li><li class="navelem"><a class="el" href="document_8h.html">document.h</a></li>
  </ul>
</div>
</body>
</html>