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

reader_8h_source.html « zh-cn - github.com/miloyip/rapidjson.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 4c950c507d500be9c71e02e9b888311f9e5c2d4f (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
<!-- 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/reader.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('reader_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">reader.h</div>  </div>
</div><!--header-->
<div class="contents">
<a href="reader_8h.html">浏览该文件的文档.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">// Tencent is pleased to support the open source community by making RapidJSON available.</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment">// Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved.</span></div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment">// Licensed under the MIT License (the &quot;License&quot;); you may not use this file except</span></div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment">// in compliance with the License. You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment">// http://opensource.org/licenses/MIT</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment">// Unless required by applicable law or agreed to in writing, software distributed</span></div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment">// under the License is distributed on an &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR</span></div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment">// CONDITIONS OF ANY KIND, either express or implied. See the License for the</span></div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment">// specific language governing permissions and limitations under the License.</span></div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;</div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="preprocessor">#ifndef RAPIDJSON_READER_H_</span></div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="preprocessor">#define RAPIDJSON_READER_H_</span></div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="comment">/*! \file reader.h */</span></div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;</div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="preprocessor">#include &quot;allocators.h&quot;</span></div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="preprocessor">#include &quot;stream.h&quot;</span></div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="preprocessor">#include &quot;encodedstream.h&quot;</span></div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="preprocessor">#include &quot;internal/meta.h&quot;</span></div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="preprocessor">#include &quot;internal/stack.h&quot;</span></div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="preprocessor">#include &quot;internal/strtod.h&quot;</span></div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="preprocessor">#include &lt;limits&gt;</span></div><div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;</div><div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;<span class="preprocessor">#if defined(RAPIDJSON_SIMD) &amp;&amp; defined(_MSC_VER)</span></div><div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;<span class="preprocessor">#include &lt;intrin.h&gt;</span></div><div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;<span class="preprocessor">#pragma intrinsic(_BitScanForward)</span></div><div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;<span class="preprocessor">#ifdef RAPIDJSON_SSE42</span></div><div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;<span class="preprocessor">#include &lt;nmmintrin.h&gt;</span></div><div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;<span class="preprocessor">#elif defined(RAPIDJSON_SSE2)</span></div><div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;<span class="preprocessor">#include &lt;emmintrin.h&gt;</span></div><div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;<span class="preprocessor">#elif defined(RAPIDJSON_NEON)</span></div><div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;<span class="preprocessor">#include &lt;arm_neon.h&gt;</span></div><div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;</div><div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;<span class="preprocessor">#ifdef __clang__</span></div><div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;RAPIDJSON_DIAG_PUSH</div><div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;RAPIDJSON_DIAG_OFF(old-style-cast)</div><div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;RAPIDJSON_DIAG_OFF(padded)</div><div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;RAPIDJSON_DIAG_OFF(<span class="keywordflow">switch</span>-<span class="keyword">enum</span>)</div><div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;<span class="preprocessor">#elif defined(_MSC_VER)</span></div><div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;RAPIDJSON_DIAG_PUSH</div><div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;RAPIDJSON_DIAG_OFF(4127)  <span class="comment">// conditional expression is constant</span></div><div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;RAPIDJSON_DIAG_OFF(4702)  <span class="comment">// unreachable code</span></div><div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;</div><div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;<span class="preprocessor">#ifdef __GNUC__</span></div><div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;RAPIDJSON_DIAG_PUSH</div><div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;RAPIDJSON_DIAG_OFF(effc++)</div><div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;<span class="comment">//!@cond RAPIDJSON_HIDDEN_FROM_DOXYGEN</span></div><div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;<span class="comment"></span><span class="preprocessor">#define RAPIDJSON_NOTHING </span><span class="comment">/* deliberately empty */</span><span class="preprocessor"></span></div><div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;<span class="preprocessor">#ifndef RAPIDJSON_PARSE_ERROR_EARLY_RETURN</span></div><div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;<span class="preprocessor">#define RAPIDJSON_PARSE_ERROR_EARLY_RETURN(value) \</span></div><div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;<span class="preprocessor">    RAPIDJSON_MULTILINEMACRO_BEGIN \</span></div><div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;<span class="preprocessor">    if (RAPIDJSON_UNLIKELY(HasParseError())) { return value; } \</span></div><div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;<span class="preprocessor">    RAPIDJSON_MULTILINEMACRO_END</span></div><div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;<span class="preprocessor">#define RAPIDJSON_PARSE_ERROR_EARLY_RETURN_VOID \</span></div><div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;<span class="preprocessor">    RAPIDJSON_PARSE_ERROR_EARLY_RETURN(RAPIDJSON_NOTHING)</span></div><div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;<span class="comment">//!@endcond</span></div><div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;<span class="comment">/*! \def RAPIDJSON_PARSE_ERROR_NORETURN</span></div><div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;<span class="comment">    \ingroup RAPIDJSON_ERRORS</span></div><div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;<span class="comment">    \brief Macro to indicate a parse error.</span></div><div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;<span class="comment">    \param parseErrorCode \ref rapidjson::ParseErrorCode of the error</span></div><div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;<span class="comment">    \param offset  position of the error in JSON input (\c size_t)</span></div><div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;<span class="comment">    This macros can be used as a customization point for the internal</span></div><div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;<span class="comment">    error handling mechanism of RapidJSON.</span></div><div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;<span class="comment">    A common usage model is to throw an exception instead of requiring the</span></div><div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;<span class="comment">    caller to explicitly check the \ref rapidjson::GenericReader::Parse&#39;s</span></div><div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;<span class="comment">    return value:</span></div><div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;<span class="comment">    \code</span></div><div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;<span class="comment">    #define RAPIDJSON_PARSE_ERROR_NORETURN(parseErrorCode,offset) \</span></div><div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;<span class="comment">       throw ParseException(parseErrorCode, #parseErrorCode, offset)</span></div><div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;<span class="comment">    #include &lt;stdexcept&gt;               // std::runtime_error</span></div><div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;<span class="comment">    #include &quot;rapidjson/error/error.h&quot; // rapidjson::ParseResult</span></div><div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;<span class="comment">    struct ParseException : std::runtime_error, rapidjson::ParseResult {</span></div><div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;<span class="comment">      ParseException(rapidjson::ParseErrorCode code, const char* msg, size_t offset)</span></div><div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;<span class="comment">        : std::runtime_error(msg), ParseResult(code, offset) {}</span></div><div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;<span class="comment">    };</span></div><div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;<span class="comment">    #include &quot;rapidjson/reader.h&quot;</span></div><div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;<span class="comment">    \endcode</span></div><div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;<span class="comment">    \see RAPIDJSON_PARSE_ERROR, rapidjson::GenericReader::Parse</span></div><div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;<span class="preprocessor">#ifndef RAPIDJSON_PARSE_ERROR_NORETURN</span></div><div class="line"><a name="l00099"></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#ga7f8c4265b2edda78568ae3338aaf1461">   99</a></span>&#160;<span class="preprocessor">#define RAPIDJSON_PARSE_ERROR_NORETURN(parseErrorCode, offset) \</span></div><div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;<span class="preprocessor">    RAPIDJSON_MULTILINEMACRO_BEGIN \</span></div><div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;<span class="preprocessor">    RAPIDJSON_ASSERT(!HasParseError()); </span><span class="comment">/* Error can only be assigned once */</span><span class="preprocessor"> \</span></div><div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;<span class="preprocessor">    SetParseError(parseErrorCode, offset); \</span></div><div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;<span class="preprocessor">    RAPIDJSON_MULTILINEMACRO_END</span></div><div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;<span class="comment">/*! \def RAPIDJSON_PARSE_ERROR</span></div><div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;<span class="comment">    \ingroup RAPIDJSON_ERRORS</span></div><div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;<span class="comment">    \brief (Internal) macro to indicate and handle a parse error.</span></div><div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;<span class="comment">    \param parseErrorCode \ref rapidjson::ParseErrorCode of the error</span></div><div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;<span class="comment">    \param offset  position of the error in JSON input (\c size_t)</span></div><div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;<span class="comment">    Invokes RAPIDJSON_PARSE_ERROR_NORETURN and stops the parsing.</span></div><div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;<span class="comment">    \see RAPIDJSON_PARSE_ERROR_NORETURN</span></div><div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;<span class="comment">    \hideinitializer</span></div><div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;<span class="preprocessor">#ifndef RAPIDJSON_PARSE_ERROR</span></div><div class="line"><a name="l00118"></a><span class="lineno"><a class="line" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gae3689840fa6e89a241313f33b602f865">  118</a></span>&#160;<span class="preprocessor">#define RAPIDJSON_PARSE_ERROR(parseErrorCode, offset) \</span></div><div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;<span class="preprocessor">    RAPIDJSON_MULTILINEMACRO_BEGIN \</span></div><div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;<span class="preprocessor">    RAPIDJSON_PARSE_ERROR_NORETURN(parseErrorCode, offset); \</span></div><div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;<span class="preprocessor">    RAPIDJSON_PARSE_ERROR_EARLY_RETURN_VOID; \</span></div><div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;<span class="preprocessor">    RAPIDJSON_MULTILINEMACRO_END</span></div><div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;</div><div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="error_8h.html">error/error.h</a>&quot;</span> <span class="comment">// ParseErrorCode, ParseResult</span></div><div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;</div><div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;RAPIDJSON_NAMESPACE_BEGIN</div><div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;<span class="comment"></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"></span><span class="comment">// ParseFlag</span></div><div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;<span class="comment">/*! \def RAPIDJSON_PARSE_DEFAULT_FLAGS</span></div><div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;<span class="comment">    \ingroup RAPIDJSON_CONFIG</span></div><div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;<span class="comment">    \brief User-defined kParseDefaultFlags definition.</span></div><div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;<span class="comment">    User can define this as any \c ParseFlag combinations.</span></div><div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;<span class="preprocessor">#ifndef RAPIDJSON_PARSE_DEFAULT_FLAGS</span></div><div class="line"><a name="l00139"></a><span class="lineno"><a class="line" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga77005e892e6601599beaf421b0395c31">  139</a></span>&#160;<span class="preprocessor">#define RAPIDJSON_PARSE_DEFAULT_FLAGS kParseNoFlags</span></div><div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;<span class="comment">//! Combination of parseFlags</span></div><div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;<span class="comment"></span><span class="comment">/*! \see Reader::Parse, Document::Parse, Document::ParseInsitu, Document::ParseStream</span></div><div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00145"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#a81379eb4e94a0386d71d15fda882ebc9">  145</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="namespacerapidjson.html#a81379eb4e94a0386d71d15fda882ebc9">ParseFlag</a> {</div><div class="line"><a name="l00146"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#a81379eb4e94a0386d71d15fda882ebc9af2c7fa21e9e7656e467bd71079ac8fb0">  146</a></span>&#160;    <a class="code" href="namespacerapidjson.html#a81379eb4e94a0386d71d15fda882ebc9af2c7fa21e9e7656e467bd71079ac8fb0">kParseNoFlags</a> = 0,              <span class="comment">//!&lt; No flags are set.</span></div><div class="line"><a name="l00147"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#a81379eb4e94a0386d71d15fda882ebc9a02748971d6ea0c5e22c69b8aa7f344ea">  147</a></span>&#160;<span class="comment"></span>    <a class="code" href="namespacerapidjson.html#a81379eb4e94a0386d71d15fda882ebc9a02748971d6ea0c5e22c69b8aa7f344ea">kParseInsituFlag</a> = 1,           <span class="comment">//!&lt; In-situ(destructive) parsing.</span></div><div class="line"><a name="l00148"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#a81379eb4e94a0386d71d15fda882ebc9a3df81f75479da8e052393f92cbec394b">  148</a></span>&#160;<span class="comment"></span>    <a class="code" href="namespacerapidjson.html#a81379eb4e94a0386d71d15fda882ebc9a3df81f75479da8e052393f92cbec394b">kParseValidateEncodingFlag</a> = 2, <span class="comment">//!&lt; Validate encoding of JSON strings.</span></div><div class="line"><a name="l00149"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#a81379eb4e94a0386d71d15fda882ebc9a7923686c8bdb7614699f1fb1bb615bb2">  149</a></span>&#160;<span class="comment"></span>    <a class="code" href="namespacerapidjson.html#a81379eb4e94a0386d71d15fda882ebc9a7923686c8bdb7614699f1fb1bb615bb2">kParseIterativeFlag</a> = 4,        <span class="comment">//!&lt; Iterative(constant complexity in terms of function call stack size) parsing.</span></div><div class="line"><a name="l00150"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#a81379eb4e94a0386d71d15fda882ebc9af84c60868704433b80aa51a62e042bb1">  150</a></span>&#160;<span class="comment"></span>    <a class="code" href="namespacerapidjson.html#a81379eb4e94a0386d71d15fda882ebc9af84c60868704433b80aa51a62e042bb1">kParseStopWhenDoneFlag</a> = 8,     <span class="comment">//!&lt; After parsing a complete JSON root from stream, stop further processing the rest of stream. When this flag is used, parser will not generate kParseErrorDocumentRootNotSingular error.</span></div><div class="line"><a name="l00151"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#a81379eb4e94a0386d71d15fda882ebc9adf80892cdfa076b2d1a7dd9530e15cb0">  151</a></span>&#160;<span class="comment"></span>    <a class="code" href="namespacerapidjson.html#a81379eb4e94a0386d71d15fda882ebc9adf80892cdfa076b2d1a7dd9530e15cb0">kParseFullPrecisionFlag</a> = 16,   <span class="comment">//!&lt; Parse number in full precision (but slower).</span></div><div class="line"><a name="l00152"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#a81379eb4e94a0386d71d15fda882ebc9ab5d719b36aac626135d5d622d0d837c1">  152</a></span>&#160;<span class="comment"></span>    <a class="code" href="namespacerapidjson.html#a81379eb4e94a0386d71d15fda882ebc9ab5d719b36aac626135d5d622d0d837c1">kParseCommentsFlag</a> = 32,        <span class="comment">//!&lt; Allow one-line (//) and multi-line (/**/) comments.</span></div><div class="line"><a name="l00153"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#a81379eb4e94a0386d71d15fda882ebc9a13981c0b803803f59d7a01aef3dfc987">  153</a></span>&#160;<span class="comment"></span>    <a class="code" href="namespacerapidjson.html#a81379eb4e94a0386d71d15fda882ebc9a13981c0b803803f59d7a01aef3dfc987">kParseNumbersAsStringsFlag</a> = 64,    <span class="comment">//!&lt; Parse all numbers (ints/doubles) as strings.</span></div><div class="line"><a name="l00154"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#a81379eb4e94a0386d71d15fda882ebc9af8b8470221dbc6046a40ff31d758ceec">  154</a></span>&#160;<span class="comment"></span>    <a class="code" href="namespacerapidjson.html#a81379eb4e94a0386d71d15fda882ebc9af8b8470221dbc6046a40ff31d758ceec">kParseTrailingCommasFlag</a> = 128, <span class="comment">//!&lt; Allow trailing commas at the end of objects and arrays.</span></div><div class="line"><a name="l00155"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#a81379eb4e94a0386d71d15fda882ebc9a857894ab51cafa62956e9c9f0dafc4d8">  155</a></span>&#160;<span class="comment"></span>    <a class="code" href="namespacerapidjson.html#a81379eb4e94a0386d71d15fda882ebc9a857894ab51cafa62956e9c9f0dafc4d8">kParseNanAndInfFlag</a> = 256,      <span class="comment">//!&lt; Allow parsing NaN, Inf, Infinity, -Inf and -Infinity as doubles.</span></div><div class="line"><a name="l00156"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#a81379eb4e94a0386d71d15fda882ebc9a5640cb00db7814b7f22be3683dda9835">  156</a></span>&#160;<span class="comment"></span>    <a class="code" href="namespacerapidjson.html#a81379eb4e94a0386d71d15fda882ebc9a5640cb00db7814b7f22be3683dda9835">kParseDefaultFlags</a> = <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga77005e892e6601599beaf421b0395c31">RAPIDJSON_PARSE_DEFAULT_FLAGS</a>  <span class="comment">//!&lt; Default parse flags. Can be customized by defining RAPIDJSON_PARSE_DEFAULT_FLAGS</span></div><div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;<span class="comment"></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">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;<span class="comment"></span><span class="comment">// Handler</span></div><div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;<span class="comment">/*! \class rapidjson::Handler</span></div><div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;<span class="comment">    \brief Concept for receiving events from GenericReader upon parsing.</span></div><div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;<span class="comment">    The functions return true if no error occurs. If they return false,</span></div><div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;<span class="comment">    the event publisher should terminate the process.</span></div><div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;<span class="comment">\code</span></div><div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;<span class="comment">concept Handler {</span></div><div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;<span class="comment">    typename Ch;</span></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">    bool Null();</span></div><div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;<span class="comment">    bool Bool(bool b);</span></div><div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;<span class="comment">    bool Int(int i);</span></div><div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160;<span class="comment">    bool Uint(unsigned i);</span></div><div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160;<span class="comment">    bool Int64(int64_t i);</span></div><div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;<span class="comment">    bool Uint64(uint64_t i);</span></div><div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;<span class="comment">    bool Double(double d);</span><span class="comment"></span></div><div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;<span class="comment">    /// enabled via kParseNumbersAsStringsFlag, string is not null-terminated (use length)</span></div><div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;<span class="comment"></span>    bool RawNumber(const Ch* str, SizeType length, bool copy);</div><div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;    bool String(const Ch* str, SizeType length, bool copy);</div><div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;    bool StartObject();</div><div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;    bool Key(const Ch* str, SizeType length, bool copy);</div><div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;    bool EndObject(SizeType memberCount);</div><div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;    bool StartArray();</div><div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;    bool EndArray(SizeType elementCount);</div><div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160;};</div><div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160;\endcode</div><div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160;*/<span class="comment"></span></div><div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;<span class="comment"></span><span class="comment">// BaseReaderHandler</span></div><div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160;<span class="comment">//! Default implementation of Handler.</span></div><div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160;<span class="comment"></span><span class="comment">/*! This can be used as base class of any reader handler.</span></div><div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;<span class="comment">    \note implements Handler concept</span></div><div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> Encoding = UTF8&lt;&gt;, <span class="keyword">typename</span> Derived = <span class="keywordtype">void</span>&gt;</div><div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160;<span class="keyword">struct </span><a class="code" href="structrapidjson_1_1_base_reader_handler.html">BaseReaderHandler</a> {</div><div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;    <span class="keyword">typedef</span> <span class="keyword">typename</span> Encoding::Ch Ch;</div><div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;</div><div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160;    <span class="keyword">typedef</span> <span class="keyword">typename</span> internal::SelectIf&lt;internal::IsSame&lt;Derived, void&gt;, <a class="code" href="structrapidjson_1_1_base_reader_handler.html">BaseReaderHandler</a>, Derived&gt;<a class="code" href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">::Type</a> Override;</div><div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;</div><div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;    <span class="keywordtype">bool</span> Default() { <span class="keywordflow">return</span> <span class="keyword">true</span>; }</div><div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160;    <span class="keywordtype">bool</span> Null() { <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span>Override&amp;<span class="keyword">&gt;</span>(*this).Default(); }</div><div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;    <span class="keywordtype">bool</span> Bool(<span class="keywordtype">bool</span>) { <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span>Override&amp;<span class="keyword">&gt;</span>(*this).Default(); }</div><div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160;    <span class="keywordtype">bool</span> Int(<span class="keywordtype">int</span>) { <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span>Override&amp;<span class="keyword">&gt;</span>(*this).Default(); }</div><div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160;    <span class="keywordtype">bool</span> Uint(<span class="keywordtype">unsigned</span>) { <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span>Override&amp;<span class="keyword">&gt;</span>(*this).Default(); }</div><div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160;    <span class="keywordtype">bool</span> Int64(int64_t) { <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span>Override&amp;<span class="keyword">&gt;</span>(*this).Default(); }</div><div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160;    <span class="keywordtype">bool</span> Uint64(uint64_t) { <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span>Override&amp;<span class="keyword">&gt;</span>(*this).Default(); }</div><div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160;    <span class="keywordtype">bool</span> Double(<span class="keywordtype">double</span>) { <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span>Override&amp;<span class="keyword">&gt;</span>(*this).Default(); }<span class="comment"></span></div><div class="line"><a name="l00209"></a><span class="lineno">  209</span>&#160;<span class="comment">    /// enabled via kParseNumbersAsStringsFlag, string is not null-terminated (use length)</span></div><div class="line"><a name="l00210"></a><span class="lineno"><a class="line" href="structrapidjson_1_1_base_reader_handler.html#a0de969fd05528960c2a7de51b2265bf1">  210</a></span>&#160;<span class="comment"></span>    <span class="keywordtype">bool</span> <a class="code" href="structrapidjson_1_1_base_reader_handler.html#a0de969fd05528960c2a7de51b2265bf1">RawNumber</a>(<span class="keyword">const</span> Ch* str, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> len, <span class="keywordtype">bool</span> copy) { <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span>Override&amp;<span class="keyword">&gt;</span>(*this).String(str, len, copy); }</div><div class="line"><a name="l00211"></a><span class="lineno">  211</span>&#160;    <span class="keywordtype">bool</span> String(<span class="keyword">const</span> Ch*, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a>, <span class="keywordtype">bool</span>) { <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span>Override&amp;<span class="keyword">&gt;</span>(*this).Default(); }</div><div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160;    <span class="keywordtype">bool</span> StartObject() { <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span>Override&amp;<span class="keyword">&gt;</span>(*this).Default(); }</div><div class="line"><a name="l00213"></a><span class="lineno">  213</span>&#160;    <span class="keywordtype">bool</span> Key(<span class="keyword">const</span> Ch* str, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> len, <span class="keywordtype">bool</span> copy) { <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span>Override&amp;<span class="keyword">&gt;</span>(*this).String(str, len, copy); }</div><div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;    <span class="keywordtype">bool</span> EndObject(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a>) { <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span>Override&amp;<span class="keyword">&gt;</span>(*this).Default(); }</div><div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;    <span class="keywordtype">bool</span> StartArray() { <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span>Override&amp;<span class="keyword">&gt;</span>(*this).Default(); }</div><div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160;    <span class="keywordtype">bool</span> EndArray(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a>) { <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span>Override&amp;<span class="keyword">&gt;</span>(*this).Default(); }</div><div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;};</div><div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00219"></a><span class="lineno">  219</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;<span class="comment"></span><span class="comment">// StreamLocalCopy</span></div><div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160;</div><div class="line"><a name="l00222"></a><span class="lineno">  222</span>&#160;<span class="keyword">namespace </span>internal {</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;template&lt;typename Stream, int = StreamTraits&lt;Stream&gt;::copyOptimization&gt;</div><div class="line"><a name="l00225"></a><span class="lineno">  225</span>&#160;<span class="keyword">class </span>StreamLocalCopy;</div><div class="line"><a name="l00226"></a><span class="lineno">  226</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00227"></a><span class="lineno">  227</span>&#160;<span class="comment">//! Do copy optimization.</span></div><div class="line"><a name="l00228"></a><span class="lineno">  228</span>&#160;<span class="comment"></span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> Stream&gt;</div><div class="line"><a name="l00229"></a><span class="lineno">  229</span>&#160;<span class="keyword">class </span>StreamLocalCopy&lt;Stream, 1&gt; {</div><div class="line"><a name="l00230"></a><span class="lineno">  230</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00231"></a><span class="lineno">  231</span>&#160;    StreamLocalCopy(Stream&amp; original) : s(original), original_(original) {}</div><div class="line"><a name="l00232"></a><span class="lineno">  232</span>&#160;    ~StreamLocalCopy() { original_ = s; }</div><div class="line"><a name="l00233"></a><span class="lineno">  233</span>&#160;</div><div class="line"><a name="l00234"></a><span class="lineno">  234</span>&#160;    Stream s;</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="keyword">private</span>:</div><div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160;    StreamLocalCopy&amp; operator=(<span class="keyword">const</span> StreamLocalCopy&amp;) <span class="comment">/* = delete */</span>;</div><div class="line"><a name="l00238"></a><span class="lineno">  238</span>&#160;</div><div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;    Stream&amp; original_;</div><div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160;};</div><div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00242"></a><span class="lineno">  242</span>&#160;<span class="comment">//! Keep reference.</span></div><div class="line"><a name="l00243"></a><span class="lineno">  243</span>&#160;<span class="comment"></span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> Stream&gt;</div><div class="line"><a name="l00244"></a><span class="lineno">  244</span>&#160;<span class="keyword">class </span>StreamLocalCopy&lt;Stream, 0&gt; {</div><div class="line"><a name="l00245"></a><span class="lineno">  245</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00246"></a><span class="lineno">  246</span>&#160;    StreamLocalCopy(Stream&amp; original) : s(original) {}</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;    Stream&amp; s;</div><div class="line"><a name="l00249"></a><span class="lineno">  249</span>&#160;</div><div class="line"><a name="l00250"></a><span class="lineno">  250</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00251"></a><span class="lineno">  251</span>&#160;    StreamLocalCopy&amp; operator=(<span class="keyword">const</span> StreamLocalCopy&amp;) <span class="comment">/* = delete */</span>;</div><div class="line"><a name="l00252"></a><span class="lineno">  252</span>&#160;};</div><div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160;</div><div class="line"><a name="l00254"></a><span class="lineno">  254</span>&#160;} <span class="comment">// namespace internal</span></div><div class="line"><a name="l00255"></a><span class="lineno">  255</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00256"></a><span class="lineno">  256</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00257"></a><span class="lineno">  257</span>&#160;<span class="comment"></span><span class="comment">// SkipWhitespace</span></div><div class="line"><a name="l00258"></a><span class="lineno">  258</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00259"></a><span class="lineno">  259</span>&#160;<span class="comment">//! Skip the JSON white spaces in a stream.</span></div><div class="line"><a name="l00260"></a><span class="lineno">  260</span>&#160;<span class="comment"></span><span class="comment">/*! \param is A input stream for skipping white spaces.</span></div><div class="line"><a name="l00261"></a><span class="lineno">  261</span>&#160;<span class="comment">    \note This function has SSE2/SSE4.2 specialization.</span></div><div class="line"><a name="l00262"></a><span class="lineno">  262</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00263"></a><span class="lineno">  263</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> InputStream&gt;</div><div class="line"><a name="l00264"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#a6efb0f4d2a6f81477a59718d42e9464a">  264</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="namespacerapidjson.html#a6efb0f4d2a6f81477a59718d42e9464a">SkipWhitespace</a>(InputStream&amp; is) {</div><div class="line"><a name="l00265"></a><span class="lineno">  265</span>&#160;    internal::StreamLocalCopy&lt;InputStream&gt; copy(is);</div><div class="line"><a name="l00266"></a><span class="lineno">  266</span>&#160;    InputStream&amp; s(copy.s);</div><div class="line"><a name="l00267"></a><span class="lineno">  267</span>&#160;</div><div class="line"><a name="l00268"></a><span class="lineno">  268</span>&#160;    <span class="keyword">typename</span> InputStream::Ch c;</div><div class="line"><a name="l00269"></a><span class="lineno">  269</span>&#160;    <span class="keywordflow">while</span> ((c = s.Peek()) == <span class="charliteral">&#39; &#39;</span> || c == <span class="charliteral">&#39;\n&#39;</span> || c == <span class="charliteral">&#39;\r&#39;</span> || c == <span class="charliteral">&#39;\t&#39;</span>)</div><div class="line"><a name="l00270"></a><span class="lineno">  270</span>&#160;        s.Take();</div><div class="line"><a name="l00271"></a><span class="lineno">  271</span>&#160;}</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="keyword">inline</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* <a class="code" href="namespacerapidjson.html#a6efb0f4d2a6f81477a59718d42e9464a">SkipWhitespace</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* p, <span class="keyword">const</span> <span class="keywordtype">char</span>* end) {</div><div class="line"><a name="l00274"></a><span class="lineno">  274</span>&#160;    <span class="keywordflow">while</span> (p != end &amp;&amp; (*p == <span class="charliteral">&#39; &#39;</span> || *p == <span class="charliteral">&#39;\n&#39;</span> || *p == <span class="charliteral">&#39;\r&#39;</span> || *p == <span class="charliteral">&#39;\t&#39;</span>))</div><div class="line"><a name="l00275"></a><span class="lineno">  275</span>&#160;        ++p;</div><div class="line"><a name="l00276"></a><span class="lineno">  276</span>&#160;    <span class="keywordflow">return</span> p;</div><div class="line"><a name="l00277"></a><span class="lineno">  277</span>&#160;}</div><div class="line"><a name="l00278"></a><span class="lineno">  278</span>&#160;</div><div class="line"><a name="l00279"></a><span class="lineno">  279</span>&#160;<span class="preprocessor">#ifdef RAPIDJSON_SSE42</span></div><div class="line"><a name="l00280"></a><span class="lineno">  280</span>&#160;<span class="comment">//! Skip whitespace with SSE 4.2 pcmpistrm instruction, testing 16 8-byte characters at once.</span></div><div class="line"><a name="l00281"></a><span class="lineno">  281</span>&#160;<span class="comment"></span><span class="keyword">inline</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *SkipWhitespace_SIMD(<span class="keyword">const</span> <span class="keywordtype">char</span>* p) {</div><div class="line"><a name="l00282"></a><span class="lineno">  282</span>&#160;    <span class="comment">// Fast return for single non-whitespace</span></div><div class="line"><a name="l00283"></a><span class="lineno">  283</span>&#160;    <span class="keywordflow">if</span> (*p == <span class="charliteral">&#39; &#39;</span> || *p == <span class="charliteral">&#39;\n&#39;</span> || *p == <span class="charliteral">&#39;\r&#39;</span> || *p == <span class="charliteral">&#39;\t&#39;</span>)</div><div class="line"><a name="l00284"></a><span class="lineno">  284</span>&#160;        ++p;</div><div class="line"><a name="l00285"></a><span class="lineno">  285</span>&#160;    <span class="keywordflow">else</span></div><div class="line"><a name="l00286"></a><span class="lineno">  286</span>&#160;        <span class="keywordflow">return</span> p;</div><div class="line"><a name="l00287"></a><span class="lineno">  287</span>&#160;</div><div class="line"><a name="l00288"></a><span class="lineno">  288</span>&#160;    <span class="comment">// 16-byte align to the next boundary</span></div><div class="line"><a name="l00289"></a><span class="lineno">  289</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">char</span>* nextAligned = <span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span><span class="keywordtype">char</span>*<span class="keyword">&gt;</span>((<span class="keyword">reinterpret_cast&lt;</span><span class="keywordtype">size_t</span><span class="keyword">&gt;</span>(p) + 15) &amp; <span class="keyword">static_cast&lt;</span><span class="keywordtype">size_t</span><span class="keyword">&gt;</span>(~15));</div><div class="line"><a name="l00290"></a><span class="lineno">  290</span>&#160;    <span class="keywordflow">while</span> (p != nextAligned)</div><div class="line"><a name="l00291"></a><span class="lineno">  291</span>&#160;        <span class="keywordflow">if</span> (*p == <span class="charliteral">&#39; &#39;</span> || *p == <span class="charliteral">&#39;\n&#39;</span> || *p == <span class="charliteral">&#39;\r&#39;</span> || *p == <span class="charliteral">&#39;\t&#39;</span>)</div><div class="line"><a name="l00292"></a><span class="lineno">  292</span>&#160;            ++p;</div><div class="line"><a name="l00293"></a><span class="lineno">  293</span>&#160;        <span class="keywordflow">else</span></div><div class="line"><a name="l00294"></a><span class="lineno">  294</span>&#160;            <span class="keywordflow">return</span> p;</div><div class="line"><a name="l00295"></a><span class="lineno">  295</span>&#160;</div><div class="line"><a name="l00296"></a><span class="lineno">  296</span>&#160;    <span class="comment">// The rest of string using SIMD</span></div><div class="line"><a name="l00297"></a><span class="lineno">  297</span>&#160;    <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> whitespace[16] = <span class="stringliteral">&quot; \n\r\t&quot;</span>;</div><div class="line"><a name="l00298"></a><span class="lineno">  298</span>&#160;    <span class="keyword">const</span> __m128i w = _mm_loadu_si128(reinterpret_cast&lt;const __m128i *&gt;(&amp;whitespace[0]));</div><div class="line"><a name="l00299"></a><span class="lineno">  299</span>&#160;</div><div class="line"><a name="l00300"></a><span class="lineno">  300</span>&#160;    <span class="keywordflow">for</span> (;; p += 16) {</div><div class="line"><a name="l00301"></a><span class="lineno">  301</span>&#160;        <span class="keyword">const</span> __m128i s = _mm_load_si128(reinterpret_cast&lt;const __m128i *&gt;(p));</div><div class="line"><a name="l00302"></a><span class="lineno">  302</span>&#160;        <span class="keyword">const</span> <span class="keywordtype">int</span> r = _mm_cmpistri(w, s, _SIDD_UBYTE_OPS | _SIDD_CMP_EQUAL_ANY | _SIDD_LEAST_SIGNIFICANT | _SIDD_NEGATIVE_POLARITY);</div><div class="line"><a name="l00303"></a><span class="lineno">  303</span>&#160;        <span class="keywordflow">if</span> (r != 16)    <span class="comment">// some of characters is non-whitespace</span></div><div class="line"><a name="l00304"></a><span class="lineno">  304</span>&#160;            <span class="keywordflow">return</span> p + r;</div><div class="line"><a name="l00305"></a><span class="lineno">  305</span>&#160;    }</div><div class="line"><a name="l00306"></a><span class="lineno">  306</span>&#160;}</div><div class="line"><a name="l00307"></a><span class="lineno">  307</span>&#160;</div><div class="line"><a name="l00308"></a><span class="lineno">  308</span>&#160;<span class="keyword">inline</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *SkipWhitespace_SIMD(<span class="keyword">const</span> <span class="keywordtype">char</span>* p, <span class="keyword">const</span> <span class="keywordtype">char</span>* end) {</div><div class="line"><a name="l00309"></a><span class="lineno">  309</span>&#160;    <span class="comment">// Fast return for single non-whitespace</span></div><div class="line"><a name="l00310"></a><span class="lineno">  310</span>&#160;    <span class="keywordflow">if</span> (p != end &amp;&amp; (*p == <span class="charliteral">&#39; &#39;</span> || *p == <span class="charliteral">&#39;\n&#39;</span> || *p == <span class="charliteral">&#39;\r&#39;</span> || *p == <span class="charliteral">&#39;\t&#39;</span>))</div><div class="line"><a name="l00311"></a><span class="lineno">  311</span>&#160;        ++p;</div><div class="line"><a name="l00312"></a><span class="lineno">  312</span>&#160;    <span class="keywordflow">else</span></div><div class="line"><a name="l00313"></a><span class="lineno">  313</span>&#160;        <span class="keywordflow">return</span> p;</div><div class="line"><a name="l00314"></a><span class="lineno">  314</span>&#160;</div><div class="line"><a name="l00315"></a><span class="lineno">  315</span>&#160;    <span class="comment">// The middle of string using SIMD</span></div><div class="line"><a name="l00316"></a><span class="lineno">  316</span>&#160;    <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> whitespace[16] = <span class="stringliteral">&quot; \n\r\t&quot;</span>;</div><div class="line"><a name="l00317"></a><span class="lineno">  317</span>&#160;    <span class="keyword">const</span> __m128i w = _mm_loadu_si128(reinterpret_cast&lt;const __m128i *&gt;(&amp;whitespace[0]));</div><div class="line"><a name="l00318"></a><span class="lineno">  318</span>&#160;</div><div class="line"><a name="l00319"></a><span class="lineno">  319</span>&#160;    <span class="keywordflow">for</span> (; p &lt;= end - 16; p += 16) {</div><div class="line"><a name="l00320"></a><span class="lineno">  320</span>&#160;        <span class="keyword">const</span> __m128i s = _mm_loadu_si128(reinterpret_cast&lt;const __m128i *&gt;(p));</div><div class="line"><a name="l00321"></a><span class="lineno">  321</span>&#160;        <span class="keyword">const</span> <span class="keywordtype">int</span> r = _mm_cmpistri(w, s, _SIDD_UBYTE_OPS | _SIDD_CMP_EQUAL_ANY | _SIDD_LEAST_SIGNIFICANT | _SIDD_NEGATIVE_POLARITY);</div><div class="line"><a name="l00322"></a><span class="lineno">  322</span>&#160;        <span class="keywordflow">if</span> (r != 16)    <span class="comment">// some of characters is non-whitespace</span></div><div class="line"><a name="l00323"></a><span class="lineno">  323</span>&#160;            <span class="keywordflow">return</span> p + r;</div><div class="line"><a name="l00324"></a><span class="lineno">  324</span>&#160;    }</div><div class="line"><a name="l00325"></a><span class="lineno">  325</span>&#160;</div><div class="line"><a name="l00326"></a><span class="lineno">  326</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="namespacerapidjson.html#a6efb0f4d2a6f81477a59718d42e9464a">SkipWhitespace</a>(p, end);</div><div class="line"><a name="l00327"></a><span class="lineno">  327</span>&#160;}</div><div class="line"><a name="l00328"></a><span class="lineno">  328</span>&#160;</div><div class="line"><a name="l00329"></a><span class="lineno">  329</span>&#160;<span class="preprocessor">#elif defined(RAPIDJSON_SSE2)</span></div><div class="line"><a name="l00330"></a><span class="lineno">  330</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00331"></a><span class="lineno">  331</span>&#160;<span class="comment">//! Skip whitespace with SSE2 instructions, testing 16 8-byte characters at once.</span></div><div class="line"><a name="l00332"></a><span class="lineno">  332</span>&#160;<span class="comment"></span><span class="keyword">inline</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *SkipWhitespace_SIMD(<span class="keyword">const</span> <span class="keywordtype">char</span>* p) {</div><div class="line"><a name="l00333"></a><span class="lineno">  333</span>&#160;    <span class="comment">// Fast return for single non-whitespace</span></div><div class="line"><a name="l00334"></a><span class="lineno">  334</span>&#160;    <span class="keywordflow">if</span> (*p == <span class="charliteral">&#39; &#39;</span> || *p == <span class="charliteral">&#39;\n&#39;</span> || *p == <span class="charliteral">&#39;\r&#39;</span> || *p == <span class="charliteral">&#39;\t&#39;</span>)</div><div class="line"><a name="l00335"></a><span class="lineno">  335</span>&#160;        ++p;</div><div class="line"><a name="l00336"></a><span class="lineno">  336</span>&#160;    <span class="keywordflow">else</span></div><div class="line"><a name="l00337"></a><span class="lineno">  337</span>&#160;        <span class="keywordflow">return</span> p;</div><div class="line"><a name="l00338"></a><span class="lineno">  338</span>&#160;</div><div class="line"><a name="l00339"></a><span class="lineno">  339</span>&#160;    <span class="comment">// 16-byte align to the next boundary</span></div><div class="line"><a name="l00340"></a><span class="lineno">  340</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">char</span>* nextAligned = <span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span><span class="keywordtype">char</span>*<span class="keyword">&gt;</span>((<span class="keyword">reinterpret_cast&lt;</span><span class="keywordtype">size_t</span><span class="keyword">&gt;</span>(p) + 15) &amp; <span class="keyword">static_cast&lt;</span><span class="keywordtype">size_t</span><span class="keyword">&gt;</span>(~15));</div><div class="line"><a name="l00341"></a><span class="lineno">  341</span>&#160;    <span class="keywordflow">while</span> (p != nextAligned)</div><div class="line"><a name="l00342"></a><span class="lineno">  342</span>&#160;        <span class="keywordflow">if</span> (*p == <span class="charliteral">&#39; &#39;</span> || *p == <span class="charliteral">&#39;\n&#39;</span> || *p == <span class="charliteral">&#39;\r&#39;</span> || *p == <span class="charliteral">&#39;\t&#39;</span>)</div><div class="line"><a name="l00343"></a><span class="lineno">  343</span>&#160;            ++p;</div><div class="line"><a name="l00344"></a><span class="lineno">  344</span>&#160;        <span class="keywordflow">else</span></div><div class="line"><a name="l00345"></a><span class="lineno">  345</span>&#160;            <span class="keywordflow">return</span> p;</div><div class="line"><a name="l00346"></a><span class="lineno">  346</span>&#160;</div><div class="line"><a name="l00347"></a><span class="lineno">  347</span>&#160;    <span class="comment">// The rest of string</span></div><div class="line"><a name="l00348"></a><span class="lineno">  348</span>&#160;<span class="preprocessor">    #define C16(c) { c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c }</span></div><div class="line"><a name="l00349"></a><span class="lineno">  349</span>&#160;    <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> whitespaces[4][16] = { C16(<span class="charliteral">&#39; &#39;</span>), C16(<span class="charliteral">&#39;\n&#39;</span>), C16(<span class="charliteral">&#39;\r&#39;</span>), C16(<span class="charliteral">&#39;\t&#39;</span>) };</div><div class="line"><a name="l00350"></a><span class="lineno">  350</span>&#160;<span class="preprocessor">    #undef C16</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="keyword">const</span> __m128i w0 = _mm_loadu_si128(reinterpret_cast&lt;const __m128i *&gt;(&amp;whitespaces[0][0]));</div><div class="line"><a name="l00353"></a><span class="lineno">  353</span>&#160;    <span class="keyword">const</span> __m128i w1 = _mm_loadu_si128(reinterpret_cast&lt;const __m128i *&gt;(&amp;whitespaces[1][0]));</div><div class="line"><a name="l00354"></a><span class="lineno">  354</span>&#160;    <span class="keyword">const</span> __m128i w2 = _mm_loadu_si128(reinterpret_cast&lt;const __m128i *&gt;(&amp;whitespaces[2][0]));</div><div class="line"><a name="l00355"></a><span class="lineno">  355</span>&#160;    <span class="keyword">const</span> __m128i w3 = _mm_loadu_si128(reinterpret_cast&lt;const __m128i *&gt;(&amp;whitespaces[3][0]));</div><div class="line"><a name="l00356"></a><span class="lineno">  356</span>&#160;</div><div class="line"><a name="l00357"></a><span class="lineno">  357</span>&#160;    <span class="keywordflow">for</span> (;; p += 16) {</div><div class="line"><a name="l00358"></a><span class="lineno">  358</span>&#160;        <span class="keyword">const</span> __m128i s = _mm_load_si128(reinterpret_cast&lt;const __m128i *&gt;(p));</div><div class="line"><a name="l00359"></a><span class="lineno">  359</span>&#160;        __m128i x = _mm_cmpeq_epi8(s, w0);</div><div class="line"><a name="l00360"></a><span class="lineno">  360</span>&#160;        x = _mm_or_si128(x, _mm_cmpeq_epi8(s, w1));</div><div class="line"><a name="l00361"></a><span class="lineno">  361</span>&#160;        x = _mm_or_si128(x, _mm_cmpeq_epi8(s, w2));</div><div class="line"><a name="l00362"></a><span class="lineno">  362</span>&#160;        x = _mm_or_si128(x, _mm_cmpeq_epi8(s, w3));</div><div class="line"><a name="l00363"></a><span class="lineno">  363</span>&#160;        <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> r = <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">short</span><span class="keyword">&gt;</span>(~_mm_movemask_epi8(x));</div><div class="line"><a name="l00364"></a><span class="lineno">  364</span>&#160;        <span class="keywordflow">if</span> (r != 0) {   <span class="comment">// some of characters may be non-whitespace</span></div><div class="line"><a name="l00365"></a><span class="lineno">  365</span>&#160;<span class="preprocessor">#ifdef _MSC_VER         // Find the index of first non-whitespace</span></div><div class="line"><a name="l00366"></a><span class="lineno">  366</span>&#160;            <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> offset;</div><div class="line"><a name="l00367"></a><span class="lineno">  367</span>&#160;            _BitScanForward(&amp;offset, r);</div><div class="line"><a name="l00368"></a><span class="lineno">  368</span>&#160;            <span class="keywordflow">return</span> p + offset;</div><div class="line"><a name="l00369"></a><span class="lineno">  369</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00370"></a><span class="lineno">  370</span>&#160;            <span class="keywordflow">return</span> p + __builtin_ffs(r) - 1;</div><div class="line"><a name="l00371"></a><span class="lineno">  371</span>&#160;<span class="preprocessor">#endif</span></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;    }</div><div class="line"><a name="l00374"></a><span class="lineno">  374</span>&#160;}</div><div class="line"><a name="l00375"></a><span class="lineno">  375</span>&#160;</div><div class="line"><a name="l00376"></a><span class="lineno">  376</span>&#160;<span class="keyword">inline</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *SkipWhitespace_SIMD(<span class="keyword">const</span> <span class="keywordtype">char</span>* p, <span class="keyword">const</span> <span class="keywordtype">char</span>* end) {</div><div class="line"><a name="l00377"></a><span class="lineno">  377</span>&#160;    <span class="comment">// Fast return for single non-whitespace</span></div><div class="line"><a name="l00378"></a><span class="lineno">  378</span>&#160;    <span class="keywordflow">if</span> (p != end &amp;&amp; (*p == <span class="charliteral">&#39; &#39;</span> || *p == <span class="charliteral">&#39;\n&#39;</span> || *p == <span class="charliteral">&#39;\r&#39;</span> || *p == <span class="charliteral">&#39;\t&#39;</span>))</div><div class="line"><a name="l00379"></a><span class="lineno">  379</span>&#160;        ++p;</div><div class="line"><a name="l00380"></a><span class="lineno">  380</span>&#160;    <span class="keywordflow">else</span></div><div class="line"><a name="l00381"></a><span class="lineno">  381</span>&#160;        <span class="keywordflow">return</span> p;</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">// The rest of string</span></div><div class="line"><a name="l00384"></a><span class="lineno">  384</span>&#160;<span class="preprocessor">    #define C16(c) { c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c }</span></div><div class="line"><a name="l00385"></a><span class="lineno">  385</span>&#160;    <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> whitespaces[4][16] = { C16(<span class="charliteral">&#39; &#39;</span>), C16(<span class="charliteral">&#39;\n&#39;</span>), C16(<span class="charliteral">&#39;\r&#39;</span>), C16(<span class="charliteral">&#39;\t&#39;</span>) };</div><div class="line"><a name="l00386"></a><span class="lineno">  386</span>&#160;<span class="preprocessor">    #undef C16</span></div><div class="line"><a name="l00387"></a><span class="lineno">  387</span>&#160;</div><div class="line"><a name="l00388"></a><span class="lineno">  388</span>&#160;    <span class="keyword">const</span> __m128i w0 = _mm_loadu_si128(reinterpret_cast&lt;const __m128i *&gt;(&amp;whitespaces[0][0]));</div><div class="line"><a name="l00389"></a><span class="lineno">  389</span>&#160;    <span class="keyword">const</span> __m128i w1 = _mm_loadu_si128(reinterpret_cast&lt;const __m128i *&gt;(&amp;whitespaces[1][0]));</div><div class="line"><a name="l00390"></a><span class="lineno">  390</span>&#160;    <span class="keyword">const</span> __m128i w2 = _mm_loadu_si128(reinterpret_cast&lt;const __m128i *&gt;(&amp;whitespaces[2][0]));</div><div class="line"><a name="l00391"></a><span class="lineno">  391</span>&#160;    <span class="keyword">const</span> __m128i w3 = _mm_loadu_si128(reinterpret_cast&lt;const __m128i *&gt;(&amp;whitespaces[3][0]));</div><div class="line"><a name="l00392"></a><span class="lineno">  392</span>&#160;</div><div class="line"><a name="l00393"></a><span class="lineno">  393</span>&#160;    <span class="keywordflow">for</span> (; p &lt;= end - 16; p += 16) {</div><div class="line"><a name="l00394"></a><span class="lineno">  394</span>&#160;        <span class="keyword">const</span> __m128i s = _mm_loadu_si128(reinterpret_cast&lt;const __m128i *&gt;(p));</div><div class="line"><a name="l00395"></a><span class="lineno">  395</span>&#160;        __m128i x = _mm_cmpeq_epi8(s, w0);</div><div class="line"><a name="l00396"></a><span class="lineno">  396</span>&#160;        x = _mm_or_si128(x, _mm_cmpeq_epi8(s, w1));</div><div class="line"><a name="l00397"></a><span class="lineno">  397</span>&#160;        x = _mm_or_si128(x, _mm_cmpeq_epi8(s, w2));</div><div class="line"><a name="l00398"></a><span class="lineno">  398</span>&#160;        x = _mm_or_si128(x, _mm_cmpeq_epi8(s, w3));</div><div class="line"><a name="l00399"></a><span class="lineno">  399</span>&#160;        <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> r = <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">short</span><span class="keyword">&gt;</span>(~_mm_movemask_epi8(x));</div><div class="line"><a name="l00400"></a><span class="lineno">  400</span>&#160;        <span class="keywordflow">if</span> (r != 0) {   <span class="comment">// some of characters may be non-whitespace</span></div><div class="line"><a name="l00401"></a><span class="lineno">  401</span>&#160;<span class="preprocessor">#ifdef _MSC_VER         // Find the index of first non-whitespace</span></div><div class="line"><a name="l00402"></a><span class="lineno">  402</span>&#160;            <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> offset;</div><div class="line"><a name="l00403"></a><span class="lineno">  403</span>&#160;            _BitScanForward(&amp;offset, r);</div><div class="line"><a name="l00404"></a><span class="lineno">  404</span>&#160;            <span class="keywordflow">return</span> p + offset;</div><div class="line"><a name="l00405"></a><span class="lineno">  405</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00406"></a><span class="lineno">  406</span>&#160;            <span class="keywordflow">return</span> p + __builtin_ffs(r) - 1;</div><div class="line"><a name="l00407"></a><span class="lineno">  407</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00408"></a><span class="lineno">  408</span>&#160;        }</div><div class="line"><a name="l00409"></a><span class="lineno">  409</span>&#160;    }</div><div class="line"><a name="l00410"></a><span class="lineno">  410</span>&#160;</div><div class="line"><a name="l00411"></a><span class="lineno">  411</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="namespacerapidjson.html#a6efb0f4d2a6f81477a59718d42e9464a">SkipWhitespace</a>(p, end);</div><div class="line"><a name="l00412"></a><span class="lineno">  412</span>&#160;}</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="preprocessor">#elif defined(RAPIDJSON_NEON)</span></div><div class="line"><a name="l00415"></a><span class="lineno">  415</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00416"></a><span class="lineno">  416</span>&#160;<span class="comment">//! Skip whitespace with ARM Neon instructions, testing 16 8-byte characters at once.</span></div><div class="line"><a name="l00417"></a><span class="lineno">  417</span>&#160;<span class="comment"></span><span class="keyword">inline</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *SkipWhitespace_SIMD(<span class="keyword">const</span> <span class="keywordtype">char</span>* p) {</div><div class="line"><a name="l00418"></a><span class="lineno">  418</span>&#160;    <span class="comment">// Fast return for single non-whitespace</span></div><div class="line"><a name="l00419"></a><span class="lineno">  419</span>&#160;    <span class="keywordflow">if</span> (*p == <span class="charliteral">&#39; &#39;</span> || *p == <span class="charliteral">&#39;\n&#39;</span> || *p == <span class="charliteral">&#39;\r&#39;</span> || *p == <span class="charliteral">&#39;\t&#39;</span>)</div><div class="line"><a name="l00420"></a><span class="lineno">  420</span>&#160;        ++p;</div><div class="line"><a name="l00421"></a><span class="lineno">  421</span>&#160;    <span class="keywordflow">else</span></div><div class="line"><a name="l00422"></a><span class="lineno">  422</span>&#160;        <span class="keywordflow">return</span> p;</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="comment">// 16-byte align to the next boundary</span></div><div class="line"><a name="l00425"></a><span class="lineno">  425</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">char</span>* nextAligned = <span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span><span class="keywordtype">char</span>*<span class="keyword">&gt;</span>((<span class="keyword">reinterpret_cast&lt;</span><span class="keywordtype">size_t</span><span class="keyword">&gt;</span>(p) + 15) &amp; <span class="keyword">static_cast&lt;</span><span class="keywordtype">size_t</span><span class="keyword">&gt;</span>(~15));</div><div class="line"><a name="l00426"></a><span class="lineno">  426</span>&#160;    <span class="keywordflow">while</span> (p != nextAligned)</div><div class="line"><a name="l00427"></a><span class="lineno">  427</span>&#160;        <span class="keywordflow">if</span> (*p == <span class="charliteral">&#39; &#39;</span> || *p == <span class="charliteral">&#39;\n&#39;</span> || *p == <span class="charliteral">&#39;\r&#39;</span> || *p == <span class="charliteral">&#39;\t&#39;</span>)</div><div class="line"><a name="l00428"></a><span class="lineno">  428</span>&#160;            ++p;</div><div class="line"><a name="l00429"></a><span class="lineno">  429</span>&#160;        <span class="keywordflow">else</span></div><div class="line"><a name="l00430"></a><span class="lineno">  430</span>&#160;            <span class="keywordflow">return</span> p;</div><div class="line"><a name="l00431"></a><span class="lineno">  431</span>&#160;</div><div class="line"><a name="l00432"></a><span class="lineno">  432</span>&#160;    <span class="keyword">const</span> uint8x16_t w0 = vmovq_n_u8(<span class="charliteral">&#39; &#39;</span>);</div><div class="line"><a name="l00433"></a><span class="lineno">  433</span>&#160;    <span class="keyword">const</span> uint8x16_t w1 = vmovq_n_u8(<span class="charliteral">&#39;\n&#39;</span>);</div><div class="line"><a name="l00434"></a><span class="lineno">  434</span>&#160;    <span class="keyword">const</span> uint8x16_t w2 = vmovq_n_u8(<span class="charliteral">&#39;\r&#39;</span>);</div><div class="line"><a name="l00435"></a><span class="lineno">  435</span>&#160;    <span class="keyword">const</span> uint8x16_t w3 = vmovq_n_u8(<span class="charliteral">&#39;\t&#39;</span>);</div><div class="line"><a name="l00436"></a><span class="lineno">  436</span>&#160;</div><div class="line"><a name="l00437"></a><span class="lineno">  437</span>&#160;    <span class="keywordflow">for</span> (;; p += 16) {</div><div class="line"><a name="l00438"></a><span class="lineno">  438</span>&#160;        <span class="keyword">const</span> uint8x16_t s = vld1q_u8(reinterpret_cast&lt;const uint8_t *&gt;(p));</div><div class="line"><a name="l00439"></a><span class="lineno">  439</span>&#160;        uint8x16_t x = vceqq_u8(s, w0);</div><div class="line"><a name="l00440"></a><span class="lineno">  440</span>&#160;        x = vorrq_u8(x, vceqq_u8(s, w1));</div><div class="line"><a name="l00441"></a><span class="lineno">  441</span>&#160;        x = vorrq_u8(x, vceqq_u8(s, w2));</div><div class="line"><a name="l00442"></a><span class="lineno">  442</span>&#160;        x = vorrq_u8(x, vceqq_u8(s, w3));</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;        x = vmvnq_u8(x);                       <span class="comment">// Negate</span></div><div class="line"><a name="l00445"></a><span class="lineno">  445</span>&#160;        x = vrev64q_u8(x);                     <span class="comment">// Rev in 64</span></div><div class="line"><a name="l00446"></a><span class="lineno">  446</span>&#160;        uint64_t low = vgetq_lane_u64(reinterpret_cast&lt;uint64x2_t&gt;(x), 0);   <span class="comment">// extract</span></div><div class="line"><a name="l00447"></a><span class="lineno">  447</span>&#160;        uint64_t high = vgetq_lane_u64(reinterpret_cast&lt;uint64x2_t&gt;(x), 1);  <span class="comment">// extract</span></div><div class="line"><a name="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">if</span> (low == 0) {</div><div class="line"><a name="l00450"></a><span class="lineno">  450</span>&#160;            <span class="keywordflow">if</span> (high != 0) {</div><div class="line"><a name="l00451"></a><span class="lineno">  451</span>&#160;                <span class="keywordtype">int</span> lz =__builtin_clzll(high);;</div><div class="line"><a name="l00452"></a><span class="lineno">  452</span>&#160;                <span class="keywordflow">return</span> p + 8 + (lz &gt;&gt; 3);</div><div class="line"><a name="l00453"></a><span class="lineno">  453</span>&#160;            }</div><div class="line"><a name="l00454"></a><span class="lineno">  454</span>&#160;        } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00455"></a><span class="lineno">  455</span>&#160;            <span class="keywordtype">int</span> lz = __builtin_clzll(low);;</div><div class="line"><a name="l00456"></a><span class="lineno">  456</span>&#160;            <span class="keywordflow">return</span> p + (lz &gt;&gt; 3);</div><div class="line"><a name="l00457"></a><span class="lineno">  457</span>&#160;        }</div><div class="line"><a name="l00458"></a><span class="lineno">  458</span>&#160;    }</div><div class="line"><a name="l00459"></a><span class="lineno">  459</span>&#160;}</div><div class="line"><a name="l00460"></a><span class="lineno">  460</span>&#160;</div><div class="line"><a name="l00461"></a><span class="lineno">  461</span>&#160;<span class="keyword">inline</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *SkipWhitespace_SIMD(<span class="keyword">const</span> <span class="keywordtype">char</span>* p, <span class="keyword">const</span> <span class="keywordtype">char</span>* end) {</div><div class="line"><a name="l00462"></a><span class="lineno">  462</span>&#160;    <span class="comment">// Fast return for single non-whitespace</span></div><div class="line"><a name="l00463"></a><span class="lineno">  463</span>&#160;    <span class="keywordflow">if</span> (p != end &amp;&amp; (*p == <span class="charliteral">&#39; &#39;</span> || *p == <span class="charliteral">&#39;\n&#39;</span> || *p == <span class="charliteral">&#39;\r&#39;</span> || *p == <span class="charliteral">&#39;\t&#39;</span>))</div><div class="line"><a name="l00464"></a><span class="lineno">  464</span>&#160;        ++p;</div><div class="line"><a name="l00465"></a><span class="lineno">  465</span>&#160;    <span class="keywordflow">else</span></div><div class="line"><a name="l00466"></a><span class="lineno">  466</span>&#160;        <span class="keywordflow">return</span> p;</div><div class="line"><a name="l00467"></a><span class="lineno">  467</span>&#160;</div><div class="line"><a name="l00468"></a><span class="lineno">  468</span>&#160;    <span class="keyword">const</span> uint8x16_t w0 = vmovq_n_u8(<span class="charliteral">&#39; &#39;</span>);</div><div class="line"><a name="l00469"></a><span class="lineno">  469</span>&#160;    <span class="keyword">const</span> uint8x16_t w1 = vmovq_n_u8(<span class="charliteral">&#39;\n&#39;</span>);</div><div class="line"><a name="l00470"></a><span class="lineno">  470</span>&#160;    <span class="keyword">const</span> uint8x16_t w2 = vmovq_n_u8(<span class="charliteral">&#39;\r&#39;</span>);</div><div class="line"><a name="l00471"></a><span class="lineno">  471</span>&#160;    <span class="keyword">const</span> uint8x16_t w3 = vmovq_n_u8(<span class="charliteral">&#39;\t&#39;</span>);</div><div class="line"><a name="l00472"></a><span class="lineno">  472</span>&#160;</div><div class="line"><a name="l00473"></a><span class="lineno">  473</span>&#160;    <span class="keywordflow">for</span> (; p &lt;= end - 16; p += 16) {</div><div class="line"><a name="l00474"></a><span class="lineno">  474</span>&#160;        <span class="keyword">const</span> uint8x16_t s = vld1q_u8(reinterpret_cast&lt;const uint8_t *&gt;(p));</div><div class="line"><a name="l00475"></a><span class="lineno">  475</span>&#160;        uint8x16_t x = vceqq_u8(s, w0);</div><div class="line"><a name="l00476"></a><span class="lineno">  476</span>&#160;        x = vorrq_u8(x, vceqq_u8(s, w1));</div><div class="line"><a name="l00477"></a><span class="lineno">  477</span>&#160;        x = vorrq_u8(x, vceqq_u8(s, w2));</div><div class="line"><a name="l00478"></a><span class="lineno">  478</span>&#160;        x = vorrq_u8(x, vceqq_u8(s, w3));</div><div class="line"><a name="l00479"></a><span class="lineno">  479</span>&#160;</div><div class="line"><a name="l00480"></a><span class="lineno">  480</span>&#160;        x = vmvnq_u8(x);                       <span class="comment">// Negate</span></div><div class="line"><a name="l00481"></a><span class="lineno">  481</span>&#160;        x = vrev64q_u8(x);                     <span class="comment">// Rev in 64</span></div><div class="line"><a name="l00482"></a><span class="lineno">  482</span>&#160;        uint64_t low = vgetq_lane_u64(reinterpret_cast&lt;uint64x2_t&gt;(x), 0);   <span class="comment">// extract</span></div><div class="line"><a name="l00483"></a><span class="lineno">  483</span>&#160;        uint64_t high = vgetq_lane_u64(reinterpret_cast&lt;uint64x2_t&gt;(x), 1);  <span class="comment">// extract</span></div><div class="line"><a name="l00484"></a><span class="lineno">  484</span>&#160;</div><div class="line"><a name="l00485"></a><span class="lineno">  485</span>&#160;        <span class="keywordflow">if</span> (low == 0) {</div><div class="line"><a name="l00486"></a><span class="lineno">  486</span>&#160;            <span class="keywordflow">if</span> (high != 0) {</div><div class="line"><a name="l00487"></a><span class="lineno">  487</span>&#160;                <span class="keywordtype">int</span> lz = __builtin_clzll(high);</div><div class="line"><a name="l00488"></a><span class="lineno">  488</span>&#160;                <span class="keywordflow">return</span> p + 8 + (lz &gt;&gt; 3);</div><div class="line"><a name="l00489"></a><span class="lineno">  489</span>&#160;            }</div><div class="line"><a name="l00490"></a><span class="lineno">  490</span>&#160;        } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00491"></a><span class="lineno">  491</span>&#160;            <span class="keywordtype">int</span> lz = __builtin_clzll(low);</div><div class="line"><a name="l00492"></a><span class="lineno">  492</span>&#160;            <span class="keywordflow">return</span> p + (lz &gt;&gt; 3);</div><div class="line"><a name="l00493"></a><span class="lineno">  493</span>&#160;        }</div><div class="line"><a name="l00494"></a><span class="lineno">  494</span>&#160;    }</div><div class="line"><a name="l00495"></a><span class="lineno">  495</span>&#160;</div><div class="line"><a name="l00496"></a><span class="lineno">  496</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="namespacerapidjson.html#a6efb0f4d2a6f81477a59718d42e9464a">SkipWhitespace</a>(p, end);</div><div class="line"><a name="l00497"></a><span class="lineno">  497</span>&#160;}</div><div class="line"><a name="l00498"></a><span class="lineno">  498</span>&#160;</div><div class="line"><a name="l00499"></a><span class="lineno">  499</span>&#160;<span class="preprocessor">#endif // RAPIDJSON_NEON</span></div><div class="line"><a name="l00500"></a><span class="lineno">  500</span>&#160;</div><div class="line"><a name="l00501"></a><span class="lineno">  501</span>&#160;<span class="preprocessor">#ifdef RAPIDJSON_SIMD</span></div><div class="line"><a name="l00502"></a><span class="lineno">  502</span>&#160;<span class="comment">//! Template function specialization for InsituStringStream</span></div><div class="line"><a name="l00503"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#a3caa6f393c9940e6525d5f1c21ed9ea2">  503</a></span>&#160;<span class="comment"></span><span class="keyword">template</span>&lt;&gt; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="namespacerapidjson.html#a6efb0f4d2a6f81477a59718d42e9464a">SkipWhitespace</a>(<a class="code" href="structrapidjson_1_1_generic_insitu_string_stream.html">InsituStringStream</a>&amp; is) {</div><div class="line"><a name="l00504"></a><span class="lineno">  504</span>&#160;    is.src_ = <span class="keyword">const_cast&lt;</span><span class="keywordtype">char</span>*<span class="keyword">&gt;</span>(SkipWhitespace_SIMD(is.src_));</div><div class="line"><a name="l00505"></a><span class="lineno">  505</span>&#160;}</div><div class="line"><a name="l00506"></a><span class="lineno">  506</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00507"></a><span class="lineno">  507</span>&#160;<span class="comment">//! Template function specialization for StringStream</span></div><div class="line"><a name="l00508"></a><span class="lineno"><a class="line" href="namespacerapidjson.html#a791735c27e073a70d720c2775ddf9568">  508</a></span>&#160;<span class="comment"></span><span class="keyword">template</span>&lt;&gt; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="namespacerapidjson.html#a6efb0f4d2a6f81477a59718d42e9464a">SkipWhitespace</a>(<a class="code" href="structrapidjson_1_1_generic_string_stream.html">StringStream</a>&amp; is) {</div><div class="line"><a name="l00509"></a><span class="lineno">  509</span>&#160;    is.<a class="code" href="structrapidjson_1_1_generic_string_stream.html#a9a38a9d5b1ce782cacd4ec1bdf87fc2d">src_</a> = SkipWhitespace_SIMD(is.<a class="code" href="structrapidjson_1_1_generic_string_stream.html#a9a38a9d5b1ce782cacd4ec1bdf87fc2d">src_</a>);</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;</div><div class="line"><a name="l00512"></a><span class="lineno">  512</span>&#160;<span class="keyword">template</span>&lt;&gt; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="namespacerapidjson.html#a6efb0f4d2a6f81477a59718d42e9464a">SkipWhitespace</a>(<a class="code" href="classrapidjson_1_1_encoded_input_stream.html">EncodedInputStream</a>&lt;<a class="code" href="structrapidjson_1_1_u_t_f8.html">UTF8&lt;&gt;</a>, <a class="code" href="structrapidjson_1_1_memory_stream.html">MemoryStream</a>&gt;&amp; is) {</div><div class="line"><a name="l00513"></a><span class="lineno">  513</span>&#160;    is.is_.src_ = SkipWhitespace_SIMD(is.is_.src_, is.is_.end_);</div><div class="line"><a name="l00514"></a><span class="lineno">  514</span>&#160;}</div><div class="line"><a name="l00515"></a><span class="lineno">  515</span>&#160;<span class="preprocessor">#endif // RAPIDJSON_SIMD</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">  517</span>&#160;<span class="comment">///////////////////////////////////////////////////////////////////////////////</span></div><div class="line"><a name="l00518"></a><span class="lineno">  518</span>&#160;<span class="comment"></span><span class="comment">// GenericReader</span></div><div class="line"><a name="l00519"></a><span class="lineno">  519</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00520"></a><span class="lineno">  520</span>&#160;<span class="comment">//! SAX-style JSON parser. Use \ref Reader for UTF8 encoding and default allocator.</span></div><div class="line"><a name="l00521"></a><span class="lineno">  521</span>&#160;<span class="comment"></span><span class="comment">/*! GenericReader parses JSON text from a stream, and send events synchronously to an</span></div><div class="line"><a name="l00522"></a><span class="lineno">  522</span>&#160;<span class="comment">    object implementing Handler concept.</span></div><div class="line"><a name="l00523"></a><span class="lineno">  523</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00524"></a><span class="lineno">  524</span>&#160;<span class="comment">    It needs to allocate a stack for storing a single decoded string during</span></div><div class="line"><a name="l00525"></a><span class="lineno">  525</span>&#160;<span class="comment">    non-destructive parsing.</span></div><div class="line"><a name="l00526"></a><span class="lineno">  526</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00527"></a><span class="lineno">  527</span>&#160;<span class="comment">    For in-situ parsing, the decoded string is directly written to the source</span></div><div class="line"><a name="l00528"></a><span class="lineno">  528</span>&#160;<span class="comment">    text string, no temporary buffer is required.</span></div><div class="line"><a name="l00529"></a><span class="lineno">  529</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00530"></a><span class="lineno">  530</span>&#160;<span class="comment">    A GenericReader object can be reused for parsing multiple JSON text.</span></div><div class="line"><a name="l00531"></a><span class="lineno">  531</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00532"></a><span class="lineno">  532</span>&#160;<span class="comment">    \tparam SourceEncoding Encoding of the input stream.</span></div><div class="line"><a name="l00533"></a><span class="lineno">  533</span>&#160;<span class="comment">    \tparam TargetEncoding Encoding of the parse output.</span></div><div class="line"><a name="l00534"></a><span class="lineno">  534</span>&#160;<span class="comment">    \tparam StackAllocator Allocator type for stack.</span></div><div class="line"><a name="l00535"></a><span class="lineno">  535</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00536"></a><span class="lineno">  536</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> SourceEncoding, <span class="keyword">typename</span> TargetEncoding, <span class="keyword">typename</span> StackAllocator = CrtAllocator&gt;</div><div class="line"><a name="l00537"></a><span class="lineno">  537</span>&#160;<span class="keyword">class </span><a class="code" href="classrapidjson_1_1_generic_reader.html">GenericReader</a> {</div><div class="line"><a name="l00538"></a><span class="lineno">  538</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00539"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_reader.html#a0781d19e8c6bc044d9cc5f5d3dde287e">  539</a></span>&#160;    <span class="keyword">typedef</span> <span class="keyword">typename</span> SourceEncoding::Ch <a class="code" href="classrapidjson_1_1_generic_reader.html#a0781d19e8c6bc044d9cc5f5d3dde287e">Ch</a>; <span class="comment">//!&lt; SourceEncoding character type</span></div><div class="line"><a name="l00540"></a><span class="lineno">  540</span>&#160;<span class="comment"></span><span class="comment"></span></div><div class="line"><a name="l00541"></a><span class="lineno">  541</span>&#160;<span class="comment">    //! Constructor.</span></div><div class="line"><a name="l00542"></a><span class="lineno">  542</span>&#160;<span class="comment"></span><span class="comment">    /*! \param stackAllocator Optional allocator for allocating stack memory. (Only use for non-destructive parsing)</span></div><div class="line"><a name="l00543"></a><span class="lineno">  543</span>&#160;<span class="comment">        \param stackCapacity stack capacity in bytes for storing a single decoded string.  (Only use for non-destructive parsing)</span></div><div class="line"><a name="l00544"></a><span class="lineno">  544</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l00545"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_reader.html#a56ab1065ea75167aeacb4802425bf57f">  545</a></span>&#160;    <a class="code" href="classrapidjson_1_1_generic_reader.html#a56ab1065ea75167aeacb4802425bf57f">GenericReader</a>(StackAllocator* stackAllocator = 0, <span class="keywordtype">size_t</span> stackCapacity = kDefaultStackCapacity) :</div><div class="line"><a name="l00546"></a><span class="lineno">  546</span>&#160;        stack_(stackAllocator, stackCapacity), parseResult_(), state_(IterativeParsingStartState) {}</div><div class="line"><a name="l00547"></a><span class="lineno">  547</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00548"></a><span class="lineno">  548</span>&#160;<span class="comment">    //! Parse JSON text.</span></div><div class="line"><a name="l00549"></a><span class="lineno">  549</span>&#160;<span class="comment"></span><span class="comment">    /*! \tparam parseFlags Combination of \ref ParseFlag.</span></div><div class="line"><a name="l00550"></a><span class="lineno">  550</span>&#160;<span class="comment">        \tparam InputStream Type of input stream, implementing Stream concept.</span></div><div class="line"><a name="l00551"></a><span class="lineno">  551</span>&#160;<span class="comment">        \tparam Handler Type of handler, implementing Handler concept.</span></div><div class="line"><a name="l00552"></a><span class="lineno">  552</span>&#160;<span class="comment">        \param is Input stream to be parsed.</span></div><div class="line"><a name="l00553"></a><span class="lineno">  553</span>&#160;<span class="comment">        \param handler The handler to receive events.</span></div><div class="line"><a name="l00554"></a><span class="lineno">  554</span>&#160;<span class="comment">        \return Whether the parsing is successful.</span></div><div class="line"><a name="l00555"></a><span class="lineno">  555</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l00556"></a><span class="lineno">  556</span>&#160;    <span class="keyword">template</span> &lt;<span class="keywordtype">unsigned</span> parseFlags, <span class="keyword">typename</span> InputStream, <span class="keyword">typename</span> Handler&gt;</div><div class="line"><a name="l00557"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_reader.html#ac9c540b77de19661f6f45e04b9b0937b">  557</a></span>&#160;    <a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#structrapidjson_1_1_parse_result">ParseResult</a> <a class="code" href="classrapidjson_1_1_generic_reader.html#ac9c540b77de19661f6f45e04b9b0937b">Parse</a>(InputStream&amp; is, <a class="code" href="classrapidjson_1_1_handler.html">Handler</a>&amp; handler) {</div><div class="line"><a name="l00558"></a><span class="lineno">  558</span>&#160;        <span class="keywordflow">if</span> (parseFlags &amp; <a class="code" href="namespacerapidjson.html#a81379eb4e94a0386d71d15fda882ebc9a7923686c8bdb7614699f1fb1bb615bb2">kParseIterativeFlag</a>)</div><div class="line"><a name="l00559"></a><span class="lineno">  559</span>&#160;            <span class="keywordflow">return</span> IterativeParse&lt;parseFlags&gt;(is, handler);</div><div class="line"><a name="l00560"></a><span class="lineno">  560</span>&#160;</div><div class="line"><a name="l00561"></a><span class="lineno">  561</span>&#160;        parseResult_.<a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#a17c9f7f81675283393222658d613000f">Clear</a>();</div><div class="line"><a name="l00562"></a><span class="lineno">  562</span>&#160;</div><div class="line"><a name="l00563"></a><span class="lineno">  563</span>&#160;        ClearStackOnExit scope(*<span class="keyword">this</span>);</div><div class="line"><a name="l00564"></a><span class="lineno">  564</span>&#160;</div><div class="line"><a name="l00565"></a><span class="lineno">  565</span>&#160;        SkipWhitespaceAndComments&lt;parseFlags&gt;(is);</div><div class="line"><a name="l00566"></a><span class="lineno">  566</span>&#160;        RAPIDJSON_PARSE_ERROR_EARLY_RETURN(parseResult_);</div><div class="line"><a name="l00567"></a><span class="lineno">  567</span>&#160;</div><div class="line"><a name="l00568"></a><span class="lineno">  568</span>&#160;        <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(is.Peek() == <span class="charliteral">&#39;\0&#39;</span>)) {</div><div class="line"><a name="l00569"></a><span class="lineno">  569</span>&#160;            <a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#ga7f8c4265b2edda78568ae3338aaf1461">RAPIDJSON_PARSE_ERROR_NORETURN</a>(<a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gga7d3acf640886b1f2552dc8c4cd6dea60a06183076357ebd9eca228666f614c286">kParseErrorDocumentEmpty</a>, is.Tell());</div><div class="line"><a name="l00570"></a><span class="lineno">  570</span>&#160;            RAPIDJSON_PARSE_ERROR_EARLY_RETURN(parseResult_);</div><div class="line"><a name="l00571"></a><span class="lineno">  571</span>&#160;        }</div><div class="line"><a name="l00572"></a><span class="lineno">  572</span>&#160;        <span class="keywordflow">else</span> {</div><div class="line"><a name="l00573"></a><span class="lineno">  573</span>&#160;            ParseValue&lt;parseFlags&gt;(is, handler);</div><div class="line"><a name="l00574"></a><span class="lineno">  574</span>&#160;            RAPIDJSON_PARSE_ERROR_EARLY_RETURN(parseResult_);</div><div class="line"><a name="l00575"></a><span class="lineno">  575</span>&#160;</div><div class="line"><a name="l00576"></a><span class="lineno">  576</span>&#160;            <span class="keywordflow">if</span> (!(parseFlags &amp; <a class="code" href="namespacerapidjson.html#a81379eb4e94a0386d71d15fda882ebc9af84c60868704433b80aa51a62e042bb1">kParseStopWhenDoneFlag</a>)) {</div><div class="line"><a name="l00577"></a><span class="lineno">  577</span>&#160;                SkipWhitespaceAndComments&lt;parseFlags&gt;(is);</div><div class="line"><a name="l00578"></a><span class="lineno">  578</span>&#160;                RAPIDJSON_PARSE_ERROR_EARLY_RETURN(parseResult_);</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="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(is.Peek() != <span class="charliteral">&#39;\0&#39;</span>)) {</div><div class="line"><a name="l00581"></a><span class="lineno">  581</span>&#160;                    <a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#ga7f8c4265b2edda78568ae3338aaf1461">RAPIDJSON_PARSE_ERROR_NORETURN</a>(<a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gga7d3acf640886b1f2552dc8c4cd6dea60a2022599bcd4f64d58885a026f95751d5">kParseErrorDocumentRootNotSingular</a>, is.Tell());</div><div class="line"><a name="l00582"></a><span class="lineno">  582</span>&#160;                    RAPIDJSON_PARSE_ERROR_EARLY_RETURN(parseResult_);</div><div class="line"><a name="l00583"></a><span class="lineno">  583</span>&#160;                }</div><div class="line"><a name="l00584"></a><span class="lineno">  584</span>&#160;            }</div><div class="line"><a name="l00585"></a><span class="lineno">  585</span>&#160;        }</div><div class="line"><a name="l00586"></a><span class="lineno">  586</span>&#160;</div><div class="line"><a name="l00587"></a><span class="lineno">  587</span>&#160;        <span class="keywordflow">return</span> parseResult_;</div><div class="line"><a name="l00588"></a><span class="lineno">  588</span>&#160;    }</div><div class="line"><a name="l00589"></a><span class="lineno">  589</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00590"></a><span class="lineno">  590</span>&#160;<span class="comment">    //! Parse JSON text (with \ref kParseDefaultFlags)</span></div><div class="line"><a name="l00591"></a><span class="lineno">  591</span>&#160;<span class="comment"></span><span class="comment">    /*! \tparam InputStream Type of input stream, implementing Stream concept</span></div><div class="line"><a name="l00592"></a><span class="lineno">  592</span>&#160;<span class="comment">        \tparam Handler Type of handler, implementing Handler concept.</span></div><div class="line"><a name="l00593"></a><span class="lineno">  593</span>&#160;<span class="comment">        \param is Input stream to be parsed.</span></div><div class="line"><a name="l00594"></a><span class="lineno">  594</span>&#160;<span class="comment">        \param handler The handler to receive events.</span></div><div class="line"><a name="l00595"></a><span class="lineno">  595</span>&#160;<span class="comment">        \return Whether the parsing is successful.</span></div><div class="line"><a name="l00596"></a><span class="lineno">  596</span>&#160;<span class="comment">    */</span></div><div class="line"><a name="l00597"></a><span class="lineno">  597</span>&#160;    <span class="keyword">template</span> &lt;<span class="keyword">typename</span> InputStream, <span class="keyword">typename</span> Handler&gt;</div><div class="line"><a name="l00598"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_reader.html#a2bac14d193873d661d79ad000473a908">  598</a></span>&#160;    <a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#structrapidjson_1_1_parse_result">ParseResult</a> <a class="code" href="classrapidjson_1_1_generic_reader.html#a2bac14d193873d661d79ad000473a908">Parse</a>(InputStream&amp; is, <a class="code" href="classrapidjson_1_1_handler.html">Handler</a>&amp; handler) {</div><div class="line"><a name="l00599"></a><span class="lineno">  599</span>&#160;        <span class="keywordflow">return</span> Parse&lt;kParseDefaultFlags&gt;(is, handler);</div><div class="line"><a name="l00600"></a><span class="lineno">  600</span>&#160;    }</div><div class="line"><a name="l00601"></a><span class="lineno">  601</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00602"></a><span class="lineno">  602</span>&#160;<span class="comment">    //! Initialize JSON text token-by-token parsing</span></div><div class="line"><a name="l00603"></a><span class="lineno">  603</span>&#160;<span class="comment"></span><span class="comment">    /*!</span></div><div class="line"><a name="l00604"></a><span class="lineno">  604</span>&#160;<span class="comment">     */</span></div><div class="line"><a name="l00605"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_reader.html#a90403a2c55dadf82fd2bb9d4c66b3280">  605</a></span>&#160;    <span class="keywordtype">void</span> <a class="code" href="classrapidjson_1_1_generic_reader.html#a90403a2c55dadf82fd2bb9d4c66b3280">IterativeParseInit</a>() {</div><div class="line"><a name="l00606"></a><span class="lineno">  606</span>&#160;        parseResult_.Clear();</div><div class="line"><a name="l00607"></a><span class="lineno">  607</span>&#160;        state_ = IterativeParsingStartState;</div><div class="line"><a name="l00608"></a><span class="lineno">  608</span>&#160;    }</div><div class="line"><a name="l00609"></a><span class="lineno">  609</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00610"></a><span class="lineno">  610</span>&#160;<span class="comment">    //! Parse one token from JSON text</span></div><div class="line"><a name="l00611"></a><span class="lineno">  611</span>&#160;<span class="comment"></span><span class="comment">    /*! \tparam InputStream Type of input stream, implementing Stream concept</span></div><div class="line"><a name="l00612"></a><span class="lineno">  612</span>&#160;<span class="comment">        \tparam Handler Type of handler, implementing Handler concept.</span></div><div class="line"><a name="l00613"></a><span class="lineno">  613</span>&#160;<span class="comment">        \param is Input stream to be parsed.</span></div><div class="line"><a name="l00614"></a><span class="lineno">  614</span>&#160;<span class="comment">        \param handler The handler to receive events.</span></div><div class="line"><a name="l00615"></a><span class="lineno">  615</span>&#160;<span class="comment">        \return Whether the parsing is successful.</span></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="keyword">template</span> &lt;<span class="keywordtype">unsigned</span> parseFlags, <span class="keyword">typename</span> InputStream, <span class="keyword">typename</span> Handler&gt;</div><div class="line"><a name="l00618"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_reader.html#abac6611bec17167de50fede5cd5194ca">  618</a></span>&#160;    <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_generic_reader.html#abac6611bec17167de50fede5cd5194ca">IterativeParseNext</a>(InputStream&amp; is, <a class="code" href="classrapidjson_1_1_handler.html">Handler</a>&amp; handler) {</div><div class="line"><a name="l00619"></a><span class="lineno">  619</span>&#160;        <span class="keywordflow">while</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga5dc14176a9e71ace282404b0bcda57a1">RAPIDJSON_LIKELY</a>(is.Peek() != <span class="charliteral">&#39;\0&#39;</span>)) {</div><div class="line"><a name="l00620"></a><span class="lineno">  620</span>&#160;            SkipWhitespaceAndComments&lt;parseFlags&gt;(is);</div><div class="line"><a name="l00621"></a><span class="lineno">  621</span>&#160;</div><div class="line"><a name="l00622"></a><span class="lineno">  622</span>&#160;            Token t = Tokenize(is.Peek());</div><div class="line"><a name="l00623"></a><span class="lineno">  623</span>&#160;            IterativeParsingState n = Predict(state_, t);</div><div class="line"><a name="l00624"></a><span class="lineno">  624</span>&#160;            IterativeParsingState d = Transit&lt;parseFlags&gt;(state_, t, n, is, handler);</div><div class="line"><a name="l00625"></a><span class="lineno">  625</span>&#160;</div><div class="line"><a name="l00626"></a><span class="lineno">  626</span>&#160;            <span class="comment">// If we&#39;ve finished or hit an error...</span></div><div class="line"><a name="l00627"></a><span class="lineno">  627</span>&#160;            <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(IsIterativeParsingCompleteState(d))) {</div><div class="line"><a name="l00628"></a><span class="lineno">  628</span>&#160;                <span class="comment">// Report errors.</span></div><div class="line"><a name="l00629"></a><span class="lineno">  629</span>&#160;                <span class="keywordflow">if</span> (d == IterativeParsingErrorState) {</div><div class="line"><a name="l00630"></a><span class="lineno">  630</span>&#160;                    HandleError(state_, is);</div><div class="line"><a name="l00631"></a><span class="lineno">  631</span>&#160;                    <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00632"></a><span class="lineno">  632</span>&#160;                }</div><div class="line"><a name="l00633"></a><span class="lineno">  633</span>&#160;</div><div class="line"><a name="l00634"></a><span class="lineno">  634</span>&#160;                <span class="comment">// Transition to the finish state.</span></div><div class="line"><a name="l00635"></a><span class="lineno">  635</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>(d == IterativeParsingFinishState);</div><div class="line"><a name="l00636"></a><span class="lineno">  636</span>&#160;                state_ = d;</div><div class="line"><a name="l00637"></a><span class="lineno">  637</span>&#160;</div><div class="line"><a name="l00638"></a><span class="lineno">  638</span>&#160;                <span class="comment">// If StopWhenDone is not set...</span></div><div class="line"><a name="l00639"></a><span class="lineno">  639</span>&#160;                <span class="keywordflow">if</span> (!(parseFlags &amp; <a class="code" href="namespacerapidjson.html#a81379eb4e94a0386d71d15fda882ebc9af84c60868704433b80aa51a62e042bb1">kParseStopWhenDoneFlag</a>)) {</div><div class="line"><a name="l00640"></a><span class="lineno">  640</span>&#160;                    <span class="comment">// ... and extra non-whitespace data is found...</span></div><div class="line"><a name="l00641"></a><span class="lineno">  641</span>&#160;                    SkipWhitespaceAndComments&lt;parseFlags&gt;(is);</div><div class="line"><a name="l00642"></a><span class="lineno">  642</span>&#160;                    <span class="keywordflow">if</span> (is.Peek() != <span class="charliteral">&#39;\0&#39;</span>) {</div><div class="line"><a name="l00643"></a><span class="lineno">  643</span>&#160;                        <span class="comment">// ... this is considered an error.</span></div><div class="line"><a name="l00644"></a><span class="lineno">  644</span>&#160;                        HandleError(state_, is);</div><div class="line"><a name="l00645"></a><span class="lineno">  645</span>&#160;                        <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00646"></a><span class="lineno">  646</span>&#160;                    }</div><div class="line"><a name="l00647"></a><span class="lineno">  647</span>&#160;                }</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">// Success! We are done!</span></div><div class="line"><a name="l00650"></a><span class="lineno">  650</span>&#160;                <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00651"></a><span class="lineno">  651</span>&#160;            }</div><div class="line"><a name="l00652"></a><span class="lineno">  652</span>&#160;</div><div class="line"><a name="l00653"></a><span class="lineno">  653</span>&#160;            <span class="comment">// Transition to the new state.</span></div><div class="line"><a name="l00654"></a><span class="lineno">  654</span>&#160;            state_ = d;</div><div class="line"><a name="l00655"></a><span class="lineno">  655</span>&#160;</div><div class="line"><a name="l00656"></a><span class="lineno">  656</span>&#160;            <span class="comment">// If we parsed anything other than a delimiter, we invoked the handler, so we can return true now.</span></div><div class="line"><a name="l00657"></a><span class="lineno">  657</span>&#160;            <span class="keywordflow">if</span> (!IsIterativeParsingDelimiterState(n))</div><div class="line"><a name="l00658"></a><span class="lineno">  658</span>&#160;                <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00659"></a><span class="lineno">  659</span>&#160;        }</div><div class="line"><a name="l00660"></a><span class="lineno">  660</span>&#160;</div><div class="line"><a name="l00661"></a><span class="lineno">  661</span>&#160;        <span class="comment">// We reached the end of file.</span></div><div class="line"><a name="l00662"></a><span class="lineno">  662</span>&#160;        stack_.Clear();</div><div class="line"><a name="l00663"></a><span class="lineno">  663</span>&#160;</div><div class="line"><a name="l00664"></a><span class="lineno">  664</span>&#160;        <span class="keywordflow">if</span> (state_ != IterativeParsingFinishState) {</div><div class="line"><a name="l00665"></a><span class="lineno">  665</span>&#160;            HandleError(state_, is);</div><div class="line"><a name="l00666"></a><span class="lineno">  666</span>&#160;            <span class="keywordflow">return</span> <span class="keyword">false</span>;</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;</div><div class="line"><a name="l00669"></a><span class="lineno">  669</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00670"></a><span class="lineno">  670</span>&#160;    }</div><div class="line"><a name="l00671"></a><span class="lineno">  671</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00672"></a><span class="lineno">  672</span>&#160;<span class="comment">    //! Check if token-by-token parsing JSON text is complete</span></div><div class="line"><a name="l00673"></a><span class="lineno">  673</span>&#160;<span class="comment"></span><span class="comment">    /*! \return Whether the JSON has been fully decoded.</span></div><div class="line"><a name="l00674"></a><span class="lineno">  674</span>&#160;<span class="comment">     */</span></div><div class="line"><a name="l00675"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_reader.html#a037aee35044b894d1487b42365aadc4b">  675</a></span>&#160;    RAPIDJSON_FORCEINLINE <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_generic_reader.html#a037aee35044b894d1487b42365aadc4b">IterativeParseComplete</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00676"></a><span class="lineno">  676</span>&#160;        <span class="keywordflow">return</span> IsIterativeParsingCompleteState(state_);</div><div class="line"><a name="l00677"></a><span class="lineno">  677</span>&#160;    }</div><div class="line"><a name="l00678"></a><span class="lineno">  678</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00679"></a><span class="lineno">  679</span>&#160;<span class="comment">    //! Whether a parse error has occurred in the last parsing.</span></div><div class="line"><a name="l00680"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_reader.html#ac42370c3497a0e2b6973110f298e3a59">  680</a></span>&#160;<span class="comment"></span>    <span class="keywordtype">bool</span> <a class="code" href="classrapidjson_1_1_generic_reader.html#ac42370c3497a0e2b6973110f298e3a59">HasParseError</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> parseResult_.IsError(); }</div><div class="line"><a name="l00681"></a><span class="lineno">  681</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00682"></a><span class="lineno">  682</span>&#160;<span class="comment">    //! Get the \ref ParseErrorCode of last parsing.</span></div><div class="line"><a name="l00683"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_reader.html#a042c621cf745c5ed3a6f5ff9418dd05e">  683</a></span>&#160;<span class="comment"></span>    <a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#ga7d3acf640886b1f2552dc8c4cd6dea60">ParseErrorCode</a> <a class="code" href="classrapidjson_1_1_generic_reader.html#a042c621cf745c5ed3a6f5ff9418dd05e">GetParseErrorCode</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> parseResult_.Code(); }</div><div class="line"><a name="l00684"></a><span class="lineno">  684</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00685"></a><span class="lineno">  685</span>&#160;<span class="comment">    //! Get the position of last parsing error in input, 0 otherwise.</span></div><div class="line"><a name="l00686"></a><span class="lineno"><a class="line" href="classrapidjson_1_1_generic_reader.html#ab50019e0a715320f83b7610b83dcef8f">  686</a></span>&#160;<span class="comment"></span>    <span class="keywordtype">size_t</span> <a class="code" href="classrapidjson_1_1_generic_reader.html#ab50019e0a715320f83b7610b83dcef8f">GetErrorOffset</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> parseResult_.Offset(); }</div><div class="line"><a name="l00687"></a><span class="lineno">  687</span>&#160;</div><div class="line"><a name="l00688"></a><span class="lineno">  688</span>&#160;<span class="keyword">protected</span>:</div><div class="line"><a name="l00689"></a><span class="lineno">  689</span>&#160;    <span class="keywordtype">void</span> SetParseError(<a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#ga7d3acf640886b1f2552dc8c4cd6dea60">ParseErrorCode</a> code, <span class="keywordtype">size_t</span> offset) { parseResult_.Set(code, offset); }</div><div class="line"><a name="l00690"></a><span class="lineno">  690</span>&#160;</div><div class="line"><a name="l00691"></a><span class="lineno">  691</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00692"></a><span class="lineno">  692</span>&#160;    <span class="comment">// Prohibit copy constructor &amp; assignment operator.</span></div><div class="line"><a name="l00693"></a><span class="lineno">  693</span>&#160;    <a class="code" href="classrapidjson_1_1_generic_reader.html">GenericReader</a>(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_reader.html">GenericReader</a>&amp;);</div><div class="line"><a name="l00694"></a><span class="lineno">  694</span>&#160;    <a class="code" href="classrapidjson_1_1_generic_reader.html">GenericReader</a>&amp; operator=(<span class="keyword">const</span> <a class="code" href="classrapidjson_1_1_generic_reader.html">GenericReader</a>&amp;);</div><div class="line"><a name="l00695"></a><span class="lineno">  695</span>&#160;</div><div class="line"><a name="l00696"></a><span class="lineno">  696</span>&#160;    <span class="keywordtype">void</span> ClearStack() { stack_.Clear(); }</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">// clear stack on any exit from ParseStream, e.g. due to exception</span></div><div class="line"><a name="l00699"></a><span class="lineno">  699</span>&#160;    <span class="keyword">struct </span>ClearStackOnExit {</div><div class="line"><a name="l00700"></a><span class="lineno">  700</span>&#160;        <span class="keyword">explicit</span> ClearStackOnExit(<a class="code" href="classrapidjson_1_1_generic_reader.html">GenericReader</a>&amp; r) : r_(r) {}</div><div class="line"><a name="l00701"></a><span class="lineno">  701</span>&#160;        ~ClearStackOnExit() { r_.ClearStack(); }</div><div class="line"><a name="l00702"></a><span class="lineno">  702</span>&#160;    <span class="keyword">private</span>:</div><div class="line"><a name="l00703"></a><span class="lineno">  703</span>&#160;        <a class="code" href="classrapidjson_1_1_generic_reader.html">GenericReader</a>&amp; r_;</div><div class="line"><a name="l00704"></a><span class="lineno">  704</span>&#160;        ClearStackOnExit(<span class="keyword">const</span> ClearStackOnExit&amp;);</div><div class="line"><a name="l00705"></a><span class="lineno">  705</span>&#160;        ClearStackOnExit&amp; operator=(<span class="keyword">const</span> ClearStackOnExit&amp;);</div><div class="line"><a name="l00706"></a><span class="lineno">  706</span>&#160;    };</div><div class="line"><a name="l00707"></a><span class="lineno">  707</span>&#160;</div><div class="line"><a name="l00708"></a><span class="lineno">  708</span>&#160;    <span class="keyword">template</span>&lt;<span class="keywordtype">unsigned</span> parseFlags, <span class="keyword">typename</span> InputStream&gt;</div><div class="line"><a name="l00709"></a><span class="lineno">  709</span>&#160;    <span class="keywordtype">void</span> SkipWhitespaceAndComments(InputStream&amp; is) {</div><div class="line"><a name="l00710"></a><span class="lineno">  710</span>&#160;        <a class="code" href="namespacerapidjson.html#a6efb0f4d2a6f81477a59718d42e9464a">SkipWhitespace</a>(is);</div><div class="line"><a name="l00711"></a><span class="lineno">  711</span>&#160;</div><div class="line"><a name="l00712"></a><span class="lineno">  712</span>&#160;        <span class="keywordflow">if</span> (parseFlags &amp; <a class="code" href="namespacerapidjson.html#a81379eb4e94a0386d71d15fda882ebc9ab5d719b36aac626135d5d622d0d837c1">kParseCommentsFlag</a>) {</div><div class="line"><a name="l00713"></a><span class="lineno">  713</span>&#160;            <span class="keywordflow">while</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(Consume(is, <span class="charliteral">&#39;/&#39;</span>))) {</div><div class="line"><a name="l00714"></a><span class="lineno">  714</span>&#160;                <span class="keywordflow">if</span> (Consume(is, <span class="charliteral">&#39;*&#39;</span>)) {</div><div class="line"><a name="l00715"></a><span class="lineno">  715</span>&#160;                    <span class="keywordflow">while</span> (<span class="keyword">true</span>) {</div><div class="line"><a name="l00716"></a><span class="lineno">  716</span>&#160;                        <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(is.Peek() == <span class="charliteral">&#39;\0&#39;</span>))</div><div class="line"><a name="l00717"></a><span class="lineno">  717</span>&#160;                            <a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gae3689840fa6e89a241313f33b602f865">RAPIDJSON_PARSE_ERROR</a>(<a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gga7d3acf640886b1f2552dc8c4cd6dea60a7abf1a337294d984a3f4d18b5843fb24">kParseErrorUnspecificSyntaxError</a>, is.Tell());</div><div class="line"><a name="l00718"></a><span class="lineno">  718</span>&#160;                        <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Consume(is, <span class="charliteral">&#39;*&#39;</span>)) {</div><div class="line"><a name="l00719"></a><span class="lineno">  719</span>&#160;                            <span class="keywordflow">if</span> (Consume(is, <span class="charliteral">&#39;/&#39;</span>))</div><div class="line"><a name="l00720"></a><span class="lineno">  720</span>&#160;                                <span class="keywordflow">break</span>;</div><div class="line"><a name="l00721"></a><span class="lineno">  721</span>&#160;                        }</div><div class="line"><a name="l00722"></a><span class="lineno">  722</span>&#160;                        <span class="keywordflow">else</span></div><div class="line"><a name="l00723"></a><span class="lineno">  723</span>&#160;                            is.Take();</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;                }</div><div class="line"><a name="l00726"></a><span class="lineno">  726</span>&#160;                <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga5dc14176a9e71ace282404b0bcda57a1">RAPIDJSON_LIKELY</a>(Consume(is, <span class="charliteral">&#39;/&#39;</span>)))</div><div class="line"><a name="l00727"></a><span class="lineno">  727</span>&#160;                    <span class="keywordflow">while</span> (is.Peek() != <span class="charliteral">&#39;\0&#39;</span> &amp;&amp; is.Take() != <span class="charliteral">&#39;\n&#39;</span>) {}</div><div class="line"><a name="l00728"></a><span class="lineno">  728</span>&#160;                <span class="keywordflow">else</span></div><div class="line"><a name="l00729"></a><span class="lineno">  729</span>&#160;                    <a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gae3689840fa6e89a241313f33b602f865">RAPIDJSON_PARSE_ERROR</a>(<a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gga7d3acf640886b1f2552dc8c4cd6dea60a7abf1a337294d984a3f4d18b5843fb24">kParseErrorUnspecificSyntaxError</a>, is.Tell());</div><div class="line"><a name="l00730"></a><span class="lineno">  730</span>&#160;</div><div class="line"><a name="l00731"></a><span class="lineno">  731</span>&#160;                <a class="code" href="namespacerapidjson.html#a6efb0f4d2a6f81477a59718d42e9464a">SkipWhitespace</a>(is);</div><div class="line"><a name="l00732"></a><span class="lineno">  732</span>&#160;            }</div><div class="line"><a name="l00733"></a><span class="lineno">  733</span>&#160;        }</div><div class="line"><a name="l00734"></a><span class="lineno">  734</span>&#160;    }</div><div class="line"><a name="l00735"></a><span class="lineno">  735</span>&#160;</div><div class="line"><a name="l00736"></a><span class="lineno">  736</span>&#160;    <span class="comment">// Parse object: { string : value, ... }</span></div><div class="line"><a name="l00737"></a><span class="lineno">  737</span>&#160;    <span class="keyword">template</span>&lt;<span class="keywordtype">unsigned</span> parseFlags, <span class="keyword">typename</span> InputStream, <span class="keyword">typename</span> Handler&gt;</div><div class="line"><a name="l00738"></a><span class="lineno">  738</span>&#160;    <span class="keywordtype">void</span> ParseObject(InputStream&amp; is, <a class="code" href="classrapidjson_1_1_handler.html">Handler</a>&amp; handler) {</div><div class="line"><a name="l00739"></a><span class="lineno">  739</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>(is.Peek() == <span class="charliteral">&#39;{&#39;</span>);</div><div class="line"><a name="l00740"></a><span class="lineno">  740</span>&#160;        is.Take();  <span class="comment">// Skip &#39;{&#39;</span></div><div class="line"><a name="l00741"></a><span class="lineno">  741</span>&#160;</div><div class="line"><a name="l00742"></a><span class="lineno">  742</span>&#160;        <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(!handler.StartObject()))</div><div class="line"><a name="l00743"></a><span class="lineno">  743</span>&#160;            <a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gae3689840fa6e89a241313f33b602f865">RAPIDJSON_PARSE_ERROR</a>(<a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gga7d3acf640886b1f2552dc8c4cd6dea60ab250f87c3d8454c579364b5a0f697a50">kParseErrorTermination</a>, is.Tell());</div><div class="line"><a name="l00744"></a><span class="lineno">  744</span>&#160;</div><div class="line"><a name="l00745"></a><span class="lineno">  745</span>&#160;        SkipWhitespaceAndComments&lt;parseFlags&gt;(is);</div><div class="line"><a name="l00746"></a><span class="lineno">  746</span>&#160;        RAPIDJSON_PARSE_ERROR_EARLY_RETURN_VOID;</div><div class="line"><a name="l00747"></a><span class="lineno">  747</span>&#160;</div><div class="line"><a name="l00748"></a><span class="lineno">  748</span>&#160;        <span class="keywordflow">if</span> (Consume(is, <span class="charliteral">&#39;}&#39;</span>)) {</div><div class="line"><a name="l00749"></a><span class="lineno">  749</span>&#160;            <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(!handler.EndObject(0)))  <span class="comment">// empty object</span></div><div class="line"><a name="l00750"></a><span class="lineno">  750</span>&#160;                <a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gae3689840fa6e89a241313f33b602f865">RAPIDJSON_PARSE_ERROR</a>(<a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gga7d3acf640886b1f2552dc8c4cd6dea60ab250f87c3d8454c579364b5a0f697a50">kParseErrorTermination</a>, is.Tell());</div><div class="line"><a name="l00751"></a><span class="lineno">  751</span>&#160;            <span class="keywordflow">return</span>;</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="keywordflow">for</span> (<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> memberCount = 0;;) {</div><div class="line"><a name="l00755"></a><span class="lineno">  755</span>&#160;            <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(is.Peek() != <span class="charliteral">&#39;&quot;&#39;</span>))</div><div class="line"><a name="l00756"></a><span class="lineno">  756</span>&#160;                <a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gae3689840fa6e89a241313f33b602f865">RAPIDJSON_PARSE_ERROR</a>(<a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gga7d3acf640886b1f2552dc8c4cd6dea60ab707b848425668e765def25554735242">kParseErrorObjectMissName</a>, is.Tell());</div><div class="line"><a name="l00757"></a><span class="lineno">  757</span>&#160;</div><div class="line"><a name="l00758"></a><span class="lineno">  758</span>&#160;            ParseString&lt;parseFlags&gt;(is, handler, <span class="keyword">true</span>);</div><div class="line"><a name="l00759"></a><span class="lineno">  759</span>&#160;            RAPIDJSON_PARSE_ERROR_EARLY_RETURN_VOID;</div><div class="line"><a name="l00760"></a><span class="lineno">  760</span>&#160;</div><div class="line"><a name="l00761"></a><span class="lineno">  761</span>&#160;            SkipWhitespaceAndComments&lt;parseFlags&gt;(is);</div><div class="line"><a name="l00762"></a><span class="lineno">  762</span>&#160;            RAPIDJSON_PARSE_ERROR_EARLY_RETURN_VOID;</div><div class="line"><a name="l00763"></a><span class="lineno">  763</span>&#160;</div><div class="line"><a name="l00764"></a><span class="lineno">  764</span>&#160;            <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(!Consume(is, <span class="charliteral">&#39;:&#39;</span>)))</div><div class="line"><a name="l00765"></a><span class="lineno">  765</span>&#160;                <a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gae3689840fa6e89a241313f33b602f865">RAPIDJSON_PARSE_ERROR</a>(<a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gga7d3acf640886b1f2552dc8c4cd6dea60a58e952084a0dfdbc5630f624252aef5c">kParseErrorObjectMissColon</a>, is.Tell());</div><div class="line"><a name="l00766"></a><span class="lineno">  766</span>&#160;</div><div class="line"><a name="l00767"></a><span class="lineno">  767</span>&#160;            SkipWhitespaceAndComments&lt;parseFlags&gt;(is);</div><div class="line"><a name="l00768"></a><span class="lineno">  768</span>&#160;            RAPIDJSON_PARSE_ERROR_EARLY_RETURN_VOID;</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;            ParseValue&lt;parseFlags&gt;(is, handler);</div><div class="line"><a name="l00771"></a><span class="lineno">  771</span>&#160;            RAPIDJSON_PARSE_ERROR_EARLY_RETURN_VOID;</div><div class="line"><a name="l00772"></a><span class="lineno">  772</span>&#160;</div><div class="line"><a name="l00773"></a><span class="lineno">  773</span>&#160;            SkipWhitespaceAndComments&lt;parseFlags&gt;(is);</div><div class="line"><a name="l00774"></a><span class="lineno">  774</span>&#160;            RAPIDJSON_PARSE_ERROR_EARLY_RETURN_VOID;</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;            ++memberCount;</div><div class="line"><a name="l00777"></a><span class="lineno">  777</span>&#160;</div><div class="line"><a name="l00778"></a><span class="lineno">  778</span>&#160;            <span class="keywordflow">switch</span> (is.Peek()) {</div><div class="line"><a name="l00779"></a><span class="lineno">  779</span>&#160;                <span class="keywordflow">case</span> <span class="charliteral">&#39;,&#39;</span>:</div><div class="line"><a name="l00780"></a><span class="lineno">  780</span>&#160;                    is.Take();</div><div class="line"><a name="l00781"></a><span class="lineno">  781</span>&#160;                    SkipWhitespaceAndComments&lt;parseFlags&gt;(is);</div><div class="line"><a name="l00782"></a><span class="lineno">  782</span>&#160;                    RAPIDJSON_PARSE_ERROR_EARLY_RETURN_VOID;</div><div class="line"><a name="l00783"></a><span class="lineno">  783</span>&#160;                    <span class="keywordflow">break</span>;</div><div class="line"><a name="l00784"></a><span class="lineno">  784</span>&#160;                <span class="keywordflow">case</span> <span class="charliteral">&#39;}&#39;</span>:</div><div class="line"><a name="l00785"></a><span class="lineno">  785</span>&#160;                    is.Take();</div><div class="line"><a name="l00786"></a><span class="lineno">  786</span>&#160;                    <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(!handler.EndObject(memberCount)))</div><div class="line"><a name="l00787"></a><span class="lineno">  787</span>&#160;                        <a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gae3689840fa6e89a241313f33b602f865">RAPIDJSON_PARSE_ERROR</a>(<a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gga7d3acf640886b1f2552dc8c4cd6dea60ab250f87c3d8454c579364b5a0f697a50">kParseErrorTermination</a>, is.Tell());</div><div class="line"><a name="l00788"></a><span class="lineno">  788</span>&#160;                    <span class="keywordflow">return</span>;</div><div class="line"><a name="l00789"></a><span class="lineno">  789</span>&#160;                <span class="keywordflow">default</span>:</div><div class="line"><a name="l00790"></a><span class="lineno">  790</span>&#160;                    <a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gae3689840fa6e89a241313f33b602f865">RAPIDJSON_PARSE_ERROR</a>(<a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gga7d3acf640886b1f2552dc8c4cd6dea60a2a81a684f39fc882ec99f07e86343f73">kParseErrorObjectMissCommaOrCurlyBracket</a>, is.Tell()); <span class="keywordflow">break</span>; <span class="comment">// This useless break is only for making warning and coverage happy</span></div><div class="line"><a name="l00791"></a><span class="lineno">  791</span>&#160;            }</div><div class="line"><a name="l00792"></a><span class="lineno">  792</span>&#160;</div><div class="line"><a name="l00793"></a><span class="lineno">  793</span>&#160;            <span class="keywordflow">if</span> (parseFlags &amp; <a class="code" href="namespacerapidjson.html#a81379eb4e94a0386d71d15fda882ebc9af8b8470221dbc6046a40ff31d758ceec">kParseTrailingCommasFlag</a>) {</div><div class="line"><a name="l00794"></a><span class="lineno">  794</span>&#160;                <span class="keywordflow">if</span> (is.Peek() == <span class="charliteral">&#39;}&#39;</span>) {</div><div class="line"><a name="l00795"></a><span class="lineno">  795</span>&#160;                    <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(!handler.EndObject(memberCount)))</div><div class="line"><a name="l00796"></a><span class="lineno">  796</span>&#160;                        <a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gae3689840fa6e89a241313f33b602f865">RAPIDJSON_PARSE_ERROR</a>(<a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gga7d3acf640886b1f2552dc8c4cd6dea60ab250f87c3d8454c579364b5a0f697a50">kParseErrorTermination</a>, is.Tell());</div><div class="line"><a name="l00797"></a><span class="lineno">  797</span>&#160;                    is.Take();</div><div class="line"><a name="l00798"></a><span class="lineno">  798</span>&#160;                    <span class="keywordflow">return</span>;</div><div class="line"><a name="l00799"></a><span class="lineno">  799</span>&#160;                }</div><div class="line"><a name="l00800"></a><span class="lineno">  800</span>&#160;            }</div><div class="line"><a name="l00801"></a><span class="lineno">  801</span>&#160;        }</div><div class="line"><a name="l00802"></a><span class="lineno">  802</span>&#160;    }</div><div class="line"><a name="l00803"></a><span class="lineno">  803</span>&#160;</div><div class="line"><a name="l00804"></a><span class="lineno">  804</span>&#160;    <span class="comment">// Parse array: [ value, ... ]</span></div><div class="line"><a name="l00805"></a><span class="lineno">  805</span>&#160;    <span class="keyword">template</span>&lt;<span class="keywordtype">unsigned</span> parseFlags, <span class="keyword">typename</span> InputStream, <span class="keyword">typename</span> Handler&gt;</div><div class="line"><a name="l00806"></a><span class="lineno">  806</span>&#160;    <span class="keywordtype">void</span> ParseArray(InputStream&amp; is, <a class="code" href="classrapidjson_1_1_handler.html">Handler</a>&amp; handler) {</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>(is.Peek() == <span class="charliteral">&#39;[&#39;</span>);</div><div class="line"><a name="l00808"></a><span class="lineno">  808</span>&#160;        is.Take();  <span class="comment">// Skip &#39;[&#39;</span></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="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(!handler.StartArray()))</div><div class="line"><a name="l00811"></a><span class="lineno">  811</span>&#160;            <a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gae3689840fa6e89a241313f33b602f865">RAPIDJSON_PARSE_ERROR</a>(<a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gga7d3acf640886b1f2552dc8c4cd6dea60ab250f87c3d8454c579364b5a0f697a50">kParseErrorTermination</a>, is.Tell());</div><div class="line"><a name="l00812"></a><span class="lineno">  812</span>&#160;</div><div class="line"><a name="l00813"></a><span class="lineno">  813</span>&#160;        SkipWhitespaceAndComments&lt;parseFlags&gt;(is);</div><div class="line"><a name="l00814"></a><span class="lineno">  814</span>&#160;        RAPIDJSON_PARSE_ERROR_EARLY_RETURN_VOID;</div><div class="line"><a name="l00815"></a><span class="lineno">  815</span>&#160;</div><div class="line"><a name="l00816"></a><span class="lineno">  816</span>&#160;        <span class="keywordflow">if</span> (Consume(is, <span class="charliteral">&#39;]&#39;</span>)) {</div><div class="line"><a name="l00817"></a><span class="lineno">  817</span>&#160;            <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(!handler.EndArray(0))) <span class="comment">// empty array</span></div><div class="line"><a name="l00818"></a><span class="lineno">  818</span>&#160;                <a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gae3689840fa6e89a241313f33b602f865">RAPIDJSON_PARSE_ERROR</a>(<a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gga7d3acf640886b1f2552dc8c4cd6dea60ab250f87c3d8454c579364b5a0f697a50">kParseErrorTermination</a>, is.Tell());</div><div class="line"><a name="l00819"></a><span class="lineno">  819</span>&#160;            <span class="keywordflow">return</span>;</div><div class="line"><a name="l00820"></a><span class="lineno">  820</span>&#160;        }</div><div class="line"><a name="l00821"></a><span class="lineno">  821</span>&#160;</div><div class="line"><a name="l00822"></a><span class="lineno">  822</span>&#160;        <span class="keywordflow">for</span> (<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> elementCount = 0;;) {</div><div class="line"><a name="l00823"></a><span class="lineno">  823</span>&#160;            ParseValue&lt;parseFlags&gt;(is, handler);</div><div class="line"><a name="l00824"></a><span class="lineno">  824</span>&#160;            RAPIDJSON_PARSE_ERROR_EARLY_RETURN_VOID;</div><div class="line"><a name="l00825"></a><span class="lineno">  825</span>&#160;</div><div class="line"><a name="l00826"></a><span class="lineno">  826</span>&#160;            ++elementCount;</div><div class="line"><a name="l00827"></a><span class="lineno">  827</span>&#160;            SkipWhitespaceAndComments&lt;parseFlags&gt;(is);</div><div class="line"><a name="l00828"></a><span class="lineno">  828</span>&#160;            RAPIDJSON_PARSE_ERROR_EARLY_RETURN_VOID;</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;            <span class="keywordflow">if</span> (Consume(is, <span class="charliteral">&#39;,&#39;</span>)) {</div><div class="line"><a name="l00831"></a><span class="lineno">  831</span>&#160;                SkipWhitespaceAndComments&lt;parseFlags&gt;(is);</div><div class="line"><a name="l00832"></a><span class="lineno">  832</span>&#160;                RAPIDJSON_PARSE_ERROR_EARLY_RETURN_VOID;</div><div class="line"><a name="l00833"></a><span class="lineno">  833</span>&#160;            }</div><div class="line"><a name="l00834"></a><span class="lineno">  834</span>&#160;            <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Consume(is, <span class="charliteral">&#39;]&#39;</span>)) {</div><div class="line"><a name="l00835"></a><span class="lineno">  835</span>&#160;                <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(!handler.EndArray(elementCount)))</div><div class="line"><a name="l00836"></a><span class="lineno">  836</span>&#160;                    <a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gae3689840fa6e89a241313f33b602f865">RAPIDJSON_PARSE_ERROR</a>(<a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gga7d3acf640886b1f2552dc8c4cd6dea60ab250f87c3d8454c579364b5a0f697a50">kParseErrorTermination</a>, is.Tell());</div><div class="line"><a name="l00837"></a><span class="lineno">  837</span>&#160;                <span class="keywordflow">return</span>;</div><div class="line"><a name="l00838"></a><span class="lineno">  838</span>&#160;            }</div><div class="line"><a name="l00839"></a><span class="lineno">  839</span>&#160;            <span class="keywordflow">else</span></div><div class="line"><a name="l00840"></a><span class="lineno">  840</span>&#160;                <a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gae3689840fa6e89a241313f33b602f865">RAPIDJSON_PARSE_ERROR</a>(<a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gga7d3acf640886b1f2552dc8c4cd6dea60a1a4ac97731f997e9591b40f98ecd9f93">kParseErrorArrayMissCommaOrSquareBracket</a>, is.Tell());</div><div class="line"><a name="l00841"></a><span class="lineno">  841</span>&#160;</div><div class="line"><a name="l00842"></a><span class="lineno">  842</span>&#160;            <span class="keywordflow">if</span> (parseFlags &amp; <a class="code" href="namespacerapidjson.html#a81379eb4e94a0386d71d15fda882ebc9af8b8470221dbc6046a40ff31d758ceec">kParseTrailingCommasFlag</a>) {</div><div class="line"><a name="l00843"></a><span class="lineno">  843</span>&#160;                <span class="keywordflow">if</span> (is.Peek() == <span class="charliteral">&#39;]&#39;</span>) {</div><div class="line"><a name="l00844"></a><span class="lineno">  844</span>&#160;                    <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(!handler.EndArray(elementCount)))</div><div class="line"><a name="l00845"></a><span class="lineno">  845</span>&#160;                        <a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gae3689840fa6e89a241313f33b602f865">RAPIDJSON_PARSE_ERROR</a>(<a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gga7d3acf640886b1f2552dc8c4cd6dea60ab250f87c3d8454c579364b5a0f697a50">kParseErrorTermination</a>, is.Tell());</div><div class="line"><a name="l00846"></a><span class="lineno">  846</span>&#160;                    is.Take();</div><div class="line"><a name="l00847"></a><span class="lineno">  847</span>&#160;                    <span class="keywordflow">return</span>;</div><div class="line"><a name="l00848"></a><span class="lineno">  848</span>&#160;                }</div><div class="line"><a name="l00849"></a><span class="lineno">  849</span>&#160;            }</div><div class="line"><a name="l00850"></a><span class="lineno">  850</span>&#160;        }</div><div class="line"><a name="l00851"></a><span class="lineno">  851</span>&#160;    }</div><div class="line"><a name="l00852"></a><span class="lineno">  852</span>&#160;</div><div class="line"><a name="l00853"></a><span class="lineno">  853</span>&#160;    <span class="keyword">template</span>&lt;<span class="keywordtype">unsigned</span> parseFlags, <span class="keyword">typename</span> InputStream, <span class="keyword">typename</span> Handler&gt;</div><div class="line"><a name="l00854"></a><span class="lineno">  854</span>&#160;    <span class="keywordtype">void</span> ParseNull(InputStream&amp; is, <a class="code" href="classrapidjson_1_1_handler.html">Handler</a>&amp; handler) {</div><div class="line"><a name="l00855"></a><span class="lineno">  855</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>(is.Peek() == <span class="charliteral">&#39;n&#39;</span>);</div><div class="line"><a name="l00856"></a><span class="lineno">  856</span>&#160;        is.Take();</div><div class="line"><a name="l00857"></a><span class="lineno">  857</span>&#160;</div><div class="line"><a name="l00858"></a><span class="lineno">  858</span>&#160;        <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga5dc14176a9e71ace282404b0bcda57a1">RAPIDJSON_LIKELY</a>(Consume(is, <span class="charliteral">&#39;u&#39;</span>) &amp;&amp; Consume(is, <span class="charliteral">&#39;l&#39;</span>) &amp;&amp; Consume(is, <span class="charliteral">&#39;l&#39;</span>))) {</div><div class="line"><a name="l00859"></a><span class="lineno">  859</span>&#160;            <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(!handler.Null()))</div><div class="line"><a name="l00860"></a><span class="lineno">  860</span>&#160;                <a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gae3689840fa6e89a241313f33b602f865">RAPIDJSON_PARSE_ERROR</a>(<a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gga7d3acf640886b1f2552dc8c4cd6dea60ab250f87c3d8454c579364b5a0f697a50">kParseErrorTermination</a>, is.Tell());</div><div class="line"><a name="l00861"></a><span class="lineno">  861</span>&#160;        }</div><div class="line"><a name="l00862"></a><span class="lineno">  862</span>&#160;        <span class="keywordflow">else</span></div><div class="line"><a name="l00863"></a><span class="lineno">  863</span>&#160;            <a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gae3689840fa6e89a241313f33b602f865">RAPIDJSON_PARSE_ERROR</a>(<a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gga7d3acf640886b1f2552dc8c4cd6dea60ab7fa69bce0c393cf3a2b6065111f2f57">kParseErrorValueInvalid</a>, is.Tell());</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="keyword">template</span>&lt;<span class="keywordtype">unsigned</span> parseFlags, <span class="keyword">typename</span> InputStream, <span class="keyword">typename</span> Handler&gt;</div><div class="line"><a name="l00867"></a><span class="lineno">  867</span>&#160;    <span class="keywordtype">void</span> ParseTrue(InputStream&amp; is, <a class="code" href="classrapidjson_1_1_handler.html">Handler</a>&amp; handler) {</div><div class="line"><a name="l00868"></a><span class="lineno">  868</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>(is.Peek() == <span class="charliteral">&#39;t&#39;</span>);</div><div class="line"><a name="l00869"></a><span class="lineno">  869</span>&#160;        is.Take();</div><div class="line"><a name="l00870"></a><span class="lineno">  870</span>&#160;</div><div class="line"><a name="l00871"></a><span class="lineno">  871</span>&#160;        <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga5dc14176a9e71ace282404b0bcda57a1">RAPIDJSON_LIKELY</a>(Consume(is, <span class="charliteral">&#39;r&#39;</span>) &amp;&amp; Consume(is, <span class="charliteral">&#39;u&#39;</span>) &amp;&amp; Consume(is, <span class="charliteral">&#39;e&#39;</span>))) {</div><div class="line"><a name="l00872"></a><span class="lineno">  872</span>&#160;            <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(!handler.Bool(<span class="keyword">true</span>)))</div><div class="line"><a name="l00873"></a><span class="lineno">  873</span>&#160;                <a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gae3689840fa6e89a241313f33b602f865">RAPIDJSON_PARSE_ERROR</a>(<a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gga7d3acf640886b1f2552dc8c4cd6dea60ab250f87c3d8454c579364b5a0f697a50">kParseErrorTermination</a>, is.Tell());</div><div class="line"><a name="l00874"></a><span class="lineno">  874</span>&#160;        }</div><div class="line"><a name="l00875"></a><span class="lineno">  875</span>&#160;        <span class="keywordflow">else</span></div><div class="line"><a name="l00876"></a><span class="lineno">  876</span>&#160;            <a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gae3689840fa6e89a241313f33b602f865">RAPIDJSON_PARSE_ERROR</a>(<a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gga7d3acf640886b1f2552dc8c4cd6dea60ab7fa69bce0c393cf3a2b6065111f2f57">kParseErrorValueInvalid</a>, is.Tell());</div><div class="line"><a name="l00877"></a><span class="lineno">  877</span>&#160;    }</div><div class="line"><a name="l00878"></a><span class="lineno">  878</span>&#160;</div><div class="line"><a name="l00879"></a><span class="lineno">  879</span>&#160;    <span class="keyword">template</span>&lt;<span class="keywordtype">unsigned</span> parseFlags, <span class="keyword">typename</span> InputStream, <span class="keyword">typename</span> Handler&gt;</div><div class="line"><a name="l00880"></a><span class="lineno">  880</span>&#160;    <span class="keywordtype">void</span> ParseFalse(InputStream&amp; is, <a class="code" href="classrapidjson_1_1_handler.html">Handler</a>&amp; handler) {</div><div class="line"><a name="l00881"></a><span class="lineno">  881</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>(is.Peek() == <span class="charliteral">&#39;f&#39;</span>);</div><div class="line"><a name="l00882"></a><span class="lineno">  882</span>&#160;        is.Take();</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;        <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga5dc14176a9e71ace282404b0bcda57a1">RAPIDJSON_LIKELY</a>(Consume(is, <span class="charliteral">&#39;a&#39;</span>) &amp;&amp; Consume(is, <span class="charliteral">&#39;l&#39;</span>) &amp;&amp; Consume(is, <span class="charliteral">&#39;s&#39;</span>) &amp;&amp; Consume(is, <span class="charliteral">&#39;e&#39;</span>))) {</div><div class="line"><a name="l00885"></a><span class="lineno">  885</span>&#160;            <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(!handler.Bool(<span class="keyword">false</span>)))</div><div class="line"><a name="l00886"></a><span class="lineno">  886</span>&#160;                <a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gae3689840fa6e89a241313f33b602f865">RAPIDJSON_PARSE_ERROR</a>(<a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gga7d3acf640886b1f2552dc8c4cd6dea60ab250f87c3d8454c579364b5a0f697a50">kParseErrorTermination</a>, is.Tell());</div><div class="line"><a name="l00887"></a><span class="lineno">  887</span>&#160;        }</div><div class="line"><a name="l00888"></a><span class="lineno">  888</span>&#160;        <span class="keywordflow">else</span></div><div class="line"><a name="l00889"></a><span class="lineno">  889</span>&#160;            <a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gae3689840fa6e89a241313f33b602f865">RAPIDJSON_PARSE_ERROR</a>(<a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gga7d3acf640886b1f2552dc8c4cd6dea60ab7fa69bce0c393cf3a2b6065111f2f57">kParseErrorValueInvalid</a>, is.Tell());</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="keyword">template</span>&lt;<span class="keyword">typename</span> InputStream&gt;</div><div class="line"><a name="l00893"></a><span class="lineno">  893</span>&#160;    RAPIDJSON_FORCEINLINE <span class="keyword">static</span> <span class="keywordtype">bool</span> Consume(InputStream&amp; is, <span class="keyword">typename</span> InputStream::Ch expect) {</div><div class="line"><a name="l00894"></a><span class="lineno">  894</span>&#160;        <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga5dc14176a9e71ace282404b0bcda57a1">RAPIDJSON_LIKELY</a>(is.Peek() == expect)) {</div><div class="line"><a name="l00895"></a><span class="lineno">  895</span>&#160;            is.Take();</div><div class="line"><a name="l00896"></a><span class="lineno">  896</span>&#160;            <span class="keywordflow">return</span> <span class="keyword">true</span>;</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;        <span class="keywordflow">else</span></div><div class="line"><a name="l00899"></a><span class="lineno">  899</span>&#160;            <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00900"></a><span class="lineno">  900</span>&#160;    }</div><div class="line"><a name="l00901"></a><span class="lineno">  901</span>&#160;</div><div class="line"><a name="l00902"></a><span class="lineno">  902</span>&#160;    <span class="comment">// Helper function to parse four hexadecimal digits in \uXXXX in ParseString().</span></div><div class="line"><a name="l00903"></a><span class="lineno">  903</span>&#160;    <span class="keyword">template</span>&lt;<span class="keyword">typename</span> InputStream&gt;</div><div class="line"><a name="l00904"></a><span class="lineno">  904</span>&#160;    <span class="keywordtype">unsigned</span> ParseHex4(InputStream&amp; is, <span class="keywordtype">size_t</span> escapeOffset) {</div><div class="line"><a name="l00905"></a><span class="lineno">  905</span>&#160;        <span class="keywordtype">unsigned</span> codepoint = 0;</div><div class="line"><a name="l00906"></a><span class="lineno">  906</span>&#160;        <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; 4; i++) {</div><div class="line"><a name="l00907"></a><span class="lineno">  907</span>&#160;            Ch c = is.Peek();</div><div class="line"><a name="l00908"></a><span class="lineno">  908</span>&#160;            codepoint &lt;&lt;= 4;</div><div class="line"><a name="l00909"></a><span class="lineno">  909</span>&#160;            codepoint += <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span><span class="keyword">&gt;</span>(c);</div><div class="line"><a name="l00910"></a><span class="lineno">  910</span>&#160;            <span class="keywordflow">if</span> (c &gt;= <span class="charliteral">&#39;0&#39;</span> &amp;&amp; c &lt;= <span class="charliteral">&#39;9&#39;</span>)</div><div class="line"><a name="l00911"></a><span class="lineno">  911</span>&#160;                codepoint -= <span class="charliteral">&#39;0&#39;</span>;</div><div class="line"><a name="l00912"></a><span class="lineno">  912</span>&#160;            <span class="keywordflow">else</span> <span class="keywordflow">if</span> (c &gt;= <span class="charliteral">&#39;A&#39;</span> &amp;&amp; c &lt;= <span class="charliteral">&#39;F&#39;</span>)</div><div class="line"><a name="l00913"></a><span class="lineno">  913</span>&#160;                codepoint -= <span class="charliteral">&#39;A&#39;</span> - 10;</div><div class="line"><a name="l00914"></a><span class="lineno">  914</span>&#160;            <span class="keywordflow">else</span> <span class="keywordflow">if</span> (c &gt;= <span class="charliteral">&#39;a&#39;</span> &amp;&amp; c &lt;= <span class="charliteral">&#39;f&#39;</span>)</div><div class="line"><a name="l00915"></a><span class="lineno">  915</span>&#160;                codepoint -= <span class="charliteral">&#39;a&#39;</span> - 10;</div><div class="line"><a name="l00916"></a><span class="lineno">  916</span>&#160;            <span class="keywordflow">else</span> {</div><div class="line"><a name="l00917"></a><span class="lineno">  917</span>&#160;                <a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#ga7f8c4265b2edda78568ae3338aaf1461">RAPIDJSON_PARSE_ERROR_NORETURN</a>(<a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gga7d3acf640886b1f2552dc8c4cd6dea60a23c38bf88b8448555c0eb41e1735bd92">kParseErrorStringUnicodeEscapeInvalidHex</a>, escapeOffset);</div><div class="line"><a name="l00918"></a><span class="lineno">  918</span>&#160;                RAPIDJSON_PARSE_ERROR_EARLY_RETURN(0);</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;            is.Take();</div><div class="line"><a name="l00921"></a><span class="lineno">  921</span>&#160;        }</div><div class="line"><a name="l00922"></a><span class="lineno">  922</span>&#160;        <span class="keywordflow">return</span> codepoint;</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;</div><div class="line"><a name="l00925"></a><span class="lineno">  925</span>&#160;    <span class="keyword">template</span> &lt;<span class="keyword">typename</span> CharType&gt;</div><div class="line"><a name="l00926"></a><span class="lineno">  926</span>&#160;    <span class="keyword">class </span>StackStream {</div><div class="line"><a name="l00927"></a><span class="lineno">  927</span>&#160;    <span class="keyword">public</span>:</div><div class="line"><a name="l00928"></a><span class="lineno">  928</span>&#160;        <span class="keyword">typedef</span> CharType Ch;</div><div class="line"><a name="l00929"></a><span class="lineno">  929</span>&#160;</div><div class="line"><a name="l00930"></a><span class="lineno">  930</span>&#160;        StackStream(internal::Stack&lt;StackAllocator&gt;&amp; stack) : stack_(stack), length_(0) {}</div><div class="line"><a name="l00931"></a><span class="lineno">  931</span>&#160;        RAPIDJSON_FORCEINLINE <span class="keywordtype">void</span> Put(Ch c) {</div><div class="line"><a name="l00932"></a><span class="lineno">  932</span>&#160;            *stack_.template Push&lt;Ch&gt;() = c;</div><div class="line"><a name="l00933"></a><span class="lineno">  933</span>&#160;            ++length_;</div><div class="line"><a name="l00934"></a><span class="lineno">  934</span>&#160;        }</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;        RAPIDJSON_FORCEINLINE <span class="keywordtype">void</span>* Push(<a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> count) {</div><div class="line"><a name="l00937"></a><span class="lineno">  937</span>&#160;            length_ += count;</div><div class="line"><a name="l00938"></a><span class="lineno">  938</span>&#160;            <span class="keywordflow">return</span> stack_.template Push&lt;Ch&gt;(count);</div><div class="line"><a name="l00939"></a><span class="lineno">  939</span>&#160;        }</div><div class="line"><a name="l00940"></a><span class="lineno">  940</span>&#160;</div><div class="line"><a name="l00941"></a><span class="lineno">  941</span>&#160;        <span class="keywordtype">size_t</span> Length()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> length_; }</div><div class="line"><a name="l00942"></a><span class="lineno">  942</span>&#160;</div><div class="line"><a name="l00943"></a><span class="lineno">  943</span>&#160;        Ch* Pop() {</div><div class="line"><a name="l00944"></a><span class="lineno">  944</span>&#160;            <span class="keywordflow">return</span> stack_.template Pop&lt;Ch&gt;(length_);</div><div class="line"><a name="l00945"></a><span class="lineno">  945</span>&#160;        }</div><div class="line"><a name="l00946"></a><span class="lineno">  946</span>&#160;</div><div class="line"><a name="l00947"></a><span class="lineno">  947</span>&#160;    <span class="keyword">private</span>:</div><div class="line"><a name="l00948"></a><span class="lineno">  948</span>&#160;        StackStream(<span class="keyword">const</span> StackStream&amp;);</div><div class="line"><a name="l00949"></a><span class="lineno">  949</span>&#160;        StackStream&amp; operator=(<span class="keyword">const</span> StackStream&amp;);</div><div class="line"><a name="l00950"></a><span class="lineno">  950</span>&#160;</div><div class="line"><a name="l00951"></a><span class="lineno">  951</span>&#160;        internal::Stack&lt;StackAllocator&gt;&amp; stack_;</div><div class="line"><a name="l00952"></a><span class="lineno">  952</span>&#160;        <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> length_;</div><div class="line"><a name="l00953"></a><span class="lineno">  953</span>&#160;    };</div><div class="line"><a name="l00954"></a><span class="lineno">  954</span>&#160;</div><div class="line"><a name="l00955"></a><span class="lineno">  955</span>&#160;    <span class="comment">// Parse string and generate String event. Different code paths for kParseInsituFlag.</span></div><div class="line"><a name="l00956"></a><span class="lineno">  956</span>&#160;    <span class="keyword">template</span>&lt;<span class="keywordtype">unsigned</span> parseFlags, <span class="keyword">typename</span> InputStream, <span class="keyword">typename</span> Handler&gt;</div><div class="line"><a name="l00957"></a><span class="lineno">  957</span>&#160;    <span class="keywordtype">void</span> ParseString(InputStream&amp; is, <a class="code" href="classrapidjson_1_1_handler.html">Handler</a>&amp; handler, <span class="keywordtype">bool</span> isKey = <span class="keyword">false</span>) {</div><div class="line"><a name="l00958"></a><span class="lineno">  958</span>&#160;        internal::StreamLocalCopy&lt;InputStream&gt; copy(is);</div><div class="line"><a name="l00959"></a><span class="lineno">  959</span>&#160;        InputStream&amp; s(copy.s);</div><div class="line"><a name="l00960"></a><span class="lineno">  960</span>&#160;</div><div class="line"><a name="l00961"></a><span class="lineno">  961</span>&#160;        <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(s.Peek() == <span class="charliteral">&#39;\&quot;&#39;</span>);</div><div class="line"><a name="l00962"></a><span class="lineno">  962</span>&#160;        s.Take();  <span class="comment">// Skip &#39;\&quot;&#39;</span></div><div class="line"><a name="l00963"></a><span class="lineno">  963</span>&#160;</div><div class="line"><a name="l00964"></a><span class="lineno">  964</span>&#160;        <span class="keywordtype">bool</span> success = <span class="keyword">false</span>;</div><div class="line"><a name="l00965"></a><span class="lineno">  965</span>&#160;        <span class="keywordflow">if</span> (parseFlags &amp; <a class="code" href="namespacerapidjson.html#a81379eb4e94a0386d71d15fda882ebc9a02748971d6ea0c5e22c69b8aa7f344ea">kParseInsituFlag</a>) {</div><div class="line"><a name="l00966"></a><span class="lineno">  966</span>&#160;            <span class="keyword">typename</span> InputStream::Ch *head = s.PutBegin();</div><div class="line"><a name="l00967"></a><span class="lineno">  967</span>&#160;            ParseStringToStream&lt;parseFlags, SourceEncoding, SourceEncoding&gt;(s, s);</div><div class="line"><a name="l00968"></a><span class="lineno">  968</span>&#160;            RAPIDJSON_PARSE_ERROR_EARLY_RETURN_VOID;</div><div class="line"><a name="l00969"></a><span class="lineno">  969</span>&#160;            <span class="keywordtype">size_t</span> length = s.PutEnd(head) - 1;</div><div class="line"><a name="l00970"></a><span class="lineno">  970</span>&#160;            <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(length &lt;= 0xFFFFFFFF);</div><div class="line"><a name="l00971"></a><span class="lineno">  971</span>&#160;            <span class="keyword">const</span> <span class="keyword">typename</span> TargetEncoding::Ch* <span class="keyword">const</span> str = <span class="keyword">reinterpret_cast&lt;</span>typename TargetEncoding::Ch*<span class="keyword">&gt;</span>(head);</div><div class="line"><a name="l00972"></a><span class="lineno">  972</span>&#160;            success = (isKey ? handler.Key(str, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a>(length), <span class="keyword">false</span>) : handler.String(str, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a>(length), <span class="keyword">false</span>));</div><div class="line"><a name="l00973"></a><span class="lineno">  973</span>&#160;        }</div><div class="line"><a name="l00974"></a><span class="lineno">  974</span>&#160;        <span class="keywordflow">else</span> {</div><div class="line"><a name="l00975"></a><span class="lineno">  975</span>&#160;            StackStream&lt;typename TargetEncoding::Ch&gt; stackStream(stack_);</div><div class="line"><a name="l00976"></a><span class="lineno">  976</span>&#160;            ParseStringToStream&lt;parseFlags, SourceEncoding, TargetEncoding&gt;(s, stackStream);</div><div class="line"><a name="l00977"></a><span class="lineno">  977</span>&#160;            RAPIDJSON_PARSE_ERROR_EARLY_RETURN_VOID;</div><div class="line"><a name="l00978"></a><span class="lineno">  978</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>(stackStream.Length()) - 1;</div><div class="line"><a name="l00979"></a><span class="lineno">  979</span>&#160;            <span class="keyword">const</span> <span class="keyword">typename</span> TargetEncoding::Ch* <span class="keyword">const</span> str = stackStream.Pop();</div><div class="line"><a name="l00980"></a><span class="lineno">  980</span>&#160;            success = (isKey ? handler.Key(str, length, <span class="keyword">true</span>) : handler.String(str, length, <span class="keyword">true</span>));</div><div class="line"><a name="l00981"></a><span class="lineno">  981</span>&#160;        }</div><div class="line"><a name="l00982"></a><span class="lineno">  982</span>&#160;        <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(!success))</div><div class="line"><a name="l00983"></a><span class="lineno">  983</span>&#160;            <a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gae3689840fa6e89a241313f33b602f865">RAPIDJSON_PARSE_ERROR</a>(<a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gga7d3acf640886b1f2552dc8c4cd6dea60ab250f87c3d8454c579364b5a0f697a50">kParseErrorTermination</a>, s.Tell());</div><div class="line"><a name="l00984"></a><span class="lineno">  984</span>&#160;    }</div><div class="line"><a name="l00985"></a><span class="lineno">  985</span>&#160;</div><div class="line"><a name="l00986"></a><span class="lineno">  986</span>&#160;    <span class="comment">// Parse string to an output is</span></div><div class="line"><a name="l00987"></a><span class="lineno">  987</span>&#160;    <span class="comment">// This function handles the prefix/suffix double quotes, escaping, and optional encoding validation.</span></div><div class="line"><a name="l00988"></a><span class="lineno">  988</span>&#160;    <span class="keyword">template</span>&lt;<span class="keywordtype">unsigned</span> parseFlags, <span class="keyword">typename</span> SEncoding, <span class="keyword">typename</span> TEncoding, <span class="keyword">typename</span> InputStream, <span class="keyword">typename</span> OutputStream&gt;</div><div class="line"><a name="l00989"></a><span class="lineno">  989</span>&#160;    RAPIDJSON_FORCEINLINE <span class="keywordtype">void</span> ParseStringToStream(InputStream&amp; is, OutputStream&amp; os) {<span class="comment"></span></div><div class="line"><a name="l00990"></a><span class="lineno">  990</span>&#160;<span class="comment">//!@cond RAPIDJSON_HIDDEN_FROM_DOXYGEN</span></div><div class="line"><a name="l00991"></a><span class="lineno">  991</span>&#160;<span class="comment"></span><span class="preprocessor">#define Z16 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</span></div><div class="line"><a name="l00992"></a><span class="lineno">  992</span>&#160;        <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> escape[256] = {</div><div class="line"><a name="l00993"></a><span class="lineno">  993</span>&#160;            Z16, Z16, 0, 0,<span class="charliteral">&#39;\&quot;&#39;</span>, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,<span class="charliteral">&#39;/&#39;</span>,</div><div class="line"><a name="l00994"></a><span class="lineno">  994</span>&#160;            Z16, Z16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,<span class="charliteral">&#39;\\&#39;</span>, 0, 0, 0,</div><div class="line"><a name="l00995"></a><span class="lineno">  995</span>&#160;            0, 0,<span class="charliteral">&#39;\b&#39;</span>, 0, 0, 0,<span class="charliteral">&#39;\f&#39;</span>, 0, 0, 0, 0, 0, 0, 0,<span class="charliteral">&#39;\n&#39;</span>, 0,</div><div class="line"><a name="l00996"></a><span class="lineno">  996</span>&#160;            0, 0,<span class="charliteral">&#39;\r&#39;</span>, 0,<span class="charliteral">&#39;\t&#39;</span>, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,</div><div class="line"><a name="l00997"></a><span class="lineno">  997</span>&#160;            Z16, Z16, Z16, Z16, Z16, Z16, Z16, Z16</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;<span class="preprocessor">#undef Z16</span></div><div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>&#160;<span class="comment">//!@endcond</span></div><div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>&#160;        <span class="keywordflow">for</span> (;;) {</div><div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>&#160;            <span class="comment">// Scan and copy string before &quot;\\\&quot;&quot; or &lt; 0x20. This is an optional optimzation.</span></div><div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>&#160;            <span class="keywordflow">if</span> (!(parseFlags &amp; <a class="code" href="namespacerapidjson.html#a81379eb4e94a0386d71d15fda882ebc9a3df81f75479da8e052393f92cbec394b">kParseValidateEncodingFlag</a>))</div><div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>&#160;                ScanCopyUnescapedString(is, os);</div><div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>&#160;</div><div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>&#160;            Ch c = is.Peek();</div><div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>&#160;            <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(c == <span class="charliteral">&#39;\\&#39;</span>)) {    <span class="comment">// Escape</span></div><div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>&#160;                <span class="keywordtype">size_t</span> escapeOffset = is.Tell();    <span class="comment">// For invalid escaping, report the initial &#39;\\&#39; as error offset</span></div><div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>&#160;                is.Take();</div><div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>&#160;                Ch e = is.Peek();</div><div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>&#160;                <span class="keywordflow">if</span> ((<span class="keyword">sizeof</span>(Ch) == 1 || <span class="keywordtype">unsigned</span>(e) &lt; 256) &amp;&amp; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga5dc14176a9e71ace282404b0bcda57a1">RAPIDJSON_LIKELY</a>(escape[static_cast&lt;unsigned char&gt;(e)])) {</div><div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>&#160;                    is.Take();</div><div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>&#160;                    os.Put(static_cast&lt;typename TEncoding::Ch&gt;(escape[static_cast&lt;unsigned char&gt;(e)]));</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="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga5dc14176a9e71ace282404b0bcda57a1">RAPIDJSON_LIKELY</a>(e == <span class="charliteral">&#39;u&#39;</span>)) {    <span class="comment">// Unicode</span></div><div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>&#160;                    is.Take();</div><div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>&#160;                    <span class="keywordtype">unsigned</span> codepoint = ParseHex4(is, escapeOffset);</div><div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>&#160;                    RAPIDJSON_PARSE_ERROR_EARLY_RETURN_VOID;</div><div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>&#160;                    <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(codepoint &gt;= 0xD800 &amp;&amp; codepoint &lt;= 0xDBFF)) {</div><div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>&#160;                        <span class="comment">// Handle UTF-16 surrogate pair</span></div><div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>&#160;                        <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(!Consume(is, <span class="charliteral">&#39;\\&#39;</span>) || !Consume(is, <span class="charliteral">&#39;u&#39;</span>)))</div><div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>&#160;                            <a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gae3689840fa6e89a241313f33b602f865">RAPIDJSON_PARSE_ERROR</a>(<a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gga7d3acf640886b1f2552dc8c4cd6dea60a636209a2e516fbdb4db5ad0a83a6b386">kParseErrorStringUnicodeSurrogateInvalid</a>, escapeOffset);</div><div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>&#160;                        <span class="keywordtype">unsigned</span> codepoint2 = ParseHex4(is, escapeOffset);</div><div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>&#160;                        RAPIDJSON_PARSE_ERROR_EARLY_RETURN_VOID;</div><div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>&#160;                        <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(codepoint2 &lt; 0xDC00 || codepoint2 &gt; 0xDFFF))</div><div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>&#160;                            <a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gae3689840fa6e89a241313f33b602f865">RAPIDJSON_PARSE_ERROR</a>(<a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gga7d3acf640886b1f2552dc8c4cd6dea60a636209a2e516fbdb4db5ad0a83a6b386">kParseErrorStringUnicodeSurrogateInvalid</a>, escapeOffset);</div><div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>&#160;                        codepoint = (((codepoint - 0xD800) &lt;&lt; 10) | (codepoint2 - 0xDC00)) + 0x10000;</div><div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>&#160;                    }</div><div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>&#160;                    TEncoding::Encode(os, codepoint);</div><div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>&#160;                }</div><div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>&#160;                <span class="keywordflow">else</span></div><div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>&#160;                    <a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gae3689840fa6e89a241313f33b602f865">RAPIDJSON_PARSE_ERROR</a>(<a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gga7d3acf640886b1f2552dc8c4cd6dea60a8dd0af5e6103a6503c61c38cb2b0bab9">kParseErrorStringEscapeInvalid</a>, escapeOffset);</div><div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>&#160;            }</div><div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>&#160;            <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(c == <span class="charliteral">&#39;&quot;&#39;</span>)) {    <span class="comment">// Closing double quote</span></div><div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>&#160;                is.Take();</div><div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>&#160;                os.Put(<span class="charliteral">&#39;\0&#39;</span>);   <span class="comment">// null-terminate the string</span></div><div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>&#160;                <span class="keywordflow">return</span>;</div><div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>&#160;            }</div><div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>&#160;            <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(static_cast&lt;unsigned&gt;(c) &lt; 0x20)) { <span class="comment">// RFC 4627: unescaped = %x20-21 / %x23-5B / %x5D-10FFFF</span></div><div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>&#160;                <span class="keywordflow">if</span> (c == <span class="charliteral">&#39;\0&#39;</span>)</div><div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>&#160;                    <a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gae3689840fa6e89a241313f33b602f865">RAPIDJSON_PARSE_ERROR</a>(<a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gga7d3acf640886b1f2552dc8c4cd6dea60af7daa91caa53abb881ea231a874a4f40">kParseErrorStringMissQuotationMark</a>, is.Tell());</div><div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>&#160;                <span class="keywordflow">else</span></div><div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>&#160;                    <a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gae3689840fa6e89a241313f33b602f865">RAPIDJSON_PARSE_ERROR</a>(<a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gga7d3acf640886b1f2552dc8c4cd6dea60a62ce0f5c74e4ab34ac325d2adda8fa8f">kParseErrorStringInvalidEncoding</a>, is.Tell());</div><div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>&#160;            }</div><div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>&#160;            <span class="keywordflow">else</span> {</div><div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>&#160;                <span class="keywordtype">size_t</span> offset = is.Tell();</div><div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>&#160;                <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>((parseFlags &amp; kParseValidateEncodingFlag ?</div><div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>&#160;                    !<a class="code" href="structrapidjson_1_1_transcoder.html">Transcoder&lt;SEncoding, TEncoding&gt;::Validate</a>(is, os) :</div><div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>&#160;                    !<a class="code" href="structrapidjson_1_1_transcoder.html">Transcoder&lt;SEncoding, TEncoding&gt;::Transcode</a>(is, os))))</div><div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>&#160;                    <a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gae3689840fa6e89a241313f33b602f865">RAPIDJSON_PARSE_ERROR</a>(<a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gga7d3acf640886b1f2552dc8c4cd6dea60a62ce0f5c74e4ab34ac325d2adda8fa8f">kParseErrorStringInvalidEncoding</a>, offset);</div><div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>&#160;            }</div><div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>&#160;        }</div><div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>&#160;    }</div><div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>&#160;</div><div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>&#160;    <span class="keyword">template</span>&lt;<span class="keyword">typename</span> InputStream, <span class="keyword">typename</span> OutputStream&gt;</div><div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>&#160;    <span class="keyword">static</span> RAPIDJSON_FORCEINLINE <span class="keywordtype">void</span> ScanCopyUnescapedString(InputStream&amp;, OutputStream&amp;) {</div><div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>&#160;            <span class="comment">// Do nothing for generic version</span></div><div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>&#160;    }</div><div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>&#160;</div><div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>&#160;<span class="preprocessor">#if defined(RAPIDJSON_SSE2) || defined(RAPIDJSON_SSE42)</span></div><div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>&#160;    <span class="comment">// StringStream -&gt; StackStream&lt;char&gt;</span></div><div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>&#160;    <span class="keyword">static</span> RAPIDJSON_FORCEINLINE <span class="keywordtype">void</span> ScanCopyUnescapedString(<a class="code" href="structrapidjson_1_1_generic_string_stream.html">StringStream</a>&amp; is, StackStream&lt;char&gt;&amp; os) {</div><div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>&#160;        <span class="keyword">const</span> <span class="keywordtype">char</span>* p = is.<a class="code" href="structrapidjson_1_1_generic_string_stream.html#a9a38a9d5b1ce782cacd4ec1bdf87fc2d">src_</a>;</div><div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>&#160;</div><div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>&#160;        <span class="comment">// Scan one by one until alignment (unaligned load may cross page boundary and cause crash)</span></div><div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>&#160;        <span class="keyword">const</span> <span class="keywordtype">char</span>* nextAligned = <span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span><span class="keywordtype">char</span>*<span class="keyword">&gt;</span>((<span class="keyword">reinterpret_cast&lt;</span><span class="keywordtype">size_t</span><span class="keyword">&gt;</span>(p) + 15) &amp; <span class="keyword">static_cast&lt;</span><span class="keywordtype">size_t</span><span class="keyword">&gt;</span>(~15));</div><div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>&#160;        <span class="keywordflow">while</span> (p != nextAligned)</div><div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>&#160;            <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(*p == <span class="charliteral">&#39;\&quot;&#39;</span>) || <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(*p == <span class="charliteral">&#39;\\&#39;</span>) || <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(static_cast&lt;unsigned&gt;(*p) &lt; 0x20)) {</div><div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>&#160;                is.<a class="code" href="structrapidjson_1_1_generic_string_stream.html#a9a38a9d5b1ce782cacd4ec1bdf87fc2d">src_</a> = p;</div><div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>&#160;                <span class="keywordflow">return</span>;</div><div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>&#160;            }</div><div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>&#160;            <span class="keywordflow">else</span></div><div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>&#160;                os.Put(*p++);</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="comment">// The rest of string using SIMD</span></div><div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>&#160;        <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> dquote[16] = { <span class="charliteral">&#39;\&quot;&#39;</span>, <span class="charliteral">&#39;\&quot;&#39;</span>, <span class="charliteral">&#39;\&quot;&#39;</span>, <span class="charliteral">&#39;\&quot;&#39;</span>, <span class="charliteral">&#39;\&quot;&#39;</span>, <span class="charliteral">&#39;\&quot;&#39;</span>, <span class="charliteral">&#39;\&quot;&#39;</span>, <span class="charliteral">&#39;\&quot;&#39;</span>, <span class="charliteral">&#39;\&quot;&#39;</span>, <span class="charliteral">&#39;\&quot;&#39;</span>, <span class="charliteral">&#39;\&quot;&#39;</span>, <span class="charliteral">&#39;\&quot;&#39;</span>, <span class="charliteral">&#39;\&quot;&#39;</span>, <span class="charliteral">&#39;\&quot;&#39;</span>, <span class="charliteral">&#39;\&quot;&#39;</span>, <span class="charliteral">&#39;\&quot;&#39;</span> };</div><div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>&#160;        <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> bslash[16] = { <span class="charliteral">&#39;\\&#39;</span>, <span class="charliteral">&#39;\\&#39;</span>, <span class="charliteral">&#39;\\&#39;</span>, <span class="charliteral">&#39;\\&#39;</span>, <span class="charliteral">&#39;\\&#39;</span>, <span class="charliteral">&#39;\\&#39;</span>, <span class="charliteral">&#39;\\&#39;</span>, <span class="charliteral">&#39;\\&#39;</span>, <span class="charliteral">&#39;\\&#39;</span>, <span class="charliteral">&#39;\\&#39;</span>, <span class="charliteral">&#39;\\&#39;</span>, <span class="charliteral">&#39;\\&#39;</span>, <span class="charliteral">&#39;\\&#39;</span>, <span class="charliteral">&#39;\\&#39;</span>, <span class="charliteral">&#39;\\&#39;</span>, <span class="charliteral">&#39;\\&#39;</span> };</div><div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>&#160;        <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> space[16]  = { 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F };</div><div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>&#160;        <span class="keyword">const</span> __m128i dq = _mm_loadu_si128(reinterpret_cast&lt;const __m128i *&gt;(&amp;dquote[0]));</div><div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>&#160;        <span class="keyword">const</span> __m128i bs = _mm_loadu_si128(reinterpret_cast&lt;const __m128i *&gt;(&amp;bslash[0]));</div><div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>&#160;        <span class="keyword">const</span> __m128i sp = _mm_loadu_si128(reinterpret_cast&lt;const __m128i *&gt;(&amp;space[0]));</div><div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>&#160;</div><div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>&#160;        <span class="keywordflow">for</span> (;; p += 16) {</div><div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>&#160;            <span class="keyword">const</span> __m128i s = _mm_load_si128(reinterpret_cast&lt;const __m128i *&gt;(p));</div><div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>&#160;            <span class="keyword">const</span> __m128i t1 = _mm_cmpeq_epi8(s, dq);</div><div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>&#160;            <span class="keyword">const</span> __m128i t2 = _mm_cmpeq_epi8(s, bs);</div><div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>&#160;            <span class="keyword">const</span> __m128i t3 = _mm_cmpeq_epi8(_mm_max_epu8(s, sp), sp); <span class="comment">// s &lt; 0x20 &lt;=&gt; max(s, 0x1F) == 0x1F</span></div><div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>&#160;            <span class="keyword">const</span> __m128i x = _mm_or_si128(_mm_or_si128(t1, t2), t3);</div><div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>&#160;            <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> r = <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">short</span><span class="keyword">&gt;</span>(_mm_movemask_epi8(x));</div><div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>&#160;            <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(r != 0)) {   <span class="comment">// some of characters is escaped</span></div><div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>&#160;                <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> length;</div><div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>&#160;<span class="preprocessor">    #ifdef _MSC_VER         // Find the index of first escaped</span></div><div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>&#160;                <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> offset;</div><div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>&#160;                _BitScanForward(&amp;offset, r);</div><div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>&#160;                length = offset;</div><div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>&#160;<span class="preprocessor">    #else</span></div><div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>&#160;                length = <span class="keyword">static_cast&lt;</span><a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a><span class="keyword">&gt;</span>(__builtin_ffs(r) - 1);</div><div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>&#160;<span class="preprocessor">    #endif</span></div><div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>&#160;                <span class="keywordflow">if</span> (length != 0) {</div><div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>&#160;                    <span class="keywordtype">char</span>* q = <span class="keyword">reinterpret_cast&lt;</span><span class="keywordtype">char</span>*<span class="keyword">&gt;</span>(os.Push(length));</div><div class="line"><a name="l01102"></a><span class="lineno"> 1102</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="l01103"></a><span class="lineno"> 1103</span>&#160;                        q[i] = p[i];</div><div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>&#160;</div><div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>&#160;                    p += length;</div><div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>&#160;                }</div><div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>&#160;                <span class="keywordflow">break</span>;</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;            _mm_storeu_si128(reinterpret_cast&lt;__m128i *&gt;(os.Push(16)), s);</div><div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>&#160;        }</div><div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>&#160;</div><div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>&#160;        is.<a class="code" href="structrapidjson_1_1_generic_string_stream.html#a9a38a9d5b1ce782cacd4ec1bdf87fc2d">src_</a> = p;</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="comment">// InsituStringStream -&gt; InsituStringStream</span></div><div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>&#160;    <span class="keyword">static</span> RAPIDJSON_FORCEINLINE <span class="keywordtype">void</span> ScanCopyUnescapedString(<a class="code" href="structrapidjson_1_1_generic_insitu_string_stream.html">InsituStringStream</a>&amp; is, <a class="code" href="structrapidjson_1_1_generic_insitu_string_stream.html">InsituStringStream</a>&amp; os) {</div><div class="line"><a name="l01117"></a><span class="lineno"> 1117</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>(&amp;is == &amp;os);</div><div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>&#160;        (void)os;</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="keywordflow">if</span> (is.src_ == is.dst_) {</div><div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>&#160;            SkipUnescapedString(is);</div><div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>&#160;            <span class="keywordflow">return</span>;</div><div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>&#160;        }</div><div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>&#160;</div><div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>&#160;        <span class="keywordtype">char</span>* p = is.src_;</div><div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>&#160;        <span class="keywordtype">char</span> *q = is.dst_;</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="comment">// Scan one by one until alignment (unaligned load may cross page boundary and cause crash)</span></div><div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>&#160;        <span class="keyword">const</span> <span class="keywordtype">char</span>* nextAligned = <span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span><span class="keywordtype">char</span>*<span class="keyword">&gt;</span>((<span class="keyword">reinterpret_cast&lt;</span><span class="keywordtype">size_t</span><span class="keyword">&gt;</span>(p) + 15) &amp; <span class="keyword">static_cast&lt;</span><span class="keywordtype">size_t</span><span class="keyword">&gt;</span>(~15));</div><div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>&#160;        <span class="keywordflow">while</span> (p != nextAligned)</div><div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>&#160;            <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(*p == <span class="charliteral">&#39;\&quot;&#39;</span>) || <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(*p == <span class="charliteral">&#39;\\&#39;</span>) || <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(static_cast&lt;unsigned&gt;(*p) &lt; 0x20)) {</div><div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>&#160;                is.src_ = p;</div><div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>&#160;                is.dst_ = q;</div><div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>&#160;                <span class="keywordflow">return</span>;</div><div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>&#160;            }</div><div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>&#160;            <span class="keywordflow">else</span></div><div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>&#160;                *q++ = *p++;</div><div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>&#160;</div><div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>&#160;        <span class="comment">// The rest of string using SIMD</span></div><div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>&#160;        <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> dquote[16] = { <span class="charliteral">&#39;\&quot;&#39;</span>, <span class="charliteral">&#39;\&quot;&#39;</span>, <span class="charliteral">&#39;\&quot;&#39;</span>, <span class="charliteral">&#39;\&quot;&#39;</span>, <span class="charliteral">&#39;\&quot;&#39;</span>, <span class="charliteral">&#39;\&quot;&#39;</span>, <span class="charliteral">&#39;\&quot;&#39;</span>, <span class="charliteral">&#39;\&quot;&#39;</span>, <span class="charliteral">&#39;\&quot;&#39;</span>, <span class="charliteral">&#39;\&quot;&#39;</span>, <span class="charliteral">&#39;\&quot;&#39;</span>, <span class="charliteral">&#39;\&quot;&#39;</span>, <span class="charliteral">&#39;\&quot;&#39;</span>, <span class="charliteral">&#39;\&quot;&#39;</span>, <span class="charliteral">&#39;\&quot;&#39;</span>, <span class="charliteral">&#39;\&quot;&#39;</span> };</div><div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>&#160;        <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> bslash[16] = { <span class="charliteral">&#39;\\&#39;</span>, <span class="charliteral">&#39;\\&#39;</span>, <span class="charliteral">&#39;\\&#39;</span>, <span class="charliteral">&#39;\\&#39;</span>, <span class="charliteral">&#39;\\&#39;</span>, <span class="charliteral">&#39;\\&#39;</span>, <span class="charliteral">&#39;\\&#39;</span>, <span class="charliteral">&#39;\\&#39;</span>, <span class="charliteral">&#39;\\&#39;</span>, <span class="charliteral">&#39;\\&#39;</span>, <span class="charliteral">&#39;\\&#39;</span>, <span class="charliteral">&#39;\\&#39;</span>, <span class="charliteral">&#39;\\&#39;</span>, <span class="charliteral">&#39;\\&#39;</span>, <span class="charliteral">&#39;\\&#39;</span>, <span class="charliteral">&#39;\\&#39;</span> };</div><div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>&#160;        <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> space[16] = { 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F };</div><div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>&#160;        <span class="keyword">const</span> __m128i dq = _mm_loadu_si128(reinterpret_cast&lt;const __m128i *&gt;(&amp;dquote[0]));</div><div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>&#160;        <span class="keyword">const</span> __m128i bs = _mm_loadu_si128(reinterpret_cast&lt;const __m128i *&gt;(&amp;bslash[0]));</div><div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>&#160;        <span class="keyword">const</span> __m128i sp = _mm_loadu_si128(reinterpret_cast&lt;const __m128i *&gt;(&amp;space[0]));</div><div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>&#160;</div><div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>&#160;        <span class="keywordflow">for</span> (;; p += 16, q += 16) {</div><div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>&#160;            <span class="keyword">const</span> __m128i s = _mm_load_si128(reinterpret_cast&lt;const __m128i *&gt;(p));</div><div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>&#160;            <span class="keyword">const</span> __m128i t1 = _mm_cmpeq_epi8(s, dq);</div><div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>&#160;            <span class="keyword">const</span> __m128i t2 = _mm_cmpeq_epi8(s, bs);</div><div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>&#160;            <span class="keyword">const</span> __m128i t3 = _mm_cmpeq_epi8(_mm_max_epu8(s, sp), sp); <span class="comment">// s &lt; 0x20 &lt;=&gt; max(s, 0x1F) == 0x1F</span></div><div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>&#160;            <span class="keyword">const</span> __m128i x = _mm_or_si128(_mm_or_si128(t1, t2), t3);</div><div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>&#160;            <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> r = <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">short</span><span class="keyword">&gt;</span>(_mm_movemask_epi8(x));</div><div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>&#160;            <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(r != 0)) {   <span class="comment">// some of characters is escaped</span></div><div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>&#160;                <span class="keywordtype">size_t</span> length;</div><div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>&#160;<span class="preprocessor">#ifdef _MSC_VER         // Find the index of first escaped</span></div><div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>&#160;                <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> offset;</div><div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>&#160;                _BitScanForward(&amp;offset, r);</div><div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>&#160;                length = offset;</div><div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>&#160;                length = <span class="keyword">static_cast&lt;</span><span class="keywordtype">size_t</span><span class="keyword">&gt;</span>(__builtin_ffs(r) - 1);</div><div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>&#160;                <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keywordtype">char</span>* pend = p + length; p != pend; )</div><div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>&#160;                    *q++ = *p++;</div><div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>&#160;                <span class="keywordflow">break</span>;</div><div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>&#160;            }</div><div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>&#160;            _mm_storeu_si128(reinterpret_cast&lt;__m128i *&gt;(q), s);</div><div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>&#160;        }</div><div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>&#160;</div><div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>&#160;        is.src_ = p;</div><div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>&#160;        is.dst_ = q;</div><div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>&#160;    }</div><div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>&#160;</div><div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>&#160;    <span class="comment">// When read/write pointers are the same for insitu stream, just skip unescaped characters</span></div><div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>&#160;    <span class="keyword">static</span> RAPIDJSON_FORCEINLINE <span class="keywordtype">void</span> SkipUnescapedString(<a class="code" href="structrapidjson_1_1_generic_insitu_string_stream.html">InsituStringStream</a>&amp; is) {</div><div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>&#160;        <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(is.src_ == is.dst_);</div><div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>&#160;        <span class="keywordtype">char</span>* p = is.src_;</div><div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>&#160;</div><div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>&#160;        <span class="comment">// Scan one by one until alignment (unaligned load may cross page boundary and cause crash)</span></div><div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>&#160;        <span class="keyword">const</span> <span class="keywordtype">char</span>* nextAligned = <span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span><span class="keywordtype">char</span>*<span class="keyword">&gt;</span>((<span class="keyword">reinterpret_cast&lt;</span><span class="keywordtype">size_t</span><span class="keyword">&gt;</span>(p) + 15) &amp; <span class="keyword">static_cast&lt;</span><span class="keywordtype">size_t</span><span class="keyword">&gt;</span>(~15));</div><div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>&#160;        <span class="keywordflow">for</span> (; p != nextAligned; p++)</div><div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>&#160;            <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(*p == <span class="charliteral">&#39;\&quot;&#39;</span>) || <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(*p == <span class="charliteral">&#39;\\&#39;</span>) || <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(static_cast&lt;unsigned&gt;(*p) &lt; 0x20)) {</div><div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>&#160;                is.src_ = is.dst_ = p;</div><div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>&#160;                <span class="keywordflow">return</span>;</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;</div><div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>&#160;        <span class="comment">// The rest of string using SIMD</span></div><div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>&#160;        <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> dquote[16] = { <span class="charliteral">&#39;\&quot;&#39;</span>, <span class="charliteral">&#39;\&quot;&#39;</span>, <span class="charliteral">&#39;\&quot;&#39;</span>, <span class="charliteral">&#39;\&quot;&#39;</span>, <span class="charliteral">&#39;\&quot;&#39;</span>, <span class="charliteral">&#39;\&quot;&#39;</span>, <span class="charliteral">&#39;\&quot;&#39;</span>, <span class="charliteral">&#39;\&quot;&#39;</span>, <span class="charliteral">&#39;\&quot;&#39;</span>, <span class="charliteral">&#39;\&quot;&#39;</span>, <span class="charliteral">&#39;\&quot;&#39;</span>, <span class="charliteral">&#39;\&quot;&#39;</span>, <span class="charliteral">&#39;\&quot;&#39;</span>, <span class="charliteral">&#39;\&quot;&#39;</span>, <span class="charliteral">&#39;\&quot;&#39;</span>, <span class="charliteral">&#39;\&quot;&#39;</span> };</div><div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>&#160;        <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> bslash[16] = { <span class="charliteral">&#39;\\&#39;</span>, <span class="charliteral">&#39;\\&#39;</span>, <span class="charliteral">&#39;\\&#39;</span>, <span class="charliteral">&#39;\\&#39;</span>, <span class="charliteral">&#39;\\&#39;</span>, <span class="charliteral">&#39;\\&#39;</span>, <span class="charliteral">&#39;\\&#39;</span>, <span class="charliteral">&#39;\\&#39;</span>, <span class="charliteral">&#39;\\&#39;</span>, <span class="charliteral">&#39;\\&#39;</span>, <span class="charliteral">&#39;\\&#39;</span>, <span class="charliteral">&#39;\\&#39;</span>, <span class="charliteral">&#39;\\&#39;</span>, <span class="charliteral">&#39;\\&#39;</span>, <span class="charliteral">&#39;\\&#39;</span>, <span class="charliteral">&#39;\\&#39;</span> };</div><div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>&#160;        <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> space[16] = { 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F };</div><div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>&#160;        <span class="keyword">const</span> __m128i dq = _mm_loadu_si128(reinterpret_cast&lt;const __m128i *&gt;(&amp;dquote[0]));</div><div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>&#160;        <span class="keyword">const</span> __m128i bs = _mm_loadu_si128(reinterpret_cast&lt;const __m128i *&gt;(&amp;bslash[0]));</div><div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>&#160;        <span class="keyword">const</span> __m128i sp = _mm_loadu_si128(reinterpret_cast&lt;const __m128i *&gt;(&amp;space[0]));</div><div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>&#160;</div><div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>&#160;        <span class="keywordflow">for</span> (;; p += 16) {</div><div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>&#160;            <span class="keyword">const</span> __m128i s = _mm_load_si128(reinterpret_cast&lt;const __m128i *&gt;(p));</div><div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>&#160;            <span class="keyword">const</span> __m128i t1 = _mm_cmpeq_epi8(s, dq);</div><div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>&#160;            <span class="keyword">const</span> __m128i t2 = _mm_cmpeq_epi8(s, bs);</div><div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>&#160;            <span class="keyword">const</span> __m128i t3 = _mm_cmpeq_epi8(_mm_max_epu8(s, sp), sp); <span class="comment">// s &lt; 0x20 &lt;=&gt; max(s, 0x1F) == 0x1F</span></div><div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>&#160;            <span class="keyword">const</span> __m128i x = _mm_or_si128(_mm_or_si128(t1, t2), t3);</div><div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>&#160;            <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> r = <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">short</span><span class="keyword">&gt;</span>(_mm_movemask_epi8(x));</div><div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>&#160;            <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(r != 0)) {   <span class="comment">// some of characters is escaped</span></div><div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>&#160;                <span class="keywordtype">size_t</span> length;</div><div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>&#160;<span class="preprocessor">#ifdef _MSC_VER         // Find the index of first escaped</span></div><div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>&#160;                <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> offset;</div><div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>&#160;                _BitScanForward(&amp;offset, r);</div><div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>&#160;                length = offset;</div><div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>&#160;                length = <span class="keyword">static_cast&lt;</span><span class="keywordtype">size_t</span><span class="keyword">&gt;</span>(__builtin_ffs(r) - 1);</div><div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>&#160;                p += length;</div><div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>&#160;                <span class="keywordflow">break</span>;</div><div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>&#160;            }</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;        is.src_ = is.dst_ = p;</div><div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>&#160;    }</div><div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>&#160;<span class="preprocessor">#elif defined(RAPIDJSON_NEON)</span></div><div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>&#160;    <span class="comment">// StringStream -&gt; StackStream&lt;char&gt;</span></div><div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>&#160;    <span class="keyword">static</span> RAPIDJSON_FORCEINLINE <span class="keywordtype">void</span> ScanCopyUnescapedString(<a class="code" href="structrapidjson_1_1_generic_string_stream.html">StringStream</a>&amp; is, StackStream&lt;char&gt;&amp; os) {</div><div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>&#160;        <span class="keyword">const</span> <span class="keywordtype">char</span>* p = is.<a class="code" href="structrapidjson_1_1_generic_string_stream.html#a9a38a9d5b1ce782cacd4ec1bdf87fc2d">src_</a>;</div><div class="line"><a name="l01222"></a><span class="lineno"> 1222</span>&#160;</div><div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>&#160;        <span class="comment">// Scan one by one until alignment (unaligned load may cross page boundary and cause crash)</span></div><div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>&#160;        <span class="keyword">const</span> <span class="keywordtype">char</span>* nextAligned = <span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span><span class="keywordtype">char</span>*<span class="keyword">&gt;</span>((<span class="keyword">reinterpret_cast&lt;</span><span class="keywordtype">size_t</span><span class="keyword">&gt;</span>(p) + 15) &amp; <span class="keyword">static_cast&lt;</span><span class="keywordtype">size_t</span><span class="keyword">&gt;</span>(~15));</div><div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>&#160;        <span class="keywordflow">while</span> (p != nextAligned)</div><div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>&#160;            <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(*p == <span class="charliteral">&#39;\&quot;&#39;</span>) || <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(*p == <span class="charliteral">&#39;\\&#39;</span>) || <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(static_cast&lt;unsigned&gt;(*p) &lt; 0x20)) {</div><div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>&#160;                is.<a class="code" href="structrapidjson_1_1_generic_string_stream.html#a9a38a9d5b1ce782cacd4ec1bdf87fc2d">src_</a> = p;</div><div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>&#160;                <span class="keywordflow">return</span>;</div><div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>&#160;            }</div><div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>&#160;            <span class="keywordflow">else</span></div><div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>&#160;                os.Put(*p++);</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;        <span class="comment">// The rest of string using SIMD</span></div><div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>&#160;        <span class="keyword">const</span> uint8x16_t s0 = vmovq_n_u8(<span class="charliteral">&#39;&quot;&#39;</span>);</div><div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>&#160;        <span class="keyword">const</span> uint8x16_t s1 = vmovq_n_u8(<span class="charliteral">&#39;\\&#39;</span>);</div><div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>&#160;        <span class="keyword">const</span> uint8x16_t s2 = vmovq_n_u8(<span class="charliteral">&#39;\b&#39;</span>);</div><div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>&#160;        <span class="keyword">const</span> uint8x16_t s3 = vmovq_n_u8(32);</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="keywordflow">for</span> (;; p += 16) {</div><div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>&#160;            <span class="keyword">const</span> uint8x16_t s = vld1q_u8(reinterpret_cast&lt;const uint8_t *&gt;(p));</div><div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>&#160;            uint8x16_t x = vceqq_u8(s, s0);</div><div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>&#160;            x = vorrq_u8(x, vceqq_u8(s, s1));</div><div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>&#160;            x = vorrq_u8(x, vceqq_u8(s, s2));</div><div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>&#160;            x = vorrq_u8(x, vcltq_u8(s, s3));</div><div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>&#160;</div><div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>&#160;            x = vrev64q_u8(x);                     <span class="comment">// Rev in 64</span></div><div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>&#160;            uint64_t low = vgetq_lane_u64(reinterpret_cast&lt;uint64x2_t&gt;(x), 0);   <span class="comment">// extract</span></div><div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>&#160;            uint64_t high = vgetq_lane_u64(reinterpret_cast&lt;uint64x2_t&gt;(x), 1);  <span class="comment">// extract</span></div><div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>&#160;</div><div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>&#160;            <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> length = 0;</div><div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>&#160;            <span class="keywordtype">bool</span> escaped = <span class="keyword">false</span>;</div><div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>&#160;            <span class="keywordflow">if</span> (low == 0) {</div><div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>&#160;                <span class="keywordflow">if</span> (high != 0) {</div><div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>&#160;                    <span class="keywordtype">unsigned</span> lz = (unsigned)__builtin_clzll(high);;</div><div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>&#160;                    length = 8 + (lz &gt;&gt; 3);</div><div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>&#160;                    escaped = <span class="keyword">true</span>;</div><div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>&#160;                }</div><div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>&#160;            } <span class="keywordflow">else</span> {</div><div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>&#160;                <span class="keywordtype">unsigned</span> lz = (unsigned)__builtin_clzll(low);;</div><div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>&#160;                length = lz &gt;&gt; 3;</div><div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>&#160;                escaped = <span class="keyword">true</span>;</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;            <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(escaped)) {   <span class="comment">// some of characters is escaped</span></div><div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>&#160;                <span class="keywordflow">if</span> (length != 0) {</div><div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>&#160;                    <span class="keywordtype">char</span>* q = <span class="keyword">reinterpret_cast&lt;</span><span class="keywordtype">char</span>*<span class="keyword">&gt;</span>(os.Push(length));</div><div class="line"><a name="l01266"></a><span class="lineno"> 1266</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="l01267"></a><span class="lineno"> 1267</span>&#160;                        q[i] = p[i];</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;                    p += length;</div><div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>&#160;                }</div><div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>&#160;                <span class="keywordflow">break</span>;</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;            vst1q_u8(reinterpret_cast&lt;uint8_t *&gt;(os.Push(16)), s);</div><div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>&#160;        }</div><div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>&#160;</div><div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>&#160;        is.<a class="code" href="structrapidjson_1_1_generic_string_stream.html#a9a38a9d5b1ce782cacd4ec1bdf87fc2d">src_</a> = p;</div><div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>&#160;    }</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="comment">// InsituStringStream -&gt; InsituStringStream</span></div><div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>&#160;    <span class="keyword">static</span> RAPIDJSON_FORCEINLINE <span class="keywordtype">void</span> ScanCopyUnescapedString(<a class="code" href="structrapidjson_1_1_generic_insitu_string_stream.html">InsituStringStream</a>&amp; is, <a class="code" href="structrapidjson_1_1_generic_insitu_string_stream.html">InsituStringStream</a>&amp; os) {</div><div class="line"><a name="l01281"></a><span class="lineno"> 1281</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>(&amp;is == &amp;os);</div><div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>&#160;        (void)os;</div><div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>&#160;</div><div class="line"><a name="l01284"></a><span class="lineno"> 1284</span>&#160;        <span class="keywordflow">if</span> (is.src_ == is.dst_) {</div><div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>&#160;            SkipUnescapedString(is);</div><div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>&#160;            <span class="keywordflow">return</span>;</div><div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>&#160;        }</div><div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>&#160;</div><div class="line"><a name="l01289"></a><span class="lineno"> 1289</span>&#160;        <span class="keywordtype">char</span>* p = is.src_;</div><div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>&#160;        <span class="keywordtype">char</span> *q = is.dst_;</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="comment">// Scan one by one until alignment (unaligned load may cross page boundary and cause crash)</span></div><div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>&#160;        <span class="keyword">const</span> <span class="keywordtype">char</span>* nextAligned = <span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span><span class="keywordtype">char</span>*<span class="keyword">&gt;</span>((<span class="keyword">reinterpret_cast&lt;</span><span class="keywordtype">size_t</span><span class="keyword">&gt;</span>(p) + 15) &amp; <span class="keyword">static_cast&lt;</span><span class="keywordtype">size_t</span><span class="keyword">&gt;</span>(~15));</div><div class="line"><a name="l01294"></a><span class="lineno"> 1294</span>&#160;        <span class="keywordflow">while</span> (p != nextAligned)</div><div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>&#160;            <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(*p == <span class="charliteral">&#39;\&quot;&#39;</span>) || <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(*p == <span class="charliteral">&#39;\\&#39;</span>) || <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(static_cast&lt;unsigned&gt;(*p) &lt; 0x20)) {</div><div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>&#160;                is.src_ = p;</div><div class="line"><a name="l01297"></a><span class="lineno"> 1297</span>&#160;                is.dst_ = q;</div><div class="line"><a name="l01298"></a><span class="lineno"> 1298</span>&#160;                <span class="keywordflow">return</span>;</div><div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>&#160;            }</div><div class="line"><a name="l01300"></a><span class="lineno"> 1300</span>&#160;            <span class="keywordflow">else</span></div><div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>&#160;                *q++ = *p++;</div><div class="line"><a name="l01302"></a><span class="lineno"> 1302</span>&#160;</div><div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>&#160;        <span class="comment">// The rest of string using SIMD</span></div><div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>&#160;        <span class="keyword">const</span> uint8x16_t s0 = vmovq_n_u8(<span class="charliteral">&#39;&quot;&#39;</span>);</div><div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>&#160;        <span class="keyword">const</span> uint8x16_t s1 = vmovq_n_u8(<span class="charliteral">&#39;\\&#39;</span>);</div><div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>&#160;        <span class="keyword">const</span> uint8x16_t s2 = vmovq_n_u8(<span class="charliteral">&#39;\b&#39;</span>);</div><div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>&#160;        <span class="keyword">const</span> uint8x16_t s3 = vmovq_n_u8(32);</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="keywordflow">for</span> (;; p += 16, q += 16) {</div><div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>&#160;            <span class="keyword">const</span> uint8x16_t s = vld1q_u8(reinterpret_cast&lt;uint8_t *&gt;(p));</div><div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>&#160;            uint8x16_t x = vceqq_u8(s, s0);</div><div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>&#160;            x = vorrq_u8(x, vceqq_u8(s, s1));</div><div class="line"><a name="l01313"></a><span class="lineno"> 1313</span>&#160;            x = vorrq_u8(x, vceqq_u8(s, s2));</div><div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>&#160;            x = vorrq_u8(x, vcltq_u8(s, s3));</div><div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>&#160;</div><div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>&#160;            x = vrev64q_u8(x);                     <span class="comment">// Rev in 64</span></div><div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>&#160;            uint64_t low = vgetq_lane_u64(reinterpret_cast&lt;uint64x2_t&gt;(x), 0);   <span class="comment">// extract</span></div><div class="line"><a name="l01318"></a><span class="lineno"> 1318</span>&#160;            uint64_t high = vgetq_lane_u64(reinterpret_cast&lt;uint64x2_t&gt;(x), 1);  <span class="comment">// extract</span></div><div class="line"><a name="l01319"></a><span class="lineno"> 1319</span>&#160;</div><div class="line"><a name="l01320"></a><span class="lineno"> 1320</span>&#160;            <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> length = 0;</div><div class="line"><a name="l01321"></a><span class="lineno"> 1321</span>&#160;            <span class="keywordtype">bool</span> escaped = <span class="keyword">false</span>;</div><div class="line"><a name="l01322"></a><span class="lineno"> 1322</span>&#160;            <span class="keywordflow">if</span> (low == 0) {</div><div class="line"><a name="l01323"></a><span class="lineno"> 1323</span>&#160;                <span class="keywordflow">if</span> (high != 0) {</div><div class="line"><a name="l01324"></a><span class="lineno"> 1324</span>&#160;                    <span class="keywordtype">unsigned</span> lz = (unsigned)__builtin_clzll(high);</div><div class="line"><a name="l01325"></a><span class="lineno"> 1325</span>&#160;                    length = 8 + (lz &gt;&gt; 3);</div><div class="line"><a name="l01326"></a><span class="lineno"> 1326</span>&#160;                    escaped = <span class="keyword">true</span>;</div><div class="line"><a name="l01327"></a><span class="lineno"> 1327</span>&#160;                }</div><div class="line"><a name="l01328"></a><span class="lineno"> 1328</span>&#160;            } <span class="keywordflow">else</span> {</div><div class="line"><a name="l01329"></a><span class="lineno"> 1329</span>&#160;                <span class="keywordtype">unsigned</span> lz = (unsigned)__builtin_clzll(low);</div><div class="line"><a name="l01330"></a><span class="lineno"> 1330</span>&#160;                length = lz &gt;&gt; 3;</div><div class="line"><a name="l01331"></a><span class="lineno"> 1331</span>&#160;                escaped = <span class="keyword">true</span>;</div><div class="line"><a name="l01332"></a><span class="lineno"> 1332</span>&#160;            }</div><div class="line"><a name="l01333"></a><span class="lineno"> 1333</span>&#160;            <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(escaped)) {   <span class="comment">// some of characters is escaped</span></div><div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>&#160;                <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keywordtype">char</span>* pend = p + length; p != pend; ) {</div><div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>&#160;                    *q++ = *p++;</div><div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>&#160;                }</div><div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>&#160;                <span class="keywordflow">break</span>;</div><div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>&#160;            }</div><div class="line"><a name="l01339"></a><span class="lineno"> 1339</span>&#160;            vst1q_u8(reinterpret_cast&lt;uint8_t *&gt;(q), s);</div><div class="line"><a name="l01340"></a><span class="lineno"> 1340</span>&#160;        }</div><div class="line"><a name="l01341"></a><span class="lineno"> 1341</span>&#160;</div><div class="line"><a name="l01342"></a><span class="lineno"> 1342</span>&#160;        is.src_ = p;</div><div class="line"><a name="l01343"></a><span class="lineno"> 1343</span>&#160;        is.dst_ = q;</div><div class="line"><a name="l01344"></a><span class="lineno"> 1344</span>&#160;    }</div><div class="line"><a name="l01345"></a><span class="lineno"> 1345</span>&#160;</div><div class="line"><a name="l01346"></a><span class="lineno"> 1346</span>&#160;    <span class="comment">// When read/write pointers are the same for insitu stream, just skip unescaped characters</span></div><div class="line"><a name="l01347"></a><span class="lineno"> 1347</span>&#160;    <span class="keyword">static</span> RAPIDJSON_FORCEINLINE <span class="keywordtype">void</span> SkipUnescapedString(<a class="code" href="structrapidjson_1_1_generic_insitu_string_stream.html">InsituStringStream</a>&amp; is) {</div><div class="line"><a name="l01348"></a><span class="lineno"> 1348</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>(is.src_ == is.dst_);</div><div class="line"><a name="l01349"></a><span class="lineno"> 1349</span>&#160;        <span class="keywordtype">char</span>* p = is.src_;</div><div class="line"><a name="l01350"></a><span class="lineno"> 1350</span>&#160;</div><div class="line"><a name="l01351"></a><span class="lineno"> 1351</span>&#160;        <span class="comment">// Scan one by one until alignment (unaligned load may cross page boundary and cause crash)</span></div><div class="line"><a name="l01352"></a><span class="lineno"> 1352</span>&#160;        <span class="keyword">const</span> <span class="keywordtype">char</span>* nextAligned = <span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span><span class="keywordtype">char</span>*<span class="keyword">&gt;</span>((<span class="keyword">reinterpret_cast&lt;</span><span class="keywordtype">size_t</span><span class="keyword">&gt;</span>(p) + 15) &amp; <span class="keyword">static_cast&lt;</span><span class="keywordtype">size_t</span><span class="keyword">&gt;</span>(~15));</div><div class="line"><a name="l01353"></a><span class="lineno"> 1353</span>&#160;        <span class="keywordflow">for</span> (; p != nextAligned; p++)</div><div class="line"><a name="l01354"></a><span class="lineno"> 1354</span>&#160;            <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(*p == <span class="charliteral">&#39;\&quot;&#39;</span>) || <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(*p == <span class="charliteral">&#39;\\&#39;</span>) || <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(static_cast&lt;unsigned&gt;(*p) &lt; 0x20)) {</div><div class="line"><a name="l01355"></a><span class="lineno"> 1355</span>&#160;                is.src_ = is.dst_ = p;</div><div class="line"><a name="l01356"></a><span class="lineno"> 1356</span>&#160;                <span class="keywordflow">return</span>;</div><div class="line"><a name="l01357"></a><span class="lineno"> 1357</span>&#160;            }</div><div class="line"><a name="l01358"></a><span class="lineno"> 1358</span>&#160;</div><div class="line"><a name="l01359"></a><span class="lineno"> 1359</span>&#160;        <span class="comment">// The rest of string using SIMD</span></div><div class="line"><a name="l01360"></a><span class="lineno"> 1360</span>&#160;        <span class="keyword">const</span> uint8x16_t s0 = vmovq_n_u8(<span class="charliteral">&#39;&quot;&#39;</span>);</div><div class="line"><a name="l01361"></a><span class="lineno"> 1361</span>&#160;        <span class="keyword">const</span> uint8x16_t s1 = vmovq_n_u8(<span class="charliteral">&#39;\\&#39;</span>);</div><div class="line"><a name="l01362"></a><span class="lineno"> 1362</span>&#160;        <span class="keyword">const</span> uint8x16_t s2 = vmovq_n_u8(<span class="charliteral">&#39;\b&#39;</span>);</div><div class="line"><a name="l01363"></a><span class="lineno"> 1363</span>&#160;        <span class="keyword">const</span> uint8x16_t s3 = vmovq_n_u8(32);</div><div class="line"><a name="l01364"></a><span class="lineno"> 1364</span>&#160;</div><div class="line"><a name="l01365"></a><span class="lineno"> 1365</span>&#160;        <span class="keywordflow">for</span> (;; p += 16) {</div><div class="line"><a name="l01366"></a><span class="lineno"> 1366</span>&#160;            <span class="keyword">const</span> uint8x16_t s = vld1q_u8(reinterpret_cast&lt;uint8_t *&gt;(p));</div><div class="line"><a name="l01367"></a><span class="lineno"> 1367</span>&#160;            uint8x16_t x = vceqq_u8(s, s0);</div><div class="line"><a name="l01368"></a><span class="lineno"> 1368</span>&#160;            x = vorrq_u8(x, vceqq_u8(s, s1));</div><div class="line"><a name="l01369"></a><span class="lineno"> 1369</span>&#160;            x = vorrq_u8(x, vceqq_u8(s, s2));</div><div class="line"><a name="l01370"></a><span class="lineno"> 1370</span>&#160;            x = vorrq_u8(x, vcltq_u8(s, s3));</div><div class="line"><a name="l01371"></a><span class="lineno"> 1371</span>&#160;</div><div class="line"><a name="l01372"></a><span class="lineno"> 1372</span>&#160;            x = vrev64q_u8(x);                     <span class="comment">// Rev in 64</span></div><div class="line"><a name="l01373"></a><span class="lineno"> 1373</span>&#160;            uint64_t low = vgetq_lane_u64(reinterpret_cast&lt;uint64x2_t&gt;(x), 0);   <span class="comment">// extract</span></div><div class="line"><a name="l01374"></a><span class="lineno"> 1374</span>&#160;            uint64_t high = vgetq_lane_u64(reinterpret_cast&lt;uint64x2_t&gt;(x), 1);  <span class="comment">// extract</span></div><div class="line"><a name="l01375"></a><span class="lineno"> 1375</span>&#160;</div><div class="line"><a name="l01376"></a><span class="lineno"> 1376</span>&#160;            <span class="keywordflow">if</span> (low == 0) {</div><div class="line"><a name="l01377"></a><span class="lineno"> 1377</span>&#160;                <span class="keywordflow">if</span> (high != 0) {</div><div class="line"><a name="l01378"></a><span class="lineno"> 1378</span>&#160;                    <span class="keywordtype">int</span> lz = __builtin_clzll(high);</div><div class="line"><a name="l01379"></a><span class="lineno"> 1379</span>&#160;                    p += 8 + (lz &gt;&gt; 3);</div><div class="line"><a name="l01380"></a><span class="lineno"> 1380</span>&#160;                    <span class="keywordflow">break</span>;</div><div class="line"><a name="l01381"></a><span class="lineno"> 1381</span>&#160;                }</div><div class="line"><a name="l01382"></a><span class="lineno"> 1382</span>&#160;            } <span class="keywordflow">else</span> {</div><div class="line"><a name="l01383"></a><span class="lineno"> 1383</span>&#160;                <span class="keywordtype">int</span> lz = __builtin_clzll(low);</div><div class="line"><a name="l01384"></a><span class="lineno"> 1384</span>&#160;                p += lz &gt;&gt; 3;</div><div class="line"><a name="l01385"></a><span class="lineno"> 1385</span>&#160;                <span class="keywordflow">break</span>;</div><div class="line"><a name="l01386"></a><span class="lineno"> 1386</span>&#160;            }</div><div class="line"><a name="l01387"></a><span class="lineno"> 1387</span>&#160;        }</div><div class="line"><a name="l01388"></a><span class="lineno"> 1388</span>&#160;</div><div class="line"><a name="l01389"></a><span class="lineno"> 1389</span>&#160;        is.src_ = is.dst_ = p;</div><div class="line"><a name="l01390"></a><span class="lineno"> 1390</span>&#160;    }</div><div class="line"><a name="l01391"></a><span class="lineno"> 1391</span>&#160;<span class="preprocessor">#endif // RAPIDJSON_NEON</span></div><div class="line"><a name="l01392"></a><span class="lineno"> 1392</span>&#160;</div><div class="line"><a name="l01393"></a><span class="lineno"> 1393</span>&#160;    <span class="keyword">template</span>&lt;<span class="keyword">typename</span> InputStream, <span class="keywordtype">bool</span> backup, <span class="keywordtype">bool</span> pushOnTake&gt;</div><div class="line"><a name="l01394"></a><span class="lineno"> 1394</span>&#160;    <span class="keyword">class </span>NumberStream;</div><div class="line"><a name="l01395"></a><span class="lineno"> 1395</span>&#160;</div><div class="line"><a name="l01396"></a><span class="lineno"> 1396</span>&#160;    <span class="keyword">template</span>&lt;<span class="keyword">typename</span> InputStream&gt;</div><div class="line"><a name="l01397"></a><span class="lineno"> 1397</span>&#160;    <span class="keyword">class </span>NumberStream&lt;InputStream, false, false&gt; {</div><div class="line"><a name="l01398"></a><span class="lineno"> 1398</span>&#160;    <span class="keyword">public</span>:</div><div class="line"><a name="l01399"></a><span class="lineno"> 1399</span>&#160;        <span class="keyword">typedef</span> <span class="keyword">typename</span> InputStream::Ch Ch;</div><div class="line"><a name="l01400"></a><span class="lineno"> 1400</span>&#160;</div><div class="line"><a name="l01401"></a><span class="lineno"> 1401</span>&#160;        NumberStream(<a class="code" href="classrapidjson_1_1_generic_reader.html">GenericReader</a>&amp; reader, InputStream&amp; s) : is(s) { (void)reader;  }</div><div class="line"><a name="l01402"></a><span class="lineno"> 1402</span>&#160;</div><div class="line"><a name="l01403"></a><span class="lineno"> 1403</span>&#160;        RAPIDJSON_FORCEINLINE Ch Peek()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> is.Peek(); }</div><div class="line"><a name="l01404"></a><span class="lineno"> 1404</span>&#160;        RAPIDJSON_FORCEINLINE Ch TakePush() { <span class="keywordflow">return</span> is.Take(); }</div><div class="line"><a name="l01405"></a><span class="lineno"> 1405</span>&#160;        RAPIDJSON_FORCEINLINE Ch Take() { <span class="keywordflow">return</span> is.Take(); }</div><div class="line"><a name="l01406"></a><span class="lineno"> 1406</span>&#160;          RAPIDJSON_FORCEINLINE <span class="keywordtype">void</span> Push(<span class="keywordtype">char</span>) {}</div><div class="line"><a name="l01407"></a><span class="lineno"> 1407</span>&#160;</div><div class="line"><a name="l01408"></a><span class="lineno"> 1408</span>&#160;        <span class="keywordtype">size_t</span> Tell() { <span class="keywordflow">return</span> is.Tell(); }</div><div class="line"><a name="l01409"></a><span class="lineno"> 1409</span>&#160;        <span class="keywordtype">size_t</span> Length() { <span class="keywordflow">return</span> 0; }</div><div class="line"><a name="l01410"></a><span class="lineno"> 1410</span>&#160;        <span class="keyword">const</span> <span class="keywordtype">char</span>* Pop() { <span class="keywordflow">return</span> 0; }</div><div class="line"><a name="l01411"></a><span class="lineno"> 1411</span>&#160;</div><div class="line"><a name="l01412"></a><span class="lineno"> 1412</span>&#160;    <span class="keyword">protected</span>:</div><div class="line"><a name="l01413"></a><span class="lineno"> 1413</span>&#160;        NumberStream&amp; operator=(<span class="keyword">const</span> NumberStream&amp;);</div><div class="line"><a name="l01414"></a><span class="lineno"> 1414</span>&#160;</div><div class="line"><a name="l01415"></a><span class="lineno"> 1415</span>&#160;        InputStream&amp; is;</div><div class="line"><a name="l01416"></a><span class="lineno"> 1416</span>&#160;    };</div><div class="line"><a name="l01417"></a><span class="lineno"> 1417</span>&#160;</div><div class="line"><a name="l01418"></a><span class="lineno"> 1418</span>&#160;    <span class="keyword">template</span>&lt;<span class="keyword">typename</span> InputStream&gt;</div><div class="line"><a name="l01419"></a><span class="lineno"> 1419</span>&#160;    <span class="keyword">class </span>NumberStream&lt;InputStream, true, false&gt; : <span class="keyword">public</span> NumberStream&lt;InputStream, false, false&gt; {</div><div class="line"><a name="l01420"></a><span class="lineno"> 1420</span>&#160;        <span class="keyword">typedef</span> NumberStream&lt;InputStream, false, false&gt; Base;</div><div class="line"><a name="l01421"></a><span class="lineno"> 1421</span>&#160;    <span class="keyword">public</span>:</div><div class="line"><a name="l01422"></a><span class="lineno"> 1422</span>&#160;        NumberStream(<a class="code" href="classrapidjson_1_1_generic_reader.html">GenericReader</a>&amp; reader, InputStream&amp; is) : Base(reader, is), stackStream(reader.stack_) {}</div><div class="line"><a name="l01423"></a><span class="lineno"> 1423</span>&#160;</div><div class="line"><a name="l01424"></a><span class="lineno"> 1424</span>&#160;        RAPIDJSON_FORCEINLINE Ch TakePush() {</div><div class="line"><a name="l01425"></a><span class="lineno"> 1425</span>&#160;            stackStream.Put(static_cast&lt;char&gt;(Base::is.Peek()));</div><div class="line"><a name="l01426"></a><span class="lineno"> 1426</span>&#160;            <span class="keywordflow">return</span> Base::is.Take();</div><div class="line"><a name="l01427"></a><span class="lineno"> 1427</span>&#160;        }</div><div class="line"><a name="l01428"></a><span class="lineno"> 1428</span>&#160;</div><div class="line"><a name="l01429"></a><span class="lineno"> 1429</span>&#160;        RAPIDJSON_FORCEINLINE <span class="keywordtype">void</span> Push(<span class="keywordtype">char</span> c) {</div><div class="line"><a name="l01430"></a><span class="lineno"> 1430</span>&#160;            stackStream.Put(c);</div><div class="line"><a name="l01431"></a><span class="lineno"> 1431</span>&#160;        }</div><div class="line"><a name="l01432"></a><span class="lineno"> 1432</span>&#160;</div><div class="line"><a name="l01433"></a><span class="lineno"> 1433</span>&#160;        <span class="keywordtype">size_t</span> Length() { <span class="keywordflow">return</span> stackStream.Length(); }</div><div class="line"><a name="l01434"></a><span class="lineno"> 1434</span>&#160;</div><div class="line"><a name="l01435"></a><span class="lineno"> 1435</span>&#160;        <span class="keyword">const</span> <span class="keywordtype">char</span>* Pop() {</div><div class="line"><a name="l01436"></a><span class="lineno"> 1436</span>&#160;            stackStream.Put(<span class="charliteral">&#39;\0&#39;</span>);</div><div class="line"><a name="l01437"></a><span class="lineno"> 1437</span>&#160;            <span class="keywordflow">return</span> stackStream.Pop();</div><div class="line"><a name="l01438"></a><span class="lineno"> 1438</span>&#160;        }</div><div class="line"><a name="l01439"></a><span class="lineno"> 1439</span>&#160;</div><div class="line"><a name="l01440"></a><span class="lineno"> 1440</span>&#160;    <span class="keyword">private</span>:</div><div class="line"><a name="l01441"></a><span class="lineno"> 1441</span>&#160;        StackStream&lt;char&gt; stackStream;</div><div class="line"><a name="l01442"></a><span class="lineno"> 1442</span>&#160;    };</div><div class="line"><a name="l01443"></a><span class="lineno"> 1443</span>&#160;</div><div class="line"><a name="l01444"></a><span class="lineno"> 1444</span>&#160;    <span class="keyword">template</span>&lt;<span class="keyword">typename</span> InputStream&gt;</div><div class="line"><a name="l01445"></a><span class="lineno"> 1445</span>&#160;    <span class="keyword">class </span>NumberStream&lt;InputStream, true, true&gt; : <span class="keyword">public</span> NumberStream&lt;InputStream, true, false&gt; {</div><div class="line"><a name="l01446"></a><span class="lineno"> 1446</span>&#160;        <span class="keyword">typedef</span> NumberStream&lt;InputStream, true, false&gt; Base;</div><div class="line"><a name="l01447"></a><span class="lineno"> 1447</span>&#160;    <span class="keyword">public</span>:</div><div class="line"><a name="l01448"></a><span class="lineno"> 1448</span>&#160;        NumberStream(<a class="code" href="classrapidjson_1_1_generic_reader.html">GenericReader</a>&amp; reader, InputStream&amp; is) : Base(reader, is) {}</div><div class="line"><a name="l01449"></a><span class="lineno"> 1449</span>&#160;</div><div class="line"><a name="l01450"></a><span class="lineno"> 1450</span>&#160;        RAPIDJSON_FORCEINLINE Ch Take() { <span class="keywordflow">return</span> Base::TakePush(); }</div><div class="line"><a name="l01451"></a><span class="lineno"> 1451</span>&#160;    };</div><div class="line"><a name="l01452"></a><span class="lineno"> 1452</span>&#160;</div><div class="line"><a name="l01453"></a><span class="lineno"> 1453</span>&#160;    <span class="keyword">template</span>&lt;<span class="keywordtype">unsigned</span> parseFlags, <span class="keyword">typename</span> InputStream, <span class="keyword">typename</span> Handler&gt;</div><div class="line"><a name="l01454"></a><span class="lineno"> 1454</span>&#160;    <span class="keywordtype">void</span> ParseNumber(InputStream&amp; is, <a class="code" href="classrapidjson_1_1_handler.html">Handler</a>&amp; handler) {</div><div class="line"><a name="l01455"></a><span class="lineno"> 1455</span>&#160;        internal::StreamLocalCopy&lt;InputStream&gt; copy(is);</div><div class="line"><a name="l01456"></a><span class="lineno"> 1456</span>&#160;        NumberStream&lt;InputStream,</div><div class="line"><a name="l01457"></a><span class="lineno"> 1457</span>&#160;            ((parseFlags &amp; <a class="code" href="namespacerapidjson.html#a81379eb4e94a0386d71d15fda882ebc9a13981c0b803803f59d7a01aef3dfc987">kParseNumbersAsStringsFlag</a>) != 0) ?</div><div class="line"><a name="l01458"></a><span class="lineno"> 1458</span>&#160;                ((parseFlags &amp; <a class="code" href="namespacerapidjson.html#a81379eb4e94a0386d71d15fda882ebc9a02748971d6ea0c5e22c69b8aa7f344ea">kParseInsituFlag</a>) == 0) :</div><div class="line"><a name="l01459"></a><span class="lineno"> 1459</span>&#160;                ((parseFlags &amp; <a class="code" href="namespacerapidjson.html#a81379eb4e94a0386d71d15fda882ebc9adf80892cdfa076b2d1a7dd9530e15cb0">kParseFullPrecisionFlag</a>) != 0),</div><div class="line"><a name="l01460"></a><span class="lineno"> 1460</span>&#160;            (parseFlags &amp; <a class="code" href="namespacerapidjson.html#a81379eb4e94a0386d71d15fda882ebc9a13981c0b803803f59d7a01aef3dfc987">kParseNumbersAsStringsFlag</a>) != 0 &amp;&amp;</div><div class="line"><a name="l01461"></a><span class="lineno"> 1461</span>&#160;                (parseFlags &amp; <a class="code" href="namespacerapidjson.html#a81379eb4e94a0386d71d15fda882ebc9a02748971d6ea0c5e22c69b8aa7f344ea">kParseInsituFlag</a>) == 0&gt; s(*<span class="keyword">this</span>, copy.s);</div><div class="line"><a name="l01462"></a><span class="lineno"> 1462</span>&#160;</div><div class="line"><a name="l01463"></a><span class="lineno"> 1463</span>&#160;        <span class="keywordtype">size_t</span> startOffset = s.Tell();</div><div class="line"><a name="l01464"></a><span class="lineno"> 1464</span>&#160;        <span class="keywordtype">double</span> d = 0.0;</div><div class="line"><a name="l01465"></a><span class="lineno"> 1465</span>&#160;        <span class="keywordtype">bool</span> useNanOrInf = <span class="keyword">false</span>;</div><div class="line"><a name="l01466"></a><span class="lineno"> 1466</span>&#160;</div><div class="line"><a name="l01467"></a><span class="lineno"> 1467</span>&#160;        <span class="comment">// Parse minus</span></div><div class="line"><a name="l01468"></a><span class="lineno"> 1468</span>&#160;        <span class="keywordtype">bool</span> minus = Consume(s, <span class="charliteral">&#39;-&#39;</span>);</div><div class="line"><a name="l01469"></a><span class="lineno"> 1469</span>&#160;</div><div class="line"><a name="l01470"></a><span class="lineno"> 1470</span>&#160;        <span class="comment">// Parse int: zero / ( digit1-9 *DIGIT )</span></div><div class="line"><a name="l01471"></a><span class="lineno"> 1471</span>&#160;        <span class="keywordtype">unsigned</span> i = 0;</div><div class="line"><a name="l01472"></a><span class="lineno"> 1472</span>&#160;        uint64_t i64 = 0;</div><div class="line"><a name="l01473"></a><span class="lineno"> 1473</span>&#160;        <span class="keywordtype">bool</span> use64bit = <span class="keyword">false</span>;</div><div class="line"><a name="l01474"></a><span class="lineno"> 1474</span>&#160;        <span class="keywordtype">int</span> significandDigit = 0;</div><div class="line"><a name="l01475"></a><span class="lineno"> 1475</span>&#160;        <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(s.Peek() == <span class="charliteral">&#39;0&#39;</span>)) {</div><div class="line"><a name="l01476"></a><span class="lineno"> 1476</span>&#160;            i = 0;</div><div class="line"><a name="l01477"></a><span class="lineno"> 1477</span>&#160;            s.TakePush();</div><div class="line"><a name="l01478"></a><span class="lineno"> 1478</span>&#160;        }</div><div class="line"><a name="l01479"></a><span class="lineno"> 1479</span>&#160;        <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga5dc14176a9e71ace282404b0bcda57a1">RAPIDJSON_LIKELY</a>(s.Peek() &gt;= <span class="charliteral">&#39;1&#39;</span> &amp;&amp; s.Peek() &lt;= <span class="charliteral">&#39;9&#39;</span>)) {</div><div class="line"><a name="l01480"></a><span class="lineno"> 1480</span>&#160;            i = <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span><span class="keyword">&gt;</span>(s.TakePush() - <span class="charliteral">&#39;0&#39;</span>);</div><div class="line"><a name="l01481"></a><span class="lineno"> 1481</span>&#160;</div><div class="line"><a name="l01482"></a><span class="lineno"> 1482</span>&#160;            <span class="keywordflow">if</span> (minus)</div><div class="line"><a name="l01483"></a><span class="lineno"> 1483</span>&#160;                <span class="keywordflow">while</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga5dc14176a9e71ace282404b0bcda57a1">RAPIDJSON_LIKELY</a>(s.Peek() &gt;= <span class="charliteral">&#39;0&#39;</span> &amp;&amp; s.Peek() &lt;= <span class="charliteral">&#39;9&#39;</span>)) {</div><div class="line"><a name="l01484"></a><span class="lineno"> 1484</span>&#160;                    <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(i &gt;= 214748364)) { <span class="comment">// 2^31 = 2147483648</span></div><div class="line"><a name="l01485"></a><span class="lineno"> 1485</span>&#160;                        <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga5dc14176a9e71ace282404b0bcda57a1">RAPIDJSON_LIKELY</a>(i != 214748364 || s.Peek() &gt; <span class="charliteral">&#39;8&#39;</span>)) {</div><div class="line"><a name="l01486"></a><span class="lineno"> 1486</span>&#160;                            i64 = i;</div><div class="line"><a name="l01487"></a><span class="lineno"> 1487</span>&#160;                            use64bit = <span class="keyword">true</span>;</div><div class="line"><a name="l01488"></a><span class="lineno"> 1488</span>&#160;                            <span class="keywordflow">break</span>;</div><div class="line"><a name="l01489"></a><span class="lineno"> 1489</span>&#160;                        }</div><div class="line"><a name="l01490"></a><span class="lineno"> 1490</span>&#160;                    }</div><div class="line"><a name="l01491"></a><span class="lineno"> 1491</span>&#160;                    i = i * 10 + <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span><span class="keyword">&gt;</span>(s.TakePush() - <span class="charliteral">&#39;0&#39;</span>);</div><div class="line"><a name="l01492"></a><span class="lineno"> 1492</span>&#160;                    significandDigit++;</div><div class="line"><a name="l01493"></a><span class="lineno"> 1493</span>&#160;                }</div><div class="line"><a name="l01494"></a><span class="lineno"> 1494</span>&#160;            <span class="keywordflow">else</span></div><div class="line"><a name="l01495"></a><span class="lineno"> 1495</span>&#160;                <span class="keywordflow">while</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga5dc14176a9e71ace282404b0bcda57a1">RAPIDJSON_LIKELY</a>(s.Peek() &gt;= <span class="charliteral">&#39;0&#39;</span> &amp;&amp; s.Peek() &lt;= <span class="charliteral">&#39;9&#39;</span>)) {</div><div class="line"><a name="l01496"></a><span class="lineno"> 1496</span>&#160;                    <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(i &gt;= 429496729)) { <span class="comment">// 2^32 - 1 = 4294967295</span></div><div class="line"><a name="l01497"></a><span class="lineno"> 1497</span>&#160;                        <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga5dc14176a9e71ace282404b0bcda57a1">RAPIDJSON_LIKELY</a>(i != 429496729 || s.Peek() &gt; <span class="charliteral">&#39;5&#39;</span>)) {</div><div class="line"><a name="l01498"></a><span class="lineno"> 1498</span>&#160;                            i64 = i;</div><div class="line"><a name="l01499"></a><span class="lineno"> 1499</span>&#160;                            use64bit = <span class="keyword">true</span>;</div><div class="line"><a name="l01500"></a><span class="lineno"> 1500</span>&#160;                            <span class="keywordflow">break</span>;</div><div class="line"><a name="l01501"></a><span class="lineno"> 1501</span>&#160;                        }</div><div class="line"><a name="l01502"></a><span class="lineno"> 1502</span>&#160;                    }</div><div class="line"><a name="l01503"></a><span class="lineno"> 1503</span>&#160;                    i = i * 10 + <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span><span class="keyword">&gt;</span>(s.TakePush() - <span class="charliteral">&#39;0&#39;</span>);</div><div class="line"><a name="l01504"></a><span class="lineno"> 1504</span>&#160;                    significandDigit++;</div><div class="line"><a name="l01505"></a><span class="lineno"> 1505</span>&#160;                }</div><div class="line"><a name="l01506"></a><span class="lineno"> 1506</span>&#160;        }</div><div class="line"><a name="l01507"></a><span class="lineno"> 1507</span>&#160;        <span class="comment">// Parse NaN or Infinity here</span></div><div class="line"><a name="l01508"></a><span class="lineno"> 1508</span>&#160;        <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((parseFlags &amp; <a class="code" href="namespacerapidjson.html#a81379eb4e94a0386d71d15fda882ebc9a857894ab51cafa62956e9c9f0dafc4d8">kParseNanAndInfFlag</a>) &amp;&amp; <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga5dc14176a9e71ace282404b0bcda57a1">RAPIDJSON_LIKELY</a>((s.Peek() == <span class="charliteral">&#39;I&#39;</span> || s.Peek() == <span class="charliteral">&#39;N&#39;</span>))) {</div><div class="line"><a name="l01509"></a><span class="lineno"> 1509</span>&#160;            <span class="keywordflow">if</span> (Consume(s, <span class="charliteral">&#39;N&#39;</span>)) {</div><div class="line"><a name="l01510"></a><span class="lineno"> 1510</span>&#160;                <span class="keywordflow">if</span> (Consume(s, <span class="charliteral">&#39;a&#39;</span>) &amp;&amp; Consume(s, <span class="charliteral">&#39;N&#39;</span>)) {</div><div class="line"><a name="l01511"></a><span class="lineno"> 1511</span>&#160;                    d = std::numeric_limits&lt;double&gt;::quiet_NaN();</div><div class="line"><a name="l01512"></a><span class="lineno"> 1512</span>&#160;                    useNanOrInf = <span class="keyword">true</span>;</div><div class="line"><a name="l01513"></a><span class="lineno"> 1513</span>&#160;                }</div><div class="line"><a name="l01514"></a><span class="lineno"> 1514</span>&#160;            }</div><div class="line"><a name="l01515"></a><span class="lineno"> 1515</span>&#160;            <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga5dc14176a9e71ace282404b0bcda57a1">RAPIDJSON_LIKELY</a>(Consume(s, <span class="charliteral">&#39;I&#39;</span>))) {</div><div class="line"><a name="l01516"></a><span class="lineno"> 1516</span>&#160;                <span class="keywordflow">if</span> (Consume(s, <span class="charliteral">&#39;n&#39;</span>) &amp;&amp; Consume(s, <span class="charliteral">&#39;f&#39;</span>)) {</div><div class="line"><a name="l01517"></a><span class="lineno"> 1517</span>&#160;                    d = (minus ? -std::numeric_limits&lt;double&gt;::infinity() : std::numeric_limits&lt;double&gt;::infinity());</div><div class="line"><a name="l01518"></a><span class="lineno"> 1518</span>&#160;                    useNanOrInf = <span class="keyword">true</span>;</div><div class="line"><a name="l01519"></a><span class="lineno"> 1519</span>&#160;</div><div class="line"><a name="l01520"></a><span class="lineno"> 1520</span>&#160;                    <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(s.Peek() == <span class="charliteral">&#39;i&#39;</span> &amp;&amp; !(Consume(s, <span class="charliteral">&#39;i&#39;</span>) &amp;&amp; Consume(s, <span class="charliteral">&#39;n&#39;</span>)</div><div class="line"><a name="l01521"></a><span class="lineno"> 1521</span>&#160;                                                                &amp;&amp; Consume(s, <span class="charliteral">&#39;i&#39;</span>) &amp;&amp; Consume(s, <span class="charliteral">&#39;t&#39;</span>) &amp;&amp; Consume(s, <span class="charliteral">&#39;y&#39;</span>)))) {</div><div class="line"><a name="l01522"></a><span class="lineno"> 1522</span>&#160;                        <a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gae3689840fa6e89a241313f33b602f865">RAPIDJSON_PARSE_ERROR</a>(<a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gga7d3acf640886b1f2552dc8c4cd6dea60ab7fa69bce0c393cf3a2b6065111f2f57">kParseErrorValueInvalid</a>, s.Tell());</div><div class="line"><a name="l01523"></a><span class="lineno"> 1523</span>&#160;                    }</div><div class="line"><a name="l01524"></a><span class="lineno"> 1524</span>&#160;                }</div><div class="line"><a name="l01525"></a><span class="lineno"> 1525</span>&#160;            }</div><div class="line"><a name="l01526"></a><span class="lineno"> 1526</span>&#160;</div><div class="line"><a name="l01527"></a><span class="lineno"> 1527</span>&#160;            <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(!useNanOrInf)) {</div><div class="line"><a name="l01528"></a><span class="lineno"> 1528</span>&#160;                <a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gae3689840fa6e89a241313f33b602f865">RAPIDJSON_PARSE_ERROR</a>(<a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gga7d3acf640886b1f2552dc8c4cd6dea60ab7fa69bce0c393cf3a2b6065111f2f57">kParseErrorValueInvalid</a>, s.Tell());</div><div class="line"><a name="l01529"></a><span class="lineno"> 1529</span>&#160;            }</div><div class="line"><a name="l01530"></a><span class="lineno"> 1530</span>&#160;        }</div><div class="line"><a name="l01531"></a><span class="lineno"> 1531</span>&#160;        <span class="keywordflow">else</span></div><div class="line"><a name="l01532"></a><span class="lineno"> 1532</span>&#160;            <a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gae3689840fa6e89a241313f33b602f865">RAPIDJSON_PARSE_ERROR</a>(<a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gga7d3acf640886b1f2552dc8c4cd6dea60ab7fa69bce0c393cf3a2b6065111f2f57">kParseErrorValueInvalid</a>, s.Tell());</div><div class="line"><a name="l01533"></a><span class="lineno"> 1533</span>&#160;</div><div class="line"><a name="l01534"></a><span class="lineno"> 1534</span>&#160;        <span class="comment">// Parse 64bit int</span></div><div class="line"><a name="l01535"></a><span class="lineno"> 1535</span>&#160;        <span class="keywordtype">bool</span> useDouble = <span class="keyword">false</span>;</div><div class="line"><a name="l01536"></a><span class="lineno"> 1536</span>&#160;        <span class="keywordflow">if</span> (use64bit) {</div><div class="line"><a name="l01537"></a><span class="lineno"> 1537</span>&#160;            <span class="keywordflow">if</span> (minus)</div><div class="line"><a name="l01538"></a><span class="lineno"> 1538</span>&#160;                <span class="keywordflow">while</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga5dc14176a9e71ace282404b0bcda57a1">RAPIDJSON_LIKELY</a>(s.Peek() &gt;= <span class="charliteral">&#39;0&#39;</span> &amp;&amp; s.Peek() &lt;= <span class="charliteral">&#39;9&#39;</span>)) {</div><div class="line"><a name="l01539"></a><span class="lineno"> 1539</span>&#160;                     <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(i64 &gt;= <a class="code" href="rapidjson_8h.html#aaee1245f375a71be1ac9b8a07ba5fb8f">RAPIDJSON_UINT64_C2</a>(0x0CCCCCCC, 0xCCCCCCCC))) <span class="comment">// 2^63 = 9223372036854775808</span></div><div class="line"><a name="l01540"></a><span class="lineno"> 1540</span>&#160;                        <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga5dc14176a9e71ace282404b0bcda57a1">RAPIDJSON_LIKELY</a>(i64 != <a class="code" href="rapidjson_8h.html#aaee1245f375a71be1ac9b8a07ba5fb8f">RAPIDJSON_UINT64_C2</a>(0x0CCCCCCC, 0xCCCCCCCC) || s.Peek() &gt; <span class="charliteral">&#39;8&#39;</span>)) {</div><div class="line"><a name="l01541"></a><span class="lineno"> 1541</span>&#160;                            d = <span class="keyword">static_cast&lt;</span><span class="keywordtype">double</span><span class="keyword">&gt;</span>(i64);</div><div class="line"><a name="l01542"></a><span class="lineno"> 1542</span>&#160;                            useDouble = <span class="keyword">true</span>;</div><div class="line"><a name="l01543"></a><span class="lineno"> 1543</span>&#160;                            <span class="keywordflow">break</span>;</div><div class="line"><a name="l01544"></a><span class="lineno"> 1544</span>&#160;                        }</div><div class="line"><a name="l01545"></a><span class="lineno"> 1545</span>&#160;                    i64 = i64 * 10 + <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span><span class="keyword">&gt;</span>(s.TakePush() - <span class="charliteral">&#39;0&#39;</span>);</div><div class="line"><a name="l01546"></a><span class="lineno"> 1546</span>&#160;                    significandDigit++;</div><div class="line"><a name="l01547"></a><span class="lineno"> 1547</span>&#160;                }</div><div class="line"><a name="l01548"></a><span class="lineno"> 1548</span>&#160;            <span class="keywordflow">else</span></div><div class="line"><a name="l01549"></a><span class="lineno"> 1549</span>&#160;                <span class="keywordflow">while</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga5dc14176a9e71ace282404b0bcda57a1">RAPIDJSON_LIKELY</a>(s.Peek() &gt;= <span class="charliteral">&#39;0&#39;</span> &amp;&amp; s.Peek() &lt;= <span class="charliteral">&#39;9&#39;</span>)) {</div><div class="line"><a name="l01550"></a><span class="lineno"> 1550</span>&#160;                    <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(i64 &gt;= <a class="code" href="rapidjson_8h.html#aaee1245f375a71be1ac9b8a07ba5fb8f">RAPIDJSON_UINT64_C2</a>(0x19999999, 0x99999999))) <span class="comment">// 2^64 - 1 = 18446744073709551615</span></div><div class="line"><a name="l01551"></a><span class="lineno"> 1551</span>&#160;                        <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga5dc14176a9e71ace282404b0bcda57a1">RAPIDJSON_LIKELY</a>(i64 != <a class="code" href="rapidjson_8h.html#aaee1245f375a71be1ac9b8a07ba5fb8f">RAPIDJSON_UINT64_C2</a>(0x19999999, 0x99999999) || s.Peek() &gt; <span class="charliteral">&#39;5&#39;</span>)) {</div><div class="line"><a name="l01552"></a><span class="lineno"> 1552</span>&#160;                            d = <span class="keyword">static_cast&lt;</span><span class="keywordtype">double</span><span class="keyword">&gt;</span>(i64);</div><div class="line"><a name="l01553"></a><span class="lineno"> 1553</span>&#160;                            useDouble = <span class="keyword">true</span>;</div><div class="line"><a name="l01554"></a><span class="lineno"> 1554</span>&#160;                            <span class="keywordflow">break</span>;</div><div class="line"><a name="l01555"></a><span class="lineno"> 1555</span>&#160;                        }</div><div class="line"><a name="l01556"></a><span class="lineno"> 1556</span>&#160;                    i64 = i64 * 10 + <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span><span class="keyword">&gt;</span>(s.TakePush() - <span class="charliteral">&#39;0&#39;</span>);</div><div class="line"><a name="l01557"></a><span class="lineno"> 1557</span>&#160;                    significandDigit++;</div><div class="line"><a name="l01558"></a><span class="lineno"> 1558</span>&#160;                }</div><div class="line"><a name="l01559"></a><span class="lineno"> 1559</span>&#160;        }</div><div class="line"><a name="l01560"></a><span class="lineno"> 1560</span>&#160;</div><div class="line"><a name="l01561"></a><span class="lineno"> 1561</span>&#160;        <span class="comment">// Force double for big integer</span></div><div class="line"><a name="l01562"></a><span class="lineno"> 1562</span>&#160;        <span class="keywordflow">if</span> (useDouble) {</div><div class="line"><a name="l01563"></a><span class="lineno"> 1563</span>&#160;            <span class="keywordflow">while</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga5dc14176a9e71ace282404b0bcda57a1">RAPIDJSON_LIKELY</a>(s.Peek() &gt;= <span class="charliteral">&#39;0&#39;</span> &amp;&amp; s.Peek() &lt;= <span class="charliteral">&#39;9&#39;</span>)) {</div><div class="line"><a name="l01564"></a><span class="lineno"> 1564</span>&#160;                d = d * 10 + (s.TakePush() - <span class="charliteral">&#39;0&#39;</span>);</div><div class="line"><a name="l01565"></a><span class="lineno"> 1565</span>&#160;            }</div><div class="line"><a name="l01566"></a><span class="lineno"> 1566</span>&#160;        }</div><div class="line"><a name="l01567"></a><span class="lineno"> 1567</span>&#160;</div><div class="line"><a name="l01568"></a><span class="lineno"> 1568</span>&#160;        <span class="comment">// Parse frac = decimal-point 1*DIGIT</span></div><div class="line"><a name="l01569"></a><span class="lineno"> 1569</span>&#160;        <span class="keywordtype">int</span> expFrac = 0;</div><div class="line"><a name="l01570"></a><span class="lineno"> 1570</span>&#160;        <span class="keywordtype">size_t</span> decimalPosition;</div><div class="line"><a name="l01571"></a><span class="lineno"> 1571</span>&#160;        <span class="keywordflow">if</span> (Consume(s, <span class="charliteral">&#39;.&#39;</span>)) {</div><div class="line"><a name="l01572"></a><span class="lineno"> 1572</span>&#160;            decimalPosition = s.Length();</div><div class="line"><a name="l01573"></a><span class="lineno"> 1573</span>&#160;</div><div class="line"><a name="l01574"></a><span class="lineno"> 1574</span>&#160;            <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(!(s.Peek() &gt;= <span class="charliteral">&#39;0&#39;</span> &amp;&amp; s.Peek() &lt;= <span class="charliteral">&#39;9&#39;</span>)))</div><div class="line"><a name="l01575"></a><span class="lineno"> 1575</span>&#160;                <a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gae3689840fa6e89a241313f33b602f865">RAPIDJSON_PARSE_ERROR</a>(<a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gga7d3acf640886b1f2552dc8c4cd6dea60ac840ece3ba6874fe6f16c01ebb71031f">kParseErrorNumberMissFraction</a>, s.Tell());</div><div class="line"><a name="l01576"></a><span class="lineno"> 1576</span>&#160;</div><div class="line"><a name="l01577"></a><span class="lineno"> 1577</span>&#160;            <span class="keywordflow">if</span> (!useDouble) {</div><div class="line"><a name="l01578"></a><span class="lineno"> 1578</span>&#160;<span class="preprocessor">#if RAPIDJSON_64BIT</span></div><div class="line"><a name="l01579"></a><span class="lineno"> 1579</span>&#160;                <span class="comment">// Use i64 to store significand in 64-bit architecture</span></div><div class="line"><a name="l01580"></a><span class="lineno"> 1580</span>&#160;                <span class="keywordflow">if</span> (!use64bit)</div><div class="line"><a name="l01581"></a><span class="lineno"> 1581</span>&#160;                    i64 = i;</div><div class="line"><a name="l01582"></a><span class="lineno"> 1582</span>&#160;</div><div class="line"><a name="l01583"></a><span class="lineno"> 1583</span>&#160;                <span class="keywordflow">while</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga5dc14176a9e71ace282404b0bcda57a1">RAPIDJSON_LIKELY</a>(s.Peek() &gt;= <span class="charliteral">&#39;0&#39;</span> &amp;&amp; s.Peek() &lt;= <span class="charliteral">&#39;9&#39;</span>)) {</div><div class="line"><a name="l01584"></a><span class="lineno"> 1584</span>&#160;                    <span class="keywordflow">if</span> (i64 &gt; <a class="code" href="rapidjson_8h.html#aaee1245f375a71be1ac9b8a07ba5fb8f">RAPIDJSON_UINT64_C2</a>(0x1FFFFF, 0xFFFFFFFF)) <span class="comment">// 2^53 - 1 for fast path</span></div><div class="line"><a name="l01585"></a><span class="lineno"> 1585</span>&#160;                        <span class="keywordflow">break</span>;</div><div class="line"><a name="l01586"></a><span class="lineno"> 1586</span>&#160;                    <span class="keywordflow">else</span> {</div><div class="line"><a name="l01587"></a><span class="lineno"> 1587</span>&#160;                        i64 = i64 * 10 + <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span><span class="keyword">&gt;</span>(s.TakePush() - <span class="charliteral">&#39;0&#39;</span>);</div><div class="line"><a name="l01588"></a><span class="lineno"> 1588</span>&#160;                        --expFrac;</div><div class="line"><a name="l01589"></a><span class="lineno"> 1589</span>&#160;                        <span class="keywordflow">if</span> (i64 != 0)</div><div class="line"><a name="l01590"></a><span class="lineno"> 1590</span>&#160;                            significandDigit++;</div><div class="line"><a name="l01591"></a><span class="lineno"> 1591</span>&#160;                    }</div><div class="line"><a name="l01592"></a><span class="lineno"> 1592</span>&#160;                }</div><div class="line"><a name="l01593"></a><span class="lineno"> 1593</span>&#160;</div><div class="line"><a name="l01594"></a><span class="lineno"> 1594</span>&#160;                d = <span class="keyword">static_cast&lt;</span><span class="keywordtype">double</span><span class="keyword">&gt;</span>(i64);</div><div class="line"><a name="l01595"></a><span class="lineno"> 1595</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l01596"></a><span class="lineno"> 1596</span>&#160;                <span class="comment">// Use double to store significand in 32-bit architecture</span></div><div class="line"><a name="l01597"></a><span class="lineno"> 1597</span>&#160;                d = <span class="keyword">static_cast&lt;</span><span class="keywordtype">double</span><span class="keyword">&gt;</span>(use64bit ? i64 : i);</div><div class="line"><a name="l01598"></a><span class="lineno"> 1598</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01599"></a><span class="lineno"> 1599</span>&#160;                useDouble = <span class="keyword">true</span>;</div><div class="line"><a name="l01600"></a><span class="lineno"> 1600</span>&#160;            }</div><div class="line"><a name="l01601"></a><span class="lineno"> 1601</span>&#160;</div><div class="line"><a name="l01602"></a><span class="lineno"> 1602</span>&#160;            <span class="keywordflow">while</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga5dc14176a9e71ace282404b0bcda57a1">RAPIDJSON_LIKELY</a>(s.Peek() &gt;= <span class="charliteral">&#39;0&#39;</span> &amp;&amp; s.Peek() &lt;= <span class="charliteral">&#39;9&#39;</span>)) {</div><div class="line"><a name="l01603"></a><span class="lineno"> 1603</span>&#160;                <span class="keywordflow">if</span> (significandDigit &lt; 17) {</div><div class="line"><a name="l01604"></a><span class="lineno"> 1604</span>&#160;                    d = d * 10.0 + (s.TakePush() - <span class="charliteral">&#39;0&#39;</span>);</div><div class="line"><a name="l01605"></a><span class="lineno"> 1605</span>&#160;                    --expFrac;</div><div class="line"><a name="l01606"></a><span class="lineno"> 1606</span>&#160;                    <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga5dc14176a9e71ace282404b0bcda57a1">RAPIDJSON_LIKELY</a>(d &gt; 0.0))</div><div class="line"><a name="l01607"></a><span class="lineno"> 1607</span>&#160;                        significandDigit++;</div><div class="line"><a name="l01608"></a><span class="lineno"> 1608</span>&#160;                }</div><div class="line"><a name="l01609"></a><span class="lineno"> 1609</span>&#160;                <span class="keywordflow">else</span></div><div class="line"><a name="l01610"></a><span class="lineno"> 1610</span>&#160;                    s.TakePush();</div><div class="line"><a name="l01611"></a><span class="lineno"> 1611</span>&#160;            }</div><div class="line"><a name="l01612"></a><span class="lineno"> 1612</span>&#160;        }</div><div class="line"><a name="l01613"></a><span class="lineno"> 1613</span>&#160;        <span class="keywordflow">else</span></div><div class="line"><a name="l01614"></a><span class="lineno"> 1614</span>&#160;            decimalPosition = s.Length(); <span class="comment">// decimal position at the end of integer.</span></div><div class="line"><a name="l01615"></a><span class="lineno"> 1615</span>&#160;</div><div class="line"><a name="l01616"></a><span class="lineno"> 1616</span>&#160;        <span class="comment">// Parse exp = e [ minus / plus ] 1*DIGIT</span></div><div class="line"><a name="l01617"></a><span class="lineno"> 1617</span>&#160;        <span class="keywordtype">int</span> exp = 0;</div><div class="line"><a name="l01618"></a><span class="lineno"> 1618</span>&#160;        <span class="keywordflow">if</span> (Consume(s, <span class="charliteral">&#39;e&#39;</span>) || Consume(s, <span class="charliteral">&#39;E&#39;</span>)) {</div><div class="line"><a name="l01619"></a><span class="lineno"> 1619</span>&#160;            <span class="keywordflow">if</span> (!useDouble) {</div><div class="line"><a name="l01620"></a><span class="lineno"> 1620</span>&#160;                d = <span class="keyword">static_cast&lt;</span><span class="keywordtype">double</span><span class="keyword">&gt;</span>(use64bit ? i64 : i);</div><div class="line"><a name="l01621"></a><span class="lineno"> 1621</span>&#160;                useDouble = <span class="keyword">true</span>;</div><div class="line"><a name="l01622"></a><span class="lineno"> 1622</span>&#160;            }</div><div class="line"><a name="l01623"></a><span class="lineno"> 1623</span>&#160;</div><div class="line"><a name="l01624"></a><span class="lineno"> 1624</span>&#160;            <span class="keywordtype">bool</span> expMinus = <span class="keyword">false</span>;</div><div class="line"><a name="l01625"></a><span class="lineno"> 1625</span>&#160;            <span class="keywordflow">if</span> (Consume(s, <span class="charliteral">&#39;+&#39;</span>))</div><div class="line"><a name="l01626"></a><span class="lineno"> 1626</span>&#160;                ;</div><div class="line"><a name="l01627"></a><span class="lineno"> 1627</span>&#160;            <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Consume(s, <span class="charliteral">&#39;-&#39;</span>))</div><div class="line"><a name="l01628"></a><span class="lineno"> 1628</span>&#160;                expMinus = <span class="keyword">true</span>;</div><div class="line"><a name="l01629"></a><span class="lineno"> 1629</span>&#160;</div><div class="line"><a name="l01630"></a><span class="lineno"> 1630</span>&#160;            <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga5dc14176a9e71ace282404b0bcda57a1">RAPIDJSON_LIKELY</a>(s.Peek() &gt;= <span class="charliteral">&#39;0&#39;</span> &amp;&amp; s.Peek() &lt;= <span class="charliteral">&#39;9&#39;</span>)) {</div><div class="line"><a name="l01631"></a><span class="lineno"> 1631</span>&#160;                exp = <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(s.Take() - <span class="charliteral">&#39;0&#39;</span>);</div><div class="line"><a name="l01632"></a><span class="lineno"> 1632</span>&#160;                <span class="keywordflow">if</span> (expMinus) {</div><div class="line"><a name="l01633"></a><span class="lineno"> 1633</span>&#160;                    <span class="comment">// (exp + expFrac) must not underflow int =&gt; we&#39;re detecting when -exp gets</span></div><div class="line"><a name="l01634"></a><span class="lineno"> 1634</span>&#160;                    <span class="comment">// dangerously close to INT_MIN (a pessimistic next digit 9 would push it into</span></div><div class="line"><a name="l01635"></a><span class="lineno"> 1635</span>&#160;                    <span class="comment">// underflow territory):</span></div><div class="line"><a name="l01636"></a><span class="lineno"> 1636</span>&#160;                    <span class="comment">//</span></div><div class="line"><a name="l01637"></a><span class="lineno"> 1637</span>&#160;                    <span class="comment">//        -(exp * 10 + 9) + expFrac &gt;= INT_MIN</span></div><div class="line"><a name="l01638"></a><span class="lineno"> 1638</span>&#160;                    <span class="comment">//   &lt;=&gt;  exp &lt;= (expFrac - INT_MIN - 9) / 10</span></div><div class="line"><a name="l01639"></a><span class="lineno"> 1639</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>(expFrac &lt;= 0);</div><div class="line"><a name="l01640"></a><span class="lineno"> 1640</span>&#160;                    <span class="keywordtype">int</span> maxExp = (expFrac + 2147483639) / 10;</div><div class="line"><a name="l01641"></a><span class="lineno"> 1641</span>&#160;</div><div class="line"><a name="l01642"></a><span class="lineno"> 1642</span>&#160;                    <span class="keywordflow">while</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga5dc14176a9e71ace282404b0bcda57a1">RAPIDJSON_LIKELY</a>(s.Peek() &gt;= <span class="charliteral">&#39;0&#39;</span> &amp;&amp; s.Peek() &lt;= <span class="charliteral">&#39;9&#39;</span>)) {</div><div class="line"><a name="l01643"></a><span class="lineno"> 1643</span>&#160;                        exp = exp * 10 + <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(s.Take() - <span class="charliteral">&#39;0&#39;</span>);</div><div class="line"><a name="l01644"></a><span class="lineno"> 1644</span>&#160;                        <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(exp &gt; maxExp)) {</div><div class="line"><a name="l01645"></a><span class="lineno"> 1645</span>&#160;                            <span class="keywordflow">while</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(s.Peek() &gt;= <span class="charliteral">&#39;0&#39;</span> &amp;&amp; s.Peek() &lt;= <span class="charliteral">&#39;9&#39;</span>))  <span class="comment">// Consume the rest of exponent</span></div><div class="line"><a name="l01646"></a><span class="lineno"> 1646</span>&#160;                                s.Take();</div><div class="line"><a name="l01647"></a><span class="lineno"> 1647</span>&#160;                        }</div><div class="line"><a name="l01648"></a><span class="lineno"> 1648</span>&#160;                    }</div><div class="line"><a name="l01649"></a><span class="lineno"> 1649</span>&#160;                }</div><div class="line"><a name="l01650"></a><span class="lineno"> 1650</span>&#160;                <span class="keywordflow">else</span> {  <span class="comment">// positive exp</span></div><div class="line"><a name="l01651"></a><span class="lineno"> 1651</span>&#160;                    <span class="keywordtype">int</span> maxExp = 308 - expFrac;</div><div class="line"><a name="l01652"></a><span class="lineno"> 1652</span>&#160;                    <span class="keywordflow">while</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga5dc14176a9e71ace282404b0bcda57a1">RAPIDJSON_LIKELY</a>(s.Peek() &gt;= <span class="charliteral">&#39;0&#39;</span> &amp;&amp; s.Peek() &lt;= <span class="charliteral">&#39;9&#39;</span>)) {</div><div class="line"><a name="l01653"></a><span class="lineno"> 1653</span>&#160;                        exp = exp * 10 + <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(s.Take() - <span class="charliteral">&#39;0&#39;</span>);</div><div class="line"><a name="l01654"></a><span class="lineno"> 1654</span>&#160;                        <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(exp &gt; maxExp))</div><div class="line"><a name="l01655"></a><span class="lineno"> 1655</span>&#160;                            <a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gae3689840fa6e89a241313f33b602f865">RAPIDJSON_PARSE_ERROR</a>(<a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gga7d3acf640886b1f2552dc8c4cd6dea60a240cebadea89f7282ab263b5a22c9805">kParseErrorNumberTooBig</a>, startOffset);</div><div class="line"><a name="l01656"></a><span class="lineno"> 1656</span>&#160;                    }</div><div class="line"><a name="l01657"></a><span class="lineno"> 1657</span>&#160;                }</div><div class="line"><a name="l01658"></a><span class="lineno"> 1658</span>&#160;            }</div><div class="line"><a name="l01659"></a><span class="lineno"> 1659</span>&#160;            <span class="keywordflow">else</span></div><div class="line"><a name="l01660"></a><span class="lineno"> 1660</span>&#160;                <a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gae3689840fa6e89a241313f33b602f865">RAPIDJSON_PARSE_ERROR</a>(<a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gga7d3acf640886b1f2552dc8c4cd6dea60a28a1c720ae63560780ccd992dc999ab7">kParseErrorNumberMissExponent</a>, s.Tell());</div><div class="line"><a name="l01661"></a><span class="lineno"> 1661</span>&#160;</div><div class="line"><a name="l01662"></a><span class="lineno"> 1662</span>&#160;            <span class="keywordflow">if</span> (expMinus)</div><div class="line"><a name="l01663"></a><span class="lineno"> 1663</span>&#160;                exp = -exp;</div><div class="line"><a name="l01664"></a><span class="lineno"> 1664</span>&#160;        }</div><div class="line"><a name="l01665"></a><span class="lineno"> 1665</span>&#160;</div><div class="line"><a name="l01666"></a><span class="lineno"> 1666</span>&#160;        <span class="comment">// Finish parsing, call event according to the type of number.</span></div><div class="line"><a name="l01667"></a><span class="lineno"> 1667</span>&#160;        <span class="keywordtype">bool</span> cont = <span class="keyword">true</span>;</div><div class="line"><a name="l01668"></a><span class="lineno"> 1668</span>&#160;</div><div class="line"><a name="l01669"></a><span class="lineno"> 1669</span>&#160;        <span class="keywordflow">if</span> (parseFlags &amp; <a class="code" href="namespacerapidjson.html#a81379eb4e94a0386d71d15fda882ebc9a13981c0b803803f59d7a01aef3dfc987">kParseNumbersAsStringsFlag</a>) {</div><div class="line"><a name="l01670"></a><span class="lineno"> 1670</span>&#160;            <span class="keywordflow">if</span> (parseFlags &amp; kParseInsituFlag) {</div><div class="line"><a name="l01671"></a><span class="lineno"> 1671</span>&#160;                s.Pop();  <span class="comment">// Pop stack no matter if it will be used or not.</span></div><div class="line"><a name="l01672"></a><span class="lineno"> 1672</span>&#160;                <span class="keyword">typename</span> InputStream::Ch* head = is.PutBegin();</div><div class="line"><a name="l01673"></a><span class="lineno"> 1673</span>&#160;                <span class="keyword">const</span> <span class="keywordtype">size_t</span> length = s.Tell() - startOffset;</div><div class="line"><a name="l01674"></a><span class="lineno"> 1674</span>&#160;                <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(length &lt;= 0xFFFFFFFF);</div><div class="line"><a name="l01675"></a><span class="lineno"> 1675</span>&#160;                <span class="comment">// unable to insert the \0 character here, it will erase the comma after this number</span></div><div class="line"><a name="l01676"></a><span class="lineno"> 1676</span>&#160;                <span class="keyword">const</span> <span class="keyword">typename</span> TargetEncoding::Ch* <span class="keyword">const</span> str = <span class="keyword">reinterpret_cast&lt;</span>typename TargetEncoding::Ch*<span class="keyword">&gt;</span>(head);</div><div class="line"><a name="l01677"></a><span class="lineno"> 1677</span>&#160;                cont = handler.RawNumber(str, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a>(length), <span class="keyword">false</span>);</div><div class="line"><a name="l01678"></a><span class="lineno"> 1678</span>&#160;            }</div><div class="line"><a name="l01679"></a><span class="lineno"> 1679</span>&#160;            <span class="keywordflow">else</span> {</div><div class="line"><a name="l01680"></a><span class="lineno"> 1680</span>&#160;                <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> numCharsToCopy = <span class="keyword">static_cast&lt;</span><a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a><span class="keyword">&gt;</span>(s.Length());</div><div class="line"><a name="l01681"></a><span class="lineno"> 1681</span>&#160;                <a class="code" href="structrapidjson_1_1_generic_string_stream.html">StringStream</a> srcStream(s.Pop());</div><div class="line"><a name="l01682"></a><span class="lineno"> 1682</span>&#160;                StackStream&lt;typename TargetEncoding::Ch&gt; dstStream(stack_);</div><div class="line"><a name="l01683"></a><span class="lineno"> 1683</span>&#160;                <span class="keywordflow">while</span> (numCharsToCopy--) {</div><div class="line"><a name="l01684"></a><span class="lineno"> 1684</span>&#160;                    <a class="code" href="structrapidjson_1_1_transcoder.html">Transcoder&lt;UTF8&lt;&gt;</a>, TargetEncoding&gt;::Transcode(srcStream, dstStream);</div><div class="line"><a name="l01685"></a><span class="lineno"> 1685</span>&#160;                }</div><div class="line"><a name="l01686"></a><span class="lineno"> 1686</span>&#160;                dstStream.Put(<span class="charliteral">&#39;\0&#39;</span>);</div><div class="line"><a name="l01687"></a><span class="lineno"> 1687</span>&#160;                <span class="keyword">const</span> <span class="keyword">typename</span> TargetEncoding::Ch* str = dstStream.Pop();</div><div class="line"><a name="l01688"></a><span class="lineno"> 1688</span>&#160;                <span class="keyword">const</span> <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>(dstStream.Length()) - 1;</div><div class="line"><a name="l01689"></a><span class="lineno"> 1689</span>&#160;                cont = handler.RawNumber(str, <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a>(length), <span class="keyword">true</span>);</div><div class="line"><a name="l01690"></a><span class="lineno"> 1690</span>&#160;            }</div><div class="line"><a name="l01691"></a><span class="lineno"> 1691</span>&#160;        }</div><div class="line"><a name="l01692"></a><span class="lineno"> 1692</span>&#160;        <span class="keywordflow">else</span> {</div><div class="line"><a name="l01693"></a><span class="lineno"> 1693</span>&#160;           <span class="keywordtype">size_t</span> length = s.Length();</div><div class="line"><a name="l01694"></a><span class="lineno"> 1694</span>&#160;           <span class="keyword">const</span> <span class="keywordtype">char</span>* decimal = s.Pop();  <span class="comment">// Pop stack no matter if it will be used or not.</span></div><div class="line"><a name="l01695"></a><span class="lineno"> 1695</span>&#160;</div><div class="line"><a name="l01696"></a><span class="lineno"> 1696</span>&#160;           <span class="keywordflow">if</span> (useDouble) {</div><div class="line"><a name="l01697"></a><span class="lineno"> 1697</span>&#160;               <span class="keywordtype">int</span> p = exp + expFrac;</div><div class="line"><a name="l01698"></a><span class="lineno"> 1698</span>&#160;               <span class="keywordflow">if</span> (parseFlags &amp; <a class="code" href="namespacerapidjson.html#a81379eb4e94a0386d71d15fda882ebc9adf80892cdfa076b2d1a7dd9530e15cb0">kParseFullPrecisionFlag</a>)</div><div class="line"><a name="l01699"></a><span class="lineno"> 1699</span>&#160;                   d = internal::StrtodFullPrecision(d, p, decimal, length, decimalPosition, exp);</div><div class="line"><a name="l01700"></a><span class="lineno"> 1700</span>&#160;               <span class="keywordflow">else</span></div><div class="line"><a name="l01701"></a><span class="lineno"> 1701</span>&#160;                   d = internal::StrtodNormalPrecision(d, p);</div><div class="line"><a name="l01702"></a><span class="lineno"> 1702</span>&#160;</div><div class="line"><a name="l01703"></a><span class="lineno"> 1703</span>&#160;               <span class="comment">// Use &gt; max, instead of == inf, to fix bogus warning -Wfloat-equal</span></div><div class="line"><a name="l01704"></a><span class="lineno"> 1704</span>&#160;               <span class="keywordflow">if</span> (d &gt; (std::numeric_limits&lt;double&gt;::max)()) {</div><div class="line"><a name="l01705"></a><span class="lineno"> 1705</span>&#160;                   <span class="comment">// Overflow</span></div><div class="line"><a name="l01706"></a><span class="lineno"> 1706</span>&#160;                   <span class="comment">// TODO: internal::StrtodX should report overflow (or underflow)</span></div><div class="line"><a name="l01707"></a><span class="lineno"> 1707</span>&#160;                   <a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gae3689840fa6e89a241313f33b602f865">RAPIDJSON_PARSE_ERROR</a>(<a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gga7d3acf640886b1f2552dc8c4cd6dea60a240cebadea89f7282ab263b5a22c9805">kParseErrorNumberTooBig</a>, startOffset);</div><div class="line"><a name="l01708"></a><span class="lineno"> 1708</span>&#160;               }</div><div class="line"><a name="l01709"></a><span class="lineno"> 1709</span>&#160;</div><div class="line"><a name="l01710"></a><span class="lineno"> 1710</span>&#160;               cont = handler.Double(minus ? -d : d);</div><div class="line"><a name="l01711"></a><span class="lineno"> 1711</span>&#160;           }</div><div class="line"><a name="l01712"></a><span class="lineno"> 1712</span>&#160;           <span class="keywordflow">else</span> <span class="keywordflow">if</span> (useNanOrInf) {</div><div class="line"><a name="l01713"></a><span class="lineno"> 1713</span>&#160;               cont = handler.Double(d);</div><div class="line"><a name="l01714"></a><span class="lineno"> 1714</span>&#160;           }</div><div class="line"><a name="l01715"></a><span class="lineno"> 1715</span>&#160;           <span class="keywordflow">else</span> {</div><div class="line"><a name="l01716"></a><span class="lineno"> 1716</span>&#160;               <span class="keywordflow">if</span> (use64bit) {</div><div class="line"><a name="l01717"></a><span class="lineno"> 1717</span>&#160;                   <span class="keywordflow">if</span> (minus)</div><div class="line"><a name="l01718"></a><span class="lineno"> 1718</span>&#160;                       cont = handler.Int64(static_cast&lt;int64_t&gt;(~i64 + 1));</div><div class="line"><a name="l01719"></a><span class="lineno"> 1719</span>&#160;                   <span class="keywordflow">else</span></div><div class="line"><a name="l01720"></a><span class="lineno"> 1720</span>&#160;                       cont = handler.Uint64(i64);</div><div class="line"><a name="l01721"></a><span class="lineno"> 1721</span>&#160;               }</div><div class="line"><a name="l01722"></a><span class="lineno"> 1722</span>&#160;               <span class="keywordflow">else</span> {</div><div class="line"><a name="l01723"></a><span class="lineno"> 1723</span>&#160;                   <span class="keywordflow">if</span> (minus)</div><div class="line"><a name="l01724"></a><span class="lineno"> 1724</span>&#160;                       cont = handler.Int(static_cast&lt;int32_t&gt;(~i + 1));</div><div class="line"><a name="l01725"></a><span class="lineno"> 1725</span>&#160;                   <span class="keywordflow">else</span></div><div class="line"><a name="l01726"></a><span class="lineno"> 1726</span>&#160;                       cont = handler.Uint(i);</div><div class="line"><a name="l01727"></a><span class="lineno"> 1727</span>&#160;               }</div><div class="line"><a name="l01728"></a><span class="lineno"> 1728</span>&#160;           }</div><div class="line"><a name="l01729"></a><span class="lineno"> 1729</span>&#160;        }</div><div class="line"><a name="l01730"></a><span class="lineno"> 1730</span>&#160;        <span class="keywordflow">if</span> (<a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a>(!cont))</div><div class="line"><a name="l01731"></a><span class="lineno"> 1731</span>&#160;            <a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gae3689840fa6e89a241313f33b602f865">RAPIDJSON_PARSE_ERROR</a>(<a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gga7d3acf640886b1f2552dc8c4cd6dea60ab250f87c3d8454c579364b5a0f697a50">kParseErrorTermination</a>, startOffset);</div><div class="line"><a name="l01732"></a><span class="lineno"> 1732</span>&#160;    }</div><div class="line"><a name="l01733"></a><span class="lineno"> 1733</span>&#160;</div><div class="line"><a name="l01734"></a><span class="lineno"> 1734</span>&#160;    <span class="comment">// Parse any JSON value</span></div><div class="line"><a name="l01735"></a><span class="lineno"> 1735</span>&#160;    <span class="keyword">template</span>&lt;<span class="keywordtype">unsigned</span> parseFlags, <span class="keyword">typename</span> InputStream, <span class="keyword">typename</span> Handler&gt;</div><div class="line"><a name="l01736"></a><span class="lineno"> 1736</span>&#160;    <span class="keywordtype">void</span> ParseValue(InputStream&amp; is, <a class="code" href="classrapidjson_1_1_handler.html">Handler</a>&amp; handler) {</div><div class="line"><a name="l01737"></a><span class="lineno"> 1737</span>&#160;        <span class="keywordflow">switch</span> (is.Peek()) {</div><div class="line"><a name="l01738"></a><span class="lineno"> 1738</span>&#160;            <span class="keywordflow">case</span> <span class="charliteral">&#39;n&#39;</span>: ParseNull  &lt;parseFlags&gt;(is, handler); <span class="keywordflow">break</span>;</div><div class="line"><a name="l01739"></a><span class="lineno"> 1739</span>&#160;            <span class="keywordflow">case</span> <span class="charliteral">&#39;t&#39;</span>: ParseTrue  &lt;parseFlags&gt;(is, handler); <span class="keywordflow">break</span>;</div><div class="line"><a name="l01740"></a><span class="lineno"> 1740</span>&#160;            <span class="keywordflow">case</span> <span class="charliteral">&#39;f&#39;</span>: ParseFalse &lt;parseFlags&gt;(is, handler); <span class="keywordflow">break</span>;</div><div class="line"><a name="l01741"></a><span class="lineno"> 1741</span>&#160;            <span class="keywordflow">case</span> <span class="charliteral">&#39;&quot;&#39;</span>: ParseString&lt;parseFlags&gt;(is, handler); <span class="keywordflow">break</span>;</div><div class="line"><a name="l01742"></a><span class="lineno"> 1742</span>&#160;            <span class="keywordflow">case</span> <span class="charliteral">&#39;{&#39;</span>: ParseObject&lt;parseFlags&gt;(is, handler); <span class="keywordflow">break</span>;</div><div class="line"><a name="l01743"></a><span class="lineno"> 1743</span>&#160;            <span class="keywordflow">case</span> <span class="charliteral">&#39;[&#39;</span>: ParseArray &lt;parseFlags&gt;(is, handler); <span class="keywordflow">break</span>;</div><div class="line"><a name="l01744"></a><span class="lineno"> 1744</span>&#160;            default :</div><div class="line"><a name="l01745"></a><span class="lineno"> 1745</span>&#160;                      ParseNumber&lt;parseFlags&gt;(is, handler);</div><div class="line"><a name="l01746"></a><span class="lineno"> 1746</span>&#160;                      <span class="keywordflow">break</span>;</div><div class="line"><a name="l01747"></a><span class="lineno"> 1747</span>&#160;</div><div class="line"><a name="l01748"></a><span class="lineno"> 1748</span>&#160;        }</div><div class="line"><a name="l01749"></a><span class="lineno"> 1749</span>&#160;    }</div><div class="line"><a name="l01750"></a><span class="lineno"> 1750</span>&#160;</div><div class="line"><a name="l01751"></a><span class="lineno"> 1751</span>&#160;    <span class="comment">// Iterative Parsing</span></div><div class="line"><a name="l01752"></a><span class="lineno"> 1752</span>&#160;</div><div class="line"><a name="l01753"></a><span class="lineno"> 1753</span>&#160;    <span class="comment">// States</span></div><div class="line"><a name="l01754"></a><span class="lineno"> 1754</span>&#160;    <span class="keyword">enum</span> IterativeParsingState {</div><div class="line"><a name="l01755"></a><span class="lineno"> 1755</span>&#160;        IterativeParsingFinishState = 0, <span class="comment">// sink states at top</span></div><div class="line"><a name="l01756"></a><span class="lineno"> 1756</span>&#160;        IterativeParsingErrorState,      <span class="comment">// sink states at top</span></div><div class="line"><a name="l01757"></a><span class="lineno"> 1757</span>&#160;        IterativeParsingStartState,</div><div class="line"><a name="l01758"></a><span class="lineno"> 1758</span>&#160;</div><div class="line"><a name="l01759"></a><span class="lineno"> 1759</span>&#160;        <span class="comment">// Object states</span></div><div class="line"><a name="l01760"></a><span class="lineno"> 1760</span>&#160;        IterativeParsingObjectInitialState,</div><div class="line"><a name="l01761"></a><span class="lineno"> 1761</span>&#160;        IterativeParsingMemberKeyState,</div><div class="line"><a name="l01762"></a><span class="lineno"> 1762</span>&#160;        IterativeParsingMemberValueState,</div><div class="line"><a name="l01763"></a><span class="lineno"> 1763</span>&#160;        IterativeParsingObjectFinishState,</div><div class="line"><a name="l01764"></a><span class="lineno"> 1764</span>&#160;</div><div class="line"><a name="l01765"></a><span class="lineno"> 1765</span>&#160;        <span class="comment">// Array states</span></div><div class="line"><a name="l01766"></a><span class="lineno"> 1766</span>&#160;        IterativeParsingArrayInitialState,</div><div class="line"><a name="l01767"></a><span class="lineno"> 1767</span>&#160;        IterativeParsingElementState,</div><div class="line"><a name="l01768"></a><span class="lineno"> 1768</span>&#160;        IterativeParsingArrayFinishState,</div><div class="line"><a name="l01769"></a><span class="lineno"> 1769</span>&#160;</div><div class="line"><a name="l01770"></a><span class="lineno"> 1770</span>&#160;        <span class="comment">// Single value state</span></div><div class="line"><a name="l01771"></a><span class="lineno"> 1771</span>&#160;        IterativeParsingValueState,</div><div class="line"><a name="l01772"></a><span class="lineno"> 1772</span>&#160;</div><div class="line"><a name="l01773"></a><span class="lineno"> 1773</span>&#160;        <span class="comment">// Delimiter states (at bottom)</span></div><div class="line"><a name="l01774"></a><span class="lineno"> 1774</span>&#160;        IterativeParsingElementDelimiterState,</div><div class="line"><a name="l01775"></a><span class="lineno"> 1775</span>&#160;        IterativeParsingMemberDelimiterState,</div><div class="line"><a name="l01776"></a><span class="lineno"> 1776</span>&#160;        IterativeParsingKeyValueDelimiterState,</div><div class="line"><a name="l01777"></a><span class="lineno"> 1777</span>&#160;</div><div class="line"><a name="l01778"></a><span class="lineno"> 1778</span>&#160;        cIterativeParsingStateCount</div><div class="line"><a name="l01779"></a><span class="lineno"> 1779</span>&#160;    };</div><div class="line"><a name="l01780"></a><span class="lineno"> 1780</span>&#160;</div><div class="line"><a name="l01781"></a><span class="lineno"> 1781</span>&#160;    <span class="comment">// Tokens</span></div><div class="line"><a name="l01782"></a><span class="lineno"> 1782</span>&#160;    <span class="keyword">enum</span> Token {</div><div class="line"><a name="l01783"></a><span class="lineno"> 1783</span>&#160;        LeftBracketToken = 0,</div><div class="line"><a name="l01784"></a><span class="lineno"> 1784</span>&#160;        RightBracketToken,</div><div class="line"><a name="l01785"></a><span class="lineno"> 1785</span>&#160;</div><div class="line"><a name="l01786"></a><span class="lineno"> 1786</span>&#160;        LeftCurlyBracketToken,</div><div class="line"><a name="l01787"></a><span class="lineno"> 1787</span>&#160;        RightCurlyBracketToken,</div><div class="line"><a name="l01788"></a><span class="lineno"> 1788</span>&#160;</div><div class="line"><a name="l01789"></a><span class="lineno"> 1789</span>&#160;        CommaToken,</div><div class="line"><a name="l01790"></a><span class="lineno"> 1790</span>&#160;        ColonToken,</div><div class="line"><a name="l01791"></a><span class="lineno"> 1791</span>&#160;</div><div class="line"><a name="l01792"></a><span class="lineno"> 1792</span>&#160;        StringToken,</div><div class="line"><a name="l01793"></a><span class="lineno"> 1793</span>&#160;        FalseToken,</div><div class="line"><a name="l01794"></a><span class="lineno"> 1794</span>&#160;        TrueToken,</div><div class="line"><a name="l01795"></a><span class="lineno"> 1795</span>&#160;        NullToken,</div><div class="line"><a name="l01796"></a><span class="lineno"> 1796</span>&#160;        NumberToken,</div><div class="line"><a name="l01797"></a><span class="lineno"> 1797</span>&#160;</div><div class="line"><a name="l01798"></a><span class="lineno"> 1798</span>&#160;        kTokenCount</div><div class="line"><a name="l01799"></a><span class="lineno"> 1799</span>&#160;    };</div><div class="line"><a name="l01800"></a><span class="lineno"> 1800</span>&#160;</div><div class="line"><a name="l01801"></a><span class="lineno"> 1801</span>&#160;    RAPIDJSON_FORCEINLINE Token Tokenize(Ch c)<span class="keyword"> const </span>{</div><div class="line"><a name="l01802"></a><span class="lineno"> 1802</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01803"></a><span class="lineno"> 1803</span>&#160;<span class="comment">//!@cond RAPIDJSON_HIDDEN_FROM_DOXYGEN</span></div><div class="line"><a name="l01804"></a><span class="lineno"> 1804</span>&#160;<span class="comment"></span><span class="preprocessor">#define N NumberToken</span></div><div class="line"><a name="l01805"></a><span class="lineno"> 1805</span>&#160;<span class="preprocessor">#define N16 N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N</span></div><div class="line"><a name="l01806"></a><span class="lineno"> 1806</span>&#160;        <span class="comment">// Maps from ASCII to Token</span></div><div class="line"><a name="l01807"></a><span class="lineno"> 1807</span>&#160;        <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> tokenMap[256] = {</div><div class="line"><a name="l01808"></a><span class="lineno"> 1808</span>&#160;            N16, <span class="comment">// 00~0F</span></div><div class="line"><a name="l01809"></a><span class="lineno"> 1809</span>&#160;            N16, <span class="comment">// 10~1F</span></div><div class="line"><a name="l01810"></a><span class="lineno"> 1810</span>&#160;            N, N, StringToken, N, N, N, N, N, N, N, N, N, CommaToken, N, N, N, <span class="comment">// 20~2F</span></div><div class="line"><a name="l01811"></a><span class="lineno"> 1811</span>&#160;            N, N, N, N, N, N, N, N, N, N, ColonToken, N, N, N, N, N, <span class="comment">// 30~3F</span></div><div class="line"><a name="l01812"></a><span class="lineno"> 1812</span>&#160;            N16, <span class="comment">// 40~4F</span></div><div class="line"><a name="l01813"></a><span class="lineno"> 1813</span>&#160;            N, N, N, N, N, N, N, N, N, N, N, LeftBracketToken, N, RightBracketToken, N, N, <span class="comment">// 50~5F</span></div><div class="line"><a name="l01814"></a><span class="lineno"> 1814</span>&#160;            N, N, N, N, N, N, FalseToken, N, N, N, N, N, N, N, NullToken, N, <span class="comment">// 60~6F</span></div><div class="line"><a name="l01815"></a><span class="lineno"> 1815</span>&#160;            N, N, N, N, TrueToken, N, N, N, N, N, N, LeftCurlyBracketToken, N, RightCurlyBracketToken, N, N, <span class="comment">// 70~7F</span></div><div class="line"><a name="l01816"></a><span class="lineno"> 1816</span>&#160;            N16, N16, N16, N16, N16, N16, N16, N16 <span class="comment">// 80~FF</span></div><div class="line"><a name="l01817"></a><span class="lineno"> 1817</span>&#160;        };</div><div class="line"><a name="l01818"></a><span class="lineno"> 1818</span>&#160;<span class="preprocessor">#undef N</span></div><div class="line"><a name="l01819"></a><span class="lineno"> 1819</span>&#160;<span class="preprocessor">#undef N16</span></div><div class="line"><a name="l01820"></a><span class="lineno"> 1820</span>&#160;<span class="comment">//!@endcond</span></div><div class="line"><a name="l01821"></a><span class="lineno"> 1821</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01822"></a><span class="lineno"> 1822</span>&#160;        <span class="keywordflow">if</span> (<span class="keyword">sizeof</span>(Ch) == 1 || static_cast&lt;unsigned&gt;(c) &lt; 256)</div><div class="line"><a name="l01823"></a><span class="lineno"> 1823</span>&#160;            <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span>Token<span class="keyword">&gt;</span>(tokenMap[<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="l01824"></a><span class="lineno"> 1824</span>&#160;        <span class="keywordflow">else</span></div><div class="line"><a name="l01825"></a><span class="lineno"> 1825</span>&#160;            <span class="keywordflow">return</span> NumberToken;</div><div class="line"><a name="l01826"></a><span class="lineno"> 1826</span>&#160;    }</div><div class="line"><a name="l01827"></a><span class="lineno"> 1827</span>&#160;</div><div class="line"><a name="l01828"></a><span class="lineno"> 1828</span>&#160;    RAPIDJSON_FORCEINLINE IterativeParsingState Predict(IterativeParsingState state, Token token)<span class="keyword"> const </span>{</div><div class="line"><a name="l01829"></a><span class="lineno"> 1829</span>&#160;        <span class="comment">// current state x one lookahead token -&gt; new state</span></div><div class="line"><a name="l01830"></a><span class="lineno"> 1830</span>&#160;        <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> G[cIterativeParsingStateCount][kTokenCount] = {</div><div class="line"><a name="l01831"></a><span class="lineno"> 1831</span>&#160;            <span class="comment">// Finish(sink state)</span></div><div class="line"><a name="l01832"></a><span class="lineno"> 1832</span>&#160;            {</div><div class="line"><a name="l01833"></a><span class="lineno"> 1833</span>&#160;                IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState,</div><div class="line"><a name="l01834"></a><span class="lineno"> 1834</span>&#160;                IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState,</div><div class="line"><a name="l01835"></a><span class="lineno"> 1835</span>&#160;                IterativeParsingErrorState</div><div class="line"><a name="l01836"></a><span class="lineno"> 1836</span>&#160;            },</div><div class="line"><a name="l01837"></a><span class="lineno"> 1837</span>&#160;            <span class="comment">// Error(sink state)</span></div><div class="line"><a name="l01838"></a><span class="lineno"> 1838</span>&#160;            {</div><div class="line"><a name="l01839"></a><span class="lineno"> 1839</span>&#160;                IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState,</div><div class="line"><a name="l01840"></a><span class="lineno"> 1840</span>&#160;                IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState,</div><div class="line"><a name="l01841"></a><span class="lineno"> 1841</span>&#160;                IterativeParsingErrorState</div><div class="line"><a name="l01842"></a><span class="lineno"> 1842</span>&#160;            },</div><div class="line"><a name="l01843"></a><span class="lineno"> 1843</span>&#160;            <span class="comment">// Start</span></div><div class="line"><a name="l01844"></a><span class="lineno"> 1844</span>&#160;            {</div><div class="line"><a name="l01845"></a><span class="lineno"> 1845</span>&#160;                IterativeParsingArrayInitialState,  <span class="comment">// Left bracket</span></div><div class="line"><a name="l01846"></a><span class="lineno"> 1846</span>&#160;                IterativeParsingErrorState,         <span class="comment">// Right bracket</span></div><div class="line"><a name="l01847"></a><span class="lineno"> 1847</span>&#160;                IterativeParsingObjectInitialState, <span class="comment">// Left curly bracket</span></div><div class="line"><a name="l01848"></a><span class="lineno"> 1848</span>&#160;                IterativeParsingErrorState,         <span class="comment">// Right curly bracket</span></div><div class="line"><a name="l01849"></a><span class="lineno"> 1849</span>&#160;                IterativeParsingErrorState,         <span class="comment">// Comma</span></div><div class="line"><a name="l01850"></a><span class="lineno"> 1850</span>&#160;                IterativeParsingErrorState,         <span class="comment">// Colon</span></div><div class="line"><a name="l01851"></a><span class="lineno"> 1851</span>&#160;                IterativeParsingValueState,         <span class="comment">// String</span></div><div class="line"><a name="l01852"></a><span class="lineno"> 1852</span>&#160;                IterativeParsingValueState,         <span class="comment">// False</span></div><div class="line"><a name="l01853"></a><span class="lineno"> 1853</span>&#160;                IterativeParsingValueState,         <span class="comment">// True</span></div><div class="line"><a name="l01854"></a><span class="lineno"> 1854</span>&#160;                IterativeParsingValueState,         <span class="comment">// Null</span></div><div class="line"><a name="l01855"></a><span class="lineno"> 1855</span>&#160;                IterativeParsingValueState          <span class="comment">// Number</span></div><div class="line"><a name="l01856"></a><span class="lineno"> 1856</span>&#160;            },</div><div class="line"><a name="l01857"></a><span class="lineno"> 1857</span>&#160;            <span class="comment">// ObjectInitial</span></div><div class="line"><a name="l01858"></a><span class="lineno"> 1858</span>&#160;            {</div><div class="line"><a name="l01859"></a><span class="lineno"> 1859</span>&#160;                IterativeParsingErrorState,         <span class="comment">// Left bracket</span></div><div class="line"><a name="l01860"></a><span class="lineno"> 1860</span>&#160;                IterativeParsingErrorState,         <span class="comment">// Right bracket</span></div><div class="line"><a name="l01861"></a><span class="lineno"> 1861</span>&#160;                IterativeParsingErrorState,         <span class="comment">// Left curly bracket</span></div><div class="line"><a name="l01862"></a><span class="lineno"> 1862</span>&#160;                IterativeParsingObjectFinishState,  <span class="comment">// Right curly bracket</span></div><div class="line"><a name="l01863"></a><span class="lineno"> 1863</span>&#160;                IterativeParsingErrorState,         <span class="comment">// Comma</span></div><div class="line"><a name="l01864"></a><span class="lineno"> 1864</span>&#160;                IterativeParsingErrorState,         <span class="comment">// Colon</span></div><div class="line"><a name="l01865"></a><span class="lineno"> 1865</span>&#160;                IterativeParsingMemberKeyState,     <span class="comment">// String</span></div><div class="line"><a name="l01866"></a><span class="lineno"> 1866</span>&#160;                IterativeParsingErrorState,         <span class="comment">// False</span></div><div class="line"><a name="l01867"></a><span class="lineno"> 1867</span>&#160;                IterativeParsingErrorState,         <span class="comment">// True</span></div><div class="line"><a name="l01868"></a><span class="lineno"> 1868</span>&#160;                IterativeParsingErrorState,         <span class="comment">// Null</span></div><div class="line"><a name="l01869"></a><span class="lineno"> 1869</span>&#160;                IterativeParsingErrorState          <span class="comment">// Number</span></div><div class="line"><a name="l01870"></a><span class="lineno"> 1870</span>&#160;            },</div><div class="line"><a name="l01871"></a><span class="lineno"> 1871</span>&#160;            <span class="comment">// MemberKey</span></div><div class="line"><a name="l01872"></a><span class="lineno"> 1872</span>&#160;            {</div><div class="line"><a name="l01873"></a><span class="lineno"> 1873</span>&#160;                IterativeParsingErrorState,             <span class="comment">// Left bracket</span></div><div class="line"><a name="l01874"></a><span class="lineno"> 1874</span>&#160;                IterativeParsingErrorState,             <span class="comment">// Right bracket</span></div><div class="line"><a name="l01875"></a><span class="lineno"> 1875</span>&#160;                IterativeParsingErrorState,             <span class="comment">// Left curly bracket</span></div><div class="line"><a name="l01876"></a><span class="lineno"> 1876</span>&#160;                IterativeParsingErrorState,             <span class="comment">// Right curly bracket</span></div><div class="line"><a name="l01877"></a><span class="lineno"> 1877</span>&#160;                IterativeParsingErrorState,             <span class="comment">// Comma</span></div><div class="line"><a name="l01878"></a><span class="lineno"> 1878</span>&#160;                IterativeParsingKeyValueDelimiterState, <span class="comment">// Colon</span></div><div class="line"><a name="l01879"></a><span class="lineno"> 1879</span>&#160;                IterativeParsingErrorState,             <span class="comment">// String</span></div><div class="line"><a name="l01880"></a><span class="lineno"> 1880</span>&#160;                IterativeParsingErrorState,             <span class="comment">// False</span></div><div class="line"><a name="l01881"></a><span class="lineno"> 1881</span>&#160;                IterativeParsingErrorState,             <span class="comment">// True</span></div><div class="line"><a name="l01882"></a><span class="lineno"> 1882</span>&#160;                IterativeParsingErrorState,             <span class="comment">// Null</span></div><div class="line"><a name="l01883"></a><span class="lineno"> 1883</span>&#160;                IterativeParsingErrorState              <span class="comment">// Number</span></div><div class="line"><a name="l01884"></a><span class="lineno"> 1884</span>&#160;            },</div><div class="line"><a name="l01885"></a><span class="lineno"> 1885</span>&#160;            <span class="comment">// MemberValue</span></div><div class="line"><a name="l01886"></a><span class="lineno"> 1886</span>&#160;            {</div><div class="line"><a name="l01887"></a><span class="lineno"> 1887</span>&#160;                IterativeParsingErrorState,             <span class="comment">// Left bracket</span></div><div class="line"><a name="l01888"></a><span class="lineno"> 1888</span>&#160;                IterativeParsingErrorState,             <span class="comment">// Right bracket</span></div><div class="line"><a name="l01889"></a><span class="lineno"> 1889</span>&#160;                IterativeParsingErrorState,             <span class="comment">// Left curly bracket</span></div><div class="line"><a name="l01890"></a><span class="lineno"> 1890</span>&#160;                IterativeParsingObjectFinishState,      <span class="comment">// Right curly bracket</span></div><div class="line"><a name="l01891"></a><span class="lineno"> 1891</span>&#160;                IterativeParsingMemberDelimiterState,   <span class="comment">// Comma</span></div><div class="line"><a name="l01892"></a><span class="lineno"> 1892</span>&#160;                IterativeParsingErrorState,             <span class="comment">// Colon</span></div><div class="line"><a name="l01893"></a><span class="lineno"> 1893</span>&#160;                IterativeParsingErrorState,             <span class="comment">// String</span></div><div class="line"><a name="l01894"></a><span class="lineno"> 1894</span>&#160;                IterativeParsingErrorState,             <span class="comment">// False</span></div><div class="line"><a name="l01895"></a><span class="lineno"> 1895</span>&#160;                IterativeParsingErrorState,             <span class="comment">// True</span></div><div class="line"><a name="l01896"></a><span class="lineno"> 1896</span>&#160;                IterativeParsingErrorState,             <span class="comment">// Null</span></div><div class="line"><a name="l01897"></a><span class="lineno"> 1897</span>&#160;                IterativeParsingErrorState              <span class="comment">// Number</span></div><div class="line"><a name="l01898"></a><span class="lineno"> 1898</span>&#160;            },</div><div class="line"><a name="l01899"></a><span class="lineno"> 1899</span>&#160;            <span class="comment">// ObjectFinish(sink state)</span></div><div class="line"><a name="l01900"></a><span class="lineno"> 1900</span>&#160;            {</div><div class="line"><a name="l01901"></a><span class="lineno"> 1901</span>&#160;                IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState,</div><div class="line"><a name="l01902"></a><span class="lineno"> 1902</span>&#160;                IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState,</div><div class="line"><a name="l01903"></a><span class="lineno"> 1903</span>&#160;                IterativeParsingErrorState</div><div class="line"><a name="l01904"></a><span class="lineno"> 1904</span>&#160;            },</div><div class="line"><a name="l01905"></a><span class="lineno"> 1905</span>&#160;            <span class="comment">// ArrayInitial</span></div><div class="line"><a name="l01906"></a><span class="lineno"> 1906</span>&#160;            {</div><div class="line"><a name="l01907"></a><span class="lineno"> 1907</span>&#160;                IterativeParsingArrayInitialState,      <span class="comment">// Left bracket(push Element state)</span></div><div class="line"><a name="l01908"></a><span class="lineno"> 1908</span>&#160;                IterativeParsingArrayFinishState,       <span class="comment">// Right bracket</span></div><div class="line"><a name="l01909"></a><span class="lineno"> 1909</span>&#160;                IterativeParsingObjectInitialState,     <span class="comment">// Left curly bracket(push Element state)</span></div><div class="line"><a name="l01910"></a><span class="lineno"> 1910</span>&#160;                IterativeParsingErrorState,             <span class="comment">// Right curly bracket</span></div><div class="line"><a name="l01911"></a><span class="lineno"> 1911</span>&#160;                IterativeParsingErrorState,             <span class="comment">// Comma</span></div><div class="line"><a name="l01912"></a><span class="lineno"> 1912</span>&#160;                IterativeParsingErrorState,             <span class="comment">// Colon</span></div><div class="line"><a name="l01913"></a><span class="lineno"> 1913</span>&#160;                IterativeParsingElementState,           <span class="comment">// String</span></div><div class="line"><a name="l01914"></a><span class="lineno"> 1914</span>&#160;                IterativeParsingElementState,           <span class="comment">// False</span></div><div class="line"><a name="l01915"></a><span class="lineno"> 1915</span>&#160;                IterativeParsingElementState,           <span class="comment">// True</span></div><div class="line"><a name="l01916"></a><span class="lineno"> 1916</span>&#160;                IterativeParsingElementState,           <span class="comment">// Null</span></div><div class="line"><a name="l01917"></a><span class="lineno"> 1917</span>&#160;                IterativeParsingElementState            <span class="comment">// Number</span></div><div class="line"><a name="l01918"></a><span class="lineno"> 1918</span>&#160;            },</div><div class="line"><a name="l01919"></a><span class="lineno"> 1919</span>&#160;            <span class="comment">// Element</span></div><div class="line"><a name="l01920"></a><span class="lineno"> 1920</span>&#160;            {</div><div class="line"><a name="l01921"></a><span class="lineno"> 1921</span>&#160;                IterativeParsingErrorState,             <span class="comment">// Left bracket</span></div><div class="line"><a name="l01922"></a><span class="lineno"> 1922</span>&#160;                IterativeParsingArrayFinishState,       <span class="comment">// Right bracket</span></div><div class="line"><a name="l01923"></a><span class="lineno"> 1923</span>&#160;                IterativeParsingErrorState,             <span class="comment">// Left curly bracket</span></div><div class="line"><a name="l01924"></a><span class="lineno"> 1924</span>&#160;                IterativeParsingErrorState,             <span class="comment">// Right curly bracket</span></div><div class="line"><a name="l01925"></a><span class="lineno"> 1925</span>&#160;                IterativeParsingElementDelimiterState,  <span class="comment">// Comma</span></div><div class="line"><a name="l01926"></a><span class="lineno"> 1926</span>&#160;                IterativeParsingErrorState,             <span class="comment">// Colon</span></div><div class="line"><a name="l01927"></a><span class="lineno"> 1927</span>&#160;                IterativeParsingErrorState,             <span class="comment">// String</span></div><div class="line"><a name="l01928"></a><span class="lineno"> 1928</span>&#160;                IterativeParsingErrorState,             <span class="comment">// False</span></div><div class="line"><a name="l01929"></a><span class="lineno"> 1929</span>&#160;                IterativeParsingErrorState,             <span class="comment">// True</span></div><div class="line"><a name="l01930"></a><span class="lineno"> 1930</span>&#160;                IterativeParsingErrorState,             <span class="comment">// Null</span></div><div class="line"><a name="l01931"></a><span class="lineno"> 1931</span>&#160;                IterativeParsingErrorState              <span class="comment">// Number</span></div><div class="line"><a name="l01932"></a><span class="lineno"> 1932</span>&#160;            },</div><div class="line"><a name="l01933"></a><span class="lineno"> 1933</span>&#160;            <span class="comment">// ArrayFinish(sink state)</span></div><div class="line"><a name="l01934"></a><span class="lineno"> 1934</span>&#160;            {</div><div class="line"><a name="l01935"></a><span class="lineno"> 1935</span>&#160;                IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState,</div><div class="line"><a name="l01936"></a><span class="lineno"> 1936</span>&#160;                IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState,</div><div class="line"><a name="l01937"></a><span class="lineno"> 1937</span>&#160;                IterativeParsingErrorState</div><div class="line"><a name="l01938"></a><span class="lineno"> 1938</span>&#160;            },</div><div class="line"><a name="l01939"></a><span class="lineno"> 1939</span>&#160;            <span class="comment">// Single Value (sink state)</span></div><div class="line"><a name="l01940"></a><span class="lineno"> 1940</span>&#160;            {</div><div class="line"><a name="l01941"></a><span class="lineno"> 1941</span>&#160;                IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState,</div><div class="line"><a name="l01942"></a><span class="lineno"> 1942</span>&#160;                IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState,</div><div class="line"><a name="l01943"></a><span class="lineno"> 1943</span>&#160;                IterativeParsingErrorState</div><div class="line"><a name="l01944"></a><span class="lineno"> 1944</span>&#160;            },</div><div class="line"><a name="l01945"></a><span class="lineno"> 1945</span>&#160;            <span class="comment">// ElementDelimiter</span></div><div class="line"><a name="l01946"></a><span class="lineno"> 1946</span>&#160;            {</div><div class="line"><a name="l01947"></a><span class="lineno"> 1947</span>&#160;                IterativeParsingArrayInitialState,      <span class="comment">// Left bracket(push Element state)</span></div><div class="line"><a name="l01948"></a><span class="lineno"> 1948</span>&#160;                IterativeParsingArrayFinishState,       <span class="comment">// Right bracket</span></div><div class="line"><a name="l01949"></a><span class="lineno"> 1949</span>&#160;                IterativeParsingObjectInitialState,     <span class="comment">// Left curly bracket(push Element state)</span></div><div class="line"><a name="l01950"></a><span class="lineno"> 1950</span>&#160;                IterativeParsingErrorState,             <span class="comment">// Right curly bracket</span></div><div class="line"><a name="l01951"></a><span class="lineno"> 1951</span>&#160;                IterativeParsingErrorState,             <span class="comment">// Comma</span></div><div class="line"><a name="l01952"></a><span class="lineno"> 1952</span>&#160;                IterativeParsingErrorState,             <span class="comment">// Colon</span></div><div class="line"><a name="l01953"></a><span class="lineno"> 1953</span>&#160;                IterativeParsingElementState,           <span class="comment">// String</span></div><div class="line"><a name="l01954"></a><span class="lineno"> 1954</span>&#160;                IterativeParsingElementState,           <span class="comment">// False</span></div><div class="line"><a name="l01955"></a><span class="lineno"> 1955</span>&#160;                IterativeParsingElementState,           <span class="comment">// True</span></div><div class="line"><a name="l01956"></a><span class="lineno"> 1956</span>&#160;                IterativeParsingElementState,           <span class="comment">// Null</span></div><div class="line"><a name="l01957"></a><span class="lineno"> 1957</span>&#160;                IterativeParsingElementState            <span class="comment">// Number</span></div><div class="line"><a name="l01958"></a><span class="lineno"> 1958</span>&#160;            },</div><div class="line"><a name="l01959"></a><span class="lineno"> 1959</span>&#160;            <span class="comment">// MemberDelimiter</span></div><div class="line"><a name="l01960"></a><span class="lineno"> 1960</span>&#160;            {</div><div class="line"><a name="l01961"></a><span class="lineno"> 1961</span>&#160;                IterativeParsingErrorState,         <span class="comment">// Left bracket</span></div><div class="line"><a name="l01962"></a><span class="lineno"> 1962</span>&#160;                IterativeParsingErrorState,         <span class="comment">// Right bracket</span></div><div class="line"><a name="l01963"></a><span class="lineno"> 1963</span>&#160;                IterativeParsingErrorState,         <span class="comment">// Left curly bracket</span></div><div class="line"><a name="l01964"></a><span class="lineno"> 1964</span>&#160;                IterativeParsingObjectFinishState,  <span class="comment">// Right curly bracket</span></div><div class="line"><a name="l01965"></a><span class="lineno"> 1965</span>&#160;                IterativeParsingErrorState,         <span class="comment">// Comma</span></div><div class="line"><a name="l01966"></a><span class="lineno"> 1966</span>&#160;                IterativeParsingErrorState,         <span class="comment">// Colon</span></div><div class="line"><a name="l01967"></a><span class="lineno"> 1967</span>&#160;                IterativeParsingMemberKeyState,     <span class="comment">// String</span></div><div class="line"><a name="l01968"></a><span class="lineno"> 1968</span>&#160;                IterativeParsingErrorState,         <span class="comment">// False</span></div><div class="line"><a name="l01969"></a><span class="lineno"> 1969</span>&#160;                IterativeParsingErrorState,         <span class="comment">// True</span></div><div class="line"><a name="l01970"></a><span class="lineno"> 1970</span>&#160;                IterativeParsingErrorState,         <span class="comment">// Null</span></div><div class="line"><a name="l01971"></a><span class="lineno"> 1971</span>&#160;                IterativeParsingErrorState          <span class="comment">// Number</span></div><div class="line"><a name="l01972"></a><span class="lineno"> 1972</span>&#160;            },</div><div class="line"><a name="l01973"></a><span class="lineno"> 1973</span>&#160;            <span class="comment">// KeyValueDelimiter</span></div><div class="line"><a name="l01974"></a><span class="lineno"> 1974</span>&#160;            {</div><div class="line"><a name="l01975"></a><span class="lineno"> 1975</span>&#160;                IterativeParsingArrayInitialState,      <span class="comment">// Left bracket(push MemberValue state)</span></div><div class="line"><a name="l01976"></a><span class="lineno"> 1976</span>&#160;                IterativeParsingErrorState,             <span class="comment">// Right bracket</span></div><div class="line"><a name="l01977"></a><span class="lineno"> 1977</span>&#160;                IterativeParsingObjectInitialState,     <span class="comment">// Left curly bracket(push MemberValue state)</span></div><div class="line"><a name="l01978"></a><span class="lineno"> 1978</span>&#160;                IterativeParsingErrorState,             <span class="comment">// Right curly bracket</span></div><div class="line"><a name="l01979"></a><span class="lineno"> 1979</span>&#160;                IterativeParsingErrorState,             <span class="comment">// Comma</span></div><div class="line"><a name="l01980"></a><span class="lineno"> 1980</span>&#160;                IterativeParsingErrorState,             <span class="comment">// Colon</span></div><div class="line"><a name="l01981"></a><span class="lineno"> 1981</span>&#160;                IterativeParsingMemberValueState,       <span class="comment">// String</span></div><div class="line"><a name="l01982"></a><span class="lineno"> 1982</span>&#160;                IterativeParsingMemberValueState,       <span class="comment">// False</span></div><div class="line"><a name="l01983"></a><span class="lineno"> 1983</span>&#160;                IterativeParsingMemberValueState,       <span class="comment">// True</span></div><div class="line"><a name="l01984"></a><span class="lineno"> 1984</span>&#160;                IterativeParsingMemberValueState,       <span class="comment">// Null</span></div><div class="line"><a name="l01985"></a><span class="lineno"> 1985</span>&#160;                IterativeParsingMemberValueState        <span class="comment">// Number</span></div><div class="line"><a name="l01986"></a><span class="lineno"> 1986</span>&#160;            },</div><div class="line"><a name="l01987"></a><span class="lineno"> 1987</span>&#160;        }; <span class="comment">// End of G</span></div><div class="line"><a name="l01988"></a><span class="lineno"> 1988</span>&#160;</div><div class="line"><a name="l01989"></a><span class="lineno"> 1989</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span>IterativeParsingState<span class="keyword">&gt;</span>(G[state][token]);</div><div class="line"><a name="l01990"></a><span class="lineno"> 1990</span>&#160;    }</div><div class="line"><a name="l01991"></a><span class="lineno"> 1991</span>&#160;</div><div class="line"><a name="l01992"></a><span class="lineno"> 1992</span>&#160;    <span class="comment">// Make an advance in the token stream and state based on the candidate destination state which was returned by Transit().</span></div><div class="line"><a name="l01993"></a><span class="lineno"> 1993</span>&#160;    <span class="comment">// May return a new state on state pop.</span></div><div class="line"><a name="l01994"></a><span class="lineno"> 1994</span>&#160;    <span class="keyword">template</span> &lt;<span class="keywordtype">unsigned</span> parseFlags, <span class="keyword">typename</span> InputStream, <span class="keyword">typename</span> Handler&gt;</div><div class="line"><a name="l01995"></a><span class="lineno"> 1995</span>&#160;    RAPIDJSON_FORCEINLINE IterativeParsingState Transit(IterativeParsingState src, Token token, IterativeParsingState dst, InputStream&amp; is, <a class="code" href="classrapidjson_1_1_handler.html">Handler</a>&amp; handler) {</div><div class="line"><a name="l01996"></a><span class="lineno"> 1996</span>&#160;        (void)token;</div><div class="line"><a name="l01997"></a><span class="lineno"> 1997</span>&#160;</div><div class="line"><a name="l01998"></a><span class="lineno"> 1998</span>&#160;        <span class="keywordflow">switch</span> (dst) {</div><div class="line"><a name="l01999"></a><span class="lineno"> 1999</span>&#160;        <span class="keywordflow">case</span> IterativeParsingErrorState:</div><div class="line"><a name="l02000"></a><span class="lineno"> 2000</span>&#160;            <span class="keywordflow">return</span> dst;</div><div class="line"><a name="l02001"></a><span class="lineno"> 2001</span>&#160;</div><div class="line"><a name="l02002"></a><span class="lineno"> 2002</span>&#160;        <span class="keywordflow">case</span> IterativeParsingObjectInitialState:</div><div class="line"><a name="l02003"></a><span class="lineno"> 2003</span>&#160;        <span class="keywordflow">case</span> IterativeParsingArrayInitialState:</div><div class="line"><a name="l02004"></a><span class="lineno"> 2004</span>&#160;        {</div><div class="line"><a name="l02005"></a><span class="lineno"> 2005</span>&#160;            <span class="comment">// Push the state(Element or MemeberValue) if we are nested in another array or value of member.</span></div><div class="line"><a name="l02006"></a><span class="lineno"> 2006</span>&#160;            <span class="comment">// In this way we can get the correct state on ObjectFinish or ArrayFinish by frame pop.</span></div><div class="line"><a name="l02007"></a><span class="lineno"> 2007</span>&#160;            IterativeParsingState n = src;</div><div class="line"><a name="l02008"></a><span class="lineno"> 2008</span>&#160;            <span class="keywordflow">if</span> (src == IterativeParsingArrayInitialState || src == IterativeParsingElementDelimiterState)</div><div class="line"><a name="l02009"></a><span class="lineno"> 2009</span>&#160;                n = IterativeParsingElementState;</div><div class="line"><a name="l02010"></a><span class="lineno"> 2010</span>&#160;            <span class="keywordflow">else</span> <span class="keywordflow">if</span> (src == IterativeParsingKeyValueDelimiterState)</div><div class="line"><a name="l02011"></a><span class="lineno"> 2011</span>&#160;                n = IterativeParsingMemberValueState;</div><div class="line"><a name="l02012"></a><span class="lineno"> 2012</span>&#160;            <span class="comment">// Push current state.</span></div><div class="line"><a name="l02013"></a><span class="lineno"> 2013</span>&#160;            *stack_.template Push&lt;SizeType&gt;(1) = n;</div><div class="line"><a name="l02014"></a><span class="lineno"> 2014</span>&#160;            <span class="comment">// Initialize and push the member/element count.</span></div><div class="line"><a name="l02015"></a><span class="lineno"> 2015</span>&#160;            *stack_.template Push&lt;SizeType&gt;(1) = 0;</div><div class="line"><a name="l02016"></a><span class="lineno"> 2016</span>&#160;            <span class="comment">// Call handler</span></div><div class="line"><a name="l02017"></a><span class="lineno"> 2017</span>&#160;            <span class="keywordtype">bool</span> hr = (dst == IterativeParsingObjectInitialState) ? handler.StartObject() : handler.StartArray();</div><div class="line"><a name="l02018"></a><span class="lineno"> 2018</span>&#160;            <span class="comment">// On handler short circuits the parsing.</span></div><div class="line"><a name="l02019"></a><span class="lineno"> 2019</span>&#160;            <span class="keywordflow">if</span> (!hr) {</div><div class="line"><a name="l02020"></a><span class="lineno"> 2020</span>&#160;                <a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#ga7f8c4265b2edda78568ae3338aaf1461">RAPIDJSON_PARSE_ERROR_NORETURN</a>(<a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gga7d3acf640886b1f2552dc8c4cd6dea60ab250f87c3d8454c579364b5a0f697a50">kParseErrorTermination</a>, is.Tell());</div><div class="line"><a name="l02021"></a><span class="lineno"> 2021</span>&#160;                <span class="keywordflow">return</span> IterativeParsingErrorState;</div><div class="line"><a name="l02022"></a><span class="lineno"> 2022</span>&#160;            }</div><div class="line"><a name="l02023"></a><span class="lineno"> 2023</span>&#160;            <span class="keywordflow">else</span> {</div><div class="line"><a name="l02024"></a><span class="lineno"> 2024</span>&#160;                is.Take();</div><div class="line"><a name="l02025"></a><span class="lineno"> 2025</span>&#160;                <span class="keywordflow">return</span> dst;</div><div class="line"><a name="l02026"></a><span class="lineno"> 2026</span>&#160;            }</div><div class="line"><a name="l02027"></a><span class="lineno"> 2027</span>&#160;        }</div><div class="line"><a name="l02028"></a><span class="lineno"> 2028</span>&#160;</div><div class="line"><a name="l02029"></a><span class="lineno"> 2029</span>&#160;        <span class="keywordflow">case</span> IterativeParsingMemberKeyState:</div><div class="line"><a name="l02030"></a><span class="lineno"> 2030</span>&#160;            ParseString&lt;parseFlags&gt;(is, handler, <span class="keyword">true</span>);</div><div class="line"><a name="l02031"></a><span class="lineno"> 2031</span>&#160;            <span class="keywordflow">if</span> (HasParseError())</div><div class="line"><a name="l02032"></a><span class="lineno"> 2032</span>&#160;                <span class="keywordflow">return</span> IterativeParsingErrorState;</div><div class="line"><a name="l02033"></a><span class="lineno"> 2033</span>&#160;            <span class="keywordflow">else</span></div><div class="line"><a name="l02034"></a><span class="lineno"> 2034</span>&#160;                <span class="keywordflow">return</span> dst;</div><div class="line"><a name="l02035"></a><span class="lineno"> 2035</span>&#160;</div><div class="line"><a name="l02036"></a><span class="lineno"> 2036</span>&#160;        <span class="keywordflow">case</span> IterativeParsingKeyValueDelimiterState:</div><div class="line"><a name="l02037"></a><span class="lineno"> 2037</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 == ColonToken);</div><div class="line"><a name="l02038"></a><span class="lineno"> 2038</span>&#160;            is.Take();</div><div class="line"><a name="l02039"></a><span class="lineno"> 2039</span>&#160;            <span class="keywordflow">return</span> dst;</div><div class="line"><a name="l02040"></a><span class="lineno"> 2040</span>&#160;</div><div class="line"><a name="l02041"></a><span class="lineno"> 2041</span>&#160;        <span class="keywordflow">case</span> IterativeParsingMemberValueState:</div><div class="line"><a name="l02042"></a><span class="lineno"> 2042</span>&#160;            <span class="comment">// Must be non-compound value. Or it would be ObjectInitial or ArrayInitial state.</span></div><div class="line"><a name="l02043"></a><span class="lineno"> 2043</span>&#160;            ParseValue&lt;parseFlags&gt;(is, handler);</div><div class="line"><a name="l02044"></a><span class="lineno"> 2044</span>&#160;            <span class="keywordflow">if</span> (HasParseError()) {</div><div class="line"><a name="l02045"></a><span class="lineno"> 2045</span>&#160;                <span class="keywordflow">return</span> IterativeParsingErrorState;</div><div class="line"><a name="l02046"></a><span class="lineno"> 2046</span>&#160;            }</div><div class="line"><a name="l02047"></a><span class="lineno"> 2047</span>&#160;            <span class="keywordflow">return</span> dst;</div><div class="line"><a name="l02048"></a><span class="lineno"> 2048</span>&#160;</div><div class="line"><a name="l02049"></a><span class="lineno"> 2049</span>&#160;        <span class="keywordflow">case</span> IterativeParsingElementState:</div><div class="line"><a name="l02050"></a><span class="lineno"> 2050</span>&#160;            <span class="comment">// Must be non-compound value. Or it would be ObjectInitial or ArrayInitial state.</span></div><div class="line"><a name="l02051"></a><span class="lineno"> 2051</span>&#160;            ParseValue&lt;parseFlags&gt;(is, handler);</div><div class="line"><a name="l02052"></a><span class="lineno"> 2052</span>&#160;            <span class="keywordflow">if</span> (HasParseError()) {</div><div class="line"><a name="l02053"></a><span class="lineno"> 2053</span>&#160;                <span class="keywordflow">return</span> IterativeParsingErrorState;</div><div class="line"><a name="l02054"></a><span class="lineno"> 2054</span>&#160;            }</div><div class="line"><a name="l02055"></a><span class="lineno"> 2055</span>&#160;            <span class="keywordflow">return</span> dst;</div><div class="line"><a name="l02056"></a><span class="lineno"> 2056</span>&#160;</div><div class="line"><a name="l02057"></a><span class="lineno"> 2057</span>&#160;        <span class="keywordflow">case</span> IterativeParsingMemberDelimiterState:</div><div class="line"><a name="l02058"></a><span class="lineno"> 2058</span>&#160;        <span class="keywordflow">case</span> IterativeParsingElementDelimiterState:</div><div class="line"><a name="l02059"></a><span class="lineno"> 2059</span>&#160;            is.Take();</div><div class="line"><a name="l02060"></a><span class="lineno"> 2060</span>&#160;            <span class="comment">// Update member/element count.</span></div><div class="line"><a name="l02061"></a><span class="lineno"> 2061</span>&#160;            *stack_.template Top&lt;SizeType&gt;() = *stack_.template Top&lt;SizeType&gt;() + 1;</div><div class="line"><a name="l02062"></a><span class="lineno"> 2062</span>&#160;            <span class="keywordflow">return</span> dst;</div><div class="line"><a name="l02063"></a><span class="lineno"> 2063</span>&#160;</div><div class="line"><a name="l02064"></a><span class="lineno"> 2064</span>&#160;        <span class="keywordflow">case</span> IterativeParsingObjectFinishState:</div><div class="line"><a name="l02065"></a><span class="lineno"> 2065</span>&#160;        {</div><div class="line"><a name="l02066"></a><span class="lineno"> 2066</span>&#160;            <span class="comment">// Transit from delimiter is only allowed when trailing commas are enabled</span></div><div class="line"><a name="l02067"></a><span class="lineno"> 2067</span>&#160;            <span class="keywordflow">if</span> (!(parseFlags &amp; <a class="code" href="namespacerapidjson.html#a81379eb4e94a0386d71d15fda882ebc9af8b8470221dbc6046a40ff31d758ceec">kParseTrailingCommasFlag</a>) &amp;&amp; src == IterativeParsingMemberDelimiterState) {</div><div class="line"><a name="l02068"></a><span class="lineno"> 2068</span>&#160;                <a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#ga7f8c4265b2edda78568ae3338aaf1461">RAPIDJSON_PARSE_ERROR_NORETURN</a>(<a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gga7d3acf640886b1f2552dc8c4cd6dea60ab707b848425668e765def25554735242">kParseErrorObjectMissName</a>, is.Tell());</div><div class="line"><a name="l02069"></a><span class="lineno"> 2069</span>&#160;                <span class="keywordflow">return</span> IterativeParsingErrorState;</div><div class="line"><a name="l02070"></a><span class="lineno"> 2070</span>&#160;            }</div><div class="line"><a name="l02071"></a><span class="lineno"> 2071</span>&#160;            <span class="comment">// Get member count.</span></div><div class="line"><a name="l02072"></a><span class="lineno"> 2072</span>&#160;            <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> c = *stack_.template Pop&lt;SizeType&gt;(1);</div><div class="line"><a name="l02073"></a><span class="lineno"> 2073</span>&#160;            <span class="comment">// If the object is not empty, count the last member.</span></div><div class="line"><a name="l02074"></a><span class="lineno"> 2074</span>&#160;            <span class="keywordflow">if</span> (src == IterativeParsingMemberValueState)</div><div class="line"><a name="l02075"></a><span class="lineno"> 2075</span>&#160;                ++c;</div><div class="line"><a name="l02076"></a><span class="lineno"> 2076</span>&#160;            <span class="comment">// Restore the state.</span></div><div class="line"><a name="l02077"></a><span class="lineno"> 2077</span>&#160;            IterativeParsingState n = <span class="keyword">static_cast&lt;</span>IterativeParsingState<span class="keyword">&gt;</span>(*stack_.template Pop&lt;SizeType&gt;(1));</div><div class="line"><a name="l02078"></a><span class="lineno"> 2078</span>&#160;            <span class="comment">// Transit to Finish state if this is the topmost scope.</span></div><div class="line"><a name="l02079"></a><span class="lineno"> 2079</span>&#160;            <span class="keywordflow">if</span> (n == IterativeParsingStartState)</div><div class="line"><a name="l02080"></a><span class="lineno"> 2080</span>&#160;                n = IterativeParsingFinishState;</div><div class="line"><a name="l02081"></a><span class="lineno"> 2081</span>&#160;            <span class="comment">// Call handler</span></div><div class="line"><a name="l02082"></a><span class="lineno"> 2082</span>&#160;            <span class="keywordtype">bool</span> hr = handler.EndObject(c);</div><div class="line"><a name="l02083"></a><span class="lineno"> 2083</span>&#160;            <span class="comment">// On handler short circuits the parsing.</span></div><div class="line"><a name="l02084"></a><span class="lineno"> 2084</span>&#160;            <span class="keywordflow">if</span> (!hr) {</div><div class="line"><a name="l02085"></a><span class="lineno"> 2085</span>&#160;                <a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#ga7f8c4265b2edda78568ae3338aaf1461">RAPIDJSON_PARSE_ERROR_NORETURN</a>(<a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gga7d3acf640886b1f2552dc8c4cd6dea60ab250f87c3d8454c579364b5a0f697a50">kParseErrorTermination</a>, is.Tell());</div><div class="line"><a name="l02086"></a><span class="lineno"> 2086</span>&#160;                <span class="keywordflow">return</span> IterativeParsingErrorState;</div><div class="line"><a name="l02087"></a><span class="lineno"> 2087</span>&#160;            }</div><div class="line"><a name="l02088"></a><span class="lineno"> 2088</span>&#160;            <span class="keywordflow">else</span> {</div><div class="line"><a name="l02089"></a><span class="lineno"> 2089</span>&#160;                is.Take();</div><div class="line"><a name="l02090"></a><span class="lineno"> 2090</span>&#160;                <span class="keywordflow">return</span> n;</div><div class="line"><a name="l02091"></a><span class="lineno"> 2091</span>&#160;            }</div><div class="line"><a name="l02092"></a><span class="lineno"> 2092</span>&#160;        }</div><div class="line"><a name="l02093"></a><span class="lineno"> 2093</span>&#160;</div><div class="line"><a name="l02094"></a><span class="lineno"> 2094</span>&#160;        <span class="keywordflow">case</span> IterativeParsingArrayFinishState:</div><div class="line"><a name="l02095"></a><span class="lineno"> 2095</span>&#160;        {</div><div class="line"><a name="l02096"></a><span class="lineno"> 2096</span>&#160;            <span class="comment">// Transit from delimiter is only allowed when trailing commas are enabled</span></div><div class="line"><a name="l02097"></a><span class="lineno"> 2097</span>&#160;            <span class="keywordflow">if</span> (!(parseFlags &amp; <a class="code" href="namespacerapidjson.html#a81379eb4e94a0386d71d15fda882ebc9af8b8470221dbc6046a40ff31d758ceec">kParseTrailingCommasFlag</a>) &amp;&amp; src == IterativeParsingElementDelimiterState) {</div><div class="line"><a name="l02098"></a><span class="lineno"> 2098</span>&#160;                <a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#ga7f8c4265b2edda78568ae3338aaf1461">RAPIDJSON_PARSE_ERROR_NORETURN</a>(<a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gga7d3acf640886b1f2552dc8c4cd6dea60ab7fa69bce0c393cf3a2b6065111f2f57">kParseErrorValueInvalid</a>, is.Tell());</div><div class="line"><a name="l02099"></a><span class="lineno"> 2099</span>&#160;                <span class="keywordflow">return</span> IterativeParsingErrorState;</div><div class="line"><a name="l02100"></a><span class="lineno"> 2100</span>&#160;            }</div><div class="line"><a name="l02101"></a><span class="lineno"> 2101</span>&#160;            <span class="comment">// Get element count.</span></div><div class="line"><a name="l02102"></a><span class="lineno"> 2102</span>&#160;            <a class="code" href="namespacerapidjson.html#a44eb33eaa523e36d466b1ced64b85c84">SizeType</a> c = *stack_.template Pop&lt;SizeType&gt;(1);</div><div class="line"><a name="l02103"></a><span class="lineno"> 2103</span>&#160;            <span class="comment">// If the array is not empty, count the last element.</span></div><div class="line"><a name="l02104"></a><span class="lineno"> 2104</span>&#160;            <span class="keywordflow">if</span> (src == IterativeParsingElementState)</div><div class="line"><a name="l02105"></a><span class="lineno"> 2105</span>&#160;                ++c;</div><div class="line"><a name="l02106"></a><span class="lineno"> 2106</span>&#160;            <span class="comment">// Restore the state.</span></div><div class="line"><a name="l02107"></a><span class="lineno"> 2107</span>&#160;            IterativeParsingState n = <span class="keyword">static_cast&lt;</span>IterativeParsingState<span class="keyword">&gt;</span>(*stack_.template Pop&lt;SizeType&gt;(1));</div><div class="line"><a name="l02108"></a><span class="lineno"> 2108</span>&#160;            <span class="comment">// Transit to Finish state if this is the topmost scope.</span></div><div class="line"><a name="l02109"></a><span class="lineno"> 2109</span>&#160;            <span class="keywordflow">if</span> (n == IterativeParsingStartState)</div><div class="line"><a name="l02110"></a><span class="lineno"> 2110</span>&#160;                n = IterativeParsingFinishState;</div><div class="line"><a name="l02111"></a><span class="lineno"> 2111</span>&#160;            <span class="comment">// Call handler</span></div><div class="line"><a name="l02112"></a><span class="lineno"> 2112</span>&#160;            <span class="keywordtype">bool</span> hr = handler.EndArray(c);</div><div class="line"><a name="l02113"></a><span class="lineno"> 2113</span>&#160;            <span class="comment">// On handler short circuits the parsing.</span></div><div class="line"><a name="l02114"></a><span class="lineno"> 2114</span>&#160;            <span class="keywordflow">if</span> (!hr) {</div><div class="line"><a name="l02115"></a><span class="lineno"> 2115</span>&#160;                <a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#ga7f8c4265b2edda78568ae3338aaf1461">RAPIDJSON_PARSE_ERROR_NORETURN</a>(<a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gga7d3acf640886b1f2552dc8c4cd6dea60ab250f87c3d8454c579364b5a0f697a50">kParseErrorTermination</a>, is.Tell());</div><div class="line"><a name="l02116"></a><span class="lineno"> 2116</span>&#160;                <span class="keywordflow">return</span> IterativeParsingErrorState;</div><div class="line"><a name="l02117"></a><span class="lineno"> 2117</span>&#160;            }</div><div class="line"><a name="l02118"></a><span class="lineno"> 2118</span>&#160;            <span class="keywordflow">else</span> {</div><div class="line"><a name="l02119"></a><span class="lineno"> 2119</span>&#160;                is.Take();</div><div class="line"><a name="l02120"></a><span class="lineno"> 2120</span>&#160;                <span class="keywordflow">return</span> n;</div><div class="line"><a name="l02121"></a><span class="lineno"> 2121</span>&#160;            }</div><div class="line"><a name="l02122"></a><span class="lineno"> 2122</span>&#160;        }</div><div class="line"><a name="l02123"></a><span class="lineno"> 2123</span>&#160;</div><div class="line"><a name="l02124"></a><span class="lineno"> 2124</span>&#160;        <span class="keywordflow">default</span>:</div><div class="line"><a name="l02125"></a><span class="lineno"> 2125</span>&#160;            <span class="comment">// This branch is for IterativeParsingValueState actually.</span></div><div class="line"><a name="l02126"></a><span class="lineno"> 2126</span>&#160;            <span class="comment">// Use `default:` rather than</span></div><div class="line"><a name="l02127"></a><span class="lineno"> 2127</span>&#160;            <span class="comment">// `case IterativeParsingValueState:` is for code coverage.</span></div><div class="line"><a name="l02128"></a><span class="lineno"> 2128</span>&#160;</div><div class="line"><a name="l02129"></a><span class="lineno"> 2129</span>&#160;            <span class="comment">// The IterativeParsingStartState is not enumerated in this switch-case.</span></div><div class="line"><a name="l02130"></a><span class="lineno"> 2130</span>&#160;            <span class="comment">// It is impossible for that case. And it can be caught by following assertion.</span></div><div class="line"><a name="l02131"></a><span class="lineno"> 2131</span>&#160;</div><div class="line"><a name="l02132"></a><span class="lineno"> 2132</span>&#160;            <span class="comment">// The IterativeParsingFinishState is not enumerated in this switch-case either.</span></div><div class="line"><a name="l02133"></a><span class="lineno"> 2133</span>&#160;            <span class="comment">// It is a &quot;derivative&quot; state which cannot triggered from Predict() directly.</span></div><div class="line"><a name="l02134"></a><span class="lineno"> 2134</span>&#160;            <span class="comment">// Therefore it cannot happen here. And it can be caught by following assertion.</span></div><div class="line"><a name="l02135"></a><span class="lineno"> 2135</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>(dst == IterativeParsingValueState);</div><div class="line"><a name="l02136"></a><span class="lineno"> 2136</span>&#160;</div><div class="line"><a name="l02137"></a><span class="lineno"> 2137</span>&#160;            <span class="comment">// Must be non-compound value. Or it would be ObjectInitial or ArrayInitial state.</span></div><div class="line"><a name="l02138"></a><span class="lineno"> 2138</span>&#160;            ParseValue&lt;parseFlags&gt;(is, handler);</div><div class="line"><a name="l02139"></a><span class="lineno"> 2139</span>&#160;            <span class="keywordflow">if</span> (HasParseError()) {</div><div class="line"><a name="l02140"></a><span class="lineno"> 2140</span>&#160;                <span class="keywordflow">return</span> IterativeParsingErrorState;</div><div class="line"><a name="l02141"></a><span class="lineno"> 2141</span>&#160;            }</div><div class="line"><a name="l02142"></a><span class="lineno"> 2142</span>&#160;            <span class="keywordflow">return</span> IterativeParsingFinishState;</div><div class="line"><a name="l02143"></a><span class="lineno"> 2143</span>&#160;        }</div><div class="line"><a name="l02144"></a><span class="lineno"> 2144</span>&#160;    }</div><div class="line"><a name="l02145"></a><span class="lineno"> 2145</span>&#160;</div><div class="line"><a name="l02146"></a><span class="lineno"> 2146</span>&#160;    <span class="keyword">template</span> &lt;<span class="keyword">typename</span> InputStream&gt;</div><div class="line"><a name="l02147"></a><span class="lineno"> 2147</span>&#160;    <span class="keywordtype">void</span> HandleError(IterativeParsingState src, InputStream&amp; is) {</div><div class="line"><a name="l02148"></a><span class="lineno"> 2148</span>&#160;        <span class="keywordflow">if</span> (HasParseError()) {</div><div class="line"><a name="l02149"></a><span class="lineno"> 2149</span>&#160;            <span class="comment">// Error flag has been set.</span></div><div class="line"><a name="l02150"></a><span class="lineno"> 2150</span>&#160;            <span class="keywordflow">return</span>;</div><div class="line"><a name="l02151"></a><span class="lineno"> 2151</span>&#160;        }</div><div class="line"><a name="l02152"></a><span class="lineno"> 2152</span>&#160;</div><div class="line"><a name="l02153"></a><span class="lineno"> 2153</span>&#160;        <span class="keywordflow">switch</span> (src) {</div><div class="line"><a name="l02154"></a><span class="lineno"> 2154</span>&#160;        <span class="keywordflow">case</span> IterativeParsingStartState:            <a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gae3689840fa6e89a241313f33b602f865">RAPIDJSON_PARSE_ERROR</a>(<a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gga7d3acf640886b1f2552dc8c4cd6dea60a06183076357ebd9eca228666f614c286">kParseErrorDocumentEmpty</a>, is.Tell()); <span class="keywordflow">return</span>;</div><div class="line"><a name="l02155"></a><span class="lineno"> 2155</span>&#160;        <span class="keywordflow">case</span> IterativeParsingFinishState:           <a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gae3689840fa6e89a241313f33b602f865">RAPIDJSON_PARSE_ERROR</a>(<a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gga7d3acf640886b1f2552dc8c4cd6dea60a2022599bcd4f64d58885a026f95751d5">kParseErrorDocumentRootNotSingular</a>, is.Tell()); <span class="keywordflow">return</span>;</div><div class="line"><a name="l02156"></a><span class="lineno"> 2156</span>&#160;        <span class="keywordflow">case</span> IterativeParsingObjectInitialState:</div><div class="line"><a name="l02157"></a><span class="lineno"> 2157</span>&#160;        <span class="keywordflow">case</span> IterativeParsingMemberDelimiterState:  <a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gae3689840fa6e89a241313f33b602f865">RAPIDJSON_PARSE_ERROR</a>(<a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gga7d3acf640886b1f2552dc8c4cd6dea60ab707b848425668e765def25554735242">kParseErrorObjectMissName</a>, is.Tell()); <span class="keywordflow">return</span>;</div><div class="line"><a name="l02158"></a><span class="lineno"> 2158</span>&#160;        <span class="keywordflow">case</span> IterativeParsingMemberKeyState:        <a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gae3689840fa6e89a241313f33b602f865">RAPIDJSON_PARSE_ERROR</a>(<a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gga7d3acf640886b1f2552dc8c4cd6dea60a58e952084a0dfdbc5630f624252aef5c">kParseErrorObjectMissColon</a>, is.Tell()); <span class="keywordflow">return</span>;</div><div class="line"><a name="l02159"></a><span class="lineno"> 2159</span>&#160;        <span class="keywordflow">case</span> IterativeParsingMemberValueState:      <a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gae3689840fa6e89a241313f33b602f865">RAPIDJSON_PARSE_ERROR</a>(<a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gga7d3acf640886b1f2552dc8c4cd6dea60a2a81a684f39fc882ec99f07e86343f73">kParseErrorObjectMissCommaOrCurlyBracket</a>, is.Tell()); <span class="keywordflow">return</span>;</div><div class="line"><a name="l02160"></a><span class="lineno"> 2160</span>&#160;        <span class="keywordflow">case</span> IterativeParsingKeyValueDelimiterState:</div><div class="line"><a name="l02161"></a><span class="lineno"> 2161</span>&#160;        <span class="keywordflow">case</span> IterativeParsingArrayInitialState:</div><div class="line"><a name="l02162"></a><span class="lineno"> 2162</span>&#160;        <span class="keywordflow">case</span> IterativeParsingElementDelimiterState: <a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gae3689840fa6e89a241313f33b602f865">RAPIDJSON_PARSE_ERROR</a>(<a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gga7d3acf640886b1f2552dc8c4cd6dea60ab7fa69bce0c393cf3a2b6065111f2f57">kParseErrorValueInvalid</a>, is.Tell()); <span class="keywordflow">return</span>;</div><div class="line"><a name="l02163"></a><span class="lineno"> 2163</span>&#160;        <span class="keywordflow">default</span>: <a class="code" href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#gabeba18d612187bad2ac62aed9276d47c">RAPIDJSON_ASSERT</a>(src == IterativeParsingElementState); <a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gae3689840fa6e89a241313f33b602f865">RAPIDJSON_PARSE_ERROR</a>(<a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gga7d3acf640886b1f2552dc8c4cd6dea60a1a4ac97731f997e9591b40f98ecd9f93">kParseErrorArrayMissCommaOrSquareBracket</a>, is.Tell()); <span class="keywordflow">return</span>;</div><div class="line"><a name="l02164"></a><span class="lineno"> 2164</span>&#160;        }</div><div class="line"><a name="l02165"></a><span class="lineno"> 2165</span>&#160;    }</div><div class="line"><a name="l02166"></a><span class="lineno"> 2166</span>&#160;</div><div class="line"><a name="l02167"></a><span class="lineno"> 2167</span>&#160;    RAPIDJSON_FORCEINLINE <span class="keywordtype">bool</span> IsIterativeParsingDelimiterState(IterativeParsingState s)<span class="keyword"> const </span>{</div><div class="line"><a name="l02168"></a><span class="lineno"> 2168</span>&#160;        <span class="keywordflow">return</span> s &gt;= IterativeParsingElementDelimiterState;</div><div class="line"><a name="l02169"></a><span class="lineno"> 2169</span>&#160;    }</div><div class="line"><a name="l02170"></a><span class="lineno"> 2170</span>&#160;</div><div class="line"><a name="l02171"></a><span class="lineno"> 2171</span>&#160;    RAPIDJSON_FORCEINLINE <span class="keywordtype">bool</span> IsIterativeParsingCompleteState(IterativeParsingState s)<span class="keyword"> const </span>{</div><div class="line"><a name="l02172"></a><span class="lineno"> 2172</span>&#160;        <span class="keywordflow">return</span> s &lt;= IterativeParsingErrorState;</div><div class="line"><a name="l02173"></a><span class="lineno"> 2173</span>&#160;    }</div><div class="line"><a name="l02174"></a><span class="lineno"> 2174</span>&#160;</div><div class="line"><a name="l02175"></a><span class="lineno"> 2175</span>&#160;    <span class="keyword">template</span> &lt;<span class="keywordtype">unsigned</span> parseFlags, <span class="keyword">typename</span> InputStream, <span class="keyword">typename</span> Handler&gt;</div><div class="line"><a name="l02176"></a><span class="lineno"> 2176</span>&#160;    <a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#structrapidjson_1_1_parse_result">ParseResult</a> IterativeParse(InputStream&amp; is, <a class="code" href="classrapidjson_1_1_handler.html">Handler</a>&amp; handler) {</div><div class="line"><a name="l02177"></a><span class="lineno"> 2177</span>&#160;        parseResult_.<a class="code" href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#a17c9f7f81675283393222658d613000f">Clear</a>();</div><div class="line"><a name="l02178"></a><span class="lineno"> 2178</span>&#160;        ClearStackOnExit scope(*<span class="keyword">this</span>);</div><div class="line"><a name="l02179"></a><span class="lineno"> 2179</span>&#160;        IterativeParsingState state = IterativeParsingStartState;</div><div class="line"><a name="l02180"></a><span class="lineno"> 2180</span>&#160;</div><div class="line"><a name="l02181"></a><span class="lineno"> 2181</span>&#160;        SkipWhitespaceAndComments&lt;parseFlags&gt;(is);</div><div class="line"><a name="l02182"></a><span class="lineno"> 2182</span>&#160;        RAPIDJSON_PARSE_ERROR_EARLY_RETURN(parseResult_);</div><div class="line"><a name="l02183"></a><span class="lineno"> 2183</span>&#160;        <span class="keywordflow">while</span> (is.Peek() != <span class="charliteral">&#39;\0&#39;</span>) {</div><div class="line"><a name="l02184"></a><span class="lineno"> 2184</span>&#160;            Token t = Tokenize(is.Peek());</div><div class="line"><a name="l02185"></a><span class="lineno"> 2185</span>&#160;            IterativeParsingState n = Predict(state, t);</div><div class="line"><a name="l02186"></a><span class="lineno"> 2186</span>&#160;            IterativeParsingState d = Transit&lt;parseFlags&gt;(state, t, n, is, handler);</div><div class="line"><a name="l02187"></a><span class="lineno"> 2187</span>&#160;</div><div class="line"><a name="l02188"></a><span class="lineno"> 2188</span>&#160;            <span class="keywordflow">if</span> (d == IterativeParsingErrorState) {</div><div class="line"><a name="l02189"></a><span class="lineno"> 2189</span>&#160;                HandleError(state, is);</div><div class="line"><a name="l02190"></a><span class="lineno"> 2190</span>&#160;                <span class="keywordflow">break</span>;</div><div class="line"><a name="l02191"></a><span class="lineno"> 2191</span>&#160;            }</div><div class="line"><a name="l02192"></a><span class="lineno"> 2192</span>&#160;</div><div class="line"><a name="l02193"></a><span class="lineno"> 2193</span>&#160;            state = d;</div><div class="line"><a name="l02194"></a><span class="lineno"> 2194</span>&#160;</div><div class="line"><a name="l02195"></a><span class="lineno"> 2195</span>&#160;            <span class="comment">// Do not further consume streams if a root JSON has been parsed.</span></div><div class="line"><a name="l02196"></a><span class="lineno"> 2196</span>&#160;            <span class="keywordflow">if</span> ((parseFlags &amp; <a class="code" href="namespacerapidjson.html#a81379eb4e94a0386d71d15fda882ebc9af84c60868704433b80aa51a62e042bb1">kParseStopWhenDoneFlag</a>) &amp;&amp; state == IterativeParsingFinishState)</div><div class="line"><a name="l02197"></a><span class="lineno"> 2197</span>&#160;                <span class="keywordflow">break</span>;</div><div class="line"><a name="l02198"></a><span class="lineno"> 2198</span>&#160;</div><div class="line"><a name="l02199"></a><span class="lineno"> 2199</span>&#160;            SkipWhitespaceAndComments&lt;parseFlags&gt;(is);</div><div class="line"><a name="l02200"></a><span class="lineno"> 2200</span>&#160;            RAPIDJSON_PARSE_ERROR_EARLY_RETURN(parseResult_);</div><div class="line"><a name="l02201"></a><span class="lineno"> 2201</span>&#160;        }</div><div class="line"><a name="l02202"></a><span class="lineno"> 2202</span>&#160;</div><div class="line"><a name="l02203"></a><span class="lineno"> 2203</span>&#160;        <span class="comment">// Handle the end of file.</span></div><div class="line"><a name="l02204"></a><span class="lineno"> 2204</span>&#160;        <span class="keywordflow">if</span> (state != IterativeParsingFinishState)</div><div class="line"><a name="l02205"></a><span class="lineno"> 2205</span>&#160;            HandleError(state, is);</div><div class="line"><a name="l02206"></a><span class="lineno"> 2206</span>&#160;</div><div class="line"><a name="l02207"></a><span class="lineno"> 2207</span>&#160;        <span class="keywordflow">return</span> parseResult_;</div><div class="line"><a name="l02208"></a><span class="lineno"> 2208</span>&#160;    }</div><div class="line"><a name="l02209"></a><span class="lineno"> 2209</span>&#160;</div><div class="line"><a name="l02210"></a><span class="lineno"> 2210</span>&#160;    <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">size_t</span> kDefaultStackCapacity = 256;    <span class="comment">//!&lt; Default stack capacity in bytes for storing a single decoded string.</span></div><div class="line"><a name="l02211"></a><span class="lineno"> 2211</span>&#160;<span class="comment"></span>    internal::Stack&lt;StackAllocator&gt; stack_;  <span class="comment">//!&lt; A stack for storing decoded string temporarily during non-destructive parsing.</span></div><div class="line"><a name="l02212"></a><span class="lineno"> 2212</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#structrapidjson_1_1_parse_result">ParseResult</a> parseResult_;</div><div class="line"><a name="l02213"></a><span class="lineno"> 2213</span>&#160;    IterativeParsingState state_;</div><div class="line"><a name="l02214"></a><span class="lineno"> 2214</span>&#160;}; <span class="comment">// class GenericReader</span></div><div class="line"><a name="l02215"></a><span class="lineno"> 2215</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02216"></a><span class="lineno"> 2216</span>&#160;<span class="comment">//! Reader with UTF8 encoding and default allocator.</span></div><div class="line"><a name="l02217"></a><span class="lineno"> 2217</span>&#160;<span class="comment"></span><span class="keyword">typedef</span> <a class="code" href="classrapidjson_1_1_generic_reader.html">GenericReader&lt;UTF8&lt;&gt;</a>, <a class="code" href="structrapidjson_1_1_u_t_f8.html">UTF8&lt;&gt;</a> &gt; <a class="code" href="classrapidjson_1_1_generic_reader.html">Reader</a>;</div><div class="line"><a name="l02218"></a><span class="lineno"> 2218</span>&#160;</div><div class="line"><a name="l02219"></a><span class="lineno"> 2219</span>&#160;RAPIDJSON_NAMESPACE_END</div><div class="line"><a name="l02220"></a><span class="lineno"> 2220</span>&#160;</div><div class="line"><a name="l02221"></a><span class="lineno"> 2221</span>&#160;<span class="preprocessor">#if defined(__clang__) || defined(_MSC_VER)</span></div><div class="line"><a name="l02222"></a><span class="lineno"> 2222</span>&#160;RAPIDJSON_DIAG_POP</div><div class="line"><a name="l02223"></a><span class="lineno"> 2223</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02224"></a><span class="lineno"> 2224</span>&#160;</div><div class="line"><a name="l02225"></a><span class="lineno"> 2225</span>&#160;</div><div class="line"><a name="l02226"></a><span class="lineno"> 2226</span>&#160;<span class="preprocessor">#ifdef __GNUC__</span></div><div class="line"><a name="l02227"></a><span class="lineno"> 2227</span>&#160;RAPIDJSON_DIAG_POP</div><div class="line"><a name="l02228"></a><span class="lineno"> 2228</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l02229"></a><span class="lineno"> 2229</span>&#160;</div><div class="line"><a name="l02230"></a><span class="lineno"> 2230</span>&#160;<span class="preprocessor">#endif // RAPIDJSON_READER_H_</span></div><div class="ttc" id="namespacerapidjson_html_a81379eb4e94a0386d71d15fda882ebc9a857894ab51cafa62956e9c9f0dafc4d8"><div class="ttname"><a href="namespacerapidjson.html#a81379eb4e94a0386d71d15fda882ebc9a857894ab51cafa62956e9c9f0dafc4d8">rapidjson::kParseNanAndInfFlag</a></div><div class="ttdoc">Allow parsing NaN, Inf, Infinity, -Inf and -Infinity as doubles. </div><div class="ttdef"><b>Definition:</b> reader.h:155</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="namespacerapidjson_html_a81379eb4e94a0386d71d15fda882ebc9a7923686c8bdb7614699f1fb1bb615bb2"><div class="ttname"><a href="namespacerapidjson.html#a81379eb4e94a0386d71d15fda882ebc9a7923686c8bdb7614699f1fb1bb615bb2">rapidjson::kParseIterativeFlag</a></div><div class="ttdoc">Iterative(constant complexity in terms of function call stack size) parsing. </div><div class="ttdef"><b>Definition:</b> reader.h:149</div></div>
<div class="ttc" id="classrapidjson_1_1_handler_html"><div class="ttname"><a href="classrapidjson_1_1_handler.html">rapidjson::Handler</a></div><div class="ttdoc">Concept for receiving events from GenericReader upon parsing. The functions return true if no error o...</div></div>
<div class="ttc" id="namespacerapidjson_html_a81379eb4e94a0386d71d15fda882ebc9a13981c0b803803f59d7a01aef3dfc987"><div class="ttname"><a href="namespacerapidjson.html#a81379eb4e94a0386d71d15fda882ebc9a13981c0b803803f59d7a01aef3dfc987">rapidjson::kParseNumbersAsStringsFlag</a></div><div class="ttdoc">Parse all numbers (ints/doubles) as strings. </div><div class="ttdef"><b>Definition:</b> reader.h:153</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_reader_html_ac9c540b77de19661f6f45e04b9b0937b"><div class="ttname"><a href="classrapidjson_1_1_generic_reader.html#ac9c540b77de19661f6f45e04b9b0937b">rapidjson::GenericReader::Parse</a></div><div class="ttdeci">ParseResult Parse(InputStream &amp;is, Handler &amp;handler)</div><div class="ttdoc">Parse JSON text. </div><div class="ttdef"><b>Definition:</b> reader.h:557</div></div>
<div class="ttc" id="namespacerapidjson_html_a81379eb4e94a0386d71d15fda882ebc9a3df81f75479da8e052393f92cbec394b"><div class="ttname"><a href="namespacerapidjson.html#a81379eb4e94a0386d71d15fda882ebc9a3df81f75479da8e052393f92cbec394b">rapidjson::kParseValidateEncodingFlag</a></div><div class="ttdoc">Validate encoding of JSON strings. </div><div class="ttdef"><b>Definition:</b> reader.h:148</div></div>
<div class="ttc" id="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s_html_gga7d3acf640886b1f2552dc8c4cd6dea60ab7fa69bce0c393cf3a2b6065111f2f57"><div class="ttname"><a href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gga7d3acf640886b1f2552dc8c4cd6dea60ab7fa69bce0c393cf3a2b6065111f2f57">rapidjson::kParseErrorValueInvalid</a></div><div class="ttdoc">Invalid value. </div><div class="ttdef"><b>Definition:</b> error.h:70</div></div>
<div class="ttc" id="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s_html_gga7d3acf640886b1f2552dc8c4cd6dea60a636209a2e516fbdb4db5ad0a83a6b386"><div class="ttname"><a href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gga7d3acf640886b1f2552dc8c4cd6dea60a636209a2e516fbdb4db5ad0a83a6b386">rapidjson::kParseErrorStringUnicodeSurrogateInvalid</a></div><div class="ttdoc">The surrogate pair in string is invalid. </div><div class="ttdef"><b>Definition:</b> error.h:79</div></div>
<div class="ttc" id="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s_html_gae3689840fa6e89a241313f33b602f865"><div class="ttname"><a href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gae3689840fa6e89a241313f33b602f865">RAPIDJSON_PARSE_ERROR</a></div><div class="ttdeci">#define RAPIDJSON_PARSE_ERROR(parseErrorCode, offset)</div><div class="ttdoc">(Internal) macro to indicate and handle a parse error. </div><div class="ttdef"><b>Definition:</b> reader.h:118</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_reader_html_a037aee35044b894d1487b42365aadc4b"><div class="ttname"><a href="classrapidjson_1_1_generic_reader.html#a037aee35044b894d1487b42365aadc4b">rapidjson::GenericReader::IterativeParseComplete</a></div><div class="ttdeci">RAPIDJSON_FORCEINLINE bool IterativeParseComplete() const</div><div class="ttdoc">Check if token-by-token parsing JSON text is complete </div><div class="ttdef"><b>Definition:</b> reader.h:675</div></div>
<div class="ttc" id="rapidjson_8h_html_aaee1245f375a71be1ac9b8a07ba5fb8f"><div class="ttname"><a href="rapidjson_8h.html#aaee1245f375a71be1ac9b8a07ba5fb8f">RAPIDJSON_UINT64_C2</a></div><div class="ttdeci">#define RAPIDJSON_UINT64_C2(high32, low32)</div><div class="ttdoc">Construct a 64-bit literal by a pair of 32-bit integer. </div><div class="ttdef"><b>Definition:</b> rapidjson.h:289</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_reader_html"><div class="ttname"><a href="classrapidjson_1_1_generic_reader.html">rapidjson::GenericReader</a></div><div class="ttdoc">SAX-style JSON parser. Use Reader for UTF8 encoding and default allocator. </div><div class="ttdef"><b>Definition:</b> fwd.h:88</div></div>
<div class="ttc" id="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="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s_html_gga7d3acf640886b1f2552dc8c4cd6dea60a58e952084a0dfdbc5630f624252aef5c"><div class="ttname"><a href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gga7d3acf640886b1f2552dc8c4cd6dea60a58e952084a0dfdbc5630f624252aef5c">rapidjson::kParseErrorObjectMissColon</a></div><div class="ttdoc">Missing a colon after a name of object member. </div><div class="ttdef"><b>Definition:</b> error.h:73</div></div>
<div class="ttc" id="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s_html_gga7d3acf640886b1f2552dc8c4cd6dea60a23c38bf88b8448555c0eb41e1735bd92"><div class="ttname"><a href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gga7d3acf640886b1f2552dc8c4cd6dea60a23c38bf88b8448555c0eb41e1735bd92">rapidjson::kParseErrorStringUnicodeEscapeInvalidHex</a></div><div class="ttdoc">Incorrect hex digit after \u escape in string. </div><div class="ttdef"><b>Definition:</b> error.h:78</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_reader_html_a042c621cf745c5ed3a6f5ff9418dd05e"><div class="ttname"><a href="classrapidjson_1_1_generic_reader.html#a042c621cf745c5ed3a6f5ff9418dd05e">rapidjson::GenericReader::GetParseErrorCode</a></div><div class="ttdeci">ParseErrorCode GetParseErrorCode() const</div><div class="ttdoc">Get the ParseErrorCode of last parsing. </div><div class="ttdef"><b>Definition:</b> reader.h:683</div></div>
<div class="ttc" id="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s_html_gga7d3acf640886b1f2552dc8c4cd6dea60ac840ece3ba6874fe6f16c01ebb71031f"><div class="ttname"><a href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gga7d3acf640886b1f2552dc8c4cd6dea60ac840ece3ba6874fe6f16c01ebb71031f">rapidjson::kParseErrorNumberMissFraction</a></div><div class="ttdoc">Miss fraction part in number. </div><div class="ttdef"><b>Definition:</b> error.h:85</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="structrapidjson_1_1_base_reader_handler_html_a0de969fd05528960c2a7de51b2265bf1"><div class="ttname"><a href="structrapidjson_1_1_base_reader_handler.html#a0de969fd05528960c2a7de51b2265bf1">rapidjson::BaseReaderHandler::RawNumber</a></div><div class="ttdeci">bool RawNumber(const Ch *str, SizeType len, bool copy)</div><div class="ttdoc">enabled via kParseNumbersAsStringsFlag, string is not null-terminated (use length) ...</div><div class="ttdef"><b>Definition:</b> reader.h:210</div></div>
<div class="ttc" id="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s_html_ga7d3acf640886b1f2552dc8c4cd6dea60"><div class="ttname"><a href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#ga7d3acf640886b1f2552dc8c4cd6dea60">rapidjson::ParseErrorCode</a></div><div class="ttdeci">ParseErrorCode</div><div class="ttdoc">Error code of parsing. </div><div class="ttdef"><b>Definition:</b> error.h:64</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_reader_html_a56ab1065ea75167aeacb4802425bf57f"><div class="ttname"><a href="classrapidjson_1_1_generic_reader.html#a56ab1065ea75167aeacb4802425bf57f">rapidjson::GenericReader::GenericReader</a></div><div class="ttdeci">GenericReader(StackAllocator *stackAllocator=0, size_t stackCapacity=kDefaultStackCapacity)</div><div class="ttdoc">Constructor. </div><div class="ttdef"><b>Definition:</b> reader.h:545</div></div>
<div class="ttc" id="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s_html_a17c9f7f81675283393222658d613000f"><div class="ttname"><a href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#a17c9f7f81675283393222658d613000f">rapidjson::ParseResult::Clear</a></div><div class="ttdeci">void Clear()</div><div class="ttdoc">Reset error code. </div><div class="ttdef"><b>Definition:</b> error.h:134</div></div>
<div class="ttc" id="structrapidjson_1_1_memory_stream_html"><div class="ttname"><a href="structrapidjson_1_1_memory_stream.html">rapidjson::MemoryStream</a></div><div class="ttdoc">Represents an in-memory input byte stream. </div><div class="ttdef"><b>Definition:</b> memorystream.h:40</div></div>
<div class="ttc" id="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s_html_gga7d3acf640886b1f2552dc8c4cd6dea60a1a4ac97731f997e9591b40f98ecd9f93"><div class="ttname"><a href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gga7d3acf640886b1f2552dc8c4cd6dea60a1a4ac97731f997e9591b40f98ecd9f93">rapidjson::kParseErrorArrayMissCommaOrSquareBracket</a></div><div class="ttdoc">Missing a comma or &amp;#39;]&amp;#39; after an array element. </div><div class="ttdef"><b>Definition:</b> error.h:76</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_reader_html_ac42370c3497a0e2b6973110f298e3a59"><div class="ttname"><a href="classrapidjson_1_1_generic_reader.html#ac42370c3497a0e2b6973110f298e3a59">rapidjson::GenericReader::HasParseError</a></div><div class="ttdeci">bool HasParseError() const</div><div class="ttdoc">Whether a parse error has occurred in the last parsing. </div><div class="ttdef"><b>Definition:</b> reader.h:680</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_reader_html_a0781d19e8c6bc044d9cc5f5d3dde287e"><div class="ttname"><a href="classrapidjson_1_1_generic_reader.html#a0781d19e8c6bc044d9cc5f5d3dde287e">rapidjson::GenericReader::Ch</a></div><div class="ttdeci">SourceEncoding::Ch Ch</div><div class="ttdoc">SourceEncoding character type </div><div class="ttdef"><b>Definition:</b> reader.h:539</div></div>
<div class="ttc" id="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s_html_gga7d3acf640886b1f2552dc8c4cd6dea60a2022599bcd4f64d58885a026f95751d5"><div class="ttname"><a href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gga7d3acf640886b1f2552dc8c4cd6dea60a2022599bcd4f64d58885a026f95751d5">rapidjson::kParseErrorDocumentRootNotSingular</a></div><div class="ttdoc">The document root must not follow by other values. </div><div class="ttdef"><b>Definition:</b> error.h:68</div></div>
<div class="ttc" id="structrapidjson_1_1_generic_string_stream_html_a9a38a9d5b1ce782cacd4ec1bdf87fc2d"><div class="ttname"><a href="structrapidjson_1_1_generic_string_stream.html#a9a38a9d5b1ce782cacd4ec1bdf87fc2d">rapidjson::GenericStringStream::src_</a></div><div class="ttdeci">const Ch * src_</div><div class="ttdoc">Current read position. </div><div class="ttdef"><b>Definition:</b> stream.h:168</div></div>
<div class="ttc" id="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s_html_ga7f8c4265b2edda78568ae3338aaf1461"><div class="ttname"><a href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#ga7f8c4265b2edda78568ae3338aaf1461">RAPIDJSON_PARSE_ERROR_NORETURN</a></div><div class="ttdeci">#define RAPIDJSON_PARSE_ERROR_NORETURN(parseErrorCode, offset)</div><div class="ttdoc">Macro to indicate a parse error. </div><div class="ttdef"><b>Definition:</b> reader.h:99</div></div>
<div class="ttc" id="namespacerapidjson_html_a81379eb4e94a0386d71d15fda882ebc9af8b8470221dbc6046a40ff31d758ceec"><div class="ttname"><a href="namespacerapidjson.html#a81379eb4e94a0386d71d15fda882ebc9af8b8470221dbc6046a40ff31d758ceec">rapidjson::kParseTrailingCommasFlag</a></div><div class="ttdoc">Allow trailing commas at the end of objects and arrays. </div><div class="ttdef"><b>Definition:</b> reader.h:154</div></div>
<div class="ttc" id="namespacerapidjson_html_a81379eb4e94a0386d71d15fda882ebc9af2c7fa21e9e7656e467bd71079ac8fb0"><div class="ttname"><a href="namespacerapidjson.html#a81379eb4e94a0386d71d15fda882ebc9af2c7fa21e9e7656e467bd71079ac8fb0">rapidjson::kParseNoFlags</a></div><div class="ttdoc">No flags are set. </div><div class="ttdef"><b>Definition:</b> reader.h:146</div></div>
<div class="ttc" id="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g_html_ga5dc14176a9e71ace282404b0bcda57a1"><div class="ttname"><a href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga5dc14176a9e71ace282404b0bcda57a1">RAPIDJSON_LIKELY</a></div><div class="ttdeci">#define RAPIDJSON_LIKELY(x)</div><div class="ttdoc">Compiler branching hint for expression with high probability to be true. </div><div class="ttdef"><b>Definition:</b> rapidjson.h:463</div></div>
<div class="ttc" id="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s_html_gga7d3acf640886b1f2552dc8c4cd6dea60a7abf1a337294d984a3f4d18b5843fb24"><div class="ttname"><a href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gga7d3acf640886b1f2552dc8c4cd6dea60a7abf1a337294d984a3f4d18b5843fb24">rapidjson::kParseErrorUnspecificSyntaxError</a></div><div class="ttdoc">Unspecific syntax error. </div><div class="ttdef"><b>Definition:</b> error.h:89</div></div>
<div class="ttc" id="error_8h_html"><div class="ttname"><a href="error_8h.html">error.h</a></div></div>
<div class="ttc" id="namespacerapidjson_html_a81379eb4e94a0386d71d15fda882ebc9adf80892cdfa076b2d1a7dd9530e15cb0"><div class="ttname"><a href="namespacerapidjson.html#a81379eb4e94a0386d71d15fda882ebc9adf80892cdfa076b2d1a7dd9530e15cb0">rapidjson::kParseFullPrecisionFlag</a></div><div class="ttdoc">Parse number in full precision (but slower). </div><div class="ttdef"><b>Definition:</b> reader.h:151</div></div>
<div class="ttc" id="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s_html_gga7d3acf640886b1f2552dc8c4cd6dea60af7daa91caa53abb881ea231a874a4f40"><div class="ttname"><a href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gga7d3acf640886b1f2552dc8c4cd6dea60af7daa91caa53abb881ea231a874a4f40">rapidjson::kParseErrorStringMissQuotationMark</a></div><div class="ttdoc">Missing a closing quotation mark in string. </div><div class="ttdef"><b>Definition:</b> error.h:81</div></div>
<div class="ttc" id="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s_html_gga7d3acf640886b1f2552dc8c4cd6dea60a8dd0af5e6103a6503c61c38cb2b0bab9"><div class="ttname"><a href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gga7d3acf640886b1f2552dc8c4cd6dea60a8dd0af5e6103a6503c61c38cb2b0bab9">rapidjson::kParseErrorStringEscapeInvalid</a></div><div class="ttdoc">Invalid escape character in string. </div><div class="ttdef"><b>Definition:</b> error.h:80</div></div>
<div class="ttc" id="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s_html_structrapidjson_1_1_parse_result"><div class="ttname"><a href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#structrapidjson_1_1_parse_result">rapidjson::ParseResult</a></div><div class="ttdoc">Result of parsing (wraps ParseErrorCode) </div><div class="ttdef"><b>Definition:</b> error.h:106</div></div>
<div class="ttc" id="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s_html_gga7d3acf640886b1f2552dc8c4cd6dea60ab707b848425668e765def25554735242"><div class="ttname"><a href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gga7d3acf640886b1f2552dc8c4cd6dea60ab707b848425668e765def25554735242">rapidjson::kParseErrorObjectMissName</a></div><div class="ttdoc">Missing a name for object member. </div><div class="ttdef"><b>Definition:</b> error.h:72</div></div>
<div class="ttc" id="namespacerapidjson_html_ae79a4751c1c460ff0de5ecc07874f3e4"><div class="ttname"><a href="namespacerapidjson.html#ae79a4751c1c460ff0de5ecc07874f3e4">rapidjson::Type</a></div><div class="ttdeci">Type</div><div class="ttdoc">Type of JSON value </div><div class="ttdef"><b>Definition:</b> rapidjson.h:631</div></div>
<div class="ttc" id="namespacerapidjson_html_a81379eb4e94a0386d71d15fda882ebc9af84c60868704433b80aa51a62e042bb1"><div class="ttname"><a href="namespacerapidjson.html#a81379eb4e94a0386d71d15fda882ebc9af84c60868704433b80aa51a62e042bb1">rapidjson::kParseStopWhenDoneFlag</a></div><div class="ttdoc">After parsing a complete JSON root from stream, stop further processing the rest of stream...</div><div class="ttdef"><b>Definition:</b> reader.h:150</div></div>
<div class="ttc" id="namespacerapidjson_html_a6efb0f4d2a6f81477a59718d42e9464a"><div class="ttname"><a href="namespacerapidjson.html#a6efb0f4d2a6f81477a59718d42e9464a">rapidjson::SkipWhitespace</a></div><div class="ttdeci">void SkipWhitespace(InputStream &amp;is)</div><div class="ttdoc">Skip the JSON white spaces in a stream. </div><div class="ttdef"><b>Definition:</b> reader.h:264</div></div>
<div class="ttc" id="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g_html_ga6a2b1695c13e77ae425e3cbac980ccb5"><div class="ttname"><a href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga6a2b1695c13e77ae425e3cbac980ccb5">RAPIDJSON_UNLIKELY</a></div><div class="ttdeci">#define RAPIDJSON_UNLIKELY(x)</div><div class="ttdoc">Compiler branching hint for expression with low probability to be true. </div><div class="ttdef"><b>Definition:</b> rapidjson.h:476</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_reader_html_ab50019e0a715320f83b7610b83dcef8f"><div class="ttname"><a href="classrapidjson_1_1_generic_reader.html#ab50019e0a715320f83b7610b83dcef8f">rapidjson::GenericReader::GetErrorOffset</a></div><div class="ttdeci">size_t GetErrorOffset() const</div><div class="ttdoc">Get the position of last parsing error in input, 0 otherwise. </div><div class="ttdef"><b>Definition:</b> reader.h:686</div></div>
<div class="ttc" id="namespacerapidjson_html_a81379eb4e94a0386d71d15fda882ebc9a5640cb00db7814b7f22be3683dda9835"><div class="ttname"><a href="namespacerapidjson.html#a81379eb4e94a0386d71d15fda882ebc9a5640cb00db7814b7f22be3683dda9835">rapidjson::kParseDefaultFlags</a></div><div class="ttdoc">Default parse flags. Can be customized by defining RAPIDJSON_PARSE_DEFAULT_FLAGS </div><div class="ttdef"><b>Definition:</b> reader.h:156</div></div>
<div class="ttc" id="namespacerapidjson_html_a81379eb4e94a0386d71d15fda882ebc9"><div class="ttname"><a href="namespacerapidjson.html#a81379eb4e94a0386d71d15fda882ebc9">rapidjson::ParseFlag</a></div><div class="ttdeci">ParseFlag</div><div class="ttdoc">Combination of parseFlags </div><div class="ttdef"><b>Definition:</b> reader.h:145</div></div>
<div class="ttc" id="namespacerapidjson_html_a81379eb4e94a0386d71d15fda882ebc9ab5d719b36aac626135d5d622d0d837c1"><div class="ttname"><a href="namespacerapidjson.html#a81379eb4e94a0386d71d15fda882ebc9ab5d719b36aac626135d5d622d0d837c1">rapidjson::kParseCommentsFlag</a></div><div class="ttdoc">Allow one-line (//) and multi-line (/**/) comments. </div><div class="ttdef"><b>Definition:</b> reader.h:152</div></div>
<div class="ttc" id="classrapidjson_1_1_encoded_input_stream_html"><div class="ttname"><a href="classrapidjson_1_1_encoded_input_stream.html">rapidjson::EncodedInputStream</a></div><div class="ttdoc">Input byte stream wrapper with a statically bound encoding. </div><div class="ttdef"><b>Definition:</b> encodedstream.h:39</div></div>
<div class="ttc" id="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s_html_gga7d3acf640886b1f2552dc8c4cd6dea60ab250f87c3d8454c579364b5a0f697a50"><div class="ttname"><a href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gga7d3acf640886b1f2552dc8c4cd6dea60ab250f87c3d8454c579364b5a0f697a50">rapidjson::kParseErrorTermination</a></div><div class="ttdoc">Parsing was terminated. </div><div class="ttdef"><b>Definition:</b> error.h:88</div></div>
<div class="ttc" id="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s_html_gga7d3acf640886b1f2552dc8c4cd6dea60a240cebadea89f7282ab263b5a22c9805"><div class="ttname"><a href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gga7d3acf640886b1f2552dc8c4cd6dea60a240cebadea89f7282ab263b5a22c9805">rapidjson::kParseErrorNumberTooBig</a></div><div class="ttdoc">Number too big to be stored in double. </div><div class="ttdef"><b>Definition:</b> error.h:84</div></div>
<div class="ttc" id="structrapidjson_1_1_base_reader_handler_html"><div class="ttname"><a href="structrapidjson_1_1_base_reader_handler.html">rapidjson::BaseReaderHandler</a></div><div class="ttdoc">Default implementation of Handler. </div><div class="ttdef"><b>Definition:</b> fwd.h:85</div></div>
<div class="ttc" id="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s_html_gga7d3acf640886b1f2552dc8c4cd6dea60a28a1c720ae63560780ccd992dc999ab7"><div class="ttname"><a href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gga7d3acf640886b1f2552dc8c4cd6dea60a28a1c720ae63560780ccd992dc999ab7">rapidjson::kParseErrorNumberMissExponent</a></div><div class="ttdoc">Miss exponent in number. </div><div class="ttdef"><b>Definition:</b> error.h:86</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_reader_html_a90403a2c55dadf82fd2bb9d4c66b3280"><div class="ttname"><a href="classrapidjson_1_1_generic_reader.html#a90403a2c55dadf82fd2bb9d4c66b3280">rapidjson::GenericReader::IterativeParseInit</a></div><div class="ttdeci">void IterativeParseInit()</div><div class="ttdoc">Initialize JSON text token-by-token parsing </div><div class="ttdef"><b>Definition:</b> reader.h:605</div></div>
<div class="ttc" id="namespacerapidjson_html_a81379eb4e94a0386d71d15fda882ebc9a02748971d6ea0c5e22c69b8aa7f344ea"><div class="ttname"><a href="namespacerapidjson.html#a81379eb4e94a0386d71d15fda882ebc9a02748971d6ea0c5e22c69b8aa7f344ea">rapidjson::kParseInsituFlag</a></div><div class="ttdoc">In-situ(destructive) parsing. </div><div class="ttdef"><b>Definition:</b> reader.h:147</div></div>
<div class="ttc" id="classrapidjson_1_1_generic_reader_html_a2bac14d193873d661d79ad000473a908"><div class="ttname"><a href="classrapidjson_1_1_generic_reader.html#a2bac14d193873d661d79ad000473a908">rapidjson::GenericReader::Parse</a></div><div class="ttdeci">ParseResult Parse(InputStream &amp;is, Handler &amp;handler)</div><div class="ttdoc">Parse JSON text (with kParseDefaultFlags) </div><div class="ttdef"><b>Definition:</b> reader.h:598</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="classrapidjson_1_1_generic_reader_html_abac6611bec17167de50fede5cd5194ca"><div class="ttname"><a href="classrapidjson_1_1_generic_reader.html#abac6611bec17167de50fede5cd5194ca">rapidjson::GenericReader::IterativeParseNext</a></div><div class="ttdeci">bool IterativeParseNext(InputStream &amp;is, Handler &amp;handler)</div><div class="ttdoc">Parse one token from JSON text </div><div class="ttdef"><b>Definition:</b> reader.h:618</div></div>
<div class="ttc" id="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s_html_gga7d3acf640886b1f2552dc8c4cd6dea60a06183076357ebd9eca228666f614c286"><div class="ttname"><a href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gga7d3acf640886b1f2552dc8c4cd6dea60a06183076357ebd9eca228666f614c286">rapidjson::kParseErrorDocumentEmpty</a></div><div class="ttdoc">The document is empty. </div><div class="ttdef"><b>Definition:</b> error.h:67</div></div>
<div class="ttc" id="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s_html_gga7d3acf640886b1f2552dc8c4cd6dea60a2a81a684f39fc882ec99f07e86343f73"><div class="ttname"><a href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gga7d3acf640886b1f2552dc8c4cd6dea60a2a81a684f39fc882ec99f07e86343f73">rapidjson::kParseErrorObjectMissCommaOrCurlyBracket</a></div><div class="ttdoc">Missing a comma or &amp;#39;}&amp;#39; after an object member. </div><div class="ttdef"><b>Definition:</b> error.h:74</div></div>
<div class="ttc" id="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s_html_gga7d3acf640886b1f2552dc8c4cd6dea60a62ce0f5c74e4ab34ac325d2adda8fa8f"><div class="ttname"><a href="group___r_a_p_i_d_j_s_o_n___e_r_r_o_r_s.html#gga7d3acf640886b1f2552dc8c4cd6dea60a62ce0f5c74e4ab34ac325d2adda8fa8f">rapidjson::kParseErrorStringInvalidEncoding</a></div><div class="ttdoc">Invalid encoding in string. </div><div class="ttdef"><b>Definition:</b> error.h:82</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="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g_html_ga77005e892e6601599beaf421b0395c31"><div class="ttname"><a href="group___r_a_p_i_d_j_s_o_n___c_o_n_f_i_g.html#ga77005e892e6601599beaf421b0395c31">RAPIDJSON_PARSE_DEFAULT_FLAGS</a></div><div class="ttdeci">#define RAPIDJSON_PARSE_DEFAULT_FLAGS</div><div class="ttdoc">User-defined kParseDefaultFlags definition. </div><div class="ttdef"><b>Definition:</b> reader.h:139</div></div>
<div class="ttc" id="structrapidjson_1_1_generic_insitu_string_stream_html"><div class="ttname"><a href="structrapidjson_1_1_generic_insitu_string_stream.html">rapidjson::GenericInsituStringStream</a></div><div class="ttdoc">A read-write string stream. </div><div class="ttdef"><b>Definition:</b> fwd.h:52</div></div>
</div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->
<!-- HTML footer for doxygen 1.8.7-->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
  <ul>
    <li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_32fb88e4d38e67d524aa70efbc36f66b.html">rapidjson</a></li><li class="navelem"><a class="el" href="reader_8h.html">reader.h</a></li>
  </ul>
</div>
</body>
</html>