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

pointer_8h_source.html « zh-cn - github.com/miloyip/rapidjson.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: f626744cfea215a8a9eaf7906d40deaab45ed437 (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
<!-- 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/pointer.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('pointer_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">pointer.h</div>  </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">// Tencent is pleased to support the open source community by making RapidJSON available.</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment">// </span></div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment">// Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved.</span></div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment">// Licensed under the MIT License (the &quot;License&quot;); you may not use this file except</span></div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment">// in compliance with the License. You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment">// http://opensource.org/licenses/MIT</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment">// Unless required by applicable law or agreed to in writing, software distributed </span></div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment">// under the License is distributed on an &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR </span></div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment">// CONDITIONS OF ANY KIND, either express or implied. See the License for the </span></div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment">// specific language governing permissions and limitations under the License.</span></div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;</div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="preprocessor">#ifndef RAPIDJSON_POINTER_H_</span></div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="preprocessor">#define RAPIDJSON_POINTER_H_</span></div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;</div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="document_8h.html">document.h</a>&quot;</span></div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="preprocessor">#include &quot;internal/itoa.h&quot;</span></div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;</div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="preprocessor">#ifdef __clang__</span></div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;RAPIDJSON_DIAG_PUSH</div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;RAPIDJSON_DIAG_OFF(<span class="keywordflow">switch</span>-<span class="keyword">enum</span>)</div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="preprocessor">#elif defined(_MSC_VER)</span></div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;RAPIDJSON_DIAG_PUSH</div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;RAPIDJSON_DIAG_OFF(4512) <span class="comment">// assignment operator could not be generated</span></div><div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;</div><div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;RAPIDJSON_NAMESPACE_BEGIN</div><div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;</div><div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> kPointerInvalidIndex = ~<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a>(0);  <span class="comment">//!&lt; Represents an invalid index in GenericPointer::Token</span></div><div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;<span class="comment">//! Error code of parsing.</span></div><div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;<span class="comment"></span><span class="comment">/*! \ingroup RAPIDJSON_ERRORS</span></div><div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;<span class="comment">    \see GenericPointer::GenericPointer, GenericPointer::GetParseErrorCode</span></div><div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00037"></a><span class="lineno"><a class="line" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gade540ee4cc2a416c23b8ee2c12393c7b">   37</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gade540ee4cc2a416c23b8ee2c12393c7b">PointerParseErrorCode</a> {</div><div class="line"><a name="l00038"></a><span class="lineno"><a class="line" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#ggade540ee4cc2a416c23b8ee2c12393c7ba9094f236b2ec70c42f1ea91dffc1e39b">   38</a></span>&#160;    <a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#ggade540ee4cc2a416c23b8ee2c12393c7ba9094f236b2ec70c42f1ea91dffc1e39b">kPointerParseErrorNone</a> = 0,                     <span class="comment">//!&lt; The parse is successful</span></div><div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00040"></a><span class="lineno"><a class="line" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#ggade540ee4cc2a416c23b8ee2c12393c7ba2f2f8b238e201b7d540e8914bbfd2bed">   40</a></span>&#160;    <a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#ggade540ee4cc2a416c23b8ee2c12393c7ba2f2f8b238e201b7d540e8914bbfd2bed">kPointerParseErrorTokenMustBeginWithSolidus</a>,    <span class="comment">//!&lt; A token must begin with a &#39;/&#39;</span></div><div class="line"><a name="l00041"></a><span class="lineno"><a class="line" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#ggade540ee4cc2a416c23b8ee2c12393c7ba907c9fe4e541b257513e3a18635379f7">   41</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#ggade540ee4cc2a416c23b8ee2c12393c7ba907c9fe4e541b257513e3a18635379f7">kPointerParseErrorInvalidEscape</a>,                <span class="comment">//!&lt; Invalid escape</span></div><div class="line"><a name="l00042"></a><span class="lineno"><a class="line" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#ggade540ee4cc2a416c23b8ee2c12393c7ba29831a02b8ee23a05d552b47f4d64d28">   42</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#ggade540ee4cc2a416c23b8ee2c12393c7ba29831a02b8ee23a05d552b47f4d64d28">kPointerParseErrorInvalidPercentEncoding</a>,       <span class="comment">//!&lt; Invalid percent encoding in URI fragment</span></div><div class="line"><a name="l00043"></a><span class="lineno"><a class="line" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#ggade540ee4cc2a416c23b8ee2c12393c7bae244a98f53279fda5a750f847b81c54f">   43</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#ggade540ee4cc2a416c23b8ee2c12393c7bae244a98f53279fda5a750f847b81c54f">kPointerParseErrorCharacterMustPercentEncode</a>    <span class="comment">//!&lt; A character must percent encoded in URI fragment</span></div><div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;<span class="comment"></span>};</div><div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;<span class="comment"></span><span class="comment">// GenericPointer</span></div><div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;<span class="comment">//! Represents a JSON Pointer. Use Pointer for UTF8 encoding and default allocator.</span></div><div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;<span class="comment"></span><span class="comment">/*!</span></div><div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;<span class="comment">    This class implements RFC 6901 &quot;JavaScript Object Notation (JSON) Pointer&quot; </span></div><div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;<span class="comment">    (https://tools.ietf.org/html/rfc6901).</span></div><div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;<span class="comment">    A JSON pointer is for identifying a specific value in a JSON document</span></div><div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;<span class="comment">    (GenericDocument). It can simplify coding of DOM tree manipulation, because it</span></div><div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;<span class="comment">    can access multiple-level depth of DOM tree with single API call.</span></div><div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;<span class="comment">    After it parses a string representation (e.g. &quot;/foo/0&quot; or URI fragment </span></div><div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;<span class="comment">    representation (e.g. &quot;#/foo/0&quot;) into its internal representation (tokens),</span></div><div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;<span class="comment">    it can be used to resolve a specific value in multiple documents, or sub-tree </span></div><div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;<span class="comment">    of documents.</span></div><div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;<span class="comment">    Contrary to GenericValue, Pointer can be copy constructed and copy assigned.</span></div><div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;<span class="comment">    Apart from assignment, a Pointer cannot be modified after construction.</span></div><div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;<span class="comment">    Although Pointer is very convenient, please aware that constructing Pointer</span></div><div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;<span class="comment">    involves parsing and dynamic memory allocation. A special constructor with user-</span></div><div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;<span class="comment">    supplied tokens eliminates these.</span></div><div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;<span class="comment">    GenericPointer depends on GenericDocument and GenericValue.</span></div><div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;<span class="comment">    </span></div><div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;<span class="comment">    \tparam ValueType The value type of the DOM tree. E.g. GenericValue&lt;UTF8&lt;&gt; &gt;</span></div><div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;<span class="comment">    \tparam Allocator The allocator type for allocating memory for internal representation.</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">    \note GenericPointer uses same encoding of ValueType.</span></div><div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;<span class="comment">    However, Allocator of GenericPointer is independent of Allocator of Value.</span></div><div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> ValueType, <span class="keyword">typename</span> Allocator = CrtAllocator&gt;</div><div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;<span class="keyword">class </span><a class="code" href="classrapidjson_1_1_generic_pointer.html">GenericPointer</a> {</div><div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00081"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_pointer.html#a399790c5fe8076d91a58c621c0c2a79e">   81</a></span>&#160;    <span class="keyword">typedef</span> <span class="keyword">typename</span> ValueType::EncodingType <a class="code" href="classrapidjson_1_1_generic_pointer.html#a399790c5fe8076d91a58c621c0c2a79e">EncodingType</a>;  <span class="comment">//!&lt; Encoding type from Value</span></div><div class="line"><a name="l00082"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_pointer.html#a850f78846c5548565f8395be5f3427b7">   82</a></span>&#160;<span class="comment"></span>    <span class="keyword">typedef</span> <span class="keyword">typename</span> ValueType::Ch <a class="code" href="classrapidjson_1_1_generic_pointer.html#a850f78846c5548565f8395be5f3427b7">Ch</a>;                      <span class="comment">//!&lt; Character type from Value</span></div><div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;<span class="comment">    //! A token is the basic units of internal representation.</span></div><div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;<span class="comment"></span><span class="comment">    /*!</span></div><div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;<span class="comment">        A JSON pointer string representation &quot;/foo/123&quot; is parsed to two tokens: </span></div><div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;<span class="comment">        &quot;foo&quot; and 123. 123 will be represented in both numeric form and string form.</span></div><div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;<span class="comment">        They are resolved according to the actual value type (object or array).</span></div><div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;<span class="comment">        For token that are not numbers, or the numeric value is out of bound</span></div><div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;<span class="comment">        (greater than limits of SizeType), they are only treated as string form</span></div><div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;<span class="comment">        (i.e. the token&#39;s index will be equal to kPointerInvalidIndex).</span></div><div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;<span class="comment">        This struct is public so that user can create a Pointer without parsing and </span></div><div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;<span class="comment">        allocation, using a special constructor.</span></div><div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l00097"></a><span class="lineno"><a class="line" href="structrapidjson_1_1_generic_pointer_1_1_token.html">   97</a></span>&#160;    <span class="keyword">struct </span><a class="code" href="structrapidjson_1_1_generic_pointer_1_1_token.html">Token</a> {</div><div class="line"><a name="l00098"></a><span class="lineno"><a class="line" href="structrapidjson_1_1_generic_pointer_1_1_token.html#aceb59c9796418c20da27b03bf1948fe8">   98</a></span>&#160;        <span class="keyword">const</span> Ch* <a class="code" href="structrapidjson_1_1_generic_pointer_1_1_token.html#aceb59c9796418c20da27b03bf1948fe8">name</a>;             <span class="comment">//!&lt; Name of the token. It has null character at the end but it can contain null character.</span></div><div class="line"><a name="l00099"></a><span class="lineno"><a class="line" href="structrapidjson_1_1_generic_pointer_1_1_token.html#ad866d674dbddf9690ad571b65e968600">   99</a></span>&#160;<span class="comment"></span>        <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> <a class="code" href="structrapidjson_1_1_generic_pointer_1_1_token.html#ad866d674dbddf9690ad571b65e968600">length</a>;            <span class="comment">//!&lt; Length of the name.</span></div><div class="line"><a name="l00100"></a><span class="lineno"><a class="line" href="structrapidjson_1_1_generic_pointer_1_1_token.html#a50331c9e3dedc34d2c79745b2e58fb2d">  100</a></span>&#160;<span class="comment"></span>        <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> <a class="code" href="structrapidjson_1_1_generic_pointer_1_1_token.html#a50331c9e3dedc34d2c79745b2e58fb2d">index</a>;             <span class="comment">//!&lt; A valid array index, if it is not equal to kPointerInvalidIndex.</span></div><div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;<span class="comment"></span>    };</div><div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;<span class="comment">    //!@name Constructors and destructor.</span></div><div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;<span class="comment"></span><span class="comment">    //@{</span></div><div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;<span class="comment">    //! Default constructor.</span></div><div class="line"><a name="l00107"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_pointer.html#aa077ce171ea25cf501c12f2d5df7f248">  107</a></span>&#160;<span class="comment"></span>    <a class="code" href="classrapidjson_1_1_generic_pointer.html#aa077ce171ea25cf501c12f2d5df7f248">GenericPointer</a>(<a class="code" href="classrapidjson_1_1_allocator.html">Allocator</a>* allocator = 0) : allocator_(allocator), ownAllocator_(), nameBuffer_(), tokens_(), tokenCount_(), parseErrorOffset_(), parseErrorCode_(<a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#ggade540ee4cc2a416c23b8ee2c12393c7ba9094f236b2ec70c42f1ea91dffc1e39b">kPointerParseErrorNone</a>) {}</div><div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;<span class="comment">    //! Constructor that parses a string or URI fragment representation.</span></div><div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;<span class="comment"></span><span class="comment">    /*!</span></div><div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;<span class="comment">        \param source A null-terminated, string or URI fragment representation of JSON pointer.</span></div><div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;<span class="comment">        \param allocator User supplied allocator for this pointer. If no allocator is provided, it creates a self-owned one.</span></div><div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l00114"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_pointer.html#a8f831aae14afc493a82b5fb6aa9c3c43">  114</a></span>&#160;    <span class="keyword">explicit</span> <a class="code" href="classrapidjson_1_1_generic_pointer.html#a8f831aae14afc493a82b5fb6aa9c3c43">GenericPointer</a>(<span class="keyword">const</span> Ch* source, <a class="code" href="classrapidjson_1_1_allocator.html">Allocator</a>* allocator = 0) : allocator_(allocator), ownAllocator_(), nameBuffer_(), tokens_(), tokenCount_(), parseErrorOffset_(), parseErrorCode_(<a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#ggade540ee4cc2a416c23b8ee2c12393c7ba9094f236b2ec70c42f1ea91dffc1e39b">kPointerParseErrorNone</a>) {</div><div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;        Parse(source, internal::StrLen(source));</div><div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;    }</div><div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;</div><div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;<span class="comment">    //! Constructor that parses a string or URI fragment representation.</span></div><div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;<span class="comment"></span><span class="comment">    /*!</span></div><div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;<span class="comment">        \param source A string or URI fragment representation of JSON pointer.</span></div><div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;<span class="comment">        \param allocator User supplied allocator for this pointer. If no allocator is provided, it creates a self-owned one.</span></div><div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;<span class="comment">        \note Requires the definition of the preprocessor symbol \ref RAPIDJSON_HAS_STDSTRING.</span></div><div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l00125"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_pointer.html#aeefcd60e5ad37d80ec43f5315ae84809">  125</a></span>&#160;    <span class="keyword">explicit</span> <a class="code" href="classrapidjson_1_1_generic_pointer.html#aeefcd60e5ad37d80ec43f5315ae84809">GenericPointer</a>(<span class="keyword">const</span> std::basic_string&lt;Ch&gt;&amp; source, <a class="code" href="classrapidjson_1_1_allocator.html">Allocator</a>* allocator = 0) : allocator_(allocator), ownAllocator_(), nameBuffer_(), tokens_(), tokenCount_(), parseErrorOffset_(), parseErrorCode_(<a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#ggade540ee4cc2a416c23b8ee2c12393c7ba9094f236b2ec70c42f1ea91dffc1e39b">kPointerParseErrorNone</a>) {</div><div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;        Parse(source.c_str(), source.size());</div><div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;    }</div><div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;<span class="comment">    //! Constructor that parses a string or URI fragment representation, with length of the source string.</span></div><div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;<span class="comment"></span><span class="comment">    /*!</span></div><div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;<span class="comment">        \param source A string or URI fragment representation of JSON pointer.</span></div><div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;<span class="comment">        \param length Length of source.</span></div><div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;<span class="comment">        \param allocator User supplied allocator for this pointer. If no allocator is provided, it creates a self-owned one.</span></div><div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;<span class="comment">        \note Slightly faster than the overload without length.</span></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"><a class="line" href="classrapidjson_1_1_generic_pointer.html#a00ad17ea227d2556404df7cc64c6aeb5">  137</a></span>&#160;    <a class="code" href="classrapidjson_1_1_generic_pointer.html#a00ad17ea227d2556404df7cc64c6aeb5">GenericPointer</a>(<span class="keyword">const</span> Ch* source, <span class="keywordtype">size_t</span> length, <a class="code" href="classrapidjson_1_1_allocator.html">Allocator</a>* allocator = 0) : allocator_(allocator), ownAllocator_(), nameBuffer_(), tokens_(), tokenCount_(), parseErrorOffset_(), parseErrorCode_(<a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#ggade540ee4cc2a416c23b8ee2c12393c7ba9094f236b2ec70c42f1ea91dffc1e39b">kPointerParseErrorNone</a>) {</div><div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;        Parse(source, length);</div><div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;    }</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">    //! Constructor with user-supplied tokens.</span></div><div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;<span class="comment"></span><span class="comment">    /*!</span></div><div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;<span class="comment">        This constructor let user supplies const array of tokens.</span></div><div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;<span class="comment">        This prevents the parsing process and eliminates allocation.</span></div><div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;<span class="comment">        This is preferred for memory constrained environments.</span></div><div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;<span class="comment">        \param tokens An constant array of tokens representing the JSON pointer.</span></div><div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;<span class="comment">        \param tokenCount Number of tokens.</span></div><div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;<span class="comment">        \b Example</span></div><div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;<span class="comment">        \code</span></div><div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;<span class="comment">        #define NAME(s) { s, sizeof(s) / sizeof(s[0]) - 1, kPointerInvalidIndex }</span></div><div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;<span class="comment">        #define INDEX(i) { #i, sizeof(#i) - 1, i }</span></div><div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;<span class="comment">        static const Pointer::Token kTokens[] = { NAME(&quot;foo&quot;), INDEX(123) };</span></div><div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;<span class="comment">        static const Pointer p(kTokens, sizeof(kTokens) / sizeof(kTokens[0]));</span></div><div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;<span class="comment">        // Equivalent to static const Pointer p(&quot;/foo/123&quot;);</span></div><div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;<span class="comment">        #undef NAME</span></div><div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;<span class="comment">        #undef INDEX</span></div><div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;<span class="comment">        \endcode</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"><a class="line" href="classrapidjson_1_1_generic_pointer.html#a6df9f6a01d1b5945811055e1cf8aead6">  163</a></span>&#160;    <a class="code" href="classrapidjson_1_1_generic_pointer.html#a6df9f6a01d1b5945811055e1cf8aead6">GenericPointer</a>(<span class="keyword">const</span> <a class="code" href="structrapidjson_1_1_generic_pointer_1_1_token.html">Token</a>* tokens, <span class="keywordtype">size_t</span> tokenCount) : allocator_(), ownAllocator_(), nameBuffer_(), tokens_(const_cast&lt;<a class="code" href="structrapidjson_1_1_generic_pointer_1_1_token.html">Token</a>*&gt;(tokens)), tokenCount_(tokenCount), parseErrorOffset_(), parseErrorCode_(<a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#ggade540ee4cc2a416c23b8ee2c12393c7ba9094f236b2ec70c42f1ea91dffc1e39b">kPointerParseErrorNone</a>) {}</div><div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;<span class="comment">    //! Copy constructor.</span></div><div class="line"><a name="l00166"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_pointer.html#ae071847ed3e7389f5b256d26fcc8fd62">  166</a></span>&#160;<span class="comment"></span>    <a class="code" href="classrapidjson_1_1_generic_pointer.html#ae071847ed3e7389f5b256d26fcc8fd62">GenericPointer</a>(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_pointer.html">GenericPointer</a>&amp; rhs) : allocator_(rhs.allocator_), ownAllocator_(), nameBuffer_(), tokens_(), tokenCount_(), parseErrorOffset_(), parseErrorCode_(<a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#ggade540ee4cc2a416c23b8ee2c12393c7ba9094f236b2ec70c42f1ea91dffc1e39b">kPointerParseErrorNone</a>) {</div><div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;        *<span class="keyword">this</span> = rhs;</div><div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;    }</div><div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;<span class="comment">    //! Copy constructor.</span></div><div class="line"><a name="l00171"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_pointer.html#afedfcaac36fa589a46667825d3d0b763">  171</a></span>&#160;<span class="comment"></span>    <a class="code" href="classrapidjson_1_1_generic_pointer.html#afedfcaac36fa589a46667825d3d0b763">GenericPointer</a>(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_pointer.html">GenericPointer</a>&amp; rhs, <a class="code" href="classrapidjson_1_1_allocator.html">Allocator</a>* allocator) : allocator_(allocator), ownAllocator_(), nameBuffer_(), tokens_(), tokenCount_(), parseErrorOffset_(), parseErrorCode_(<a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#ggade540ee4cc2a416c23b8ee2c12393c7ba9094f236b2ec70c42f1ea91dffc1e39b">kPointerParseErrorNone</a>) {</div><div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;        *<span class="keyword">this</span> = rhs;</div><div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160;    }</div><div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;<span class="comment">    //! Destructor.</span></div><div class="line"><a name="l00176"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_pointer.html#a0e144b9956a5272c13ceff3b9306e748">  176</a></span>&#160;<span class="comment"></span>    <a class="code" href="classrapidjson_1_1_generic_pointer.html#a0e144b9956a5272c13ceff3b9306e748">~GenericPointer</a>() {</div><div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;        <span class="keywordflow">if</span> (nameBuffer_)    <span class="comment">// If user-supplied tokens constructor is used, nameBuffer_ is nullptr and tokens_ are not deallocated.</span></div><div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;            Allocator::Free(tokens_);</div><div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;        <a class="code" href="rapidjson_8h.html#a52c941c3fdd646527cdcd42aa846a28a">RAPIDJSON_DELETE</a>(ownAllocator_);</div><div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;    }</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">    //! Assignment operator.</span></div><div class="line"><a name="l00183"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_pointer.html#a23194bb6ce6c07c78981344fe80ac3a6">  183</a></span>&#160;<span class="comment"></span>    <a class="code" href="classrapidjson_1_1_generic_pointer.html">GenericPointer</a>&amp; <a class="code" href="classrapidjson_1_1_generic_pointer.html#a23194bb6ce6c07c78981344fe80ac3a6">operator=</a>(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_pointer.html">GenericPointer</a>&amp; rhs) {</div><div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;        <span class="keywordflow">if</span> (<span class="keyword">this</span> != &amp;rhs) {</div><div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160;            <span class="comment">// Do not delete ownAllcator</span></div><div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160;            <span class="keywordflow">if</span> (nameBuffer_)</div><div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160;                Allocator::Free(tokens_);</div><div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;</div><div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;            tokenCount_ = rhs.tokenCount_;</div><div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160;            parseErrorOffset_ = rhs.parseErrorOffset_;</div><div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160;            parseErrorCode_ = rhs.parseErrorCode_;</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="keywordflow">if</span> (rhs.nameBuffer_)</div><div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;                CopyFromRaw(rhs); <span class="comment">// Normally parsed tokens.</span></div><div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;            <span class="keywordflow">else</span> {</div><div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160;                tokens_ = rhs.tokens_; <span class="comment">// User supplied const tokens.</span></div><div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;                nameBuffer_ = 0;</div><div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;            }</div><div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160;        }</div><div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;        <span class="keywordflow">return</span> *<span class="keyword">this</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"></span></div><div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;<span class="comment">    //@}</span></div><div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160;<span class="comment">    //!@name Append token</span></div><div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160;<span class="comment"></span><span class="comment">    //@{</span></div><div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160;<span class="comment">    //! Append a token and return a new Pointer</span></div><div class="line"><a name="l00209"></a><span class="lineno">  209</span>&#160;<span class="comment"></span><span class="comment">    /*!</span></div><div class="line"><a name="l00210"></a><span class="lineno">  210</span>&#160;<span class="comment">        \param token Token to be appended.</span></div><div class="line"><a name="l00211"></a><span class="lineno">  211</span>&#160;<span class="comment">        \param allocator Allocator for the newly return Pointer.</span></div><div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160;<span class="comment">        \return A new Pointer with appended token.</span></div><div class="line"><a name="l00213"></a><span class="lineno">  213</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l00214"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_pointer.html#a7cb5eda2af1722e52efa591c4103ebec">  214</a></span>&#160;    <a class="code" href="classrapidjson_1_1_generic_pointer.html">GenericPointer</a> <a class="code" href="classrapidjson_1_1_generic_pointer.html#a7cb5eda2af1722e52efa591c4103ebec">Append</a>(<span class="keyword">const</span> <a class="code" href="structrapidjson_1_1_generic_pointer_1_1_token.html">Token</a>&amp; token, <a class="code" href="classrapidjson_1_1_allocator.html">Allocator</a>* allocator = 0)<span class="keyword"> const </span>{</div><div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;        <a class="code" href="classrapidjson_1_1_generic_pointer.html">GenericPointer</a> r;</div><div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160;        r.allocator_ = allocator;</div><div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;        Ch *p = r.CopyFromRaw(*<span class="keyword">this</span>, 1, token.<a class="code" href="structrapidjson_1_1_generic_pointer_1_1_token.html#ad866d674dbddf9690ad571b65e968600">length</a> + 1);</div><div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160;        std::memcpy(p, token.<a class="code" href="structrapidjson_1_1_generic_pointer_1_1_token.html#aceb59c9796418c20da27b03bf1948fe8">name</a>, (token.<a class="code" href="structrapidjson_1_1_generic_pointer_1_1_token.html#ad866d674dbddf9690ad571b65e968600">length</a> + 1) * <span class="keyword">sizeof</span>(Ch));</div><div class="line"><a name="l00219"></a><span class="lineno">  219</span>&#160;        r.tokens_[tokenCount_].<a class="code" href="structrapidjson_1_1_generic_pointer_1_1_token.html#aceb59c9796418c20da27b03bf1948fe8">name</a> = p;</div><div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;        r.tokens_[tokenCount_].<a class="code" href="structrapidjson_1_1_generic_pointer_1_1_token.html#ad866d674dbddf9690ad571b65e968600">length</a> = token.<a class="code" href="structrapidjson_1_1_generic_pointer_1_1_token.html#ad866d674dbddf9690ad571b65e968600">length</a>;</div><div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160;        r.tokens_[tokenCount_].<a class="code" href="structrapidjson_1_1_generic_pointer_1_1_token.html#a50331c9e3dedc34d2c79745b2e58fb2d">index</a> = token.<a class="code" href="structrapidjson_1_1_generic_pointer_1_1_token.html#a50331c9e3dedc34d2c79745b2e58fb2d">index</a>;</div><div class="line"><a name="l00222"></a><span class="lineno">  222</span>&#160;        <span class="keywordflow">return</span> r;</div><div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160;    }</div><div class="line"><a name="l00224"></a><span class="lineno">  224</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00225"></a><span class="lineno">  225</span>&#160;<span class="comment">    //! Append a name token with length, and return a new Pointer</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">        \param name Name to be appended.</span></div><div class="line"><a name="l00228"></a><span class="lineno">  228</span>&#160;<span class="comment">        \param length Length of name.</span></div><div class="line"><a name="l00229"></a><span class="lineno">  229</span>&#160;<span class="comment">        \param allocator Allocator for the newly return Pointer.</span></div><div class="line"><a name="l00230"></a><span class="lineno">  230</span>&#160;<span class="comment">        \return A new Pointer with appended token.</span></div><div class="line"><a name="l00231"></a><span class="lineno">  231</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l00232"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_pointer.html#a30f4eac82e9fded60dead3f7d1cb3941">  232</a></span>&#160;    <a class="code" href="classrapidjson_1_1_generic_pointer.html">GenericPointer</a> <a class="code" href="classrapidjson_1_1_generic_pointer.html#a30f4eac82e9fded60dead3f7d1cb3941">Append</a>(<span class="keyword">const</span> Ch* name, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> length, <a class="code" href="classrapidjson_1_1_allocator.html">Allocator</a>* allocator = 0)<span class="keyword"> const </span>{</div><div class="line"><a name="l00233"></a><span class="lineno">  233</span>&#160;        <a class="code" href="structrapidjson_1_1_generic_pointer_1_1_token.html">Token</a> token = { name, length, kPointerInvalidIndex };</div><div class="line"><a name="l00234"></a><span class="lineno">  234</span>&#160;        <span class="keywordflow">return</span> Append(token, allocator);</div><div class="line"><a name="l00235"></a><span class="lineno">  235</span>&#160;    }</div><div class="line"><a name="l00236"></a><span class="lineno">  236</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160;<span class="comment">    //! Append a name token without length, and return a new Pointer</span></div><div class="line"><a name="l00238"></a><span class="lineno">  238</span>&#160;<span class="comment"></span><span class="comment">    /*!</span></div><div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;<span class="comment">        \param name Name (const Ch*) to be appended.</span></div><div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160;<span class="comment">        \param allocator Allocator for the newly return Pointer.</span></div><div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160;<span class="comment">        \return A new Pointer with appended token.</span></div><div class="line"><a name="l00242"></a><span class="lineno">  242</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l00243"></a><span class="lineno">  243</span>&#160;    <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l00244"></a><span class="lineno">  244</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_pointer.html">GenericPointer</a>))</div><div class="line"><a name="l00245"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_pointer.html#a033a099aaa6b36df2d5171bdc593e98e">  245</a></span>&#160;    Append(T* name, <a class="code" href="classrapidjson_1_1_allocator.html">Allocator</a>* allocator = 0)<span class="keyword"> const </span>{</div><div class="line"><a name="l00246"></a><span class="lineno">  246</span>&#160;        <span class="keywordflow">return</span> Append(name, internal::StrLen(name), allocator);</div><div class="line"><a name="l00247"></a><span class="lineno">  247</span>&#160;    }</div><div class="line"><a name="l00248"></a><span class="lineno">  248</span>&#160;</div><div class="line"><a name="l00249"></a><span class="lineno">  249</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l00250"></a><span class="lineno">  250</span>&#160;<span class="comment">    //! Append a name token, and return a new Pointer</span></div><div class="line"><a name="l00251"></a><span class="lineno">  251</span>&#160;<span class="comment"></span><span class="comment">    /*!</span></div><div class="line"><a name="l00252"></a><span class="lineno">  252</span>&#160;<span class="comment">        \param name Name to be appended.</span></div><div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160;<span class="comment">        \param allocator Allocator for the newly return Pointer.</span></div><div class="line"><a name="l00254"></a><span class="lineno">  254</span>&#160;<span class="comment">        \return A new Pointer with appended token.</span></div><div class="line"><a name="l00255"></a><span class="lineno">  255</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l00256"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_pointer.html#a18494d59f0317c037fa3bd037e436cec">  256</a></span>&#160;    <a class="code" href="classrapidjson_1_1_generic_pointer.html">GenericPointer</a> <a class="code" href="classrapidjson_1_1_generic_pointer.html#a18494d59f0317c037fa3bd037e436cec">Append</a>(<span class="keyword">const</span> std::basic_string&lt;Ch&gt;&amp; name, <a class="code" href="classrapidjson_1_1_allocator.html">Allocator</a>* allocator = 0)<span class="keyword"> const </span>{</div><div class="line"><a name="l00257"></a><span class="lineno">  257</span>&#160;        <span class="keywordflow">return</span> Append(name.c_str(), <span class="keyword">static_cast&lt;</span><a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a><span class="keyword">&gt;</span>(name.size()), allocator);</div><div class="line"><a name="l00258"></a><span class="lineno">  258</span>&#160;    }</div><div class="line"><a name="l00259"></a><span class="lineno">  259</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00260"></a><span class="lineno">  260</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00261"></a><span class="lineno">  261</span>&#160;<span class="comment">    //! Append a index token, and return a new Pointer</span></div><div class="line"><a name="l00262"></a><span class="lineno">  262</span>&#160;<span class="comment"></span><span class="comment">    /*!</span></div><div class="line"><a name="l00263"></a><span class="lineno">  263</span>&#160;<span class="comment">        \param index Index to be appended.</span></div><div class="line"><a name="l00264"></a><span class="lineno">  264</span>&#160;<span class="comment">        \param allocator Allocator for the newly return Pointer.</span></div><div class="line"><a name="l00265"></a><span class="lineno">  265</span>&#160;<span class="comment">        \return A new Pointer with appended token.</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"><a class="line" href="classrapidjson_1_1_generic_pointer.html#a4aadec8f0efe9a7ac42ac4906a5f676d">  267</a></span>&#160;    <a class="code" href="classrapidjson_1_1_generic_pointer.html">GenericPointer</a> <a class="code" href="classrapidjson_1_1_generic_pointer.html#a4aadec8f0efe9a7ac42ac4906a5f676d">Append</a>(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> index, <a class="code" href="classrapidjson_1_1_allocator.html">Allocator</a>* allocator = 0)<span class="keyword"> const </span>{</div><div class="line"><a name="l00268"></a><span class="lineno">  268</span>&#160;        <span class="keywordtype">char</span> buffer[21];</div><div class="line"><a name="l00269"></a><span class="lineno">  269</span>&#160;        <span class="keywordtype">char</span>* end = <span class="keyword">sizeof</span>(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a>) == 4 ? internal::u32toa(index, buffer) : internal::u64toa(index, buffer);</div><div class="line"><a name="l00270"></a><span class="lineno">  270</span>&#160;        <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> length = <span class="keyword">static_cast&lt;</span><a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a><span class="keyword">&gt;</span>(end - buffer);</div><div class="line"><a name="l00271"></a><span class="lineno">  271</span>&#160;        buffer[length] = <span class="charliteral">&#39;\0&#39;</span>;</div><div class="line"><a name="l00272"></a><span class="lineno">  272</span>&#160;</div><div class="line"><a name="l00273"></a><span class="lineno">  273</span>&#160;        <span class="keywordflow">if</span> (<span class="keyword">sizeof</span>(<a class="code" href="classrapidjson_1_1_generic_pointer.html#a850f78846c5548565f8395be5f3427b7">Ch</a>) == 1) {</div><div class="line"><a name="l00274"></a><span class="lineno">  274</span>&#160;            <a class="code" href="structrapidjson_1_1_generic_pointer_1_1_token.html">Token</a> token = { <span class="keyword">reinterpret_cast&lt;</span><a class="code" href="classrapidjson_1_1_generic_pointer.html#a850f78846c5548565f8395be5f3427b7">Ch</a>*<span class="keyword">&gt;</span>(buffer), length, index };</div><div class="line"><a name="l00275"></a><span class="lineno">  275</span>&#160;            <span class="keywordflow">return</span> Append(token, allocator);</div><div class="line"><a name="l00276"></a><span class="lineno">  276</span>&#160;        }</div><div class="line"><a name="l00277"></a><span class="lineno">  277</span>&#160;        <span class="keywordflow">else</span> {</div><div class="line"><a name="l00278"></a><span class="lineno">  278</span>&#160;            <a class="code" href="classrapidjson_1_1_generic_pointer.html#a850f78846c5548565f8395be5f3427b7">Ch</a> name[21];</div><div class="line"><a name="l00279"></a><span class="lineno">  279</span>&#160;            <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt;= length; i++)</div><div class="line"><a name="l00280"></a><span class="lineno">  280</span>&#160;                name[i] = static_cast&lt;Ch&gt;(buffer[i]);</div><div class="line"><a name="l00281"></a><span class="lineno">  281</span>&#160;            <a class="code" href="structrapidjson_1_1_generic_pointer_1_1_token.html">Token</a> token = { name, length, index };</div><div class="line"><a name="l00282"></a><span class="lineno">  282</span>&#160;            <span class="keywordflow">return</span> Append(token, allocator);</div><div class="line"><a name="l00283"></a><span class="lineno">  283</span>&#160;        }</div><div class="line"><a name="l00284"></a><span class="lineno">  284</span>&#160;    }</div><div class="line"><a name="l00285"></a><span class="lineno">  285</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00286"></a><span class="lineno">  286</span>&#160;<span class="comment">    //! Append a token by value, and return a new Pointer</span></div><div class="line"><a name="l00287"></a><span class="lineno">  287</span>&#160;<span class="comment"></span><span class="comment">    /*!</span></div><div class="line"><a name="l00288"></a><span class="lineno">  288</span>&#160;<span class="comment">        \param token token to be appended.</span></div><div class="line"><a name="l00289"></a><span class="lineno">  289</span>&#160;<span class="comment">        \param allocator Allocator for the newly return Pointer.</span></div><div class="line"><a name="l00290"></a><span class="lineno">  290</span>&#160;<span class="comment">        \return A new Pointer with appended token.</span></div><div class="line"><a name="l00291"></a><span class="lineno">  291</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l00292"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_pointer.html#a618808f066fb1104d36f012cced3b27a">  292</a></span>&#160;    <a class="code" href="classrapidjson_1_1_generic_pointer.html">GenericPointer</a> <a class="code" href="classrapidjson_1_1_generic_pointer.html#a618808f066fb1104d36f012cced3b27a">Append</a>(<span class="keyword">const</span> ValueType&amp; token, <a class="code" href="classrapidjson_1_1_allocator.html">Allocator</a>* allocator = 0)<span class="keyword"> const </span>{</div><div class="line"><a name="l00293"></a><span class="lineno">  293</span>&#160;        <span class="keywordflow">if</span> (token.IsString())</div><div class="line"><a name="l00294"></a><span class="lineno">  294</span>&#160;            <span class="keywordflow">return</span> Append(token.GetString(), token.GetStringLength(), allocator);</div><div class="line"><a name="l00295"></a><span class="lineno">  295</span>&#160;        <span class="keywordflow">else</span> {</div><div class="line"><a name="l00296"></a><span class="lineno">  296</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>(token.IsUint64());</div><div class="line"><a name="l00297"></a><span class="lineno">  297</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>(token.GetUint64() &lt;= <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a>(~0));</div><div class="line"><a name="l00298"></a><span class="lineno">  298</span>&#160;            <span class="keywordflow">return</span> Append(static_cast&lt;SizeType&gt;(token.GetUint64()), allocator);</div><div class="line"><a name="l00299"></a><span class="lineno">  299</span>&#160;        }</div><div class="line"><a name="l00300"></a><span class="lineno">  300</span>&#160;    }</div><div class="line"><a name="l00301"></a><span class="lineno">  301</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00302"></a><span class="lineno">  302</span>&#160;<span class="comment">    //!@name Handling Parse Error</span></div><div class="line"><a name="l00303"></a><span class="lineno">  303</span>&#160;<span class="comment"></span><span class="comment">    //@{</span></div><div class="line"><a name="l00304"></a><span class="lineno">  304</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00305"></a><span class="lineno">  305</span>&#160;<span class="comment">    //! Check whether this is a valid pointer.</span></div><div class="line"><a name="l00306"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_pointer.html#a98b96d54c2c3378f1892ffffc501069c">  306</a></span>&#160;<span class="comment"></span>    <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_generic_pointer.html#a98b96d54c2c3378f1892ffffc501069c">IsValid</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> parseErrorCode_ == <a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#ggade540ee4cc2a416c23b8ee2c12393c7ba9094f236b2ec70c42f1ea91dffc1e39b">kPointerParseErrorNone</a>; }</div><div class="line"><a name="l00307"></a><span class="lineno">  307</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00308"></a><span class="lineno">  308</span>&#160;<span class="comment">    //! Get the parsing error offset in code unit.</span></div><div class="line"><a name="l00309"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_pointer.html#a75caef2a047c56466f0b599bdda882c9">  309</a></span>&#160;<span class="comment"></span>    <span class="keywordtype">size_t</span> <a class="code" href="classrapidjson_1_1_generic_pointer.html#a75caef2a047c56466f0b599bdda882c9">GetParseErrorOffset</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> parseErrorOffset_; }</div><div class="line"><a name="l00310"></a><span class="lineno">  310</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00311"></a><span class="lineno">  311</span>&#160;<span class="comment">    //! Get the parsing error code.</span></div><div class="line"><a name="l00312"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_pointer.html#af649a48d77aa856cddaa748ad6b0d6ac">  312</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#gade540ee4cc2a416c23b8ee2c12393c7b">PointerParseErrorCode</a> <a class="code" href="classrapidjson_1_1_generic_pointer.html#af649a48d77aa856cddaa748ad6b0d6ac">GetParseErrorCode</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> parseErrorCode_; }</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">    //@}</span></div><div class="line"><a name="l00315"></a><span class="lineno">  315</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00316"></a><span class="lineno">  316</span>&#160;<span class="comment">    //! Get the allocator of this pointer.</span></div><div class="line"><a name="l00317"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_pointer.html#acdac4ea8e57920194827be4afb942d97">  317</a></span>&#160;<span class="comment"></span>    <a class="code" href="classrapidjson_1_1_allocator.html">Allocator</a>&amp; <a class="code" href="classrapidjson_1_1_generic_pointer.html#acdac4ea8e57920194827be4afb942d97">GetAllocator</a>() { <span class="keywordflow">return</span> *allocator_; }</div><div class="line"><a name="l00318"></a><span class="lineno">  318</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00319"></a><span class="lineno">  319</span>&#160;<span class="comment">    //!@name Tokens</span></div><div class="line"><a name="l00320"></a><span class="lineno">  320</span>&#160;<span class="comment"></span><span class="comment">    //@{</span></div><div class="line"><a name="l00321"></a><span class="lineno">  321</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00322"></a><span class="lineno">  322</span>&#160;<span class="comment">    //! Get the token array (const version only).</span></div><div class="line"><a name="l00323"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_pointer.html#ac07c300d43f04dad9caa0cb209cb2853">  323</a></span>&#160;<span class="comment"></span>    <span class="keyword">const</span> <a class="code" href="structrapidjson_1_1_generic_pointer_1_1_token.html">Token</a>* <a class="code" href="classrapidjson_1_1_generic_pointer.html#ac07c300d43f04dad9caa0cb209cb2853">GetTokens</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> tokens_; }</div><div class="line"><a name="l00324"></a><span class="lineno">  324</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00325"></a><span class="lineno">  325</span>&#160;<span class="comment">    //! Get the number of tokens.</span></div><div class="line"><a name="l00326"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_pointer.html#a791e40c10682b9db0adf2b6e0b8b3d78">  326</a></span>&#160;<span class="comment"></span>    <span class="keywordtype">size_t</span> <a class="code" href="classrapidjson_1_1_generic_pointer.html#a791e40c10682b9db0adf2b6e0b8b3d78">GetTokenCount</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> tokenCount_; }</div><div class="line"><a name="l00327"></a><span class="lineno">  327</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00328"></a><span class="lineno">  328</span>&#160;<span class="comment">    //@}</span></div><div class="line"><a name="l00329"></a><span class="lineno">  329</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00330"></a><span class="lineno">  330</span>&#160;<span class="comment">    //!@name Equality/inequality operators</span></div><div class="line"><a name="l00331"></a><span class="lineno">  331</span>&#160;<span class="comment"></span><span class="comment">    //@{</span></div><div class="line"><a name="l00332"></a><span class="lineno">  332</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00333"></a><span class="lineno">  333</span>&#160;<span class="comment">    //! Equality operator.</span></div><div class="line"><a name="l00334"></a><span class="lineno">  334</span>&#160;<span class="comment"></span><span class="comment">    /*!</span></div><div class="line"><a name="l00335"></a><span class="lineno">  335</span>&#160;<span class="comment">        \note When any pointers are invalid, always returns false.</span></div><div class="line"><a name="l00336"></a><span class="lineno">  336</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l00337"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_pointer.html#a3bb15fa5592f2bfad6f2c9af7940b952">  337</a></span>&#160;    <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_generic_pointer.html#a3bb15fa5592f2bfad6f2c9af7940b952">operator==</a>(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_pointer.html">GenericPointer</a>&amp; rhs)<span class="keyword"> const </span>{</div><div class="line"><a name="l00338"></a><span class="lineno">  338</span>&#160;        <span class="keywordflow">if</span> (!IsValid() || !rhs.<a class="code" href="classrapidjson_1_1_generic_pointer.html#a98b96d54c2c3378f1892ffffc501069c">IsValid</a>() || tokenCount_ != rhs.tokenCount_)</div><div class="line"><a name="l00339"></a><span class="lineno">  339</span>&#160;            <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00340"></a><span class="lineno">  340</span>&#160;</div><div class="line"><a name="l00341"></a><span class="lineno">  341</span>&#160;        <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; tokenCount_; i++) {</div><div class="line"><a name="l00342"></a><span class="lineno">  342</span>&#160;            <span class="keywordflow">if</span> (tokens_[i].index != rhs.tokens_[i].<a class="code" href="structrapidjson_1_1_generic_pointer_1_1_token.html#a50331c9e3dedc34d2c79745b2e58fb2d">index</a> ||</div><div class="line"><a name="l00343"></a><span class="lineno">  343</span>&#160;                tokens_[i].length != rhs.tokens_[i].<a class="code" href="structrapidjson_1_1_generic_pointer_1_1_token.html#ad866d674dbddf9690ad571b65e968600">length</a> || </div><div class="line"><a name="l00344"></a><span class="lineno">  344</span>&#160;                (tokens_[i].length != 0 &amp;&amp; std::memcmp(tokens_[i].name, rhs.tokens_[i].<a class="code" href="structrapidjson_1_1_generic_pointer_1_1_token.html#aceb59c9796418c20da27b03bf1948fe8">name</a>, <span class="keyword">sizeof</span>(<a class="code" href="classrapidjson_1_1_generic_pointer.html#a850f78846c5548565f8395be5f3427b7">Ch</a>)* tokens_[i].length) != 0))</div><div class="line"><a name="l00345"></a><span class="lineno">  345</span>&#160;            {</div><div class="line"><a name="l00346"></a><span class="lineno">  346</span>&#160;                <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00347"></a><span class="lineno">  347</span>&#160;            }</div><div class="line"><a name="l00348"></a><span class="lineno">  348</span>&#160;        }</div><div class="line"><a name="l00349"></a><span class="lineno">  349</span>&#160;</div><div class="line"><a name="l00350"></a><span class="lineno">  350</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00351"></a><span class="lineno">  351</span>&#160;    }</div><div class="line"><a name="l00352"></a><span class="lineno">  352</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00353"></a><span class="lineno">  353</span>&#160;<span class="comment">    //! Inequality operator.</span></div><div class="line"><a name="l00354"></a><span class="lineno">  354</span>&#160;<span class="comment"></span><span class="comment">    /*!</span></div><div class="line"><a name="l00355"></a><span class="lineno">  355</span>&#160;<span class="comment">        \note When any pointers are invalid, always returns true.</span></div><div class="line"><a name="l00356"></a><span class="lineno">  356</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l00357"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_pointer.html#a8ca73989b4f3ffa5154a229f95f1e0c9">  357</a></span>&#160;    <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_generic_pointer.html#a8ca73989b4f3ffa5154a229f95f1e0c9">operator!=</a>(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_pointer.html">GenericPointer</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="l00358"></a><span class="lineno">  358</span>&#160;<span class="comment"></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="comment"></span><span class="comment"></span></div><div class="line"><a name="l00361"></a><span class="lineno">  361</span>&#160;<span class="comment">    //!@name Stringify</span></div><div class="line"><a name="l00362"></a><span class="lineno">  362</span>&#160;<span class="comment"></span><span class="comment">    //@{</span></div><div class="line"><a name="l00363"></a><span class="lineno">  363</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00364"></a><span class="lineno">  364</span>&#160;<span class="comment">    //! Stringify the pointer into string representation.</span></div><div class="line"><a name="l00365"></a><span class="lineno">  365</span>&#160;<span class="comment"></span><span class="comment">    /*!</span></div><div class="line"><a name="l00366"></a><span class="lineno">  366</span>&#160;<span class="comment">        \tparam OutputStream Type of output stream.</span></div><div class="line"><a name="l00367"></a><span class="lineno">  367</span>&#160;<span class="comment">        \param os The output stream.</span></div><div class="line"><a name="l00368"></a><span class="lineno">  368</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l00369"></a><span class="lineno">  369</span>&#160;    <span class="keyword">template</span>&lt;<span class="keyword">typename</span> OutputStream&gt;</div><div class="line"><a name="l00370"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_pointer.html#a73073ca3c9e47eba7c27c16151b269ac">  370</a></span>&#160;    <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_generic_pointer.html#a73073ca3c9e47eba7c27c16151b269ac">Stringify</a>(OutputStream&amp; os)<span class="keyword"> const </span>{</div><div class="line"><a name="l00371"></a><span class="lineno">  371</span>&#160;        <span class="keywordflow">return</span> Stringify&lt;false, OutputStream&gt;(os);</div><div class="line"><a name="l00372"></a><span class="lineno">  372</span>&#160;    }</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">    //! Stringify the pointer into URI fragment representation.</span></div><div class="line"><a name="l00375"></a><span class="lineno">  375</span>&#160;<span class="comment"></span><span class="comment">    /*!</span></div><div class="line"><a name="l00376"></a><span class="lineno">  376</span>&#160;<span class="comment">        \tparam OutputStream Type of output stream.</span></div><div class="line"><a name="l00377"></a><span class="lineno">  377</span>&#160;<span class="comment">        \param os The output stream.</span></div><div class="line"><a name="l00378"></a><span class="lineno">  378</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l00379"></a><span class="lineno">  379</span>&#160;    <span class="keyword">template</span>&lt;<span class="keyword">typename</span> OutputStream&gt;</div><div class="line"><a name="l00380"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_pointer.html#ae985c27c1d061b93ba4f8875cfa5f7b5">  380</a></span>&#160;    <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_generic_pointer.html#ae985c27c1d061b93ba4f8875cfa5f7b5">StringifyUriFragment</a>(OutputStream&amp; os)<span class="keyword"> const </span>{</div><div class="line"><a name="l00381"></a><span class="lineno">  381</span>&#160;        <span class="keywordflow">return</span> Stringify&lt;true, OutputStream&gt;(os);</div><div class="line"><a name="l00382"></a><span class="lineno">  382</span>&#160;    }</div><div class="line"><a name="l00383"></a><span class="lineno">  383</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00384"></a><span class="lineno">  384</span>&#160;<span class="comment">    //@}</span></div><div class="line"><a name="l00385"></a><span class="lineno">  385</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00386"></a><span class="lineno">  386</span>&#160;<span class="comment">    //!@name Create value</span></div><div class="line"><a name="l00387"></a><span class="lineno">  387</span>&#160;<span class="comment"></span><span class="comment">    //@{</span></div><div class="line"><a name="l00388"></a><span class="lineno">  388</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00389"></a><span class="lineno">  389</span>&#160;<span class="comment">    //! Create a value in a subtree.</span></div><div class="line"><a name="l00390"></a><span class="lineno">  390</span>&#160;<span class="comment"></span><span class="comment">    /*!</span></div><div class="line"><a name="l00391"></a><span class="lineno">  391</span>&#160;<span class="comment">        If the value is not exist, it creates all parent values and a JSON Null value.</span></div><div class="line"><a name="l00392"></a><span class="lineno">  392</span>&#160;<span class="comment">        So it always succeed and return the newly created or existing value.</span></div><div class="line"><a name="l00393"></a><span class="lineno">  393</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00394"></a><span class="lineno">  394</span>&#160;<span class="comment">        Remind that it may change types of parents according to tokens, so it </span></div><div class="line"><a name="l00395"></a><span class="lineno">  395</span>&#160;<span class="comment">        potentially removes previously stored values. For example, if a document </span></div><div class="line"><a name="l00396"></a><span class="lineno">  396</span>&#160;<span class="comment">        was an array, and &quot;/foo&quot; is used to create a value, then the document </span></div><div class="line"><a name="l00397"></a><span class="lineno">  397</span>&#160;<span class="comment">        will be changed to an object, and all existing array elements are lost.</span></div><div class="line"><a name="l00398"></a><span class="lineno">  398</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00399"></a><span class="lineno">  399</span>&#160;<span class="comment">        \param root Root value of a DOM subtree to be resolved. It can be any value other than document root.</span></div><div class="line"><a name="l00400"></a><span class="lineno">  400</span>&#160;<span class="comment">        \param allocator Allocator for creating the values if the specified value or its parents are not exist.</span></div><div class="line"><a name="l00401"></a><span class="lineno">  401</span>&#160;<span class="comment">        \param alreadyExist If non-null, it stores whether the resolved value is already exist.</span></div><div class="line"><a name="l00402"></a><span class="lineno">  402</span>&#160;<span class="comment">        \return The resolved newly created (a JSON Null value), or already exists value.</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"><a class="line" href="classrapidjson_1_1_generic_pointer.html#ad0b5b67c57572e81689762094ac8c856">  404</a></span>&#160;    ValueType&amp; <a class="code" href="classrapidjson_1_1_generic_pointer.html#ad0b5b67c57572e81689762094ac8c856">Create</a>(ValueType&amp; root, <span class="keyword">typename</span> ValueType::AllocatorType&amp; allocator, <span class="keywordtype">bool</span>* alreadyExist = 0)<span class="keyword"> const </span>{</div><div class="line"><a name="l00405"></a><span class="lineno">  405</span>&#160;        <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsValid());</div><div class="line"><a name="l00406"></a><span class="lineno">  406</span>&#160;        ValueType* v = &amp;root;</div><div class="line"><a name="l00407"></a><span class="lineno">  407</span>&#160;        <span class="keywordtype">bool</span> exist = <span class="keyword">true</span>;</div><div class="line"><a name="l00408"></a><span class="lineno">  408</span>&#160;        <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="structrapidjson_1_1_generic_pointer_1_1_token.html">Token</a> *t = tokens_; t != tokens_ + tokenCount_; ++t) {</div><div class="line"><a name="l00409"></a><span class="lineno">  409</span>&#160;            <span class="keywordflow">if</span> (v-&gt;IsArray() &amp;&amp; t-&gt;name[0] == <span class="charliteral">&#39;-&#39;</span> &amp;&amp; t-&gt;length == 1) {</div><div class="line"><a name="l00410"></a><span class="lineno">  410</span>&#160;                v-&gt;PushBack(ValueType().Move(), allocator);</div><div class="line"><a name="l00411"></a><span class="lineno">  411</span>&#160;                v = &amp;((*v)[v-&gt;Size() - 1]);</div><div class="line"><a name="l00412"></a><span class="lineno">  412</span>&#160;                exist = <span class="keyword">false</span>;</div><div class="line"><a name="l00413"></a><span class="lineno">  413</span>&#160;            }</div><div class="line"><a name="l00414"></a><span class="lineno">  414</span>&#160;            <span class="keywordflow">else</span> {</div><div class="line"><a name="l00415"></a><span class="lineno">  415</span>&#160;                <span class="keywordflow">if</span> (t-&gt;index == kPointerInvalidIndex) { <span class="comment">// must be object name</span></div><div class="line"><a name="l00416"></a><span class="lineno">  416</span>&#160;                    <span class="keywordflow">if</span> (!v-&gt;IsObject())</div><div class="line"><a name="l00417"></a><span class="lineno">  417</span>&#160;                        v-&gt;SetObject(); <span class="comment">// Change to Object</span></div><div class="line"><a name="l00418"></a><span class="lineno">  418</span>&#160;                }</div><div class="line"><a name="l00419"></a><span class="lineno">  419</span>&#160;                <span class="keywordflow">else</span> { <span class="comment">// object name or array index</span></div><div class="line"><a name="l00420"></a><span class="lineno">  420</span>&#160;                    <span class="keywordflow">if</span> (!v-&gt;IsArray() &amp;&amp; !v-&gt;IsObject())</div><div class="line"><a name="l00421"></a><span class="lineno">  421</span>&#160;                        v-&gt;SetArray(); <span class="comment">// Change to Array</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;</div><div class="line"><a name="l00424"></a><span class="lineno">  424</span>&#160;                <span class="keywordflow">if</span> (v-&gt;IsArray()) {</div><div class="line"><a name="l00425"></a><span class="lineno">  425</span>&#160;                    <span class="keywordflow">if</span> (t-&gt;index &gt;= v-&gt;Size()) {</div><div class="line"><a name="l00426"></a><span class="lineno">  426</span>&#160;                        v-&gt;Reserve(t-&gt;index + 1, allocator);</div><div class="line"><a name="l00427"></a><span class="lineno">  427</span>&#160;                        <span class="keywordflow">while</span> (t-&gt;index &gt;= v-&gt;Size())</div><div class="line"><a name="l00428"></a><span class="lineno">  428</span>&#160;                            v-&gt;PushBack(ValueType().Move(), allocator);</div><div class="line"><a name="l00429"></a><span class="lineno">  429</span>&#160;                        exist = <span class="keyword">false</span>;</div><div class="line"><a name="l00430"></a><span class="lineno">  430</span>&#160;                    }</div><div class="line"><a name="l00431"></a><span class="lineno">  431</span>&#160;                    v = &amp;((*v)[t-&gt;index]);</div><div class="line"><a name="l00432"></a><span class="lineno">  432</span>&#160;                }</div><div class="line"><a name="l00433"></a><span class="lineno">  433</span>&#160;                <span class="keywordflow">else</span> {</div><div class="line"><a name="l00434"></a><span class="lineno">  434</span>&#160;                    <span class="keyword">typename</span> ValueType::MemberIterator m = v-&gt;FindMember(<a class="code" href="structrapidjson_1_1_generic_string_ref.html">GenericStringRef&lt;Ch&gt;</a>(t-&gt;name, t-&gt;length));</div><div class="line"><a name="l00435"></a><span class="lineno">  435</span>&#160;                    <span class="keywordflow">if</span> (m == v-&gt;MemberEnd()) {</div><div class="line"><a name="l00436"></a><span class="lineno">  436</span>&#160;                        v-&gt;AddMember(ValueType(t-&gt;name, t-&gt;length, allocator).Move(), ValueType().Move(), allocator);</div><div class="line"><a name="l00437"></a><span class="lineno">  437</span>&#160;                        v = &amp;(--v-&gt;MemberEnd())-&gt;value; <span class="comment">// Assumes AddMember() appends at the end</span></div><div class="line"><a name="l00438"></a><span class="lineno">  438</span>&#160;                        exist = <span class="keyword">false</span>;</div><div class="line"><a name="l00439"></a><span class="lineno">  439</span>&#160;                    }</div><div class="line"><a name="l00440"></a><span class="lineno">  440</span>&#160;                    <span class="keywordflow">else</span></div><div class="line"><a name="l00441"></a><span class="lineno">  441</span>&#160;                        v = &amp;m-&gt;value;</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;        }</div><div class="line"><a name="l00445"></a><span class="lineno">  445</span>&#160;</div><div class="line"><a name="l00446"></a><span class="lineno">  446</span>&#160;        <span class="keywordflow">if</span> (alreadyExist)</div><div class="line"><a name="l00447"></a><span class="lineno">  447</span>&#160;            *alreadyExist = exist;</div><div class="line"><a name="l00448"></a><span class="lineno">  448</span>&#160;</div><div class="line"><a name="l00449"></a><span class="lineno">  449</span>&#160;        <span class="keywordflow">return</span> *v;</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;<span class="comment"></span></div><div class="line"><a name="l00452"></a><span class="lineno">  452</span>&#160;<span class="comment">    //! Creates a value in a document.</span></div><div class="line"><a name="l00453"></a><span class="lineno">  453</span>&#160;<span class="comment"></span><span class="comment">    /*!</span></div><div class="line"><a name="l00454"></a><span class="lineno">  454</span>&#160;<span class="comment">        \param document A document to be resolved.</span></div><div class="line"><a name="l00455"></a><span class="lineno">  455</span>&#160;<span class="comment">        \param alreadyExist If non-null, it stores whether the resolved value is already exist.</span></div><div class="line"><a name="l00456"></a><span class="lineno">  456</span>&#160;<span class="comment">        \return The resolved newly created, or already exists value.</span></div><div class="line"><a name="l00457"></a><span class="lineno">  457</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l00458"></a><span class="lineno">  458</span>&#160;    <span class="keyword">template</span> &lt;<span class="keyword">typename</span> stackAllocator&gt;</div><div class="line"><a name="l00459"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_pointer.html#adc4bf5a3892f5626a8517f90c88e4b7f">  459</a></span>&#160;    ValueType&amp; <a class="code" href="classrapidjson_1_1_generic_pointer.html#adc4bf5a3892f5626a8517f90c88e4b7f">Create</a>(<a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument&lt;EncodingType, typename ValueType::AllocatorType, stackAllocator&gt;</a>&amp; document, <span class="keywordtype">bool</span>* alreadyExist = 0)<span class="keyword"> const </span>{</div><div class="line"><a name="l00460"></a><span class="lineno">  460</span>&#160;        <span class="keywordflow">return</span> Create(document, document.<a class="code" href="classrapidjson_1_1_generic_document.html#ad92c6cd025d411258d1f2ad890e2ee3f">GetAllocator</a>(), alreadyExist);</div><div class="line"><a name="l00461"></a><span class="lineno">  461</span>&#160;    }</div><div class="line"><a name="l00462"></a><span class="lineno">  462</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00463"></a><span class="lineno">  463</span>&#160;<span class="comment">    //@}</span></div><div class="line"><a name="l00464"></a><span class="lineno">  464</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00465"></a><span class="lineno">  465</span>&#160;<span class="comment">    //!@name Query value</span></div><div class="line"><a name="l00466"></a><span class="lineno">  466</span>&#160;<span class="comment"></span><span class="comment">    //@{</span></div><div class="line"><a name="l00467"></a><span class="lineno">  467</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00468"></a><span class="lineno">  468</span>&#160;<span class="comment">    //! Query a value in a subtree.</span></div><div class="line"><a name="l00469"></a><span class="lineno">  469</span>&#160;<span class="comment"></span><span class="comment">    /*!</span></div><div class="line"><a name="l00470"></a><span class="lineno">  470</span>&#160;<span class="comment">        \param root Root value of a DOM sub-tree to be resolved. It can be any value other than document root.</span></div><div class="line"><a name="l00471"></a><span class="lineno">  471</span>&#160;<span class="comment">        \param unresolvedTokenIndex If the pointer cannot resolve a token in the pointer, this parameter can obtain the index of unresolved token.</span></div><div class="line"><a name="l00472"></a><span class="lineno">  472</span>&#160;<span class="comment">        \return Pointer to the value if it can be resolved. Otherwise null.</span></div><div class="line"><a name="l00473"></a><span class="lineno">  473</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00474"></a><span class="lineno">  474</span>&#160;<span class="comment">        \note</span></div><div class="line"><a name="l00475"></a><span class="lineno">  475</span>&#160;<span class="comment">        There are only 3 situations when a value cannot be resolved:</span></div><div class="line"><a name="l00476"></a><span class="lineno">  476</span>&#160;<span class="comment">        1. A value in the path is not an array nor object.</span></div><div class="line"><a name="l00477"></a><span class="lineno">  477</span>&#160;<span class="comment">        2. An object value does not contain the token.</span></div><div class="line"><a name="l00478"></a><span class="lineno">  478</span>&#160;<span class="comment">        3. A token is out of range of an array value.</span></div><div class="line"><a name="l00479"></a><span class="lineno">  479</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00480"></a><span class="lineno">  480</span>&#160;<span class="comment">        Use unresolvedTokenIndex to retrieve the token index.</span></div><div class="line"><a name="l00481"></a><span class="lineno">  481</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l00482"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_pointer.html#af09e26073a7263fc9e8f0c14160f45bd">  482</a></span>&#160;    ValueType* <a class="code" href="classrapidjson_1_1_generic_pointer.html#af09e26073a7263fc9e8f0c14160f45bd">Get</a>(ValueType&amp; root, <span class="keywordtype">size_t</span>* unresolvedTokenIndex = 0)<span class="keyword"> const </span>{</div><div class="line"><a name="l00483"></a><span class="lineno">  483</span>&#160;        <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsValid());</div><div class="line"><a name="l00484"></a><span class="lineno">  484</span>&#160;        ValueType* v = &amp;root;</div><div class="line"><a name="l00485"></a><span class="lineno">  485</span>&#160;        <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="structrapidjson_1_1_generic_pointer_1_1_token.html">Token</a> *t = tokens_; t != tokens_ + tokenCount_; ++t) {</div><div class="line"><a name="l00486"></a><span class="lineno">  486</span>&#160;            <span class="keywordflow">switch</span> (v-&gt;GetType()) {</div><div class="line"><a name="l00487"></a><span class="lineno">  487</span>&#160;            <span class="keywordflow">case</span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4acf030b422a32c3647c7c5973bd4dd0a9">kObjectType</a>:</div><div class="line"><a name="l00488"></a><span class="lineno">  488</span>&#160;                {</div><div class="line"><a name="l00489"></a><span class="lineno">  489</span>&#160;                    <span class="keyword">typename</span> ValueType::MemberIterator m = v-&gt;FindMember(<a class="code" href="structrapidjson_1_1_generic_string_ref.html">GenericStringRef&lt;Ch&gt;</a>(t-&gt;name, t-&gt;length));</div><div class="line"><a name="l00490"></a><span class="lineno">  490</span>&#160;                    <span class="keywordflow">if</span> (m == v-&gt;MemberEnd())</div><div class="line"><a name="l00491"></a><span class="lineno">  491</span>&#160;                        <span class="keywordflow">break</span>;</div><div class="line"><a name="l00492"></a><span class="lineno">  492</span>&#160;                    v = &amp;m-&gt;value;</div><div class="line"><a name="l00493"></a><span class="lineno">  493</span>&#160;                }</div><div class="line"><a name="l00494"></a><span class="lineno">  494</span>&#160;                <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00495"></a><span class="lineno">  495</span>&#160;            <span class="keywordflow">case</span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a058c622e1e7d59419ae58b895cbce468">kArrayType</a>:</div><div class="line"><a name="l00496"></a><span class="lineno">  496</span>&#160;                <span class="keywordflow">if</span> (t-&gt;index == kPointerInvalidIndex || t-&gt;index &gt;= v-&gt;Size())</div><div class="line"><a name="l00497"></a><span class="lineno">  497</span>&#160;                    <span class="keywordflow">break</span>;</div><div class="line"><a name="l00498"></a><span class="lineno">  498</span>&#160;                v = &amp;((*v)[t-&gt;index]);</div><div class="line"><a name="l00499"></a><span class="lineno">  499</span>&#160;                <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00500"></a><span class="lineno">  500</span>&#160;            <span class="keywordflow">default</span>:</div><div class="line"><a name="l00501"></a><span class="lineno">  501</span>&#160;                <span class="keywordflow">break</span>;</div><div class="line"><a name="l00502"></a><span class="lineno">  502</span>&#160;            }</div><div class="line"><a name="l00503"></a><span class="lineno">  503</span>&#160;</div><div class="line"><a name="l00504"></a><span class="lineno">  504</span>&#160;            <span class="comment">// Error: unresolved token</span></div><div class="line"><a name="l00505"></a><span class="lineno">  505</span>&#160;            <span class="keywordflow">if</span> (unresolvedTokenIndex)</div><div class="line"><a name="l00506"></a><span class="lineno">  506</span>&#160;                *unresolvedTokenIndex = <span class="keyword">static_cast&lt;</span><span class="keywordtype">size_t</span><span class="keyword">&gt;</span>(t - tokens_);</div><div class="line"><a name="l00507"></a><span class="lineno">  507</span>&#160;            <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00508"></a><span class="lineno">  508</span>&#160;        }</div><div class="line"><a name="l00509"></a><span class="lineno">  509</span>&#160;        <span class="keywordflow">return</span> v;</div><div class="line"><a name="l00510"></a><span class="lineno">  510</span>&#160;    }</div><div class="line"><a name="l00511"></a><span class="lineno">  511</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00512"></a><span class="lineno">  512</span>&#160;<span class="comment">    //! Query a const value in a const subtree.</span></div><div class="line"><a name="l00513"></a><span class="lineno">  513</span>&#160;<span class="comment"></span><span class="comment">    /*!</span></div><div class="line"><a name="l00514"></a><span class="lineno">  514</span>&#160;<span class="comment">        \param root Root value of a DOM sub-tree to be resolved. It can be any value other than document root.</span></div><div class="line"><a name="l00515"></a><span class="lineno">  515</span>&#160;<span class="comment">        \return Pointer to the value if it can be resolved. Otherwise null.</span></div><div class="line"><a name="l00516"></a><span class="lineno">  516</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l00517"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_pointer.html#aac2171a0ac38298b2d0ae063351ec176">  517</a></span>&#160;    <span class="keyword">const</span> ValueType* <a class="code" href="classrapidjson_1_1_generic_pointer.html#aac2171a0ac38298b2d0ae063351ec176">Get</a>(<span class="keyword">const</span> ValueType&amp; root, <span class="keywordtype">size_t</span>* unresolvedTokenIndex = 0)<span class="keyword"> const </span>{ </div><div class="line"><a name="l00518"></a><span class="lineno">  518</span>&#160;        <span class="keywordflow">return</span> Get(const_cast&lt;ValueType&amp;&gt;(root), unresolvedTokenIndex);</div><div class="line"><a name="l00519"></a><span class="lineno">  519</span>&#160;    }</div><div class="line"><a name="l00520"></a><span class="lineno">  520</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00521"></a><span class="lineno">  521</span>&#160;<span class="comment">    //@}</span></div><div class="line"><a name="l00522"></a><span class="lineno">  522</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00523"></a><span class="lineno">  523</span>&#160;<span class="comment">    //!@name Query a value with default</span></div><div class="line"><a name="l00524"></a><span class="lineno">  524</span>&#160;<span class="comment"></span><span class="comment">    //@{</span></div><div class="line"><a name="l00525"></a><span class="lineno">  525</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00526"></a><span class="lineno">  526</span>&#160;<span class="comment">    //! Query a value in a subtree with default value.</span></div><div class="line"><a name="l00527"></a><span class="lineno">  527</span>&#160;<span class="comment"></span><span class="comment">    /*!</span></div><div class="line"><a name="l00528"></a><span class="lineno">  528</span>&#160;<span class="comment">        Similar to Get(), but if the specified value do not exists, it creates all parents and clone the default value.</span></div><div class="line"><a name="l00529"></a><span class="lineno">  529</span>&#160;<span class="comment">        So that this function always succeed.</span></div><div class="line"><a name="l00530"></a><span class="lineno">  530</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00531"></a><span class="lineno">  531</span>&#160;<span class="comment">        \param root Root value of a DOM sub-tree to be resolved. It can be any value other than document root.</span></div><div class="line"><a name="l00532"></a><span class="lineno">  532</span>&#160;<span class="comment">        \param defaultValue Default value to be cloned if the value was not exists.</span></div><div class="line"><a name="l00533"></a><span class="lineno">  533</span>&#160;<span class="comment">        \param allocator Allocator for creating the values if the specified value or its parents are not exist.</span></div><div class="line"><a name="l00534"></a><span class="lineno">  534</span>&#160;<span class="comment">        \see Create()</span></div><div class="line"><a name="l00535"></a><span class="lineno">  535</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l00536"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_pointer.html#acd36d0bbfcca43feaeeba5488d8384c2">  536</a></span>&#160;    ValueType&amp; <a class="code" href="classrapidjson_1_1_generic_pointer.html#acd36d0bbfcca43feaeeba5488d8384c2">GetWithDefault</a>(ValueType&amp; root, <span class="keyword">const</span> ValueType&amp; defaultValue, <span class="keyword">typename</span> ValueType::AllocatorType&amp; allocator)<span class="keyword"> const </span>{</div><div class="line"><a name="l00537"></a><span class="lineno">  537</span>&#160;        <span class="keywordtype">bool</span> alreadyExist;</div><div class="line"><a name="l00538"></a><span class="lineno">  538</span>&#160;        ValueType&amp; v = Create(root, allocator, &amp;alreadyExist);</div><div class="line"><a name="l00539"></a><span class="lineno">  539</span>&#160;        <span class="keywordflow">return</span> alreadyExist ? v : v.CopyFrom(defaultValue, allocator);</div><div class="line"><a name="l00540"></a><span class="lineno">  540</span>&#160;    }</div><div class="line"><a name="l00541"></a><span class="lineno">  541</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00542"></a><span class="lineno">  542</span>&#160;<span class="comment">    //! Query a value in a subtree with default null-terminated string.</span></div><div class="line"><a name="l00543"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_pointer.html#abdc025b8391b271f1134a7ba7039c27f">  543</a></span>&#160;<span class="comment"></span>    ValueType&amp; <a class="code" href="classrapidjson_1_1_generic_pointer.html#abdc025b8391b271f1134a7ba7039c27f">GetWithDefault</a>(ValueType&amp; root, <span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_pointer.html#a850f78846c5548565f8395be5f3427b7">Ch</a>* defaultValue, <span class="keyword">typename</span> ValueType::AllocatorType&amp; allocator)<span class="keyword"> const </span>{</div><div class="line"><a name="l00544"></a><span class="lineno">  544</span>&#160;        <span class="keywordtype">bool</span> alreadyExist;</div><div class="line"><a name="l00545"></a><span class="lineno">  545</span>&#160;        ValueType&amp; v = Create(root, allocator, &amp;alreadyExist);</div><div class="line"><a name="l00546"></a><span class="lineno">  546</span>&#160;        <span class="keywordflow">return</span> alreadyExist ? v : v.SetString(defaultValue, allocator);</div><div class="line"><a name="l00547"></a><span class="lineno">  547</span>&#160;    }</div><div class="line"><a name="l00548"></a><span class="lineno">  548</span>&#160;</div><div class="line"><a name="l00549"></a><span class="lineno">  549</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l00550"></a><span class="lineno">  550</span>&#160;<span class="comment">    //! Query a value in a subtree with default std::basic_string.</span></div><div class="line"><a name="l00551"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_pointer.html#a2ac51ee7af5b9d7628140ae8501edcf4">  551</a></span>&#160;<span class="comment"></span>    ValueType&amp; <a class="code" href="classrapidjson_1_1_generic_pointer.html#a2ac51ee7af5b9d7628140ae8501edcf4">GetWithDefault</a>(ValueType&amp; root, <span class="keyword">const</span> std::basic_string&lt;Ch&gt;&amp; defaultValue, <span class="keyword">typename</span> ValueType::AllocatorType&amp; allocator)<span class="keyword"> const </span>{</div><div class="line"><a name="l00552"></a><span class="lineno">  552</span>&#160;        <span class="keywordtype">bool</span> alreadyExist;</div><div class="line"><a name="l00553"></a><span class="lineno">  553</span>&#160;        ValueType&amp; v = Create(root, allocator, &amp;alreadyExist);</div><div class="line"><a name="l00554"></a><span class="lineno">  554</span>&#160;        <span class="keywordflow">return</span> alreadyExist ? v : v.SetString(defaultValue, allocator);</div><div class="line"><a name="l00555"></a><span class="lineno">  555</span>&#160;    }</div><div class="line"><a name="l00556"></a><span class="lineno">  556</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00557"></a><span class="lineno">  557</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00558"></a><span class="lineno">  558</span>&#160;<span class="comment">    //! Query a value in a subtree with default primitive value.</span></div><div class="line"><a name="l00559"></a><span class="lineno">  559</span>&#160;<span class="comment"></span><span class="comment">    /*!</span></div><div class="line"><a name="l00560"></a><span class="lineno">  560</span>&#160;<span class="comment">        \tparam T Either \ref Type, \c int, \c unsigned, \c int64_t, \c uint64_t, \c bool</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="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l00563"></a><span class="lineno">  563</span>&#160;    RAPIDJSON_DISABLEIF_RETURN((internal::OrExpr&lt;internal::IsPointer&lt;T&gt;, internal::IsGenericValue&lt;T&gt; &gt;), (ValueType&amp;))</div><div class="line"><a name="l00564"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_pointer.html#a16833ef8a38386e6c310d602426b45f0">  564</a></span>&#160;    GetWithDefault(ValueType&amp; root, T defaultValue, typename ValueType::AllocatorType&amp; allocator)<span class="keyword"> const </span>{</div><div class="line"><a name="l00565"></a><span class="lineno">  565</span>&#160;        <span class="keywordflow">return</span> GetWithDefault(root, ValueType(defaultValue).Move(), allocator);</div><div class="line"><a name="l00566"></a><span class="lineno">  566</span>&#160;    }</div><div class="line"><a name="l00567"></a><span class="lineno">  567</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00568"></a><span class="lineno">  568</span>&#160;<span class="comment">    //! Query a value in a document with default value.</span></div><div class="line"><a name="l00569"></a><span class="lineno">  569</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="l00570"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_pointer.html#a07fa31c03c96e260f234087882dce408">  570</a></span>&#160;    ValueType&amp; <a class="code" href="classrapidjson_1_1_generic_pointer.html#a07fa31c03c96e260f234087882dce408">GetWithDefault</a>(<a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument&lt;EncodingType, typename ValueType::AllocatorType, stackAllocator&gt;</a>&amp; document, <span class="keyword">const</span> ValueType&amp; defaultValue)<span class="keyword"> const </span>{</div><div class="line"><a name="l00571"></a><span class="lineno">  571</span>&#160;        <span class="keywordflow">return</span> GetWithDefault(document, defaultValue, document.<a class="code" href="classrapidjson_1_1_generic_document.html#ad92c6cd025d411258d1f2ad890e2ee3f">GetAllocator</a>());</div><div class="line"><a name="l00572"></a><span class="lineno">  572</span>&#160;    }</div><div class="line"><a name="l00573"></a><span class="lineno">  573</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00574"></a><span class="lineno">  574</span>&#160;<span class="comment">    //! Query a value in a document with default null-terminated string.</span></div><div class="line"><a name="l00575"></a><span class="lineno">  575</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="l00576"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_pointer.html#aaa4e92344cc07e98adb5b9f5b93927b8">  576</a></span>&#160;    ValueType&amp; <a class="code" href="classrapidjson_1_1_generic_pointer.html#aaa4e92344cc07e98adb5b9f5b93927b8">GetWithDefault</a>(<a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument&lt;EncodingType, typename ValueType::AllocatorType, stackAllocator&gt;</a>&amp; document, <span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_pointer.html#a850f78846c5548565f8395be5f3427b7">Ch</a>* defaultValue)<span class="keyword"> const </span>{</div><div class="line"><a name="l00577"></a><span class="lineno">  577</span>&#160;        <span class="keywordflow">return</span> GetWithDefault(document, defaultValue, document.<a class="code" href="classrapidjson_1_1_generic_document.html#ad92c6cd025d411258d1f2ad890e2ee3f">GetAllocator</a>());</div><div class="line"><a name="l00578"></a><span class="lineno">  578</span>&#160;    }</div><div class="line"><a name="l00579"></a><span class="lineno">  579</span>&#160;    </div><div class="line"><a name="l00580"></a><span class="lineno">  580</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l00581"></a><span class="lineno">  581</span>&#160;<span class="comment">    //! Query a value in a document with default std::basic_string.</span></div><div class="line"><a name="l00582"></a><span class="lineno">  582</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="l00583"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_pointer.html#af19e2313004885cfa9c45f50b30b32e2">  583</a></span>&#160;    ValueType&amp; <a class="code" href="classrapidjson_1_1_generic_pointer.html#af19e2313004885cfa9c45f50b30b32e2">GetWithDefault</a>(<a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument&lt;EncodingType, typename ValueType::AllocatorType, stackAllocator&gt;</a>&amp; document, <span class="keyword">const</span> std::basic_string&lt;Ch&gt;&amp; defaultValue)<span class="keyword"> const </span>{</div><div class="line"><a name="l00584"></a><span class="lineno">  584</span>&#160;        <span class="keywordflow">return</span> GetWithDefault(document, defaultValue, document.<a class="code" href="classrapidjson_1_1_generic_document.html#ad92c6cd025d411258d1f2ad890e2ee3f">GetAllocator</a>());</div><div class="line"><a name="l00585"></a><span class="lineno">  585</span>&#160;    }</div><div class="line"><a name="l00586"></a><span class="lineno">  586</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00587"></a><span class="lineno">  587</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00588"></a><span class="lineno">  588</span>&#160;<span class="comment">    //! Query a value in a document with default primitive value.</span></div><div class="line"><a name="l00589"></a><span class="lineno">  589</span>&#160;<span class="comment"></span><span class="comment">    /*!</span></div><div class="line"><a name="l00590"></a><span class="lineno">  590</span>&#160;<span class="comment">        \tparam T Either \ref Type, \c int, \c unsigned, \c int64_t, \c uint64_t, \c bool</span></div><div class="line"><a name="l00591"></a><span class="lineno">  591</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l00592"></a><span class="lineno">  592</span>&#160;    <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T, <span class="keyword">typename</span> stackAllocator&gt;</div><div class="line"><a name="l00593"></a><span class="lineno">  593</span>&#160;    RAPIDJSON_DISABLEIF_RETURN((internal::OrExpr&lt;internal::IsPointer&lt;T&gt;, internal::IsGenericValue&lt;T&gt; &gt;), (ValueType&amp;))</div><div class="line"><a name="l00594"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_pointer.html#a1f428c25a3a905683e616d76c2d9efcf">  594</a></span>&#160;    GetWithDefault(<a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>&lt;<a class="code" href="classrapidjson_1_1_generic_pointer.html#a399790c5fe8076d91a58c621c0c2a79e">EncodingType</a>, typename ValueType::AllocatorType, stackAllocator&gt;&amp; document, T defaultValue)<span class="keyword"> const </span>{</div><div class="line"><a name="l00595"></a><span class="lineno">  595</span>&#160;        <span class="keywordflow">return</span> GetWithDefault(document, defaultValue, document.GetAllocator());</div><div class="line"><a name="l00596"></a><span class="lineno">  596</span>&#160;    }</div><div class="line"><a name="l00597"></a><span class="lineno">  597</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00598"></a><span class="lineno">  598</span>&#160;<span class="comment">    //@}</span></div><div class="line"><a name="l00599"></a><span class="lineno">  599</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00600"></a><span class="lineno">  600</span>&#160;<span class="comment">    //!@name Set a value</span></div><div class="line"><a name="l00601"></a><span class="lineno">  601</span>&#160;<span class="comment"></span><span class="comment">    //@{</span></div><div class="line"><a name="l00602"></a><span class="lineno">  602</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00603"></a><span class="lineno">  603</span>&#160;<span class="comment">    //! Set a value in a subtree, with move semantics.</span></div><div class="line"><a name="l00604"></a><span class="lineno">  604</span>&#160;<span class="comment"></span><span class="comment">    /*!</span></div><div class="line"><a name="l00605"></a><span class="lineno">  605</span>&#160;<span class="comment">        It creates all parents if they are not exist or types are different to the tokens.</span></div><div class="line"><a name="l00606"></a><span class="lineno">  606</span>&#160;<span class="comment">        So this function always succeeds but potentially remove existing values.</span></div><div class="line"><a name="l00607"></a><span class="lineno">  607</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00608"></a><span class="lineno">  608</span>&#160;<span class="comment">        \param root Root value of a DOM sub-tree to be resolved. It can be any value other than document root.</span></div><div class="line"><a name="l00609"></a><span class="lineno">  609</span>&#160;<span class="comment">        \param value Value to be set.</span></div><div class="line"><a name="l00610"></a><span class="lineno">  610</span>&#160;<span class="comment">        \param allocator Allocator for creating the values if the specified value or its parents are not exist.</span></div><div class="line"><a name="l00611"></a><span class="lineno">  611</span>&#160;<span class="comment">        \see Create()</span></div><div class="line"><a name="l00612"></a><span class="lineno">  612</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l00613"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_pointer.html#a0759b70ec70a6eb7a7545a34764ac663">  613</a></span>&#160;    ValueType&amp; <a class="code" href="classrapidjson_1_1_generic_pointer.html#a0759b70ec70a6eb7a7545a34764ac663">Set</a>(ValueType&amp; root, ValueType&amp; value, <span class="keyword">typename</span> ValueType::AllocatorType&amp; allocator)<span class="keyword"> const </span>{</div><div class="line"><a name="l00614"></a><span class="lineno">  614</span>&#160;        <span class="keywordflow">return</span> Create(root, allocator) = value;</div><div class="line"><a name="l00615"></a><span class="lineno">  615</span>&#160;    }</div><div class="line"><a name="l00616"></a><span class="lineno">  616</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00617"></a><span class="lineno">  617</span>&#160;<span class="comment">    //! Set a value in a subtree, with copy semantics.</span></div><div class="line"><a name="l00618"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_pointer.html#af2f51d68c82136086bed9593719abd1a">  618</a></span>&#160;<span class="comment"></span>    ValueType&amp; <a class="code" href="classrapidjson_1_1_generic_pointer.html#af2f51d68c82136086bed9593719abd1a">Set</a>(ValueType&amp; root, <span class="keyword">const</span> ValueType&amp; value, <span class="keyword">typename</span> ValueType::AllocatorType&amp; allocator)<span class="keyword"> const </span>{</div><div class="line"><a name="l00619"></a><span class="lineno">  619</span>&#160;        <span class="keywordflow">return</span> Create(root, allocator).CopyFrom(value, allocator);</div><div class="line"><a name="l00620"></a><span class="lineno">  620</span>&#160;    }</div><div class="line"><a name="l00621"></a><span class="lineno">  621</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00622"></a><span class="lineno">  622</span>&#160;<span class="comment">    //! Set a null-terminated string in a subtree.</span></div><div class="line"><a name="l00623"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_pointer.html#a4f0ef2b49a9561d570217249343d9335">  623</a></span>&#160;<span class="comment"></span>    ValueType&amp; <a class="code" href="classrapidjson_1_1_generic_pointer.html#a4f0ef2b49a9561d570217249343d9335">Set</a>(ValueType&amp; root, <span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_pointer.html#a850f78846c5548565f8395be5f3427b7">Ch</a>* value, <span class="keyword">typename</span> ValueType::AllocatorType&amp; allocator)<span class="keyword"> const </span>{</div><div class="line"><a name="l00624"></a><span class="lineno">  624</span>&#160;        <span class="keywordflow">return</span> Create(root, allocator) = ValueType(value, allocator).Move();</div><div class="line"><a name="l00625"></a><span class="lineno">  625</span>&#160;    }</div><div class="line"><a name="l00626"></a><span class="lineno">  626</span>&#160;</div><div class="line"><a name="l00627"></a><span class="lineno">  627</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l00628"></a><span class="lineno">  628</span>&#160;<span class="comment">    //! Set a std::basic_string in a subtree.</span></div><div class="line"><a name="l00629"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_pointer.html#a0ae84f686e1af593b9445c2c502101b2">  629</a></span>&#160;<span class="comment"></span>    ValueType&amp; <a class="code" href="classrapidjson_1_1_generic_pointer.html#a0ae84f686e1af593b9445c2c502101b2">Set</a>(ValueType&amp; root, <span class="keyword">const</span> std::basic_string&lt;Ch&gt;&amp; value, <span class="keyword">typename</span> ValueType::AllocatorType&amp; allocator)<span class="keyword"> const </span>{</div><div class="line"><a name="l00630"></a><span class="lineno">  630</span>&#160;        <span class="keywordflow">return</span> Create(root, allocator) = ValueType(value, allocator).Move();</div><div class="line"><a name="l00631"></a><span class="lineno">  631</span>&#160;    }</div><div class="line"><a name="l00632"></a><span class="lineno">  632</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00633"></a><span class="lineno">  633</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00634"></a><span class="lineno">  634</span>&#160;<span class="comment">    //! Set a primitive value in a subtree.</span></div><div class="line"><a name="l00635"></a><span class="lineno">  635</span>&#160;<span class="comment"></span><span class="comment">    /*!</span></div><div class="line"><a name="l00636"></a><span class="lineno">  636</span>&#160;<span class="comment">        \tparam T Either \ref Type, \c int, \c unsigned, \c int64_t, \c uint64_t, \c bool</span></div><div class="line"><a name="l00637"></a><span class="lineno">  637</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l00638"></a><span class="lineno">  638</span>&#160;    <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l00639"></a><span class="lineno">  639</span>&#160;    RAPIDJSON_DISABLEIF_RETURN((internal::OrExpr&lt;internal::IsPointer&lt;T&gt;, internal::IsGenericValue&lt;T&gt; &gt;), (ValueType&amp;))</div><div class="line"><a name="l00640"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_pointer.html#aa6df2ca27eecabbbad825a64a3d2bfe9">  640</a></span>&#160;    Set(ValueType&amp; root, T value, typename ValueType::AllocatorType&amp; allocator)<span class="keyword"> const </span>{</div><div class="line"><a name="l00641"></a><span class="lineno">  641</span>&#160;        <span class="keywordflow">return</span> Create(root, allocator) = ValueType(value).Move();</div><div class="line"><a name="l00642"></a><span class="lineno">  642</span>&#160;    }</div><div class="line"><a name="l00643"></a><span class="lineno">  643</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00644"></a><span class="lineno">  644</span>&#160;<span class="comment">    //! Set a value in a document, with move semantics.</span></div><div class="line"><a name="l00645"></a><span class="lineno">  645</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="l00646"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_pointer.html#a9371832d9089cca9b7f549172fd75cc8">  646</a></span>&#160;    ValueType&amp; <a class="code" href="classrapidjson_1_1_generic_pointer.html#a9371832d9089cca9b7f549172fd75cc8">Set</a>(<a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument&lt;EncodingType, typename ValueType::AllocatorType, stackAllocator&gt;</a>&amp; document, ValueType&amp; value)<span class="keyword"> const </span>{</div><div class="line"><a name="l00647"></a><span class="lineno">  647</span>&#160;        <span class="keywordflow">return</span> Create(document) = value;</div><div class="line"><a name="l00648"></a><span class="lineno">  648</span>&#160;    }</div><div class="line"><a name="l00649"></a><span class="lineno">  649</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00650"></a><span class="lineno">  650</span>&#160;<span class="comment">    //! Set a value in a document, with copy semantics.</span></div><div class="line"><a name="l00651"></a><span class="lineno">  651</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="l00652"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_pointer.html#ad7a692d4e08d578f7e24afb7c4004276">  652</a></span>&#160;    ValueType&amp; <a class="code" href="classrapidjson_1_1_generic_pointer.html#ad7a692d4e08d578f7e24afb7c4004276">Set</a>(<a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument&lt;EncodingType, typename ValueType::AllocatorType, stackAllocator&gt;</a>&amp; document, <span class="keyword">const</span> ValueType&amp; value)<span class="keyword"> const </span>{</div><div class="line"><a name="l00653"></a><span class="lineno">  653</span>&#160;        <span class="keywordflow">return</span> Create(document).CopyFrom(value, document.<a class="code" href="classrapidjson_1_1_generic_document.html#ad92c6cd025d411258d1f2ad890e2ee3f">GetAllocator</a>());</div><div class="line"><a name="l00654"></a><span class="lineno">  654</span>&#160;    }</div><div class="line"><a name="l00655"></a><span class="lineno">  655</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00656"></a><span class="lineno">  656</span>&#160;<span class="comment">    //! Set a null-terminated string in a document.</span></div><div class="line"><a name="l00657"></a><span class="lineno">  657</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="l00658"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_pointer.html#afb649edbdbe09a6840b12d67c9f2501e">  658</a></span>&#160;    ValueType&amp; <a class="code" href="classrapidjson_1_1_generic_pointer.html#afb649edbdbe09a6840b12d67c9f2501e">Set</a>(<a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument&lt;EncodingType, typename ValueType::AllocatorType, stackAllocator&gt;</a>&amp; document, <span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_pointer.html#a850f78846c5548565f8395be5f3427b7">Ch</a>* value)<span class="keyword"> const </span>{</div><div class="line"><a name="l00659"></a><span class="lineno">  659</span>&#160;        <span class="keywordflow">return</span> Create(document) = ValueType(value, document.<a class="code" href="classrapidjson_1_1_generic_document.html#ad92c6cd025d411258d1f2ad890e2ee3f">GetAllocator</a>()).Move();</div><div class="line"><a name="l00660"></a><span class="lineno">  660</span>&#160;    }</div><div class="line"><a name="l00661"></a><span class="lineno">  661</span>&#160;</div><div class="line"><a name="l00662"></a><span class="lineno">  662</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l00663"></a><span class="lineno">  663</span>&#160;<span class="comment">    //! Sets a std::basic_string in a document.</span></div><div class="line"><a name="l00664"></a><span class="lineno">  664</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="l00665"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_pointer.html#a3a7ff4e0b700c2975cf455fef23226b4">  665</a></span>&#160;    ValueType&amp; <a class="code" href="classrapidjson_1_1_generic_pointer.html#a3a7ff4e0b700c2975cf455fef23226b4">Set</a>(<a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument&lt;EncodingType, typename ValueType::AllocatorType, stackAllocator&gt;</a>&amp; document, <span class="keyword">const</span> std::basic_string&lt;Ch&gt;&amp; value)<span class="keyword"> const </span>{</div><div class="line"><a name="l00666"></a><span class="lineno">  666</span>&#160;        <span class="keywordflow">return</span> Create(document) = ValueType(value, document.<a class="code" href="classrapidjson_1_1_generic_document.html#ad92c6cd025d411258d1f2ad890e2ee3f">GetAllocator</a>()).Move();</div><div class="line"><a name="l00667"></a><span class="lineno">  667</span>&#160;    }</div><div class="line"><a name="l00668"></a><span class="lineno">  668</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00669"></a><span class="lineno">  669</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00670"></a><span class="lineno">  670</span>&#160;<span class="comment">    //! Set a primitive value in a document.</span></div><div class="line"><a name="l00671"></a><span class="lineno">  671</span>&#160;<span class="comment"></span><span class="comment">    /*!</span></div><div class="line"><a name="l00672"></a><span class="lineno">  672</span>&#160;<span class="comment">    \tparam T Either \ref Type, \c int, \c unsigned, \c int64_t, \c uint64_t, \c bool</span></div><div class="line"><a name="l00673"></a><span class="lineno">  673</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l00674"></a><span class="lineno">  674</span>&#160;    <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T, <span class="keyword">typename</span> stackAllocator&gt;</div><div class="line"><a name="l00675"></a><span class="lineno">  675</span>&#160;    RAPIDJSON_DISABLEIF_RETURN((internal::OrExpr&lt;internal::IsPointer&lt;T&gt;, internal::IsGenericValue&lt;T&gt; &gt;), (ValueType&amp;))</div><div class="line"><a name="l00676"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_pointer.html#a8e5ed62ba30bb3f7a09a826746f70574">  676</a></span>&#160;        Set(<a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument</a>&lt;<a class="code" href="classrapidjson_1_1_generic_pointer.html#a399790c5fe8076d91a58c621c0c2a79e">EncodingType</a>, typename ValueType::AllocatorType, stackAllocator&gt;&amp; document, T value)<span class="keyword"> const </span>{</div><div class="line"><a name="l00677"></a><span class="lineno">  677</span>&#160;            <span class="keywordflow">return</span> Create(document) = value;</div><div class="line"><a name="l00678"></a><span class="lineno">  678</span>&#160;    }</div><div class="line"><a name="l00679"></a><span class="lineno">  679</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00680"></a><span class="lineno">  680</span>&#160;<span class="comment">    //@}</span></div><div class="line"><a name="l00681"></a><span class="lineno">  681</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00682"></a><span class="lineno">  682</span>&#160;<span class="comment">    //!@name Swap a value</span></div><div class="line"><a name="l00683"></a><span class="lineno">  683</span>&#160;<span class="comment"></span><span class="comment">    //@{</span></div><div class="line"><a name="l00684"></a><span class="lineno">  684</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00685"></a><span class="lineno">  685</span>&#160;<span class="comment">    //! Swap a value with a value in a subtree.</span></div><div class="line"><a name="l00686"></a><span class="lineno">  686</span>&#160;<span class="comment"></span><span class="comment">    /*!</span></div><div class="line"><a name="l00687"></a><span class="lineno">  687</span>&#160;<span class="comment">        It creates all parents if they are not exist or types are different to the tokens.</span></div><div class="line"><a name="l00688"></a><span class="lineno">  688</span>&#160;<span class="comment">        So this function always succeeds but potentially remove existing values.</span></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">        \param root Root value of a DOM sub-tree to be resolved. It can be any value other than document root.</span></div><div class="line"><a name="l00691"></a><span class="lineno">  691</span>&#160;<span class="comment">        \param value Value to be swapped.</span></div><div class="line"><a name="l00692"></a><span class="lineno">  692</span>&#160;<span class="comment">        \param allocator Allocator for creating the values if the specified value or its parents are not exist.</span></div><div class="line"><a name="l00693"></a><span class="lineno">  693</span>&#160;<span class="comment">        \see Create()</span></div><div class="line"><a name="l00694"></a><span class="lineno">  694</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l00695"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_pointer.html#a4690cd1d6c85168ebd2ce0afe186a4fa">  695</a></span>&#160;    ValueType&amp; <a class="code" href="classrapidjson_1_1_generic_pointer.html#a4690cd1d6c85168ebd2ce0afe186a4fa">Swap</a>(ValueType&amp; root, ValueType&amp; value, <span class="keyword">typename</span> ValueType::AllocatorType&amp; allocator)<span class="keyword"> const </span>{</div><div class="line"><a name="l00696"></a><span class="lineno">  696</span>&#160;        <span class="keywordflow">return</span> Create(root, allocator).Swap(value);</div><div class="line"><a name="l00697"></a><span class="lineno">  697</span>&#160;    }</div><div class="line"><a name="l00698"></a><span class="lineno">  698</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00699"></a><span class="lineno">  699</span>&#160;<span class="comment">    //! Swap a value with a value in a document.</span></div><div class="line"><a name="l00700"></a><span class="lineno">  700</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="l00701"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_pointer.html#a29d7ee42eb5646f829aeca6c6989555a">  701</a></span>&#160;    ValueType&amp; <a class="code" href="classrapidjson_1_1_generic_pointer.html#a29d7ee42eb5646f829aeca6c6989555a">Swap</a>(<a class="code" href="classrapidjson_1_1_generic_document.html">GenericDocument&lt;EncodingType, typename ValueType::AllocatorType, stackAllocator&gt;</a>&amp; document, ValueType&amp; value)<span class="keyword"> const </span>{</div><div class="line"><a name="l00702"></a><span class="lineno">  702</span>&#160;        <span class="keywordflow">return</span> Create(document).Swap(value);</div><div class="line"><a name="l00703"></a><span class="lineno">  703</span>&#160;    }</div><div class="line"><a name="l00704"></a><span class="lineno">  704</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00705"></a><span class="lineno">  705</span>&#160;<span class="comment">    //@}</span></div><div class="line"><a name="l00706"></a><span class="lineno">  706</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00707"></a><span class="lineno">  707</span>&#160;<span class="comment">    //! Erase a value in a subtree.</span></div><div class="line"><a name="l00708"></a><span class="lineno">  708</span>&#160;<span class="comment"></span><span class="comment">    /*!</span></div><div class="line"><a name="l00709"></a><span class="lineno">  709</span>&#160;<span class="comment">        \param root Root value of a DOM sub-tree to be resolved. It can be any value other than document root.</span></div><div class="line"><a name="l00710"></a><span class="lineno">  710</span>&#160;<span class="comment">        \return Whether the resolved value is found and erased.</span></div><div class="line"><a name="l00711"></a><span class="lineno">  711</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00712"></a><span class="lineno">  712</span>&#160;<span class="comment">        \note Erasing with an empty pointer \c Pointer(&quot;&quot;), i.e. the root, always fail and return false.</span></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"><a class="line" href="classrapidjson_1_1_generic_pointer.html#a923a1100c029a28e25894708bdce784c">  714</a></span>&#160;    <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_generic_pointer.html#a923a1100c029a28e25894708bdce784c">Erase</a>(ValueType&amp; root)<span class="keyword"> const </span>{</div><div class="line"><a name="l00715"></a><span class="lineno">  715</span>&#160;        <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsValid());</div><div class="line"><a name="l00716"></a><span class="lineno">  716</span>&#160;        <span class="keywordflow">if</span> (tokenCount_ == 0) <span class="comment">// Cannot erase the root</span></div><div class="line"><a name="l00717"></a><span class="lineno">  717</span>&#160;            <span class="keywordflow">return</span> <span class="keyword">false</span>;</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;        ValueType* v = &amp;root;</div><div class="line"><a name="l00720"></a><span class="lineno">  720</span>&#160;        <span class="keyword">const</span> <a class="code" href="structrapidjson_1_1_generic_pointer_1_1_token.html">Token</a>* last = tokens_ + (tokenCount_ - 1);</div><div class="line"><a name="l00721"></a><span class="lineno">  721</span>&#160;        <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="structrapidjson_1_1_generic_pointer_1_1_token.html">Token</a> *t = tokens_; t != last; ++t) {</div><div class="line"><a name="l00722"></a><span class="lineno">  722</span>&#160;            <span class="keywordflow">switch</span> (v-&gt;GetType()) {</div><div class="line"><a name="l00723"></a><span class="lineno">  723</span>&#160;            <span class="keywordflow">case</span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4acf030b422a32c3647c7c5973bd4dd0a9">kObjectType</a>:</div><div class="line"><a name="l00724"></a><span class="lineno">  724</span>&#160;                {</div><div class="line"><a name="l00725"></a><span class="lineno">  725</span>&#160;                    <span class="keyword">typename</span> ValueType::MemberIterator m = v-&gt;FindMember(<a class="code" href="structrapidjson_1_1_generic_string_ref.html">GenericStringRef&lt;Ch&gt;</a>(t-&gt;name, t-&gt;length));</div><div class="line"><a name="l00726"></a><span class="lineno">  726</span>&#160;                    <span class="keywordflow">if</span> (m == v-&gt;MemberEnd())</div><div class="line"><a name="l00727"></a><span class="lineno">  727</span>&#160;                        <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00728"></a><span class="lineno">  728</span>&#160;                    v = &amp;m-&gt;value;</div><div class="line"><a name="l00729"></a><span class="lineno">  729</span>&#160;                }</div><div class="line"><a name="l00730"></a><span class="lineno">  730</span>&#160;                <span class="keywordflow">break</span>;</div><div class="line"><a name="l00731"></a><span class="lineno">  731</span>&#160;            <span class="keywordflow">case</span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a058c622e1e7d59419ae58b895cbce468">kArrayType</a>:</div><div class="line"><a name="l00732"></a><span class="lineno">  732</span>&#160;                <span class="keywordflow">if</span> (t-&gt;index == kPointerInvalidIndex || t-&gt;index &gt;= v-&gt;Size())</div><div class="line"><a name="l00733"></a><span class="lineno">  733</span>&#160;                    <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00734"></a><span class="lineno">  734</span>&#160;                v = &amp;((*v)[t-&gt;index]);</div><div class="line"><a name="l00735"></a><span class="lineno">  735</span>&#160;                <span class="keywordflow">break</span>;</div><div class="line"><a name="l00736"></a><span class="lineno">  736</span>&#160;            <span class="keywordflow">default</span>:</div><div class="line"><a name="l00737"></a><span class="lineno">  737</span>&#160;                <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00738"></a><span class="lineno">  738</span>&#160;            }</div><div class="line"><a name="l00739"></a><span class="lineno">  739</span>&#160;        }</div><div class="line"><a name="l00740"></a><span class="lineno">  740</span>&#160;</div><div class="line"><a name="l00741"></a><span class="lineno">  741</span>&#160;        <span class="keywordflow">switch</span> (v-&gt;GetType()) {</div><div class="line"><a name="l00742"></a><span class="lineno">  742</span>&#160;        <span class="keywordflow">case</span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4acf030b422a32c3647c7c5973bd4dd0a9">kObjectType</a>:</div><div class="line"><a name="l00743"></a><span class="lineno">  743</span>&#160;            <span class="keywordflow">return</span> v-&gt;EraseMember(<a class="code" href="structrapidjson_1_1_generic_string_ref.html">GenericStringRef&lt;Ch&gt;</a>(last-&gt;<a class="code" href="structrapidjson_1_1_generic_pointer_1_1_token.html#aceb59c9796418c20da27b03bf1948fe8">name</a>, last-&gt;<a class="code" href="structrapidjson_1_1_generic_pointer_1_1_token.html#ad866d674dbddf9690ad571b65e968600">length</a>));</div><div class="line"><a name="l00744"></a><span class="lineno">  744</span>&#160;        <span class="keywordflow">case</span> <a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a058c622e1e7d59419ae58b895cbce468">kArrayType</a>:</div><div class="line"><a name="l00745"></a><span class="lineno">  745</span>&#160;            <span class="keywordflow">if</span> (last-&gt;<a class="code" href="structrapidjson_1_1_generic_pointer_1_1_token.html#a50331c9e3dedc34d2c79745b2e58fb2d">index</a> == kPointerInvalidIndex || last-&gt;<a class="code" href="structrapidjson_1_1_generic_pointer_1_1_token.html#a50331c9e3dedc34d2c79745b2e58fb2d">index</a> &gt;= v-&gt;Size())</div><div class="line"><a name="l00746"></a><span class="lineno">  746</span>&#160;                <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00747"></a><span class="lineno">  747</span>&#160;            v-&gt;Erase(v-&gt;Begin() + last-&gt;<a class="code" href="structrapidjson_1_1_generic_pointer_1_1_token.html#a50331c9e3dedc34d2c79745b2e58fb2d">index</a>);</div><div class="line"><a name="l00748"></a><span class="lineno">  748</span>&#160;            <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00749"></a><span class="lineno">  749</span>&#160;        <span class="keywordflow">default</span>:</div><div class="line"><a name="l00750"></a><span class="lineno">  750</span>&#160;            <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00751"></a><span class="lineno">  751</span>&#160;        }</div><div class="line"><a name="l00752"></a><span class="lineno">  752</span>&#160;    }</div><div class="line"><a name="l00753"></a><span class="lineno">  753</span>&#160;</div><div class="line"><a name="l00754"></a><span class="lineno">  754</span>&#160;<span class="keyword">private</span>:<span class="comment"></span></div><div class="line"><a name="l00755"></a><span class="lineno">  755</span>&#160;<span class="comment">    //! Clone the content from rhs to this.</span></div><div class="line"><a name="l00756"></a><span class="lineno">  756</span>&#160;<span class="comment"></span><span class="comment">    /*!</span></div><div class="line"><a name="l00757"></a><span class="lineno">  757</span>&#160;<span class="comment">        \param rhs Source pointer.</span></div><div class="line"><a name="l00758"></a><span class="lineno">  758</span>&#160;<span class="comment">        \param extraToken Extra tokens to be allocated.</span></div><div class="line"><a name="l00759"></a><span class="lineno">  759</span>&#160;<span class="comment">        \param extraNameBufferSize Extra name buffer size (in number of Ch) to be allocated.</span></div><div class="line"><a name="l00760"></a><span class="lineno">  760</span>&#160;<span class="comment">        \return Start of non-occupied name buffer, for storing extra names.</span></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;    <a class="code" href="classrapidjson_1_1_generic_pointer.html#a850f78846c5548565f8395be5f3427b7">Ch</a>* CopyFromRaw(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_pointer.html">GenericPointer</a>&amp; rhs, <span class="keywordtype">size_t</span> extraToken = 0, <span class="keywordtype">size_t</span> extraNameBufferSize = 0) {</div><div class="line"><a name="l00763"></a><span class="lineno">  763</span>&#160;        <span class="keywordflow">if</span> (!allocator_) <span class="comment">// allocator is independently owned.</span></div><div class="line"><a name="l00764"></a><span class="lineno">  764</span>&#160;            ownAllocator_ = allocator_ = <a class="code" href="rapidjson_8h.html#abdc7cd7902748ffe6626d71c59a73c3b">RAPIDJSON_NEW</a>(<a class="code" href="classrapidjson_1_1_allocator.html">Allocator</a>)();</div><div class="line"><a name="l00765"></a><span class="lineno">  765</span>&#160;</div><div class="line"><a name="l00766"></a><span class="lineno">  766</span>&#160;        <span class="keywordtype">size_t</span> nameBufferSize = rhs.tokenCount_; <span class="comment">// null terminators for tokens</span></div><div class="line"><a name="l00767"></a><span class="lineno">  767</span>&#160;        <span class="keywordflow">for</span> (<a class="code" href="structrapidjson_1_1_generic_pointer_1_1_token.html">Token</a> *t = rhs.tokens_; t != rhs.tokens_ + rhs.tokenCount_; ++t)</div><div class="line"><a name="l00768"></a><span class="lineno">  768</span>&#160;            nameBufferSize += t-&gt;length;</div><div class="line"><a name="l00769"></a><span class="lineno">  769</span>&#160;</div><div class="line"><a name="l00770"></a><span class="lineno">  770</span>&#160;        tokenCount_ = rhs.tokenCount_ + extraToken;</div><div class="line"><a name="l00771"></a><span class="lineno">  771</span>&#160;        tokens_ = <span class="keyword">static_cast&lt;</span><a class="code" href="structrapidjson_1_1_generic_pointer_1_1_token.html">Token</a> *<span class="keyword">&gt;</span>(allocator_-&gt;Malloc(tokenCount_ * <span class="keyword">sizeof</span>(<a class="code" href="structrapidjson_1_1_generic_pointer_1_1_token.html">Token</a>) + (nameBufferSize + extraNameBufferSize) * <span class="keyword">sizeof</span>(<a class="code" href="classrapidjson_1_1_generic_pointer.html#a850f78846c5548565f8395be5f3427b7">Ch</a>)));</div><div class="line"><a name="l00772"></a><span class="lineno">  772</span>&#160;        nameBuffer_ = <span class="keyword">reinterpret_cast&lt;</span><a class="code" href="classrapidjson_1_1_generic_pointer.html#a850f78846c5548565f8395be5f3427b7">Ch</a> *<span class="keyword">&gt;</span>(tokens_ + tokenCount_);</div><div class="line"><a name="l00773"></a><span class="lineno">  773</span>&#160;        <span class="keywordflow">if</span> (rhs.tokenCount_ &gt; 0) {</div><div class="line"><a name="l00774"></a><span class="lineno">  774</span>&#160;            std::memcpy(tokens_, rhs.tokens_, rhs.tokenCount_ * <span class="keyword">sizeof</span>(<a class="code" href="structrapidjson_1_1_generic_pointer_1_1_token.html">Token</a>));</div><div class="line"><a name="l00775"></a><span class="lineno">  775</span>&#160;        }</div><div class="line"><a name="l00776"></a><span class="lineno">  776</span>&#160;        <span class="keywordflow">if</span> (nameBufferSize &gt; 0) {</div><div class="line"><a name="l00777"></a><span class="lineno">  777</span>&#160;            std::memcpy(nameBuffer_, rhs.nameBuffer_, nameBufferSize * <span class="keyword">sizeof</span>(<a class="code" href="classrapidjson_1_1_generic_pointer.html#a850f78846c5548565f8395be5f3427b7">Ch</a>));</div><div class="line"><a name="l00778"></a><span class="lineno">  778</span>&#160;        }</div><div class="line"><a name="l00779"></a><span class="lineno">  779</span>&#160;</div><div class="line"><a name="l00780"></a><span class="lineno">  780</span>&#160;        <span class="comment">// Adjust pointers to name buffer</span></div><div class="line"><a name="l00781"></a><span class="lineno">  781</span>&#160;        std::ptrdiff_t diff = nameBuffer_ - rhs.nameBuffer_;</div><div class="line"><a name="l00782"></a><span class="lineno">  782</span>&#160;        <span class="keywordflow">for</span> (<a class="code" href="structrapidjson_1_1_generic_pointer_1_1_token.html">Token</a> *t = tokens_; t != tokens_ + rhs.tokenCount_; ++t)</div><div class="line"><a name="l00783"></a><span class="lineno">  783</span>&#160;            t-&gt;name += diff;</div><div class="line"><a name="l00784"></a><span class="lineno">  784</span>&#160;</div><div class="line"><a name="l00785"></a><span class="lineno">  785</span>&#160;        <span class="keywordflow">return</span> nameBuffer_ + nameBufferSize;</div><div class="line"><a name="l00786"></a><span class="lineno">  786</span>&#160;    }</div><div class="line"><a name="l00787"></a><span class="lineno">  787</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00788"></a><span class="lineno">  788</span>&#160;<span class="comment">    //! Check whether a character should be percent-encoded.</span></div><div class="line"><a name="l00789"></a><span class="lineno">  789</span>&#160;<span class="comment"></span><span class="comment">    /*!</span></div><div class="line"><a name="l00790"></a><span class="lineno">  790</span>&#160;<span class="comment">        According to RFC 3986 2.3 Unreserved Characters.</span></div><div class="line"><a name="l00791"></a><span class="lineno">  791</span>&#160;<span class="comment">        \param c The character (code unit) to be tested.</span></div><div class="line"><a name="l00792"></a><span class="lineno">  792</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l00793"></a><span class="lineno">  793</span>&#160;    <span class="keywordtype">bool</span> NeedPercentEncode(<a class="code" href="classrapidjson_1_1_generic_pointer.html#a850f78846c5548565f8395be5f3427b7">Ch</a> c)<span class="keyword"> const </span>{</div><div class="line"><a name="l00794"></a><span class="lineno">  794</span>&#160;        <span class="keywordflow">return</span> !((c &gt;= <span class="charliteral">&#39;0&#39;</span> &amp;&amp; c &lt;= &#39;9&#39;) || (c &gt;= <span class="charliteral">&#39;A&#39;</span> &amp;&amp; c &lt;=&#39;Z&#39;) || (c &gt;= <span class="charliteral">&#39;a&#39;</span> &amp;&amp; c &lt;= <span class="charliteral">&#39;z&#39;</span>) || c == <span class="charliteral">&#39;-&#39;</span> || c == <span class="charliteral">&#39;.&#39;</span> || c == <span class="charliteral">&#39;_&#39;</span> || c ==<span class="charliteral">&#39;~&#39;</span>);</div><div class="line"><a name="l00795"></a><span class="lineno">  795</span>&#160;    }</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">  797</span>&#160;<span class="comment">    //! Parse a JSON String or its URI fragment representation into tokens.</span></div><div class="line"><a name="l00798"></a><span class="lineno">  798</span>&#160;<span class="comment"></span><span class="preprocessor">#ifndef __clang__ // -Wdocumentation</span></div><div class="line"><a name="l00799"></a><span class="lineno">  799</span>&#160;<span class="comment">    /*!</span></div><div class="line"><a name="l00800"></a><span class="lineno">  800</span>&#160;<span class="comment">        \param source Either a JSON Pointer string, or its URI fragment representation. Not need to be null terminated.</span></div><div class="line"><a name="l00801"></a><span class="lineno">  801</span>&#160;<span class="comment">        \param length Length of the source string.</span></div><div class="line"><a name="l00802"></a><span class="lineno">  802</span>&#160;<span class="comment">        \note Source cannot be JSON String Representation of JSON Pointer, e.g. In &quot;/\u0000&quot;, \u0000 will not be unescaped.</span></div><div class="line"><a name="l00803"></a><span class="lineno">  803</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l00804"></a><span class="lineno">  804</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00805"></a><span class="lineno">  805</span>&#160;    <span class="keywordtype">void</span> Parse(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_pointer.html#a850f78846c5548565f8395be5f3427b7">Ch</a>* source, <span class="keywordtype">size_t</span> length) {</div><div class="line"><a name="l00806"></a><span class="lineno">  806</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>(source != NULL);</div><div class="line"><a name="l00807"></a><span class="lineno">  807</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>(nameBuffer_ == 0);</div><div class="line"><a name="l00808"></a><span class="lineno">  808</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>(tokens_ == 0);</div><div class="line"><a name="l00809"></a><span class="lineno">  809</span>&#160;</div><div class="line"><a name="l00810"></a><span class="lineno">  810</span>&#160;        <span class="comment">// Create own allocator if user did not supply.</span></div><div class="line"><a name="l00811"></a><span class="lineno">  811</span>&#160;        <span class="keywordflow">if</span> (!allocator_)</div><div class="line"><a name="l00812"></a><span class="lineno">  812</span>&#160;            ownAllocator_ = allocator_ = <a class="code" href="rapidjson_8h.html#abdc7cd7902748ffe6626d71c59a73c3b">RAPIDJSON_NEW</a>(<a class="code" href="classrapidjson_1_1_allocator.html">Allocator</a>)();</div><div class="line"><a name="l00813"></a><span class="lineno">  813</span>&#160;</div><div class="line"><a name="l00814"></a><span class="lineno">  814</span>&#160;        <span class="comment">// Count number of &#39;/&#39; as tokenCount</span></div><div class="line"><a name="l00815"></a><span class="lineno">  815</span>&#160;        tokenCount_ = 0;</div><div class="line"><a name="l00816"></a><span class="lineno">  816</span>&#160;        <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_pointer.html#a850f78846c5548565f8395be5f3427b7">Ch</a>* s = source; s != source + length; s++) </div><div class="line"><a name="l00817"></a><span class="lineno">  817</span>&#160;            <span class="keywordflow">if</span> (*s == <span class="charliteral">&#39;/&#39;</span>)</div><div class="line"><a name="l00818"></a><span class="lineno">  818</span>&#160;                tokenCount_++;</div><div class="line"><a name="l00819"></a><span class="lineno">  819</span>&#160;</div><div class="line"><a name="l00820"></a><span class="lineno">  820</span>&#160;        <a class="code" href="structrapidjson_1_1_generic_pointer_1_1_token.html">Token</a>* token = tokens_ = <span class="keyword">static_cast&lt;</span><a class="code" href="structrapidjson_1_1_generic_pointer_1_1_token.html">Token</a> *<span class="keyword">&gt;</span>(allocator_-&gt;Malloc(tokenCount_ * <span class="keyword">sizeof</span>(<a class="code" href="structrapidjson_1_1_generic_pointer_1_1_token.html">Token</a>) + length * <span class="keyword">sizeof</span>(<a class="code" href="classrapidjson_1_1_generic_pointer.html#a850f78846c5548565f8395be5f3427b7">Ch</a>)));</div><div class="line"><a name="l00821"></a><span class="lineno">  821</span>&#160;        <a class="code" href="classrapidjson_1_1_generic_pointer.html#a850f78846c5548565f8395be5f3427b7">Ch</a>* name = nameBuffer_ = <span class="keyword">reinterpret_cast&lt;</span><a class="code" href="classrapidjson_1_1_generic_pointer.html#a850f78846c5548565f8395be5f3427b7">Ch</a> *<span class="keyword">&gt;</span>(tokens_ + tokenCount_);</div><div class="line"><a name="l00822"></a><span class="lineno">  822</span>&#160;        <span class="keywordtype">size_t</span> i = 0;</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">// Detect if it is a URI fragment</span></div><div class="line"><a name="l00825"></a><span class="lineno">  825</span>&#160;        <span class="keywordtype">bool</span> uriFragment = <span class="keyword">false</span>;</div><div class="line"><a name="l00826"></a><span class="lineno">  826</span>&#160;        <span class="keywordflow">if</span> (source[i] == <span class="charliteral">&#39;#&#39;</span>) {</div><div class="line"><a name="l00827"></a><span class="lineno">  827</span>&#160;            uriFragment = <span class="keyword">true</span>;</div><div class="line"><a name="l00828"></a><span class="lineno">  828</span>&#160;            i++;</div><div class="line"><a name="l00829"></a><span class="lineno">  829</span>&#160;        }</div><div class="line"><a name="l00830"></a><span class="lineno">  830</span>&#160;</div><div class="line"><a name="l00831"></a><span class="lineno">  831</span>&#160;        <span class="keywordflow">if</span> (i != length &amp;&amp; source[i] != <span class="charliteral">&#39;/&#39;</span>) {</div><div class="line"><a name="l00832"></a><span class="lineno">  832</span>&#160;            parseErrorCode_ = <a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#ggade540ee4cc2a416c23b8ee2c12393c7ba2f2f8b238e201b7d540e8914bbfd2bed">kPointerParseErrorTokenMustBeginWithSolidus</a>;</div><div class="line"><a name="l00833"></a><span class="lineno">  833</span>&#160;            <span class="keywordflow">goto</span> error;</div><div class="line"><a name="l00834"></a><span class="lineno">  834</span>&#160;        }</div><div class="line"><a name="l00835"></a><span class="lineno">  835</span>&#160;</div><div class="line"><a name="l00836"></a><span class="lineno">  836</span>&#160;        <span class="keywordflow">while</span> (i &lt; length) {</div><div class="line"><a name="l00837"></a><span class="lineno">  837</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>(source[i] == <span class="charliteral">&#39;/&#39;</span>);</div><div class="line"><a name="l00838"></a><span class="lineno">  838</span>&#160;            i++; <span class="comment">// consumes &#39;/&#39;</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;            token-&gt;<a class="code" href="structrapidjson_1_1_generic_pointer_1_1_token.html#aceb59c9796418c20da27b03bf1948fe8">name</a> = name;</div><div class="line"><a name="l00841"></a><span class="lineno">  841</span>&#160;            <span class="keywordtype">bool</span> isNumber = <span class="keyword">true</span>;</div><div class="line"><a name="l00842"></a><span class="lineno">  842</span>&#160;</div><div class="line"><a name="l00843"></a><span class="lineno">  843</span>&#160;            <span class="keywordflow">while</span> (i &lt; length &amp;&amp; source[i] != <span class="charliteral">&#39;/&#39;</span>) {</div><div class="line"><a name="l00844"></a><span class="lineno">  844</span>&#160;                <a class="code" href="classrapidjson_1_1_generic_pointer.html#a850f78846c5548565f8395be5f3427b7">Ch</a> c = source[i];</div><div class="line"><a name="l00845"></a><span class="lineno">  845</span>&#160;                <span class="keywordflow">if</span> (uriFragment) {</div><div class="line"><a name="l00846"></a><span class="lineno">  846</span>&#160;                    <span class="comment">// Decoding percent-encoding for URI fragment</span></div><div class="line"><a name="l00847"></a><span class="lineno">  847</span>&#160;                    <span class="keywordflow">if</span> (c == <span class="charliteral">&#39;%&#39;</span>) {</div><div class="line"><a name="l00848"></a><span class="lineno">  848</span>&#160;                        PercentDecodeStream is(&amp;source[i], source + length);</div><div class="line"><a name="l00849"></a><span class="lineno">  849</span>&#160;                        <a class="code" href="structrapidjson_1_1_generic_insitu_string_stream.html">GenericInsituStringStream&lt;EncodingType&gt;</a> os(name);</div><div class="line"><a name="l00850"></a><span class="lineno">  850</span>&#160;                        <a class="code" href="classrapidjson_1_1_generic_pointer.html#a850f78846c5548565f8395be5f3427b7">Ch</a>* begin = os.PutBegin();</div><div class="line"><a name="l00851"></a><span class="lineno">  851</span>&#160;                        <span class="keywordflow">if</span> (!<a class="code" href="structrapidjson_1_1_transcoder.html">Transcoder</a>&lt;<a class="code" href="structrapidjson_1_1_u_t_f8.html">UTF8&lt;&gt;</a>, <a class="code" href="classrapidjson_1_1_generic_pointer.html#a399790c5fe8076d91a58c621c0c2a79e">EncodingType</a>&gt;().Validate(is, os) || !is.IsValid()) {</div><div class="line"><a name="l00852"></a><span class="lineno">  852</span>&#160;                            parseErrorCode_ = <a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#ggade540ee4cc2a416c23b8ee2c12393c7ba29831a02b8ee23a05d552b47f4d64d28">kPointerParseErrorInvalidPercentEncoding</a>;</div><div class="line"><a name="l00853"></a><span class="lineno">  853</span>&#160;                            <span class="keywordflow">goto</span> error;</div><div class="line"><a name="l00854"></a><span class="lineno">  854</span>&#160;                        }</div><div class="line"><a name="l00855"></a><span class="lineno">  855</span>&#160;                        <span class="keywordtype">size_t</span> len = os.PutEnd(begin);</div><div class="line"><a name="l00856"></a><span class="lineno">  856</span>&#160;                        i += is.Tell() - 1;</div><div class="line"><a name="l00857"></a><span class="lineno">  857</span>&#160;                        <span class="keywordflow">if</span> (len == 1)</div><div class="line"><a name="l00858"></a><span class="lineno">  858</span>&#160;                            c = *name;</div><div class="line"><a name="l00859"></a><span class="lineno">  859</span>&#160;                        <span class="keywordflow">else</span> {</div><div class="line"><a name="l00860"></a><span class="lineno">  860</span>&#160;                            name += len;</div><div class="line"><a name="l00861"></a><span class="lineno">  861</span>&#160;                            isNumber = <span class="keyword">false</span>;</div><div class="line"><a name="l00862"></a><span class="lineno">  862</span>&#160;                            i++;</div><div class="line"><a name="l00863"></a><span class="lineno">  863</span>&#160;                            <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00864"></a><span class="lineno">  864</span>&#160;                        }</div><div class="line"><a name="l00865"></a><span class="lineno">  865</span>&#160;                    }</div><div class="line"><a name="l00866"></a><span class="lineno">  866</span>&#160;                    <span class="keywordflow">else</span> <span class="keywordflow">if</span> (NeedPercentEncode(c)) {</div><div class="line"><a name="l00867"></a><span class="lineno">  867</span>&#160;                        parseErrorCode_ = <a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#ggade540ee4cc2a416c23b8ee2c12393c7bae244a98f53279fda5a750f847b81c54f">kPointerParseErrorCharacterMustPercentEncode</a>;</div><div class="line"><a name="l00868"></a><span class="lineno">  868</span>&#160;                        <span class="keywordflow">goto</span> error;</div><div class="line"><a name="l00869"></a><span class="lineno">  869</span>&#160;                    }</div><div class="line"><a name="l00870"></a><span class="lineno">  870</span>&#160;                }</div><div class="line"><a name="l00871"></a><span class="lineno">  871</span>&#160;</div><div class="line"><a name="l00872"></a><span class="lineno">  872</span>&#160;                i++;</div><div class="line"><a name="l00873"></a><span class="lineno">  873</span>&#160;                </div><div class="line"><a name="l00874"></a><span class="lineno">  874</span>&#160;                <span class="comment">// Escaping &quot;~0&quot; -&gt; &#39;~&#39;, &quot;~1&quot; -&gt; &#39;/&#39;</span></div><div class="line"><a name="l00875"></a><span class="lineno">  875</span>&#160;                <span class="keywordflow">if</span> (c == <span class="charliteral">&#39;~&#39;</span>) {</div><div class="line"><a name="l00876"></a><span class="lineno">  876</span>&#160;                    <span class="keywordflow">if</span> (i &lt; length) {</div><div class="line"><a name="l00877"></a><span class="lineno">  877</span>&#160;                        c = source[i];</div><div class="line"><a name="l00878"></a><span class="lineno">  878</span>&#160;                        <span class="keywordflow">if</span> (c == <span class="charliteral">&#39;0&#39;</span>)       c = <span class="charliteral">&#39;~&#39;</span>;</div><div class="line"><a name="l00879"></a><span class="lineno">  879</span>&#160;                        <span class="keywordflow">else</span> <span class="keywordflow">if</span> (c == <span class="charliteral">&#39;1&#39;</span>)  c = <span class="charliteral">&#39;/&#39;</span>;</div><div class="line"><a name="l00880"></a><span class="lineno">  880</span>&#160;                        <span class="keywordflow">else</span> {</div><div class="line"><a name="l00881"></a><span class="lineno">  881</span>&#160;                            parseErrorCode_ = <a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#ggade540ee4cc2a416c23b8ee2c12393c7ba907c9fe4e541b257513e3a18635379f7">kPointerParseErrorInvalidEscape</a>;</div><div class="line"><a name="l00882"></a><span class="lineno">  882</span>&#160;                            <span class="keywordflow">goto</span> error;</div><div class="line"><a name="l00883"></a><span class="lineno">  883</span>&#160;                        }</div><div class="line"><a name="l00884"></a><span class="lineno">  884</span>&#160;                        i++;</div><div class="line"><a name="l00885"></a><span class="lineno">  885</span>&#160;                    }</div><div class="line"><a name="l00886"></a><span class="lineno">  886</span>&#160;                    <span class="keywordflow">else</span> {</div><div class="line"><a name="l00887"></a><span class="lineno">  887</span>&#160;                        parseErrorCode_ = <a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#ggade540ee4cc2a416c23b8ee2c12393c7ba907c9fe4e541b257513e3a18635379f7">kPointerParseErrorInvalidEscape</a>;</div><div class="line"><a name="l00888"></a><span class="lineno">  888</span>&#160;                        <span class="keywordflow">goto</span> error;</div><div class="line"><a name="l00889"></a><span class="lineno">  889</span>&#160;                    }</div><div class="line"><a name="l00890"></a><span class="lineno">  890</span>&#160;                }</div><div class="line"><a name="l00891"></a><span class="lineno">  891</span>&#160;</div><div class="line"><a name="l00892"></a><span class="lineno">  892</span>&#160;                <span class="comment">// First check for index: all of characters are digit</span></div><div class="line"><a name="l00893"></a><span class="lineno">  893</span>&#160;                <span class="keywordflow">if</span> (c &lt; &#39;0&#39; || c &gt; <span class="charliteral">&#39;9&#39;</span>)</div><div class="line"><a name="l00894"></a><span class="lineno">  894</span>&#160;                    isNumber = <span class="keyword">false</span>;</div><div class="line"><a name="l00895"></a><span class="lineno">  895</span>&#160;</div><div class="line"><a name="l00896"></a><span class="lineno">  896</span>&#160;                *name++ = c;</div><div class="line"><a name="l00897"></a><span class="lineno">  897</span>&#160;            }</div><div class="line"><a name="l00898"></a><span class="lineno">  898</span>&#160;            token-&gt;<a class="code" href="structrapidjson_1_1_generic_pointer_1_1_token.html#ad866d674dbddf9690ad571b65e968600">length</a> = <span class="keyword">static_cast&lt;</span><a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a><span class="keyword">&gt;</span>(name - token-&gt;<a class="code" href="structrapidjson_1_1_generic_pointer_1_1_token.html#aceb59c9796418c20da27b03bf1948fe8">name</a>);</div><div class="line"><a name="l00899"></a><span class="lineno">  899</span>&#160;            <span class="keywordflow">if</span> (token-&gt;<a class="code" href="structrapidjson_1_1_generic_pointer_1_1_token.html#ad866d674dbddf9690ad571b65e968600">length</a> == 0)</div><div class="line"><a name="l00900"></a><span class="lineno">  900</span>&#160;                isNumber = <span class="keyword">false</span>;</div><div class="line"><a name="l00901"></a><span class="lineno">  901</span>&#160;            *name++ = <span class="charliteral">&#39;\0&#39;</span>; <span class="comment">// Null terminator</span></div><div class="line"><a name="l00902"></a><span class="lineno">  902</span>&#160;</div><div class="line"><a name="l00903"></a><span class="lineno">  903</span>&#160;            <span class="comment">// Second check for index: more than one digit cannot have leading zero</span></div><div class="line"><a name="l00904"></a><span class="lineno">  904</span>&#160;            <span class="keywordflow">if</span> (isNumber &amp;&amp; token-&gt;<a class="code" href="structrapidjson_1_1_generic_pointer_1_1_token.html#ad866d674dbddf9690ad571b65e968600">length</a> &gt; 1 &amp;&amp; token-&gt;<a class="code" href="structrapidjson_1_1_generic_pointer_1_1_token.html#aceb59c9796418c20da27b03bf1948fe8">name</a>[0] == <span class="charliteral">&#39;0&#39;</span>)</div><div class="line"><a name="l00905"></a><span class="lineno">  905</span>&#160;                isNumber = <span class="keyword">false</span>;</div><div class="line"><a name="l00906"></a><span class="lineno">  906</span>&#160;</div><div class="line"><a name="l00907"></a><span class="lineno">  907</span>&#160;            <span class="comment">// String to SizeType conversion</span></div><div class="line"><a name="l00908"></a><span class="lineno">  908</span>&#160;            <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> n = 0;</div><div class="line"><a name="l00909"></a><span class="lineno">  909</span>&#160;            <span class="keywordflow">if</span> (isNumber) {</div><div class="line"><a name="l00910"></a><span class="lineno">  910</span>&#160;                <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> j = 0; j &lt; token-&gt;<a class="code" href="structrapidjson_1_1_generic_pointer_1_1_token.html#ad866d674dbddf9690ad571b65e968600">length</a>; j++) {</div><div class="line"><a name="l00911"></a><span class="lineno">  911</span>&#160;                    <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> m = n * 10 + <span class="keyword">static_cast&lt;</span><a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a><span class="keyword">&gt;</span>(token-&gt;<a class="code" href="structrapidjson_1_1_generic_pointer_1_1_token.html#aceb59c9796418c20da27b03bf1948fe8">name</a>[j] - <span class="charliteral">&#39;0&#39;</span>);</div><div class="line"><a name="l00912"></a><span class="lineno">  912</span>&#160;                    <span class="keywordflow">if</span> (m &lt; n) {   <span class="comment">// overflow detection</span></div><div class="line"><a name="l00913"></a><span class="lineno">  913</span>&#160;                        isNumber = <span class="keyword">false</span>;</div><div class="line"><a name="l00914"></a><span class="lineno">  914</span>&#160;                        <span class="keywordflow">break</span>;</div><div class="line"><a name="l00915"></a><span class="lineno">  915</span>&#160;                    }</div><div class="line"><a name="l00916"></a><span class="lineno">  916</span>&#160;                    n = m;</div><div class="line"><a name="l00917"></a><span class="lineno">  917</span>&#160;                }</div><div class="line"><a name="l00918"></a><span class="lineno">  918</span>&#160;            }</div><div class="line"><a name="l00919"></a><span class="lineno">  919</span>&#160;</div><div class="line"><a name="l00920"></a><span class="lineno">  920</span>&#160;            token-&gt;<a class="code" href="structrapidjson_1_1_generic_pointer_1_1_token.html#a50331c9e3dedc34d2c79745b2e58fb2d">index</a> = isNumber ? n : kPointerInvalidIndex;</div><div class="line"><a name="l00921"></a><span class="lineno">  921</span>&#160;            token++;</div><div class="line"><a name="l00922"></a><span class="lineno">  922</span>&#160;        }</div><div class="line"><a name="l00923"></a><span class="lineno">  923</span>&#160;</div><div class="line"><a name="l00924"></a><span class="lineno">  924</span>&#160;        <a 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 &lt;= nameBuffer_ + length); <span class="comment">// Should not overflow buffer</span></div><div class="line"><a name="l00925"></a><span class="lineno">  925</span>&#160;        parseErrorCode_ = <a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#ggade540ee4cc2a416c23b8ee2c12393c7ba9094f236b2ec70c42f1ea91dffc1e39b">kPointerParseErrorNone</a>;</div><div class="line"><a name="l00926"></a><span class="lineno">  926</span>&#160;        <span class="keywordflow">return</span>;</div><div class="line"><a name="l00927"></a><span class="lineno">  927</span>&#160;</div><div class="line"><a name="l00928"></a><span class="lineno">  928</span>&#160;    error:</div><div class="line"><a name="l00929"></a><span class="lineno">  929</span>&#160;        Allocator::Free(tokens_);</div><div class="line"><a name="l00930"></a><span class="lineno">  930</span>&#160;        nameBuffer_ = 0;</div><div class="line"><a name="l00931"></a><span class="lineno">  931</span>&#160;        tokens_ = 0;</div><div class="line"><a name="l00932"></a><span class="lineno">  932</span>&#160;        tokenCount_ = 0;</div><div class="line"><a name="l00933"></a><span class="lineno">  933</span>&#160;        parseErrorOffset_ = i;</div><div class="line"><a name="l00934"></a><span class="lineno">  934</span>&#160;        <span class="keywordflow">return</span>;</div><div class="line"><a name="l00935"></a><span class="lineno">  935</span>&#160;    }</div><div class="line"><a name="l00936"></a><span class="lineno">  936</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00937"></a><span class="lineno">  937</span>&#160;<span class="comment">    //! Stringify to string or URI fragment representation.</span></div><div class="line"><a name="l00938"></a><span class="lineno">  938</span>&#160;<span class="comment"></span><span class="comment">    /*!</span></div><div class="line"><a name="l00939"></a><span class="lineno">  939</span>&#160;<span class="comment">        \tparam uriFragment True for stringifying to URI fragment representation. False for string representation.</span></div><div class="line"><a name="l00940"></a><span class="lineno">  940</span>&#160;<span class="comment">        \tparam OutputStream type of output stream.</span></div><div class="line"><a name="l00941"></a><span class="lineno">  941</span>&#160;<span class="comment">        \param os The output stream.</span></div><div class="line"><a name="l00942"></a><span class="lineno">  942</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l00943"></a><span class="lineno">  943</span>&#160;    <span class="keyword">template</span>&lt;<span class="keywordtype">bool</span> uriFragment, <span class="keyword">typename</span> OutputStream&gt;</div><div class="line"><a name="l00944"></a><span class="lineno">  944</span>&#160;    <span class="keywordtype">bool</span> Stringify(OutputStream&amp; os)<span class="keyword"> const </span>{</div><div class="line"><a name="l00945"></a><span class="lineno">  945</span>&#160;        <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(IsValid());</div><div class="line"><a name="l00946"></a><span class="lineno">  946</span>&#160;</div><div class="line"><a name="l00947"></a><span class="lineno">  947</span>&#160;        <span class="keywordflow">if</span> (uriFragment)</div><div class="line"><a name="l00948"></a><span class="lineno">  948</span>&#160;            os.Put(<span class="charliteral">&#39;#&#39;</span>);</div><div class="line"><a name="l00949"></a><span class="lineno">  949</span>&#160;</div><div class="line"><a name="l00950"></a><span class="lineno">  950</span>&#160;        <span class="keywordflow">for</span> (<a class="code" href="structrapidjson_1_1_generic_pointer_1_1_token.html">Token</a> *t = tokens_; t != tokens_ + tokenCount_; ++t) {</div><div class="line"><a name="l00951"></a><span class="lineno">  951</span>&#160;            os.Put(<span class="charliteral">&#39;/&#39;</span>);</div><div class="line"><a name="l00952"></a><span class="lineno">  952</span>&#160;            <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> j = 0; j &lt; t-&gt;length; j++) {</div><div class="line"><a name="l00953"></a><span class="lineno">  953</span>&#160;                <a class="code" href="classrapidjson_1_1_generic_pointer.html#a850f78846c5548565f8395be5f3427b7">Ch</a> c = t-&gt;name[j];</div><div class="line"><a name="l00954"></a><span class="lineno">  954</span>&#160;                <span class="keywordflow">if</span> (c == <span class="charliteral">&#39;~&#39;</span>) {</div><div class="line"><a name="l00955"></a><span class="lineno">  955</span>&#160;                    os.Put(<span class="charliteral">&#39;~&#39;</span>);</div><div class="line"><a name="l00956"></a><span class="lineno">  956</span>&#160;                    os.Put(<span class="charliteral">&#39;0&#39;</span>);</div><div class="line"><a name="l00957"></a><span class="lineno">  957</span>&#160;                }</div><div class="line"><a name="l00958"></a><span class="lineno">  958</span>&#160;                <span class="keywordflow">else</span> <span class="keywordflow">if</span> (c == <span class="charliteral">&#39;/&#39;</span>) {</div><div class="line"><a name="l00959"></a><span class="lineno">  959</span>&#160;                    os.Put(<span class="charliteral">&#39;~&#39;</span>);</div><div class="line"><a name="l00960"></a><span class="lineno">  960</span>&#160;                    os.Put(<span class="charliteral">&#39;1&#39;</span>);</div><div class="line"><a name="l00961"></a><span class="lineno">  961</span>&#160;                }</div><div class="line"><a name="l00962"></a><span class="lineno">  962</span>&#160;                <span class="keywordflow">else</span> <span class="keywordflow">if</span> (uriFragment &amp;&amp; NeedPercentEncode(c)) { </div><div class="line"><a name="l00963"></a><span class="lineno">  963</span>&#160;                    <span class="comment">// Transcode to UTF8 sequence</span></div><div class="line"><a name="l00964"></a><span class="lineno">  964</span>&#160;                    <a class="code" href="structrapidjson_1_1_generic_string_stream.html">GenericStringStream&lt;typename ValueType::EncodingType&gt;</a> source(&amp;t-&gt;name[j]);</div><div class="line"><a name="l00965"></a><span class="lineno">  965</span>&#160;                    PercentEncodeStream&lt;OutputStream&gt; target(os);</div><div class="line"><a name="l00966"></a><span class="lineno">  966</span>&#160;                    <span class="keywordflow">if</span> (!<a class="code" href="structrapidjson_1_1_transcoder.html">Transcoder</a>&lt;<a class="code" href="classrapidjson_1_1_generic_pointer.html#a399790c5fe8076d91a58c621c0c2a79e">EncodingType</a>, <a class="code" href="structrapidjson_1_1_u_t_f8.html">UTF8&lt;&gt;</a> &gt;().Validate(source, target))</div><div class="line"><a name="l00967"></a><span class="lineno">  967</span>&#160;                        <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00968"></a><span class="lineno">  968</span>&#160;                    j += source.Tell() - 1;</div><div class="line"><a name="l00969"></a><span class="lineno">  969</span>&#160;                }</div><div class="line"><a name="l00970"></a><span class="lineno">  970</span>&#160;                <span class="keywordflow">else</span></div><div class="line"><a name="l00971"></a><span class="lineno">  971</span>&#160;                    os.Put(c);</div><div class="line"><a name="l00972"></a><span class="lineno">  972</span>&#160;            }</div><div class="line"><a name="l00973"></a><span class="lineno">  973</span>&#160;        }</div><div class="line"><a name="l00974"></a><span class="lineno">  974</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">true</span>;</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="comment"></span></div><div class="line"><a name="l00977"></a><span class="lineno">  977</span>&#160;<span class="comment">    //! A helper stream for decoding a percent-encoded sequence into code unit.</span></div><div class="line"><a name="l00978"></a><span class="lineno">  978</span>&#160;<span class="comment"></span><span class="comment">    /*!</span></div><div class="line"><a name="l00979"></a><span class="lineno">  979</span>&#160;<span class="comment">        This stream decodes %XY triplet into code unit (0-255).</span></div><div class="line"><a name="l00980"></a><span class="lineno">  980</span>&#160;<span class="comment">        If it encounters invalid characters, it sets output code unit as 0 and </span></div><div class="line"><a name="l00981"></a><span class="lineno">  981</span>&#160;<span class="comment">        mark invalid, and to be checked by IsValid().</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="keyword">class </span>PercentDecodeStream {</div><div class="line"><a name="l00984"></a><span class="lineno">  984</span>&#160;    <span class="keyword">public</span>:</div><div class="line"><a name="l00985"></a><span class="lineno">  985</span>&#160;        <span class="keyword">typedef</span> <span class="keyword">typename</span> ValueType::Ch <a class="code" href="classrapidjson_1_1_generic_pointer.html#a850f78846c5548565f8395be5f3427b7">Ch</a>;</div><div class="line"><a name="l00986"></a><span class="lineno">  986</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00987"></a><span class="lineno">  987</span>&#160;<span class="comment">        //! Constructor</span></div><div class="line"><a name="l00988"></a><span class="lineno">  988</span>&#160;<span class="comment"></span><span class="comment">        /*!</span></div><div class="line"><a name="l00989"></a><span class="lineno">  989</span>&#160;<span class="comment">            \param source Start of the stream</span></div><div class="line"><a name="l00990"></a><span class="lineno">  990</span>&#160;<span class="comment">            \param end Past-the-end of the stream.</span></div><div class="line"><a name="l00991"></a><span class="lineno">  991</span>&#160;<span class="comment">        */</span></div><div class="line"><a name="l00992"></a><span class="lineno">  992</span>&#160;        PercentDecodeStream(<span class="keyword">const</span> Ch* source, <span class="keyword">const</span> Ch* end) : src_(source), head_(source), end_(end), valid_(<span class="keyword">true</span>) {}</div><div class="line"><a name="l00993"></a><span class="lineno">  993</span>&#160;</div><div class="line"><a name="l00994"></a><span class="lineno">  994</span>&#160;        Ch Take() {</div><div class="line"><a name="l00995"></a><span class="lineno">  995</span>&#160;            <span class="keywordflow">if</span> (*src_ != <span class="charliteral">&#39;%&#39;</span> || src_ + 3 &gt; end_) { <span class="comment">// %XY triplet</span></div><div class="line"><a name="l00996"></a><span class="lineno">  996</span>&#160;                valid_ = <span class="keyword">false</span>;</div><div class="line"><a name="l00997"></a><span class="lineno">  997</span>&#160;                <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00998"></a><span class="lineno">  998</span>&#160;            }</div><div class="line"><a name="l00999"></a><span class="lineno">  999</span>&#160;            src_++;</div><div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>&#160;            Ch c = 0;</div><div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>&#160;            <span class="keywordflow">for</span> (<span class="keywordtype">int</span> j = 0; j &lt; 2; j++) {</div><div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>&#160;                c = <span class="keyword">static_cast&lt;</span>Ch<span class="keyword">&gt;</span>(c &lt;&lt; 4);</div><div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>&#160;                Ch h = *src_;</div><div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>&#160;                <span class="keywordflow">if</span>      (h &gt;= <span class="charliteral">&#39;0&#39;</span> &amp;&amp; h &lt;= <span class="charliteral">&#39;9&#39;</span>) c = <span class="keyword">static_cast&lt;</span>Ch<span class="keyword">&gt;</span>(c + h - <span class="charliteral">&#39;0&#39;</span>);</div><div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>&#160;                <span class="keywordflow">else</span> <span class="keywordflow">if</span> (h &gt;= <span class="charliteral">&#39;A&#39;</span> &amp;&amp; h &lt;= <span class="charliteral">&#39;F&#39;</span>) c = <span class="keyword">static_cast&lt;</span>Ch<span class="keyword">&gt;</span>(c + h - <span class="charliteral">&#39;A&#39;</span> + 10);</div><div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>&#160;                <span class="keywordflow">else</span> <span class="keywordflow">if</span> (h &gt;= <span class="charliteral">&#39;a&#39;</span> &amp;&amp; h &lt;= <span class="charliteral">&#39;f&#39;</span>) c = <span class="keyword">static_cast&lt;</span>Ch<span class="keyword">&gt;</span>(c + h - <span class="charliteral">&#39;a&#39;</span> + 10);</div><div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>&#160;                <span class="keywordflow">else</span> {</div><div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>&#160;                    valid_ = <span class="keyword">false</span>;</div><div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>&#160;                    <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>&#160;                }</div><div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>&#160;                src_++;</div><div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>&#160;            }</div><div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>&#160;            <span class="keywordflow">return</span> c;</div><div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>&#160;        }</div><div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>&#160;</div><div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>&#160;        <span class="keywordtype">size_t</span> Tell()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span><span class="keywordtype">size_t</span><span class="keyword">&gt;</span>(src_ - head_); }</div><div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>&#160;        <span class="keywordtype">bool</span> IsValid()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> valid_; }</div><div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>&#160;</div><div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>&#160;    <span class="keyword">private</span>:</div><div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>&#160;        <span class="keyword">const</span> Ch* src_;     <span class="comment">//!&lt; Current read position.</span></div><div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>&#160;<span class="comment"></span>        <span class="keyword">const</span> Ch* head_;    <span class="comment">//!&lt; Original head of the string.</span></div><div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>&#160;<span class="comment"></span>        <span class="keyword">const</span> Ch* end_;     <span class="comment">//!&lt; Past-the-end position.</span></div><div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>&#160;<span class="comment"></span>        <span class="keywordtype">bool</span> valid_;        <span class="comment">//!&lt; Whether the parsing is valid.</span></div><div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>&#160;<span class="comment"></span>    };</div><div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>&#160;<span class="comment">    //! A helper stream to encode character (UTF-8 code unit) into percent-encoded sequence.</span></div><div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>&#160;<span class="comment"></span>    <span class="keyword">template</span> &lt;<span class="keyword">typename</span> OutputStream&gt;</div><div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>&#160;    <span class="keyword">class </span>PercentEncodeStream {</div><div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>&#160;    <span class="keyword">public</span>:</div><div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>&#160;        PercentEncodeStream(OutputStream&amp; os) : os_(os) {}</div><div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>&#160;        <span class="keywordtype">void</span> Put(<span class="keywordtype">char</span> c) { <span class="comment">// UTF-8 must be byte</span></div><div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>&#160;            <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> u = <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">char</span><span class="keyword">&gt;</span>(c);</div><div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>&#160;            <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> hexDigits[16] = { <span class="charliteral">&#39;0&#39;</span>, <span class="charliteral">&#39;1&#39;</span>, <span class="charliteral">&#39;2&#39;</span>, <span class="charliteral">&#39;3&#39;</span>, <span class="charliteral">&#39;4&#39;</span>, <span class="charliteral">&#39;5&#39;</span>, <span class="charliteral">&#39;6&#39;</span>, <span class="charliteral">&#39;7&#39;</span>, <span class="charliteral">&#39;8&#39;</span>, <span class="charliteral">&#39;9&#39;</span>, <span class="charliteral">&#39;A&#39;</span>, <span class="charliteral">&#39;B&#39;</span>, <span class="charliteral">&#39;C&#39;</span>, <span class="charliteral">&#39;D&#39;</span>, <span class="charliteral">&#39;E&#39;</span>, <span class="charliteral">&#39;F&#39;</span> };</div><div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>&#160;            os_.Put(<span class="charliteral">&#39;%&#39;</span>);</div><div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>&#160;            os_.Put(static_cast&lt;typename OutputStream::Ch&gt;(hexDigits[u &gt;&gt; 4]));</div><div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>&#160;            os_.Put(static_cast&lt;typename OutputStream::Ch&gt;(hexDigits[u &amp; 15]));</div><div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>&#160;        }</div><div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>&#160;    <span class="keyword">private</span>:</div><div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>&#160;        OutputStream&amp; os_;</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;</div><div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>&#160;    <a class="code" href="classrapidjson_1_1_allocator.html">Allocator</a>* allocator_;                  <span class="comment">//!&lt; The current allocator. It is either user-supplied or equal to ownAllocator_.</span></div><div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>&#160;<span class="comment"></span>    <a class="code" href="classrapidjson_1_1_allocator.html">Allocator</a>* ownAllocator_;               <span class="comment">//!&lt; Allocator owned by this Pointer.</span></div><div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>&#160;<span class="comment"></span>    <a class="code" href="classrapidjson_1_1_generic_pointer.html#a850f78846c5548565f8395be5f3427b7">Ch</a>* nameBuffer_;                        <span class="comment">//!&lt; A buffer containing all names in tokens.</span></div><div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>&#160;<span class="comment"></span>    <a class="code" href="structrapidjson_1_1_generic_pointer_1_1_token.html">Token</a>* tokens_;                         <span class="comment">//!&lt; A list of tokens.</span></div><div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>&#160;<span class="comment"></span>    <span class="keywordtype">size_t</span> tokenCount_;                     <span class="comment">//!&lt; Number of tokens in tokens_.</span></div><div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>&#160;<span class="comment"></span>    <span class="keywordtype">size_t</span> parseErrorOffset_;               <span class="comment">//!&lt; Offset in code unit when parsing fail.</span></div><div class="line"><a name="l01048"></a><span class="lineno"> 1048</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#gade540ee4cc2a416c23b8ee2c12393c7b">PointerParseErrorCode</a> parseErrorCode_;  <span class="comment">//!&lt; Parsing error code.</span></div><div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>&#160;<span class="comment"></span>};</div><div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>&#160;<span class="comment">//! GenericPointer for Value (UTF-8, default allocator).</span></div><div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>&#160;<span class="comment"></span><span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_pointer.html">GenericPointer&lt;Value&gt;</a> <a class="code" href="classrapidjson_1_1_generic_pointer.html">Pointer</a>;</div><div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>&#160;<span class="comment">//!@name Helper functions for GenericPointer</span></div><div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>&#160;<span class="comment"></span><span class="comment">//@{</span></div><div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>&#160;<span class="comment">//////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>&#160;<span class="keyword">typename</span> T::ValueType&amp; CreateValueByPointer(T&amp; root, <span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_pointer.html">GenericPointer&lt;typename T::ValueType&gt;</a>&amp; pointer, <span class="keyword">typename</span> T::AllocatorType&amp; a) {</div><div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>&#160;    <span class="keywordflow">return</span> pointer.<a class="code" href="classrapidjson_1_1_generic_pointer.html#ad0b5b67c57572e81689762094ac8c856">Create</a>(root, a);</div><div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>&#160;}</div><div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>&#160;</div><div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T, <span class="keyword">typename</span> CharType, <span class="keywordtype">size_t</span> N&gt;</div><div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>&#160;<span class="keyword">typename</span> T::ValueType&amp; CreateValueByPointer(T&amp; root, <span class="keyword">const</span> CharType(&amp;source)[N], <span class="keyword">typename</span> T::AllocatorType&amp; a) {</div><div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="classrapidjson_1_1_generic_pointer.html">GenericPointer&lt;typename T::ValueType&gt;</a>(source, N - 1).Create(root, a);</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;</div><div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>&#160;<span class="comment">// No allocator parameter</span></div><div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>&#160;</div><div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> DocumentType&gt;</div><div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>&#160;<span class="keyword">typename</span> DocumentType::ValueType&amp; CreateValueByPointer(DocumentType&amp; document, <span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_pointer.html">GenericPointer&lt;typename DocumentType::ValueType&gt;</a>&amp; pointer) {</div><div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>&#160;    <span class="keywordflow">return</span> pointer.<a class="code" href="classrapidjson_1_1_generic_pointer.html#ad0b5b67c57572e81689762094ac8c856">Create</a>(document);</div><div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>&#160;}</div><div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>&#160;</div><div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> DocumentType, <span class="keyword">typename</span> CharType, <span class="keywordtype">size_t</span> N&gt;</div><div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>&#160;<span class="keyword">typename</span> DocumentType::ValueType&amp; CreateValueByPointer(DocumentType&amp; document, <span class="keyword">const</span> CharType(&amp;source)[N]) {</div><div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="classrapidjson_1_1_generic_pointer.html">GenericPointer&lt;typename DocumentType::ValueType&gt;</a>(source, N - 1).Create(document);</div><div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>&#160;}</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"> 1081</span>&#160;<span class="comment">//////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>&#160;<span class="keyword">typename</span> T::ValueType* GetValueByPointer(T&amp; root, <span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_pointer.html">GenericPointer&lt;typename T::ValueType&gt;</a>&amp; pointer, <span class="keywordtype">size_t</span>* unresolvedTokenIndex = 0) {</div><div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>&#160;    <span class="keywordflow">return</span> pointer.<a class="code" href="classrapidjson_1_1_generic_pointer.html#af09e26073a7263fc9e8f0c14160f45bd">Get</a>(root, unresolvedTokenIndex);</div><div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>&#160;}</div><div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>&#160;</div><div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>&#160;<span class="keyword">const</span> <span class="keyword">typename</span> T::ValueType* GetValueByPointer(<span class="keyword">const</span> T&amp; root, <span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_pointer.html">GenericPointer&lt;typename T::ValueType&gt;</a>&amp; pointer, <span class="keywordtype">size_t</span>* unresolvedTokenIndex = 0) {</div><div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>&#160;    <span class="keywordflow">return</span> pointer.<a class="code" href="classrapidjson_1_1_generic_pointer.html#af09e26073a7263fc9e8f0c14160f45bd">Get</a>(root, unresolvedTokenIndex);</div><div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>&#160;}</div><div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>&#160;</div><div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T, <span class="keyword">typename</span> CharType, <span class="keywordtype">size_t</span> N&gt;</div><div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>&#160;<span class="keyword">typename</span> T::ValueType* GetValueByPointer(T&amp; root, <span class="keyword">const</span> CharType (&amp;source)[N], <span class="keywordtype">size_t</span>* unresolvedTokenIndex = 0) {</div><div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="classrapidjson_1_1_generic_pointer.html">GenericPointer&lt;typename T::ValueType&gt;</a>(source, N - 1).Get(root, unresolvedTokenIndex);</div><div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>&#160;}</div><div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>&#160;</div><div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T, <span class="keyword">typename</span> CharType, <span class="keywordtype">size_t</span> N&gt;</div><div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>&#160;<span class="keyword">const</span> <span class="keyword">typename</span> T::ValueType* GetValueByPointer(<span class="keyword">const</span> T&amp; root, <span class="keyword">const</span> CharType(&amp;source)[N], <span class="keywordtype">size_t</span>* unresolvedTokenIndex = 0) {</div><div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="classrapidjson_1_1_generic_pointer.html">GenericPointer&lt;typename T::ValueType&gt;</a>(source, N - 1).Get(root, unresolvedTokenIndex);</div><div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>&#160;}</div><div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>&#160;<span class="comment"></span></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"></span></div><div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>&#160;<span class="keyword">typename</span> T::ValueType&amp; GetValueByPointerWithDefault(T&amp; root, <span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_pointer.html">GenericPointer&lt;typename T::ValueType&gt;</a>&amp; pointer, <span class="keyword">const</span> <span class="keyword">typename</span> T::ValueType&amp; defaultValue, <span class="keyword">typename</span> T::AllocatorType&amp; a) {</div><div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>&#160;    <span class="keywordflow">return</span> pointer.<a class="code" href="classrapidjson_1_1_generic_pointer.html#acd36d0bbfcca43feaeeba5488d8384c2">GetWithDefault</a>(root, defaultValue, a);</div><div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>&#160;}</div><div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>&#160;</div><div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>&#160;<span class="keyword">typename</span> T::ValueType&amp; GetValueByPointerWithDefault(T&amp; root, <span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_pointer.html">GenericPointer&lt;typename T::ValueType&gt;</a>&amp; pointer, <span class="keyword">const</span> <span class="keyword">typename</span> T::Ch* defaultValue, <span class="keyword">typename</span> T::AllocatorType&amp; a) {</div><div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>&#160;    <span class="keywordflow">return</span> pointer.<a class="code" href="classrapidjson_1_1_generic_pointer.html#acd36d0bbfcca43feaeeba5488d8384c2">GetWithDefault</a>(root, defaultValue, a);</div><div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>&#160;}</div><div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>&#160;</div><div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>&#160;<span class="keyword">typename</span> T::ValueType&amp; GetValueByPointerWithDefault(T&amp; root, <span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_pointer.html">GenericPointer&lt;typename T::ValueType&gt;</a>&amp; pointer, <span class="keyword">const</span> std::basic_string&lt;typename T::Ch&gt;&amp; defaultValue, <span class="keyword">typename</span> T::AllocatorType&amp; a) {</div><div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>&#160;    <span class="keywordflow">return</span> pointer.<a class="code" href="classrapidjson_1_1_generic_pointer.html#acd36d0bbfcca43feaeeba5488d8384c2">GetWithDefault</a>(root, defaultValue, a);</div><div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>&#160;}</div><div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>&#160;</div><div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T, <span class="keyword">typename</span> T2&gt;</div><div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>&#160;RAPIDJSON_DISABLEIF_RETURN((internal::OrExpr&lt;internal::IsPointer&lt;T2&gt;, internal::IsGenericValue&lt;T2&gt; &gt;), (<span class="keyword">typename</span> T::ValueType&amp;))</div><div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>&#160;GetValueByPointerWithDefault(T&amp; root, <span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_pointer.html">GenericPointer&lt;typename T::ValueType&gt;</a>&amp; pointer, T2 defaultValue, <span class="keyword">typename</span> T::AllocatorType&amp; a) {</div><div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>&#160;    <span class="keywordflow">return</span> pointer.<a class="code" href="classrapidjson_1_1_generic_pointer.html#acd36d0bbfcca43feaeeba5488d8384c2">GetWithDefault</a>(root, defaultValue, a);</div><div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>&#160;}</div><div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>&#160;</div><div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T, <span class="keyword">typename</span> CharType, <span class="keywordtype">size_t</span> N&gt;</div><div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>&#160;<span class="keyword">typename</span> T::ValueType&amp; GetValueByPointerWithDefault(T&amp; root, <span class="keyword">const</span> CharType(&amp;source)[N], <span class="keyword">const</span> <span class="keyword">typename</span> T::ValueType&amp; defaultValue, <span class="keyword">typename</span> T::AllocatorType&amp; a) {</div><div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="classrapidjson_1_1_generic_pointer.html">GenericPointer&lt;typename T::ValueType&gt;</a>(source, N - 1).GetWithDefault(root, defaultValue, a);</div><div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>&#160;}</div><div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>&#160;</div><div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T, <span class="keyword">typename</span> CharType, <span class="keywordtype">size_t</span> N&gt;</div><div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>&#160;<span class="keyword">typename</span> T::ValueType&amp; GetValueByPointerWithDefault(T&amp; root, <span class="keyword">const</span> CharType(&amp;source)[N], <span class="keyword">const</span> <span class="keyword">typename</span> T::Ch* defaultValue, <span class="keyword">typename</span> T::AllocatorType&amp; a) {</div><div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="classrapidjson_1_1_generic_pointer.html">GenericPointer&lt;typename T::ValueType&gt;</a>(source, N - 1).GetWithDefault(root, defaultValue, a);</div><div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>&#160;}</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="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T, <span class="keyword">typename</span> CharType, <span class="keywordtype">size_t</span> N&gt;</div><div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>&#160;<span class="keyword">typename</span> T::ValueType&amp; GetValueByPointerWithDefault(T&amp; root, <span class="keyword">const</span> CharType(&amp;source)[N], <span class="keyword">const</span> std::basic_string&lt;typename T::Ch&gt;&amp; defaultValue, <span class="keyword">typename</span> T::AllocatorType&amp; a) {</div><div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="classrapidjson_1_1_generic_pointer.html">GenericPointer&lt;typename T::ValueType&gt;</a>(source, N - 1).GetWithDefault(root, defaultValue, a);</div><div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>&#160;}</div><div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>&#160;</div><div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T, <span class="keyword">typename</span> CharType, <span class="keywordtype">size_t</span> N, <span class="keyword">typename</span> T2&gt;</div><div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>&#160;RAPIDJSON_DISABLEIF_RETURN((internal::OrExpr&lt;internal::IsPointer&lt;T2&gt;, internal::IsGenericValue&lt;T2&gt; &gt;), (<span class="keyword">typename</span> T::ValueType&amp;))</div><div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>&#160;GetValueByPointerWithDefault(T&amp; root, <span class="keyword">const</span> CharType(&amp;source)[N], T2 defaultValue, <span class="keyword">typename</span> T::AllocatorType&amp; a) {</div><div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="classrapidjson_1_1_generic_pointer.html">GenericPointer&lt;typename T::ValueType&gt;</a>(source, N - 1).GetWithDefault(root, defaultValue, a);</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;</div><div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>&#160;<span class="comment">// No allocator parameter</span></div><div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>&#160;</div><div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> DocumentType&gt;</div><div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>&#160;<span class="keyword">typename</span> DocumentType::ValueType&amp; GetValueByPointerWithDefault(DocumentType&amp; document, <span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_pointer.html">GenericPointer&lt;typename DocumentType::ValueType&gt;</a>&amp; pointer, <span class="keyword">const</span> <span class="keyword">typename</span> DocumentType::ValueType&amp; defaultValue) {</div><div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>&#160;    <span class="keywordflow">return</span> pointer.<a class="code" href="classrapidjson_1_1_generic_pointer.html#acd36d0bbfcca43feaeeba5488d8384c2">GetWithDefault</a>(document, defaultValue);</div><div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>&#160;}</div><div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>&#160;</div><div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> DocumentType&gt;</div><div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>&#160;<span class="keyword">typename</span> DocumentType::ValueType&amp; GetValueByPointerWithDefault(DocumentType&amp; document, <span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_pointer.html">GenericPointer&lt;typename DocumentType::ValueType&gt;</a>&amp; pointer, <span class="keyword">const</span> <span class="keyword">typename</span> DocumentType::Ch* defaultValue) {</div><div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>&#160;    <span class="keywordflow">return</span> pointer.<a class="code" href="classrapidjson_1_1_generic_pointer.html#acd36d0bbfcca43feaeeba5488d8384c2">GetWithDefault</a>(document, defaultValue);</div><div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>&#160;}</div><div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>&#160;</div><div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> DocumentType&gt;</div><div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>&#160;<span class="keyword">typename</span> DocumentType::ValueType&amp; GetValueByPointerWithDefault(DocumentType&amp; document, <span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_pointer.html">GenericPointer&lt;typename DocumentType::ValueType&gt;</a>&amp; pointer, <span class="keyword">const</span> std::basic_string&lt;typename DocumentType::Ch&gt;&amp; defaultValue) {</div><div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>&#160;    <span class="keywordflow">return</span> pointer.<a class="code" href="classrapidjson_1_1_generic_pointer.html#acd36d0bbfcca43feaeeba5488d8384c2">GetWithDefault</a>(document, defaultValue);</div><div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>&#160;}</div><div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>&#160;</div><div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> DocumentType, <span class="keyword">typename</span> T2&gt;</div><div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>&#160;RAPIDJSON_DISABLEIF_RETURN((internal::OrExpr&lt;internal::IsPointer&lt;T2&gt;, internal::IsGenericValue&lt;T2&gt; &gt;), (<span class="keyword">typename</span> DocumentType::ValueType&amp;))</div><div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>&#160;GetValueByPointerWithDefault(DocumentType&amp; document, <span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_pointer.html">GenericPointer&lt;typename DocumentType::ValueType&gt;</a>&amp; pointer, T2 defaultValue) {</div><div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>&#160;    <span class="keywordflow">return</span> pointer.<a class="code" href="classrapidjson_1_1_generic_pointer.html#acd36d0bbfcca43feaeeba5488d8384c2">GetWithDefault</a>(document, defaultValue);</div><div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>&#160;}</div><div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>&#160;</div><div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> DocumentType, <span class="keyword">typename</span> CharType, <span class="keywordtype">size_t</span> N&gt;</div><div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>&#160;<span class="keyword">typename</span> DocumentType::ValueType&amp; GetValueByPointerWithDefault(DocumentType&amp; document, <span class="keyword">const</span> CharType(&amp;source)[N], <span class="keyword">const</span> <span class="keyword">typename</span> DocumentType::ValueType&amp; defaultValue) {</div><div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="classrapidjson_1_1_generic_pointer.html">GenericPointer&lt;typename DocumentType::ValueType&gt;</a>(source, N - 1).GetWithDefault(document, defaultValue);</div><div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>&#160;}</div><div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>&#160;</div><div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> DocumentType, <span class="keyword">typename</span> CharType, <span class="keywordtype">size_t</span> N&gt;</div><div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>&#160;<span class="keyword">typename</span> DocumentType::ValueType&amp; GetValueByPointerWithDefault(DocumentType&amp; document, <span class="keyword">const</span> CharType(&amp;source)[N], <span class="keyword">const</span> <span class="keyword">typename</span> DocumentType::Ch* defaultValue) {</div><div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="classrapidjson_1_1_generic_pointer.html">GenericPointer&lt;typename DocumentType::ValueType&gt;</a>(source, N - 1).GetWithDefault(document, defaultValue);</div><div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>&#160;}</div><div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>&#160;</div><div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> DocumentType, <span class="keyword">typename</span> CharType, <span class="keywordtype">size_t</span> N&gt;</div><div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>&#160;<span class="keyword">typename</span> DocumentType::ValueType&amp; GetValueByPointerWithDefault(DocumentType&amp; document, <span class="keyword">const</span> CharType(&amp;source)[N], <span class="keyword">const</span> std::basic_string&lt;typename DocumentType::Ch&gt;&amp; defaultValue) {</div><div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="classrapidjson_1_1_generic_pointer.html">GenericPointer&lt;typename DocumentType::ValueType&gt;</a>(source, N - 1).GetWithDefault(document, defaultValue);</div><div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>&#160;}</div><div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>&#160;</div><div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> DocumentType, <span class="keyword">typename</span> CharType, <span class="keywordtype">size_t</span> N, <span class="keyword">typename</span> T2&gt;</div><div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>&#160;RAPIDJSON_DISABLEIF_RETURN((internal::OrExpr&lt;internal::IsPointer&lt;T2&gt;, internal::IsGenericValue&lt;T2&gt; &gt;), (<span class="keyword">typename</span> DocumentType::ValueType&amp;))</div><div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>&#160;GetValueByPointerWithDefault(DocumentType&amp; document, <span class="keyword">const</span> CharType(&amp;source)[N], T2 defaultValue) {</div><div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="classrapidjson_1_1_generic_pointer.html">GenericPointer&lt;typename DocumentType::ValueType&gt;</a>(source, N - 1).GetWithDefault(document, defaultValue);</div><div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>&#160;}</div><div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>&#160;<span class="comment">//////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>&#160;<span class="keyword">typename</span> T::ValueType&amp; SetValueByPointer(T&amp; root, <span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_pointer.html">GenericPointer&lt;typename T::ValueType&gt;</a>&amp; pointer, <span class="keyword">typename</span> T::ValueType&amp; value, <span class="keyword">typename</span> T::AllocatorType&amp; a) {</div><div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>&#160;    <span class="keywordflow">return</span> pointer.<a class="code" href="classrapidjson_1_1_generic_pointer.html#a0759b70ec70a6eb7a7545a34764ac663">Set</a>(root, value, a);</div><div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>&#160;}</div><div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>&#160;</div><div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>&#160;<span class="keyword">typename</span> T::ValueType&amp; SetValueByPointer(T&amp; root, <span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_pointer.html">GenericPointer&lt;typename T::ValueType&gt;</a>&amp; pointer, <span class="keyword">const</span> <span class="keyword">typename</span> T::ValueType&amp; value, <span class="keyword">typename</span> T::AllocatorType&amp; a) {</div><div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>&#160;    <span class="keywordflow">return</span> pointer.<a class="code" href="classrapidjson_1_1_generic_pointer.html#a0759b70ec70a6eb7a7545a34764ac663">Set</a>(root, value, a);</div><div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>&#160;}</div><div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>&#160;</div><div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>&#160;<span class="keyword">typename</span> T::ValueType&amp; SetValueByPointer(T&amp; root, <span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_pointer.html">GenericPointer&lt;typename T::ValueType&gt;</a>&amp; pointer, <span class="keyword">const</span> <span class="keyword">typename</span> T::Ch* value, <span class="keyword">typename</span> T::AllocatorType&amp; a) {</div><div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>&#160;    <span class="keywordflow">return</span> pointer.<a class="code" href="classrapidjson_1_1_generic_pointer.html#a0759b70ec70a6eb7a7545a34764ac663">Set</a>(root, value, a);</div><div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>&#160;}</div><div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>&#160;</div><div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>&#160;<span class="keyword">typename</span> T::ValueType&amp; SetValueByPointer(T&amp; root, <span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_pointer.html">GenericPointer&lt;typename T::ValueType&gt;</a>&amp; pointer, <span class="keyword">const</span> std::basic_string&lt;typename T::Ch&gt;&amp; value, <span class="keyword">typename</span> T::AllocatorType&amp; a) {</div><div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>&#160;    <span class="keywordflow">return</span> pointer.<a class="code" href="classrapidjson_1_1_generic_pointer.html#a0759b70ec70a6eb7a7545a34764ac663">Set</a>(root, value, a);</div><div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>&#160;}</div><div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01222"></a><span class="lineno"> 1222</span>&#160;</div><div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T, <span class="keyword">typename</span> T2&gt;</div><div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>&#160;RAPIDJSON_DISABLEIF_RETURN((internal::OrExpr&lt;internal::IsPointer&lt;T2&gt;, internal::IsGenericValue&lt;T2&gt; &gt;), (<span class="keyword">typename</span> T::ValueType&amp;))</div><div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>&#160;SetValueByPointer(T&amp; root, <span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_pointer.html">GenericPointer&lt;typename T::ValueType&gt;</a>&amp; pointer, T2 value, <span class="keyword">typename</span> T::AllocatorType&amp; a) {</div><div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>&#160;    <span class="keywordflow">return</span> pointer.<a class="code" href="classrapidjson_1_1_generic_pointer.html#a0759b70ec70a6eb7a7545a34764ac663">Set</a>(root, value, a);</div><div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>&#160;}</div><div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>&#160;</div><div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T, <span class="keyword">typename</span> CharType, <span class="keywordtype">size_t</span> N&gt;</div><div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>&#160;<span class="keyword">typename</span> T::ValueType&amp; SetValueByPointer(T&amp; root, <span class="keyword">const</span> CharType(&amp;source)[N], <span class="keyword">typename</span> T::ValueType&amp; value, <span class="keyword">typename</span> T::AllocatorType&amp; a) {</div><div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="classrapidjson_1_1_generic_pointer.html">GenericPointer&lt;typename T::ValueType&gt;</a>(source, N - 1).Set(root, value, a);</div><div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>&#160;}</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;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T, <span class="keyword">typename</span> CharType, <span class="keywordtype">size_t</span> N&gt;</div><div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>&#160;<span class="keyword">typename</span> T::ValueType&amp; SetValueByPointer(T&amp; root, <span class="keyword">const</span> CharType(&amp;source)[N], <span class="keyword">const</span> <span class="keyword">typename</span> T::ValueType&amp; value, <span class="keyword">typename</span> T::AllocatorType&amp; a) {</div><div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="classrapidjson_1_1_generic_pointer.html">GenericPointer&lt;typename T::ValueType&gt;</a>(source, N - 1).Set(root, value, a);</div><div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>&#160;}</div><div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>&#160;</div><div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T, <span class="keyword">typename</span> CharType, <span class="keywordtype">size_t</span> N&gt;</div><div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>&#160;<span class="keyword">typename</span> T::ValueType&amp; SetValueByPointer(T&amp; root, <span class="keyword">const</span> CharType(&amp;source)[N], <span class="keyword">const</span> <span class="keyword">typename</span> T::Ch* value, <span class="keyword">typename</span> T::AllocatorType&amp; a) {</div><div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="classrapidjson_1_1_generic_pointer.html">GenericPointer&lt;typename T::ValueType&gt;</a>(source, N - 1).Set(root, value, a);</div><div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>&#160;}</div><div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>&#160;</div><div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T, <span class="keyword">typename</span> CharType, <span class="keywordtype">size_t</span> N&gt;</div><div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>&#160;<span class="keyword">typename</span> T::ValueType&amp; SetValueByPointer(T&amp; root, <span class="keyword">const</span> CharType(&amp;source)[N], <span class="keyword">const</span> std::basic_string&lt;typename T::Ch&gt;&amp; value, <span class="keyword">typename</span> T::AllocatorType&amp; a) {</div><div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="classrapidjson_1_1_generic_pointer.html">GenericPointer&lt;typename T::ValueType&gt;</a>(source, N - 1).Set(root, value, a);</div><div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>&#160;}</div><div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>&#160;</div><div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T, <span class="keyword">typename</span> CharType, <span class="keywordtype">size_t</span> N, <span class="keyword">typename</span> T2&gt;</div><div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>&#160;RAPIDJSON_DISABLEIF_RETURN((internal::OrExpr&lt;internal::IsPointer&lt;T2&gt;, internal::IsGenericValue&lt;T2&gt; &gt;), (<span class="keyword">typename</span> T::ValueType&amp;))</div><div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>&#160;SetValueByPointer(T&amp; root, <span class="keyword">const</span> CharType(&amp;source)[N], T2 value, <span class="keyword">typename</span> T::AllocatorType&amp; a) {</div><div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="classrapidjson_1_1_generic_pointer.html">GenericPointer&lt;typename T::ValueType&gt;</a>(source, N - 1).Set(root, value, a);</div><div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>&#160;}</div><div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>&#160;</div><div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>&#160;<span class="comment">// No allocator parameter</span></div><div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>&#160;</div><div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> DocumentType&gt;</div><div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>&#160;<span class="keyword">typename</span> DocumentType::ValueType&amp; SetValueByPointer(DocumentType&amp; document, <span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_pointer.html">GenericPointer&lt;typename DocumentType::ValueType&gt;</a>&amp; pointer, <span class="keyword">typename</span> DocumentType::ValueType&amp; value) {</div><div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>&#160;    <span class="keywordflow">return</span> pointer.<a class="code" href="classrapidjson_1_1_generic_pointer.html#a0759b70ec70a6eb7a7545a34764ac663">Set</a>(document, value);</div><div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>&#160;}</div><div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>&#160;</div><div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> DocumentType&gt;</div><div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>&#160;<span class="keyword">typename</span> DocumentType::ValueType&amp; SetValueByPointer(DocumentType&amp; document, <span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_pointer.html">GenericPointer&lt;typename DocumentType::ValueType&gt;</a>&amp; pointer, <span class="keyword">const</span> <span class="keyword">typename</span> DocumentType::ValueType&amp; value) {</div><div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>&#160;    <span class="keywordflow">return</span> pointer.<a class="code" href="classrapidjson_1_1_generic_pointer.html#a0759b70ec70a6eb7a7545a34764ac663">Set</a>(document, value);</div><div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>&#160;}</div><div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>&#160;</div><div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> DocumentType&gt;</div><div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>&#160;<span class="keyword">typename</span> DocumentType::ValueType&amp; SetValueByPointer(DocumentType&amp; document, <span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_pointer.html">GenericPointer&lt;typename DocumentType::ValueType&gt;</a>&amp; pointer, <span class="keyword">const</span> <span class="keyword">typename</span> DocumentType::Ch* value) {</div><div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>&#160;    <span class="keywordflow">return</span> pointer.<a class="code" href="classrapidjson_1_1_generic_pointer.html#a0759b70ec70a6eb7a7545a34764ac663">Set</a>(document, value);</div><div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>&#160;}</div><div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>&#160;</div><div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> DocumentType&gt;</div><div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>&#160;<span class="keyword">typename</span> DocumentType::ValueType&amp; SetValueByPointer(DocumentType&amp; document, <span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_pointer.html">GenericPointer&lt;typename DocumentType::ValueType&gt;</a>&amp; pointer, <span class="keyword">const</span> std::basic_string&lt;typename DocumentType::Ch&gt;&amp; value) {</div><div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>&#160;    <span class="keywordflow">return</span> pointer.<a class="code" href="classrapidjson_1_1_generic_pointer.html#a0759b70ec70a6eb7a7545a34764ac663">Set</a>(document, value);</div><div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>&#160;}</div><div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>&#160;</div><div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> DocumentType, <span class="keyword">typename</span> T2&gt;</div><div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>&#160;RAPIDJSON_DISABLEIF_RETURN((internal::OrExpr&lt;internal::IsPointer&lt;T2&gt;, internal::IsGenericValue&lt;T2&gt; &gt;), (<span class="keyword">typename</span> DocumentType::ValueType&amp;))</div><div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>&#160;SetValueByPointer(DocumentType&amp; document, <span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_pointer.html">GenericPointer&lt;typename DocumentType::ValueType&gt;</a>&amp; pointer, T2 value) {</div><div class="line"><a name="l01284"></a><span class="lineno"> 1284</span>&#160;    <span class="keywordflow">return</span> pointer.<a class="code" href="classrapidjson_1_1_generic_pointer.html#a0759b70ec70a6eb7a7545a34764ac663">Set</a>(document, value);</div><div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>&#160;}</div><div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>&#160;</div><div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> DocumentType, <span class="keyword">typename</span> CharType, <span class="keywordtype">size_t</span> N&gt;</div><div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>&#160;<span class="keyword">typename</span> DocumentType::ValueType&amp; SetValueByPointer(DocumentType&amp; document, <span class="keyword">const</span> CharType(&amp;source)[N], <span class="keyword">typename</span> DocumentType::ValueType&amp; value) {</div><div class="line"><a name="l01289"></a><span class="lineno"> 1289</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="classrapidjson_1_1_generic_pointer.html">GenericPointer&lt;typename DocumentType::ValueType&gt;</a>(source, N - 1).Set(document, value);</div><div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>&#160;}</div><div class="line"><a name="l01291"></a><span class="lineno"> 1291</span>&#160;</div><div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> DocumentType, <span class="keyword">typename</span> CharType, <span class="keywordtype">size_t</span> N&gt;</div><div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>&#160;<span class="keyword">typename</span> DocumentType::ValueType&amp; SetValueByPointer(DocumentType&amp; document, <span class="keyword">const</span> CharType(&amp;source)[N], <span class="keyword">const</span> <span class="keyword">typename</span> DocumentType::ValueType&amp; value) {</div><div class="line"><a name="l01294"></a><span class="lineno"> 1294</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="classrapidjson_1_1_generic_pointer.html">GenericPointer&lt;typename DocumentType::ValueType&gt;</a>(source, N - 1).Set(document, value);</div><div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>&#160;}</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="keyword">template</span> &lt;<span class="keyword">typename</span> DocumentType, <span class="keyword">typename</span> CharType, <span class="keywordtype">size_t</span> N&gt;</div><div class="line"><a name="l01298"></a><span class="lineno"> 1298</span>&#160;<span class="keyword">typename</span> DocumentType::ValueType&amp; SetValueByPointer(DocumentType&amp; document, <span class="keyword">const</span> CharType(&amp;source)[N], <span class="keyword">const</span> <span class="keyword">typename</span> DocumentType::Ch* value) {</div><div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="classrapidjson_1_1_generic_pointer.html">GenericPointer&lt;typename DocumentType::ValueType&gt;</a>(source, N - 1).Set(document, value);</div><div class="line"><a name="l01300"></a><span class="lineno"> 1300</span>&#160;}</div><div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>&#160;</div><div class="line"><a name="l01302"></a><span class="lineno"> 1302</span>&#160;<span class="preprocessor">#if RAPIDJSON_HAS_STDSTRING</span></div><div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> DocumentType, <span class="keyword">typename</span> CharType, <span class="keywordtype">size_t</span> N&gt;</div><div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>&#160;<span class="keyword">typename</span> DocumentType::ValueType&amp; SetValueByPointer(DocumentType&amp; document, <span class="keyword">const</span> CharType(&amp;source)[N], <span class="keyword">const</span> std::basic_string&lt;typename DocumentType::Ch&gt;&amp; value) {</div><div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="classrapidjson_1_1_generic_pointer.html">GenericPointer&lt;typename DocumentType::ValueType&gt;</a>(source, N - 1).Set(document, value);</div><div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>&#160;}</div><div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>&#160;</div><div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> DocumentType, <span class="keyword">typename</span> CharType, <span class="keywordtype">size_t</span> N, <span class="keyword">typename</span> T2&gt;</div><div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>&#160;RAPIDJSON_DISABLEIF_RETURN((internal::OrExpr&lt;internal::IsPointer&lt;T2&gt;, internal::IsGenericValue&lt;T2&gt; &gt;), (<span class="keyword">typename</span> DocumentType::ValueType&amp;))</div><div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>&#160;SetValueByPointer(DocumentType&amp; document, <span class="keyword">const</span> CharType(&amp;source)[N], T2 value) {</div><div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="classrapidjson_1_1_generic_pointer.html">GenericPointer&lt;typename DocumentType::ValueType&gt;</a>(source, N - 1).Set(document, value);</div><div class="line"><a name="l01313"></a><span class="lineno"> 1313</span>&#160;}</div><div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>&#160;<span class="comment">//////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l01318"></a><span class="lineno"> 1318</span>&#160;<span class="keyword">typename</span> T::ValueType&amp; SwapValueByPointer(T&amp; root, <span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_pointer.html">GenericPointer&lt;typename T::ValueType&gt;</a>&amp; pointer, <span class="keyword">typename</span> T::ValueType&amp; value, <span class="keyword">typename</span> T::AllocatorType&amp; a) {</div><div class="line"><a name="l01319"></a><span class="lineno"> 1319</span>&#160;    <span class="keywordflow">return</span> pointer.<a class="code" href="classrapidjson_1_1_generic_pointer.html#a4690cd1d6c85168ebd2ce0afe186a4fa">Swap</a>(root, value, a);</div><div class="line"><a name="l01320"></a><span class="lineno"> 1320</span>&#160;}</div><div class="line"><a name="l01321"></a><span class="lineno"> 1321</span>&#160;</div><div class="line"><a name="l01322"></a><span class="lineno"> 1322</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T, <span class="keyword">typename</span> CharType, <span class="keywordtype">size_t</span> N&gt;</div><div class="line"><a name="l01323"></a><span class="lineno"> 1323</span>&#160;<span class="keyword">typename</span> T::ValueType&amp; SwapValueByPointer(T&amp; root, <span class="keyword">const</span> CharType(&amp;source)[N], <span class="keyword">typename</span> T::ValueType&amp; value, <span class="keyword">typename</span> T::AllocatorType&amp; a) {</div><div class="line"><a name="l01324"></a><span class="lineno"> 1324</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="classrapidjson_1_1_generic_pointer.html">GenericPointer&lt;typename T::ValueType&gt;</a>(source, N - 1).Swap(root, value, a);</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;</div><div class="line"><a name="l01327"></a><span class="lineno"> 1327</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> DocumentType&gt;</div><div class="line"><a name="l01328"></a><span class="lineno"> 1328</span>&#160;<span class="keyword">typename</span> DocumentType::ValueType&amp; SwapValueByPointer(DocumentType&amp; document, <span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_pointer.html">GenericPointer&lt;typename DocumentType::ValueType&gt;</a>&amp; pointer, <span class="keyword">typename</span> DocumentType::ValueType&amp; value) {</div><div class="line"><a name="l01329"></a><span class="lineno"> 1329</span>&#160;    <span class="keywordflow">return</span> pointer.<a class="code" href="classrapidjson_1_1_generic_pointer.html#a4690cd1d6c85168ebd2ce0afe186a4fa">Swap</a>(document, value);</div><div class="line"><a name="l01330"></a><span class="lineno"> 1330</span>&#160;}</div><div class="line"><a name="l01331"></a><span class="lineno"> 1331</span>&#160;</div><div class="line"><a name="l01332"></a><span class="lineno"> 1332</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> DocumentType, <span class="keyword">typename</span> CharType, <span class="keywordtype">size_t</span> N&gt;</div><div class="line"><a name="l01333"></a><span class="lineno"> 1333</span>&#160;<span class="keyword">typename</span> DocumentType::ValueType&amp; SwapValueByPointer(DocumentType&amp; document, <span class="keyword">const</span> CharType(&amp;source)[N], <span class="keyword">typename</span> DocumentType::ValueType&amp; value) {</div><div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="classrapidjson_1_1_generic_pointer.html">GenericPointer&lt;typename DocumentType::ValueType&gt;</a>(source, N - 1).Swap(document, value);</div><div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>&#160;}</div><div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>&#160;<span class="comment">//////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01339"></a><span class="lineno"> 1339</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l01340"></a><span class="lineno"> 1340</span>&#160;<span class="keywordtype">bool</span> EraseValueByPointer(T&amp; root, <span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_pointer.html">GenericPointer&lt;typename T::ValueType&gt;</a>&amp; pointer) {</div><div class="line"><a name="l01341"></a><span class="lineno"> 1341</span>&#160;    <span class="keywordflow">return</span> pointer.<a class="code" href="classrapidjson_1_1_generic_pointer.html#a923a1100c029a28e25894708bdce784c">Erase</a>(root);</div><div class="line"><a name="l01342"></a><span class="lineno"> 1342</span>&#160;}</div><div class="line"><a name="l01343"></a><span class="lineno"> 1343</span>&#160;</div><div class="line"><a name="l01344"></a><span class="lineno"> 1344</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T, <span class="keyword">typename</span> CharType, <span class="keywordtype">size_t</span> N&gt;</div><div class="line"><a name="l01345"></a><span class="lineno"> 1345</span>&#160;<span class="keywordtype">bool</span> EraseValueByPointer(T&amp; root, <span class="keyword">const</span> CharType(&amp;source)[N]) {</div><div class="line"><a name="l01346"></a><span class="lineno"> 1346</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="classrapidjson_1_1_generic_pointer.html">GenericPointer&lt;typename T::ValueType&gt;</a>(source, N - 1).Erase(root);</div><div class="line"><a name="l01347"></a><span class="lineno"> 1347</span>&#160;}</div><div class="line"><a name="l01348"></a><span class="lineno"> 1348</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01349"></a><span class="lineno"> 1349</span>&#160;<span class="comment">//@}</span></div><div class="line"><a name="l01350"></a><span class="lineno"> 1350</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01351"></a><span class="lineno"> 1351</span>&#160;RAPIDJSON_NAMESPACE_END</div><div class="line"><a name="l01352"></a><span class="lineno"> 1352</span>&#160;</div><div class="line"><a name="l01353"></a><span class="lineno"> 1353</span>&#160;<span class="preprocessor">#if defined(__clang__) || defined(_MSC_VER)</span></div><div class="line"><a name="l01354"></a><span class="lineno"> 1354</span>&#160;RAPIDJSON_DIAG_POP</div><div class="line"><a name="l01355"></a><span class="lineno"> 1355</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01356"></a><span class="lineno"> 1356</span>&#160;</div><div class="line"><a name="l01357"></a><span class="lineno"> 1357</span>&#160;<span class="preprocessor">#endif // RAPIDJSON_POINTER_H_</span></div><div class="ttc" id="classrapidjson_1_1_generic_pointer_html_afedfcaac36fa589a46667825d3d0b763"><div class="ttname"><a href="classrapidjson_1_1_generic_pointer.html#afedfcaac36fa589a46667825d3d0b763">rapidjson::GenericPointer::GenericPointer</a></div><div class="ttdeci">GenericPointer(const GenericPointer &amp;rhs, Allocator *allocator)</div><div class="ttdoc">Copy constructor. </div><div class="ttdef"><b>Definition:</b> pointer.h:171</div></div>
<div class="ttc" id="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s_html_ggade540ee4cc2a416c23b8ee2c12393c7ba907c9fe4e541b257513e3a18635379f7"><div class="ttname"><a href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#ggade540ee4cc2a416c23b8ee2c12393c7ba907c9fe4e541b257513e3a18635379f7">rapidjson::kPointerParseErrorInvalidEscape</a></div><div class="ttdoc">Invalid escape </div><div class="ttdef"><b>Definition:</b> pointer.h:41</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_pointer_html_af09e26073a7263fc9e8f0c14160f45bd"><div class="ttname"><a href="classrapidjson_1_1_generic_pointer.html#af09e26073a7263fc9e8f0c14160f45bd">rapidjson::GenericPointer::Get</a></div><div class="ttdeci">ValueType * Get(ValueType &amp;root, size_t *unresolvedTokenIndex=0) const</div><div class="ttdoc">Query a value in a subtree. </div><div class="ttdef"><b>Definition:</b> pointer.h:482</div></div>
<div class="ttc" id="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s_html_gade540ee4cc2a416c23b8ee2c12393c7b"><div class="ttname"><a href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gade540ee4cc2a416c23b8ee2c12393c7b">rapidjson::PointerParseErrorCode</a></div><div class="ttdeci">PointerParseErrorCode</div><div class="ttdoc">Error code of parsing. </div><div class="ttdef"><b>Definition:</b> pointer.h:37</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_pointer_html_a6df9f6a01d1b5945811055e1cf8aead6"><div class="ttname"><a href="classrapidjson_1_1_generic_pointer.html#a6df9f6a01d1b5945811055e1cf8aead6">rapidjson::GenericPointer::GenericPointer</a></div><div class="ttdeci">GenericPointer(const Token *tokens, size_t tokenCount)</div><div class="ttdoc">Constructor with user-supplied tokens. </div><div class="ttdef"><b>Definition:</b> pointer.h:163</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="structrapidjson_1_1_generic_pointer_1_1_token_html_aceb59c9796418c20da27b03bf1948fe8"><div class="ttname"><a href="structrapidjson_1_1_generic_pointer_1_1_token.html#aceb59c9796418c20da27b03bf1948fe8">rapidjson::GenericPointer::Token::name</a></div><div class="ttdeci">const Ch * name</div><div class="ttdoc">Name of the token. It has null character at the end but it can contain null character. </div><div class="ttdef"><b>Definition:</b> pointer.h:98</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_pointer_html_a00ad17ea227d2556404df7cc64c6aeb5"><div class="ttname"><a href="classrapidjson_1_1_generic_pointer.html#a00ad17ea227d2556404df7cc64c6aeb5">rapidjson::GenericPointer::GenericPointer</a></div><div class="ttdeci">GenericPointer(const Ch *source, size_t length, Allocator *allocator=0)</div><div class="ttdoc">Constructor that parses a string or URI fragment representation, with length of the source string...</div><div class="ttdef"><b>Definition:</b> pointer.h:137</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_pointer_html_a07fa31c03c96e260f234087882dce408"><div class="ttname"><a href="classrapidjson_1_1_generic_pointer.html#a07fa31c03c96e260f234087882dce408">rapidjson::GenericPointer::GetWithDefault</a></div><div class="ttdeci">ValueType &amp; GetWithDefault(GenericDocument&lt; EncodingType, typename ValueType::AllocatorType, stackAllocator &gt; &amp;document, const ValueType &amp;defaultValue) const</div><div class="ttdoc">Query a value in a document with default value. </div><div class="ttdef"><b>Definition:</b> pointer.h:570</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_pointer_html_a3bb15fa5592f2bfad6f2c9af7940b952"><div class="ttname"><a href="classrapidjson_1_1_generic_pointer.html#a3bb15fa5592f2bfad6f2c9af7940b952">rapidjson::GenericPointer::operator==</a></div><div class="ttdeci">bool operator==(const GenericPointer &amp;rhs) const</div><div class="ttdoc">Equality operator. </div><div class="ttdef"><b>Definition:</b> pointer.h:337</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_pointer_html_a0e144b9956a5272c13ceff3b9306e748"><div class="ttname"><a href="classrapidjson_1_1_generic_pointer.html#a0e144b9956a5272c13ceff3b9306e748">rapidjson::GenericPointer::~GenericPointer</a></div><div class="ttdeci">~GenericPointer()</div><div class="ttdoc">Destructor. </div><div class="ttdef"><b>Definition:</b> pointer.h:176</div></div>
<div class="ttc" id="structrapidjson_1_1_transcoder_html"><div class="ttname"><a href="structrapidjson_1_1_transcoder.html">rapidjson::Transcoder</a></div><div class="ttdoc">Encoding conversion. </div><div class="ttdef"><b>Definition:</b> encodings.h:658</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_pointer_html_a4690cd1d6c85168ebd2ce0afe186a4fa"><div class="ttname"><a href="classrapidjson_1_1_generic_pointer.html#a4690cd1d6c85168ebd2ce0afe186a4fa">rapidjson::GenericPointer::Swap</a></div><div class="ttdeci">ValueType &amp; Swap(ValueType &amp;root, ValueType &amp;value, typename ValueType::AllocatorType &amp;allocator) const</div><div class="ttdoc">Swap a value with a value in a subtree. </div><div class="ttdef"><b>Definition:</b> pointer.h:695</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_pointer_html_acdac4ea8e57920194827be4afb942d97"><div class="ttname"><a href="classrapidjson_1_1_generic_pointer.html#acdac4ea8e57920194827be4afb942d97">rapidjson::GenericPointer::GetAllocator</a></div><div class="ttdeci">Allocator &amp; GetAllocator()</div><div class="ttdoc">Get the allocator of this pointer. </div><div class="ttdef"><b>Definition:</b> pointer.h:317</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_pointer_html_a0759b70ec70a6eb7a7545a34764ac663"><div class="ttname"><a href="classrapidjson_1_1_generic_pointer.html#a0759b70ec70a6eb7a7545a34764ac663">rapidjson::GenericPointer::Set</a></div><div class="ttdeci">ValueType &amp; Set(ValueType &amp;root, ValueType &amp;value, typename ValueType::AllocatorType &amp;allocator) const</div><div class="ttdoc">Set a value in a subtree, with move semantics. </div><div class="ttdef"><b>Definition:</b> pointer.h:613</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_pointer_html_a73073ca3c9e47eba7c27c16151b269ac"><div class="ttname"><a href="classrapidjson_1_1_generic_pointer.html#a73073ca3c9e47eba7c27c16151b269ac">rapidjson::GenericPointer::Stringify</a></div><div class="ttdeci">bool Stringify(OutputStream &amp;os) const</div><div class="ttdoc">Stringify the pointer into string representation. </div><div class="ttdef"><b>Definition:</b> pointer.h:370</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="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s_html_ggade540ee4cc2a416c23b8ee2c12393c7ba9094f236b2ec70c42f1ea91dffc1e39b"><div class="ttname"><a href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#ggade540ee4cc2a416c23b8ee2c12393c7ba9094f236b2ec70c42f1ea91dffc1e39b">rapidjson::kPointerParseErrorNone</a></div><div class="ttdoc">The parse is successful </div><div class="ttdef"><b>Definition:</b> pointer.h:38</div></div>
<div class="ttc" id="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s_html_ggade540ee4cc2a416c23b8ee2c12393c7bae244a98f53279fda5a750f847b81c54f"><div class="ttname"><a href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#ggade540ee4cc2a416c23b8ee2c12393c7bae244a98f53279fda5a750f847b81c54f">rapidjson::kPointerParseErrorCharacterMustPercentEncode</a></div><div class="ttdoc">A character must percent encoded in URI fragment </div><div class="ttdef"><b>Definition:</b> pointer.h:43</div></div>
<div class="ttc" id="structrapidjson_1_1_generic_pointer_1_1_token_html_ad866d674dbddf9690ad571b65e968600"><div class="ttname"><a href="structrapidjson_1_1_generic_pointer_1_1_token.html#ad866d674dbddf9690ad571b65e968600">rapidjson::GenericPointer::Token::length</a></div><div class="ttdeci">SizeType length</div><div class="ttdoc">Length of the name. </div><div class="ttdef"><b>Definition:</b> pointer.h:99</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_pointer_html_af649a48d77aa856cddaa748ad6b0d6ac"><div class="ttname"><a href="classrapidjson_1_1_generic_pointer.html#af649a48d77aa856cddaa748ad6b0d6ac">rapidjson::GenericPointer::GetParseErrorCode</a></div><div class="ttdeci">PointerParseErrorCode GetParseErrorCode() const</div><div class="ttdoc">Get the parsing error code. </div><div class="ttdef"><b>Definition:</b> pointer.h:312</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_pointer_html_a4f0ef2b49a9561d570217249343d9335"><div class="ttname"><a href="classrapidjson_1_1_generic_pointer.html#a4f0ef2b49a9561d570217249343d9335">rapidjson::GenericPointer::Set</a></div><div class="ttdeci">ValueType &amp; Set(ValueType &amp;root, const Ch *value, typename ValueType::AllocatorType &amp;allocator) const</div><div class="ttdoc">Set a null-terminated string in a subtree. </div><div class="ttdef"><b>Definition:</b> pointer.h:623</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_pointer_html_a850f78846c5548565f8395be5f3427b7"><div class="ttname"><a href="classrapidjson_1_1_generic_pointer.html#a850f78846c5548565f8395be5f3427b7">rapidjson::GenericPointer::Ch</a></div><div class="ttdeci">ValueType::Ch Ch</div><div class="ttdoc">Character type from Value </div><div class="ttdef"><b>Definition:</b> pointer.h:82</div></div>
<div class="ttc" id="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s_html_ggade540ee4cc2a416c23b8ee2c12393c7ba2f2f8b238e201b7d540e8914bbfd2bed"><div class="ttname"><a href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#ggade540ee4cc2a416c23b8ee2c12393c7ba2f2f8b238e201b7d540e8914bbfd2bed">rapidjson::kPointerParseErrorTokenMustBeginWithSolidus</a></div><div class="ttdoc">A token must begin with a &amp;#39;/&amp;#39; </div><div class="ttdef"><b>Definition:</b> pointer.h:40</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_pointer_html_afb649edbdbe09a6840b12d67c9f2501e"><div class="ttname"><a href="classrapidjson_1_1_generic_pointer.html#afb649edbdbe09a6840b12d67c9f2501e">rapidjson::GenericPointer::Set</a></div><div class="ttdeci">ValueType &amp; Set(GenericDocument&lt; EncodingType, typename ValueType::AllocatorType, stackAllocator &gt; &amp;document, const Ch *value) const</div><div class="ttdoc">Set a null-terminated string in a document. </div><div class="ttdef"><b>Definition:</b> pointer.h:658</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_pointer_html_a791e40c10682b9db0adf2b6e0b8b3d78"><div class="ttname"><a href="classrapidjson_1_1_generic_pointer.html#a791e40c10682b9db0adf2b6e0b8b3d78">rapidjson::GenericPointer::GetTokenCount</a></div><div class="ttdeci">size_t GetTokenCount() const</div><div class="ttdoc">Get the number of tokens. </div><div class="ttdef"><b>Definition:</b> pointer.h:326</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_pointer_html_af19e2313004885cfa9c45f50b30b32e2"><div class="ttname"><a href="classrapidjson_1_1_generic_pointer.html#af19e2313004885cfa9c45f50b30b32e2">rapidjson::GenericPointer::GetWithDefault</a></div><div class="ttdeci">ValueType &amp; GetWithDefault(GenericDocument&lt; EncodingType, typename ValueType::AllocatorType, stackAllocator &gt; &amp;document, const std::basic_string&lt; Ch &gt; &amp;defaultValue) const</div><div class="ttdoc">Query a value in a document with default std::basic_string. </div><div class="ttdef"><b>Definition:</b> pointer.h:583</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_pointer_html_a2ac51ee7af5b9d7628140ae8501edcf4"><div class="ttname"><a href="classrapidjson_1_1_generic_pointer.html#a2ac51ee7af5b9d7628140ae8501edcf4">rapidjson::GenericPointer::GetWithDefault</a></div><div class="ttdeci">ValueType &amp; GetWithDefault(ValueType &amp;root, const std::basic_string&lt; Ch &gt; &amp;defaultValue, typename ValueType::AllocatorType &amp;allocator) const</div><div class="ttdoc">Query a value in a subtree with default std::basic_string. </div><div class="ttdef"><b>Definition:</b> pointer.h:551</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_pointer_html_a0ae84f686e1af593b9445c2c502101b2"><div class="ttname"><a href="classrapidjson_1_1_generic_pointer.html#a0ae84f686e1af593b9445c2c502101b2">rapidjson::GenericPointer::Set</a></div><div class="ttdeci">ValueType &amp; Set(ValueType &amp;root, const std::basic_string&lt; Ch &gt; &amp;value, typename ValueType::AllocatorType &amp;allocator) const</div><div class="ttdoc">Set a std::basic_string in a subtree. </div><div class="ttdef"><b>Definition:</b> pointer.h:629</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_pointer_html_a399790c5fe8076d91a58c621c0c2a79e"><div class="ttname"><a href="classrapidjson_1_1_generic_pointer.html#a399790c5fe8076d91a58c621c0c2a79e">rapidjson::GenericPointer::EncodingType</a></div><div class="ttdeci">ValueType::EncodingType EncodingType</div><div class="ttdoc">Encoding type from Value </div><div class="ttdef"><b>Definition:</b> pointer.h:81</div></div>
<div class="ttc" id="rapidjson_8h_html_abdc7cd7902748ffe6626d71c59a73c3b"><div class="ttname"><a href="rapidjson_8h.html#abdc7cd7902748ffe6626d71c59a73c3b">RAPIDJSON_NEW</a></div><div class="ttdeci">#define RAPIDJSON_NEW(TypeName)</div><div class="ttdoc">! customization point for global new </div><div class="ttdef"><b>Definition:</b> rapidjson.h:625</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_pointer_html_aaa4e92344cc07e98adb5b9f5b93927b8"><div class="ttname"><a href="classrapidjson_1_1_generic_pointer.html#aaa4e92344cc07e98adb5b9f5b93927b8">rapidjson::GenericPointer::GetWithDefault</a></div><div class="ttdeci">ValueType &amp; GetWithDefault(GenericDocument&lt; EncodingType, typename ValueType::AllocatorType, stackAllocator &gt; &amp;document, const Ch *defaultValue) const</div><div class="ttdoc">Query a value in a document with default null-terminated string. </div><div class="ttdef"><b>Definition:</b> pointer.h:576</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_pointer_html_ae985c27c1d061b93ba4f8875cfa5f7b5"><div class="ttname"><a href="classrapidjson_1_1_generic_pointer.html#ae985c27c1d061b93ba4f8875cfa5f7b5">rapidjson::GenericPointer::StringifyUriFragment</a></div><div class="ttdeci">bool StringifyUriFragment(OutputStream &amp;os) const</div><div class="ttdoc">Stringify the pointer into URI fragment representation. </div><div class="ttdef"><b>Definition:</b> pointer.h:380</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_pointer_html_adc4bf5a3892f5626a8517f90c88e4b7f"><div class="ttname"><a href="classrapidjson_1_1_generic_pointer.html#adc4bf5a3892f5626a8517f90c88e4b7f">rapidjson::GenericPointer::Create</a></div><div class="ttdeci">ValueType &amp; Create(GenericDocument&lt; EncodingType, typename ValueType::AllocatorType, stackAllocator &gt; &amp;document, bool *alreadyExist=0) const</div><div class="ttdoc">Creates a value in a document. </div><div class="ttdef"><b>Definition:</b> pointer.h:459</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_pointer_html_a8f831aae14afc493a82b5fb6aa9c3c43"><div class="ttname"><a href="classrapidjson_1_1_generic_pointer.html#a8f831aae14afc493a82b5fb6aa9c3c43">rapidjson::GenericPointer::GenericPointer</a></div><div class="ttdeci">GenericPointer(const Ch *source, Allocator *allocator=0)</div><div class="ttdoc">Constructor that parses a string or URI fragment representation. </div><div class="ttdef"><b>Definition:</b> pointer.h:114</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_pointer_html_a618808f066fb1104d36f012cced3b27a"><div class="ttname"><a href="classrapidjson_1_1_generic_pointer.html#a618808f066fb1104d36f012cced3b27a">rapidjson::GenericPointer::Append</a></div><div class="ttdeci">GenericPointer Append(const ValueType &amp;token, Allocator *allocator=0) const</div><div class="ttdoc">Append a token by value, and return a new Pointer </div><div class="ttdef"><b>Definition:</b> pointer.h:292</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_pointer_html"><div class="ttname"><a href="classrapidjson_1_1_generic_pointer.html">rapidjson::GenericPointer</a></div><div class="ttdoc">Represents a JSON Pointer. Use Pointer for UTF8 encoding and default allocator. </div><div class="ttdef"><b>Definition:</b> fwd.h:126</div></div>
<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">rapidjson::Type</a></div><div class="ttdeci">Type</div><div class="ttdoc">Type of JSON value </div><div class="ttdef"><b>Definition:</b> rapidjson.h:642</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_pointer_html_a23194bb6ce6c07c78981344fe80ac3a6"><div class="ttname"><a href="classrapidjson_1_1_generic_pointer.html#a23194bb6ce6c07c78981344fe80ac3a6">rapidjson::GenericPointer::operator=</a></div><div class="ttdeci">GenericPointer &amp; operator=(const GenericPointer &amp;rhs)</div><div class="ttdoc">Assignment operator. </div><div class="ttdef"><b>Definition:</b> pointer.h:183</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_pointer_html_a3a7ff4e0b700c2975cf455fef23226b4"><div class="ttname"><a href="classrapidjson_1_1_generic_pointer.html#a3a7ff4e0b700c2975cf455fef23226b4">rapidjson::GenericPointer::Set</a></div><div class="ttdeci">ValueType &amp; Set(GenericDocument&lt; EncodingType, typename ValueType::AllocatorType, stackAllocator &gt; &amp;document, const std::basic_string&lt; Ch &gt; &amp;value) const</div><div class="ttdoc">Sets a std::basic_string in a document. </div><div class="ttdef"><b>Definition:</b> pointer.h:665</div></div>
<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4acf030b422a32c3647c7c5973bd4dd0a9"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4acf030b422a32c3647c7c5973bd4dd0a9">rapidjson::kObjectType</a></div><div class="ttdoc">object </div><div class="ttdef"><b>Definition:</b> rapidjson.h:646</div></div>
<div class="ttc" id="document_8h_html"><div class="ttname"><a href="document_8h.html">document.h</a></div></div>
<div class="ttc" id="classrapidjson_1_1_generic_pointer_html_aa077ce171ea25cf501c12f2d5df7f248"><div class="ttname"><a href="classrapidjson_1_1_generic_pointer.html#aa077ce171ea25cf501c12f2d5df7f248">rapidjson::GenericPointer::GenericPointer</a></div><div class="ttdeci">GenericPointer(Allocator *allocator=0)</div><div class="ttdoc">Default constructor. </div><div class="ttdef"><b>Definition:</b> pointer.h:107</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_pointer_html_a30f4eac82e9fded60dead3f7d1cb3941"><div class="ttname"><a href="classrapidjson_1_1_generic_pointer.html#a30f4eac82e9fded60dead3f7d1cb3941">rapidjson::GenericPointer::Append</a></div><div class="ttdeci">GenericPointer Append(const Ch *name, SizeType length, Allocator *allocator=0) const</div><div class="ttdoc">Append a name token with length, and return a new Pointer </div><div class="ttdef"><b>Definition:</b> pointer.h:232</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_pointer_html_abdc025b8391b271f1134a7ba7039c27f"><div class="ttname"><a href="classrapidjson_1_1_generic_pointer.html#abdc025b8391b271f1134a7ba7039c27f">rapidjson::GenericPointer::GetWithDefault</a></div><div class="ttdeci">ValueType &amp; GetWithDefault(ValueType &amp;root, const Ch *defaultValue, typename ValueType::AllocatorType &amp;allocator) const</div><div class="ttdoc">Query a value in a subtree with default null-terminated string. </div><div class="ttdef"><b>Definition:</b> pointer.h:543</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_pointer_html_a75caef2a047c56466f0b599bdda882c9"><div class="ttname"><a href="classrapidjson_1_1_generic_pointer.html#a75caef2a047c56466f0b599bdda882c9">rapidjson::GenericPointer::GetParseErrorOffset</a></div><div class="ttdeci">size_t GetParseErrorOffset() const</div><div class="ttdoc">Get the parsing error offset in code unit. </div><div class="ttdef"><b>Definition:</b> pointer.h:309</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_document_html"><div class="ttname"><a href="classrapidjson_1_1_generic_document.html">rapidjson::GenericDocument</a></div><div class="ttdoc">A document for parsing JSON text as DOM. </div><div class="ttdef"><b>Definition:</b> document.h:57</div></div>
<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4a058c622e1e7d59419ae58b895cbce468"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4a058c622e1e7d59419ae58b895cbce468">rapidjson::kArrayType</a></div><div class="ttdoc">array </div><div class="ttdef"><b>Definition:</b> rapidjson.h:647</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_pointer_html_a18494d59f0317c037fa3bd037e436cec"><div class="ttname"><a href="classrapidjson_1_1_generic_pointer.html#a18494d59f0317c037fa3bd037e436cec">rapidjson::GenericPointer::Append</a></div><div class="ttdeci">GenericPointer Append(const std::basic_string&lt; Ch &gt; &amp;name, Allocator *allocator=0) const</div><div class="ttdoc">Append a name token, and return a new Pointer </div><div class="ttdef"><b>Definition:</b> pointer.h:256</div></div>
<div class="ttc" id="rapidjson_8h_html_a52c941c3fdd646527cdcd42aa846a28a"><div class="ttname"><a href="rapidjson_8h.html#a52c941c3fdd646527cdcd42aa846a28a">RAPIDJSON_DELETE</a></div><div class="ttdeci">#define RAPIDJSON_DELETE(x)</div><div class="ttdoc">! customization point for global delete </div><div class="ttdef"><b>Definition:</b> rapidjson.h:629</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_pointer_html_a29d7ee42eb5646f829aeca6c6989555a"><div class="ttname"><a href="classrapidjson_1_1_generic_pointer.html#a29d7ee42eb5646f829aeca6c6989555a">rapidjson::GenericPointer::Swap</a></div><div class="ttdeci">ValueType &amp; Swap(GenericDocument&lt; EncodingType, typename ValueType::AllocatorType, stackAllocator &gt; &amp;document, ValueType &amp;value) const</div><div class="ttdoc">Swap a value with a value in a document. </div><div class="ttdef"><b>Definition:</b> pointer.h:701</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_pointer_html_ae071847ed3e7389f5b256d26fcc8fd62"><div class="ttname"><a href="classrapidjson_1_1_generic_pointer.html#ae071847ed3e7389f5b256d26fcc8fd62">rapidjson::GenericPointer::GenericPointer</a></div><div class="ttdeci">GenericPointer(const GenericPointer &amp;rhs)</div><div class="ttdoc">Copy constructor. </div><div class="ttdef"><b>Definition:</b> pointer.h:166</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_document_html_ad92c6cd025d411258d1f2ad890e2ee3f"><div class="ttname"><a href="classrapidjson_1_1_generic_document.html#ad92c6cd025d411258d1f2ad890e2ee3f">rapidjson::GenericDocument::GetAllocator</a></div><div class="ttdeci">Allocator &amp; GetAllocator()</div><div class="ttdoc">Get the allocator of this document. </div><div class="ttdef"><b>Definition:</b> document.h:2406</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_pointer_html_af2f51d68c82136086bed9593719abd1a"><div class="ttname"><a href="classrapidjson_1_1_generic_pointer.html#af2f51d68c82136086bed9593719abd1a">rapidjson::GenericPointer::Set</a></div><div class="ttdeci">ValueType &amp; Set(ValueType &amp;root, const ValueType &amp;value, typename ValueType::AllocatorType &amp;allocator) const</div><div class="ttdoc">Set a value in a subtree, with copy semantics. </div><div class="ttdef"><b>Definition:</b> pointer.h:618</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_pointer_html_a7cb5eda2af1722e52efa591c4103ebec"><div class="ttname"><a href="classrapidjson_1_1_generic_pointer.html#a7cb5eda2af1722e52efa591c4103ebec">rapidjson::GenericPointer::Append</a></div><div class="ttdeci">GenericPointer Append(const Token &amp;token, Allocator *allocator=0) const</div><div class="ttdoc">Append a token and return a new Pointer </div><div class="ttdef"><b>Definition:</b> pointer.h:214</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_pointer_html_aeefcd60e5ad37d80ec43f5315ae84809"><div class="ttname"><a href="classrapidjson_1_1_generic_pointer.html#aeefcd60e5ad37d80ec43f5315ae84809">rapidjson::GenericPointer::GenericPointer</a></div><div class="ttdeci">GenericPointer(const std::basic_string&lt; Ch &gt; &amp;source, Allocator *allocator=0)</div><div class="ttdoc">Constructor that parses a string or URI fragment representation. </div><div class="ttdef"><b>Definition:</b> pointer.h:125</div></div>
<div class="ttc" id="structrapidjson_1_1_generic_pointer_1_1_token_html"><div class="ttname"><a href="structrapidjson_1_1_generic_pointer_1_1_token.html">rapidjson::GenericPointer::Token</a></div><div class="ttdoc">A token is the basic units of internal representation. </div><div class="ttdef"><b>Definition:</b> pointer.h:97</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_pointer_html_aac2171a0ac38298b2d0ae063351ec176"><div class="ttname"><a href="classrapidjson_1_1_generic_pointer.html#aac2171a0ac38298b2d0ae063351ec176">rapidjson::GenericPointer::Get</a></div><div class="ttdeci">const ValueType * Get(const ValueType &amp;root, size_t *unresolvedTokenIndex=0) const</div><div class="ttdoc">Query a const value in a const subtree. </div><div class="ttdef"><b>Definition:</b> pointer.h:517</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_pointer_html_a923a1100c029a28e25894708bdce784c"><div class="ttname"><a href="classrapidjson_1_1_generic_pointer.html#a923a1100c029a28e25894708bdce784c">rapidjson::GenericPointer::Erase</a></div><div class="ttdeci">bool Erase(ValueType &amp;root) const</div><div class="ttdoc">Erase a value in a subtree. </div><div class="ttdef"><b>Definition:</b> pointer.h:714</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_pointer_html_a8ca73989b4f3ffa5154a229f95f1e0c9"><div class="ttname"><a href="classrapidjson_1_1_generic_pointer.html#a8ca73989b4f3ffa5154a229f95f1e0c9">rapidjson::GenericPointer::operator!=</a></div><div class="ttdeci">bool operator!=(const GenericPointer &amp;rhs) const</div><div class="ttdoc">Inequality operator. </div><div class="ttdef"><b>Definition:</b> pointer.h:357</div></div>
<div class="ttc" id="structrapidjson_1_1_u_t_f8_html"><div class="ttname"><a href="structrapidjson_1_1_u_t_f8.html">rapidjson::UTF8</a></div><div class="ttdoc">UTF-8 encoding. </div><div class="ttdef"><b>Definition:</b> encodings.h:96</div></div>
<div class="ttc" id="structrapidjson_1_1_generic_pointer_1_1_token_html_a50331c9e3dedc34d2c79745b2e58fb2d"><div class="ttname"><a href="structrapidjson_1_1_generic_pointer_1_1_token.html#a50331c9e3dedc34d2c79745b2e58fb2d">rapidjson::GenericPointer::Token::index</a></div><div class="ttdeci">SizeType index</div><div class="ttdoc">A valid array index, if it is not equal to kPointerInvalidIndex. </div><div class="ttdef"><b>Definition:</b> pointer.h:100</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_pointer_html_ac07c300d43f04dad9caa0cb209cb2853"><div class="ttname"><a href="classrapidjson_1_1_generic_pointer.html#ac07c300d43f04dad9caa0cb209cb2853">rapidjson::GenericPointer::GetTokens</a></div><div class="ttdeci">const Token * GetTokens() const</div><div class="ttdoc">Get the token array (const version only). </div><div class="ttdef"><b>Definition:</b> pointer.h:323</div></div>
<div class="ttc" id="structrapidjson_1_1_generic_string_ref_html"><div class="ttname"><a href="structrapidjson_1_1_generic_string_ref.html">rapidjson::GenericStringRef</a></div><div class="ttdoc">Reference to a constant string (not taking a copy) </div><div class="ttdef"><b>Definition:</b> document.h:250</div></div>
<div class="ttc" id="classrapidjson_1_1_allocator_html"><div class="ttname"><a href="classrapidjson_1_1_allocator.html">rapidjson::Allocator</a></div><div class="ttdoc">Concept for allocating, resizing and freeing memory block. </div></div>
<div class="ttc" id="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s_html_ggade540ee4cc2a416c23b8ee2c12393c7ba29831a02b8ee23a05d552b47f4d64d28"><div class="ttname"><a href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#ggade540ee4cc2a416c23b8ee2c12393c7ba29831a02b8ee23a05d552b47f4d64d28">rapidjson::kPointerParseErrorInvalidPercentEncoding</a></div><div class="ttdoc">Invalid percent encoding in URI fragment </div><div class="ttdef"><b>Definition:</b> pointer.h:42</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_pointer_html_ad0b5b67c57572e81689762094ac8c856"><div class="ttname"><a href="classrapidjson_1_1_generic_pointer.html#ad0b5b67c57572e81689762094ac8c856">rapidjson::GenericPointer::Create</a></div><div class="ttdeci">ValueType &amp; Create(ValueType &amp;root, typename ValueType::AllocatorType &amp;allocator, bool *alreadyExist=0) const</div><div class="ttdoc">Create a value in a subtree. </div><div class="ttdef"><b>Definition:</b> pointer.h:404</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_pointer_html_a98b96d54c2c3378f1892ffffc501069c"><div class="ttname"><a href="classrapidjson_1_1_generic_pointer.html#a98b96d54c2c3378f1892ffffc501069c">rapidjson::GenericPointer::IsValid</a></div><div class="ttdeci">bool IsValid() const</div><div class="ttdoc">Check whether this is a valid pointer. </div><div class="ttdef"><b>Definition:</b> pointer.h:306</div></div>
<div class="ttc" id="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_pointer_html_acd36d0bbfcca43feaeeba5488d8384c2"><div class="ttname"><a href="classrapidjson_1_1_generic_pointer.html#acd36d0bbfcca43feaeeba5488d8384c2">rapidjson::GenericPointer::GetWithDefault</a></div><div class="ttdeci">ValueType &amp; GetWithDefault(ValueType &amp;root, const ValueType &amp;defaultValue, typename ValueType::AllocatorType &amp;allocator) const</div><div class="ttdoc">Query a value in a subtree with default value. </div><div class="ttdef"><b>Definition:</b> pointer.h:536</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_pointer_html_a9371832d9089cca9b7f549172fd75cc8"><div class="ttname"><a href="classrapidjson_1_1_generic_pointer.html#a9371832d9089cca9b7f549172fd75cc8">rapidjson::GenericPointer::Set</a></div><div class="ttdeci">ValueType &amp; Set(GenericDocument&lt; EncodingType, typename ValueType::AllocatorType, stackAllocator &gt; &amp;document, ValueType &amp;value) const</div><div class="ttdoc">Set a value in a document, with move semantics. </div><div class="ttdef"><b>Definition:</b> pointer.h:646</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_pointer_html_a4aadec8f0efe9a7ac42ac4906a5f676d"><div class="ttname"><a href="classrapidjson_1_1_generic_pointer.html#a4aadec8f0efe9a7ac42ac4906a5f676d">rapidjson::GenericPointer::Append</a></div><div class="ttdeci">GenericPointer Append(SizeType index, Allocator *allocator=0) const</div><div class="ttdoc">Append a index token, and return a new Pointer </div><div class="ttdef"><b>Definition:</b> pointer.h:267</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_pointer_html_ad7a692d4e08d578f7e24afb7c4004276"><div class="ttname"><a href="classrapidjson_1_1_generic_pointer.html#ad7a692d4e08d578f7e24afb7c4004276">rapidjson::GenericPointer::Set</a></div><div class="ttdeci">ValueType &amp; Set(GenericDocument&lt; EncodingType, typename ValueType::AllocatorType, stackAllocator &gt; &amp;document, const ValueType &amp;value) const</div><div class="ttdoc">Set a value in a document, with copy semantics. </div><div class="ttdef"><b>Definition:</b> pointer.h:652</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"><b>pointer.h</b></li>
  </ul>
</div>
</body>
</html>