json/json_8hpp_source.html
2016-10-15 16:45:47 +02:00

300 lines
1.0 MiB
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!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.12"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>JSON for Modern C++: /Users/niels/Documents/Repositories/json/src/json.hpp Source File</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="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>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="mylayout.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">JSON for Modern C++
&#160;<span id="projectnumber">2.0.6</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.12 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
<!-- 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 id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">json.hpp</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/*</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"> __| | __| | | | JSON for Modern C++</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment">| | |__ | | | | | | version 2.0.6</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment">|_____|_____|_____|_|___| https://github.com/nlohmann/json</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment">Licensed under the MIT License &lt;http://opensource.org/licenses/MIT&gt;.</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment">Copyright (c) 2013-2016 Niels Lohmann &lt;http://nlohmann.me&gt;.</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">Permission is hereby granted, free of charge, to any person obtaining a copy</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment">of this software and associated documentation files (the &quot;Software&quot;), to deal</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment">in the Software without restriction, including without limitation the rights</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment">to use, copy, modify, merge, publish, distribute, sublicense, and/or sell</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment">copies of the Software, and to permit persons to whom the Software is</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment">furnished to do so, subject to the following conditions:</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="comment">The above copyright notice and this permission notice shall be included in all</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment">copies or substantial portions of the Software.</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment">THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment">IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="comment">FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="comment">AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="comment">LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="comment">OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="comment">SOFTWARE.</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="preprocessor">#ifndef NLOHMANN_JSON_HPP</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="preprocessor">#define NLOHMANN_JSON_HPP</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="preprocessor">#include &lt;algorithm&gt;</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="preprocessor">#include &lt;array&gt;</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="preprocessor">#include &lt;cassert&gt;</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="preprocessor">#include &lt;cctype&gt;</span></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="preprocessor">#include &lt;ciso646&gt;</span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;<span class="preprocessor">#include &lt;cmath&gt;</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;<span class="preprocessor">#include &lt;cstddef&gt;</span></div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;<span class="preprocessor">#include &lt;cstdint&gt;</span></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;<span class="preprocessor">#include &lt;cstdlib&gt;</span></div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;<span class="preprocessor">#include &lt;cstring&gt;</span></div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;<span class="preprocessor">#include &lt;functional&gt;</span></div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;<span class="preprocessor">#include &lt;initializer_list&gt;</span></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;<span class="preprocessor">#include &lt;iomanip&gt;</span></div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;<span class="preprocessor">#include &lt;iostream&gt;</span></div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;<span class="preprocessor">#include &lt;iterator&gt;</span></div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;<span class="preprocessor">#include &lt;limits&gt;</span></div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;<span class="preprocessor">#include &lt;locale&gt;</span></div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;<span class="preprocessor">#include &lt;map&gt;</span></div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;<span class="preprocessor">#include &lt;memory&gt;</span></div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;<span class="preprocessor">#include &lt;numeric&gt;</span></div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;<span class="preprocessor">#include &lt;sstream&gt;</span></div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;<span class="preprocessor">#include &lt;stdexcept&gt;</span></div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;<span class="preprocessor">#include &lt;type_traits&gt;</span></div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;<span class="preprocessor">#include &lt;utility&gt;</span></div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;<span class="preprocessor">#include &lt;vector&gt;</span></div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;<span class="comment">// exclude unsupported compilers</span></div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;<span class="preprocessor">#if defined(__clang__)</span></div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;<span class="preprocessor"> #define CLANG_VERSION (__clang_major__ * 10000 + __clang_minor__ * 100 + __clang_patchlevel__)</span></div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;<span class="preprocessor"> #if CLANG_VERSION &lt; 30400</span></div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;<span class="preprocessor"> #error &quot;unsupported Clang version - see https://github.com/nlohmann/json#supported-compilers&quot;</span></div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;<span class="preprocessor"> #endif</span></div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;<span class="preprocessor">#elif defined(__GNUC__)</span></div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;<span class="preprocessor"> #define GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__)</span></div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;<span class="preprocessor"> #if GCC_VERSION &lt; 40900</span></div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;<span class="preprocessor"> #error &quot;unsupported GCC version - see https://github.com/nlohmann/json#supported-compilers&quot;</span></div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;<span class="preprocessor"> #endif</span></div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;<span class="comment">// disable float-equal warnings on GCC/clang</span></div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;<span class="preprocessor">#if defined(__clang__) || defined(__GNUC__) || defined(__GNUG__)</span></div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;<span class="preprocessor"> #pragma GCC diagnostic push</span></div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;<span class="preprocessor"> #pragma GCC diagnostic ignored &quot;-Wfloat-equal&quot;</span></div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160;<span class="comment">// allow for portable deprecation warnings</span></div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;<span class="preprocessor">#if defined(__clang__) || defined(__GNUC__) || defined(__GNUG__)</span></div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;<span class="preprocessor"> #define JSON_DEPRECATED __attribute__((deprecated))</span></div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;<span class="preprocessor">#elif defined(_MSC_VER)</span></div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;<span class="preprocessor"> #define JSON_DEPRECATED __declspec(deprecated)</span></div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;<span class="preprocessor"> #define JSON_DEPRECATED</span></div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160;</div><div class="line"><a name="l00092"></a><span class="lineno"><a class="line" href="namespacenlohmann.html"> 92</a></span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacenlohmann.html">nlohmann</a></div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;{</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;</div><div class="line"><a name="l00100"></a><span class="lineno"><a class="line" href="namespacenlohmann_1_1anonymous__namespace_02json_8hpp_03.html"> 100</a></span>&#160;<span class="keyword">namespace</span></div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160;{</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160;<span class="keyword">struct </span>has_mapped_type</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160;{</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> U, <span class="keyword">typename</span> = <span class="keyword">typename</span> U::mapped_type&gt;</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <span class="keyword">static</span> <span class="keywordtype">int</span> detect(U&amp;&amp;);</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160;</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> detect(...);</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="keyword">static</span> constexpr <span class="keywordtype">bool</span> value =</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; std::is_integral&lt;decltype(detect(std::declval&lt;T&gt;()))&gt;::value;</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160;};</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160;</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160;<span class="keyword">struct </span>DecimalSeparator : std::numpunct&lt;char&gt;</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160;{</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <span class="keywordtype">char</span> do_decimal_point()<span class="keyword"> const</span></div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <span class="keywordflow">return</span> <span class="charliteral">&#39;.&#39;</span>;</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; }</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160;};</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160;</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160;}</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160;</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160;<span class="keyword">template</span> &lt;</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> U, <span class="keyword">typename</span> V, <span class="keyword">typename</span>... Args&gt; <span class="keyword">class </span>ObjectType = std::map,</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> U, <span class="keyword">typename</span>... Args&gt; <span class="keyword">class </span>ArrayType = std::vector,</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; <span class="keyword">class </span>StringType = std::string,</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; <span class="keyword">class </span>BooleanType = bool,</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; <span class="keyword">class </span>NumberIntegerType = std::int64_t,</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; <span class="keyword">class </span>NumberUnsignedType = std::uint64_t,</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; <span class="keyword">class </span>NumberFloatType = double,</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> U&gt; <span class="keyword">class </span>AllocatorType = std::allocator</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; &gt;</div><div class="line"><a name="l00235"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json.html"> 235</a></span>&#160;<span class="keyword">class </span><a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a></div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160;{</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; <span class="keyword">using</span> <a class="code" href="classnlohmann_1_1basic__json.html">basic_json_t</a> = <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a>&lt;ObjectType, ArrayType, StringType,</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; BooleanType, NumberIntegerType, NumberUnsignedType, NumberFloatType,</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; AllocatorType&gt;;</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160;</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; <span class="comment">// forward declarations</span></div><div class="line"><a name="l00245"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1json__reverse__iterator.html"> 245</a></span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Base&gt; <span class="keyword">class </span><a class="code" href="classnlohmann_1_1basic__json_1_1json__reverse__iterator.html">json_reverse_iterator</a>;</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; <span class="keyword">class </span><a class="code" href="classnlohmann_1_1basic__json_1_1json__pointer.html">json_pointer</a>;</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160;</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; <span class="comment">// container types //</span></div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160;</div><div class="line"><a name="l00258"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_ac8d45b57874b4a6e9c07f7d3b5daa1f9.html#ac8d45b57874b4a6e9c07f7d3b5daa1f9"> 258</a></span>&#160; <span class="keyword">using</span> <a class="code" href="classnlohmann_1_1basic__json.html">value_type</a> = <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a>;</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160;</div><div class="line"><a name="l00261"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a3ec8e17be8732fe436e9d6733f52b7a3.html#a3ec8e17be8732fe436e9d6733f52b7a3"> 261</a></span>&#160; <span class="keyword">using</span> <a class="code" href="classnlohmann_1_1basic__json.html">reference</a> = <a class="code" href="classnlohmann_1_1basic__json.html">value_type</a>&amp;;</div><div class="line"><a name="l00263"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_af677a29b0e66edc9f66e5167e4667071.html#af677a29b0e66edc9f66e5167e4667071"> 263</a></span>&#160; <span class="keyword">using</span> <a class="code" href="classnlohmann_1_1basic__json.html">const_reference</a> = <span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json.html">value_type</a>&amp;;</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160;</div><div class="line"><a name="l00266"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_aec316934a555dd1acdd3600e5d4a4cdf.html#aec316934a555dd1acdd3600e5d4a4cdf"> 266</a></span>&#160; <span class="keyword">using</span> <a class="code" href="classnlohmann_1_1basic__json_aec316934a555dd1acdd3600e5d4a4cdf.html#aec316934a555dd1acdd3600e5d4a4cdf">difference_type</a> = std::ptrdiff_t;</div><div class="line"><a name="l00268"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a1579a8f72a230358d6cd1a6e8a62859b.html#a1579a8f72a230358d6cd1a6e8a62859b"> 268</a></span>&#160; <span class="keyword">using</span> <a class="code" href="classnlohmann_1_1basic__json_a1579a8f72a230358d6cd1a6e8a62859b.html#a1579a8f72a230358d6cd1a6e8a62859b">size_type</a> = std::size_t;</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160;</div><div class="line"><a name="l00271"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_aa44ce84b9ac506b905b8fb56c9a0989d.html#aa44ce84b9ac506b905b8fb56c9a0989d"> 271</a></span>&#160; <span class="keyword">using</span> <a class="code" href="classnlohmann_1_1basic__json_aa44ce84b9ac506b905b8fb56c9a0989d.html#aa44ce84b9ac506b905b8fb56c9a0989d">allocator_type</a> = AllocatorType&lt;basic_json&gt;;</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160;</div><div class="line"><a name="l00274"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a9d1b58099dc64695fcf2847ab0b2a7c7.html#a9d1b58099dc64695fcf2847ab0b2a7c7"> 274</a></span>&#160; <span class="keyword">using</span> <a class="code" href="classnlohmann_1_1basic__json_a9d1b58099dc64695fcf2847ab0b2a7c7.html#a9d1b58099dc64695fcf2847ab0b2a7c7">pointer</a> = <span class="keyword">typename</span> std::allocator_traits&lt;allocator_type&gt;::pointer;</div><div class="line"><a name="l00276"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a06efb200b69942eacd1ea22d0f6ccebb.html#a06efb200b69942eacd1ea22d0f6ccebb"> 276</a></span>&#160; <span class="keyword">using</span> <a class="code" href="classnlohmann_1_1basic__json_a06efb200b69942eacd1ea22d0f6ccebb.html#a06efb200b69942eacd1ea22d0f6ccebb">const_pointer</a> = <span class="keyword">typename</span> std::allocator_traits&lt;allocator_type&gt;::const_pointer;</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160;</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; <span class="keyword">class </span><a class="code" href="classnlohmann_1_1basic__json_1_1iterator.html">iterator</a>;</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; <span class="keyword">class </span><a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator.html">const_iterator</a>;</div><div class="line"><a name="l00283"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a2f1f83aa187a56dc5ec7a7027065ac8a.html#a2f1f83aa187a56dc5ec7a7027065ac8a"> 283</a></span>&#160; <span class="keyword">using</span> <a class="code" href="classnlohmann_1_1basic__json_1_1json__reverse__iterator.html">reverse_iterator</a> = <a class="code" href="classnlohmann_1_1basic__json_1_1json__reverse__iterator.html">json_reverse_iterator&lt;typename basic_json::iterator&gt;</a>;</div><div class="line"><a name="l00285"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_ae336fff01f4b78e3e16e5008dc8dbc00.html#ae336fff01f4b78e3e16e5008dc8dbc00"> 285</a></span>&#160; <span class="keyword">using</span> <a class="code" href="classnlohmann_1_1basic__json_1_1json__reverse__iterator.html">const_reverse_iterator</a> = <a class="code" href="classnlohmann_1_1basic__json_1_1json__reverse__iterator.html">json_reverse_iterator&lt;typename basic_json::const_iterator&gt;</a>;</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160;</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160;</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160;</div><div class="line"><a name="l00293"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a1a446a48beed4ea564addfd12d235793.html#a1a446a48beed4ea564addfd12d235793"> 293</a></span>&#160; <span class="keyword">static</span> <a class="code" href="classnlohmann_1_1basic__json_aa44ce84b9ac506b905b8fb56c9a0989d.html#aa44ce84b9ac506b905b8fb56c9a0989d">allocator_type</a> <a class="code" href="classnlohmann_1_1basic__json_a1a446a48beed4ea564addfd12d235793.html#a1a446a48beed4ea564addfd12d235793">get_allocator</a>()</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; {</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classnlohmann_1_1basic__json_aa44ce84b9ac506b905b8fb56c9a0989d.html#aa44ce84b9ac506b905b8fb56c9a0989d">allocator_type</a>();</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; }</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160;</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160;</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; <span class="comment">// JSON value data types //</span></div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160;</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; <span class="keyword">using</span> <a class="code" href="classnlohmann_1_1basic__json_a0ac9894c9de8dc551cf2e5f1c605537f.html#a0ac9894c9de8dc551cf2e5f1c605537f">object_t</a> = ObjectType&lt;StringType,</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a>,</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; std::less&lt;StringType&gt;,</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; AllocatorType&lt;std::pair&lt;<span class="keyword">const</span> StringType,</div><div class="line"><a name="l00395"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a0ac9894c9de8dc551cf2e5f1c605537f.html#a0ac9894c9de8dc551cf2e5f1c605537f"> 395</a></span>&#160; basic_json&gt;&gt;&gt;;</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160;</div><div class="line"><a name="l00441"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_ab00b882d39306d663c23dab110f5cae0.html#ab00b882d39306d663c23dab110f5cae0"> 441</a></span>&#160; <span class="keyword">using</span> <a class="code" href="classnlohmann_1_1basic__json_ab00b882d39306d663c23dab110f5cae0.html#ab00b882d39306d663c23dab110f5cae0">array_t</a> = ArrayType&lt;basic_json, AllocatorType&lt;basic_json&gt;&gt;;</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160;</div><div class="line"><a name="l00488"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_ab63e618bbb0371042b1bec17f5891f42.html#ab63e618bbb0371042b1bec17f5891f42"> 488</a></span>&#160; <span class="keyword">using</span> <a class="code" href="classnlohmann_1_1basic__json_ab63e618bbb0371042b1bec17f5891f42.html#ab63e618bbb0371042b1bec17f5891f42">string_t</a> = StringType;</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160;</div><div class="line"><a name="l00514"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_af3bc3e83aa162d7ba4df16a949872723.html#af3bc3e83aa162d7ba4df16a949872723"> 514</a></span>&#160; <span class="keyword">using</span> <a class="code" href="classnlohmann_1_1basic__json_af3bc3e83aa162d7ba4df16a949872723.html#af3bc3e83aa162d7ba4df16a949872723">boolean_t</a> = BooleanType;</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160;</div><div class="line"><a name="l00586"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_ac4b10b2364f26ce47bdb9a413ff04a59.html#ac4b10b2364f26ce47bdb9a413ff04a59"> 586</a></span>&#160; <span class="keyword">using</span> <a class="code" href="classnlohmann_1_1basic__json_ac4b10b2364f26ce47bdb9a413ff04a59.html#ac4b10b2364f26ce47bdb9a413ff04a59">number_integer_t</a> = NumberIntegerType;</div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160;</div><div class="line"><a name="l00657"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a60a04166c122072ab11eaf9845d9cd1d.html#a60a04166c122072ab11eaf9845d9cd1d"> 657</a></span>&#160; <span class="keyword">using</span> <a class="code" href="classnlohmann_1_1basic__json_a60a04166c122072ab11eaf9845d9cd1d.html#a60a04166c122072ab11eaf9845d9cd1d">number_unsigned_t</a> = NumberUnsignedType;</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160;</div><div class="line"><a name="l00725"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a74a0013e847fdc574b48f931f0e757e1.html#a74a0013e847fdc574b48f931f0e757e1"> 725</a></span>&#160; <span class="keyword">using</span> <a class="code" href="classnlohmann_1_1basic__json_a74a0013e847fdc574b48f931f0e757e1.html#a74a0013e847fdc574b48f931f0e757e1">number_float_t</a> = NumberFloatType;</div><div class="line"><a name="l00726"></a><span class="lineno"> 726</span>&#160;</div><div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160;</div><div class="line"><a name="l00729"></a><span class="lineno"> 729</span>&#160;</div><div class="line"><a name="l00731"></a><span class="lineno"> 731</span>&#160; <span class="comment">// JSON type enumeration //</span></div><div class="line"><a name="l00733"></a><span class="lineno"> 733</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00756"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a231b02148577b69a154b2ce2c87a5522.html#a231b02148577b69a154b2ce2c87a5522"> 756</a></span>&#160; <span class="keyword">enum class</span> <a class="code" href="classnlohmann_1_1basic__json_a231b02148577b69a154b2ce2c87a5522.html#a231b02148577b69a154b2ce2c87a5522">value_t</a> : uint8_t</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; null, </div><div class="line"><a name="l00759"></a><span class="lineno"> 759</span>&#160; object, </div><div class="line"><a name="l00760"></a><span class="lineno"> 760</span>&#160; array, </div><div class="line"><a name="l00761"></a><span class="lineno"> 761</span>&#160; string, </div><div class="line"><a name="l00762"></a><span class="lineno"> 762</span>&#160; boolean, </div><div class="line"><a name="l00763"></a><span class="lineno"> 763</span>&#160; number_integer, </div><div class="line"><a name="l00764"></a><span class="lineno"> 764</span>&#160; number_unsigned, </div><div class="line"><a name="l00765"></a><span class="lineno"> 765</span>&#160; number_float, </div><div class="line"><a name="l00766"></a><span class="lineno"> 766</span>&#160; discarded </div><div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160; };</div><div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160;</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; <span class="keyword">private</span>:</div><div class="line"><a name="l00771"></a><span class="lineno"> 771</span>&#160;</div><div class="line"><a name="l00773"></a><span class="lineno"> 773</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, <span class="keyword">typename</span>... Args&gt;</div><div class="line"><a name="l00774"></a><span class="lineno"> 774</span>&#160; <span class="keyword">static</span> T* create(Args&amp;&amp; ... args)</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; AllocatorType&lt;T&gt; alloc;</div><div class="line"><a name="l00777"></a><span class="lineno"> 777</span>&#160; <span class="keyword">auto</span> deleter = [&amp;](T * object)</div><div class="line"><a name="l00778"></a><span class="lineno"> 778</span>&#160; {</div><div class="line"><a name="l00779"></a><span class="lineno"> 779</span>&#160; alloc.deallocate(<span class="keywordtype">object</span>, 1);</div><div class="line"><a name="l00780"></a><span class="lineno"> 780</span>&#160; };</div><div class="line"><a name="l00781"></a><span class="lineno"> 781</span>&#160; std::unique_ptr&lt;T, decltype(deleter)&gt; object(alloc.allocate(1), deleter);</div><div class="line"><a name="l00782"></a><span class="lineno"> 782</span>&#160; alloc.construct(<span class="keywordtype">object</span>.<span class="keyword">get</span>(), std::forward&lt;Args&gt;(args)...);</div><div class="line"><a name="l00783"></a><span class="lineno"> 783</span>&#160; assert(<span class="keywordtype">object</span>.<span class="keyword">get</span>() != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00784"></a><span class="lineno"> 784</span>&#160; <span class="keywordflow">return</span> <span class="keywordtype">object</span>.release();</div><div class="line"><a name="l00785"></a><span class="lineno"> 785</span>&#160; }</div><div class="line"><a name="l00786"></a><span class="lineno"> 786</span>&#160;</div><div class="line"><a name="l00788"></a><span class="lineno"> 788</span>&#160; <span class="comment">// JSON value storage //</span></div><div class="line"><a name="l00790"></a><span class="lineno"> 790</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00815"></a><span class="lineno"> 815</span>&#160; <span class="keyword">union </span>json_value</div><div class="line"><a name="l00816"></a><span class="lineno"> 816</span>&#160; {</div><div class="line"><a name="l00818"></a><span class="lineno"> 818</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_a0ac9894c9de8dc551cf2e5f1c605537f.html#a0ac9894c9de8dc551cf2e5f1c605537f">object_t</a>* object;</div><div class="line"><a name="l00820"></a><span class="lineno"> 820</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_ab00b882d39306d663c23dab110f5cae0.html#ab00b882d39306d663c23dab110f5cae0">array_t</a>* array;</div><div class="line"><a name="l00822"></a><span class="lineno"> 822</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_ab63e618bbb0371042b1bec17f5891f42.html#ab63e618bbb0371042b1bec17f5891f42">string_t</a>* string;</div><div class="line"><a name="l00824"></a><span class="lineno"> 824</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_af3bc3e83aa162d7ba4df16a949872723.html#af3bc3e83aa162d7ba4df16a949872723">boolean_t</a> boolean;</div><div class="line"><a name="l00826"></a><span class="lineno"> 826</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_ac4b10b2364f26ce47bdb9a413ff04a59.html#ac4b10b2364f26ce47bdb9a413ff04a59">number_integer_t</a> number_integer;</div><div class="line"><a name="l00828"></a><span class="lineno"> 828</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_a60a04166c122072ab11eaf9845d9cd1d.html#a60a04166c122072ab11eaf9845d9cd1d">number_unsigned_t</a> number_unsigned;</div><div class="line"><a name="l00830"></a><span class="lineno"> 830</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_a74a0013e847fdc574b48f931f0e757e1.html#a74a0013e847fdc574b48f931f0e757e1">number_float_t</a> number_float;</div><div class="line"><a name="l00831"></a><span class="lineno"> 831</span>&#160;</div><div class="line"><a name="l00833"></a><span class="lineno"> 833</span>&#160; json_value() = <span class="keywordflow">default</span>;</div><div class="line"><a name="l00835"></a><span class="lineno"> 835</span>&#160; json_value(<a class="code" href="classnlohmann_1_1basic__json_af3bc3e83aa162d7ba4df16a949872723.html#af3bc3e83aa162d7ba4df16a949872723">boolean_t</a> v) noexcept : boolean(v) {}</div><div class="line"><a name="l00837"></a><span class="lineno"> 837</span>&#160; json_value(<a class="code" href="classnlohmann_1_1basic__json_ac4b10b2364f26ce47bdb9a413ff04a59.html#ac4b10b2364f26ce47bdb9a413ff04a59">number_integer_t</a> v) noexcept : number_integer(v) {}</div><div class="line"><a name="l00839"></a><span class="lineno"> 839</span>&#160; json_value(<a class="code" href="classnlohmann_1_1basic__json_a60a04166c122072ab11eaf9845d9cd1d.html#a60a04166c122072ab11eaf9845d9cd1d">number_unsigned_t</a> v) noexcept : number_unsigned(v) {}</div><div class="line"><a name="l00841"></a><span class="lineno"> 841</span>&#160; json_value(<a class="code" href="classnlohmann_1_1basic__json_a74a0013e847fdc574b48f931f0e757e1.html#a74a0013e847fdc574b48f931f0e757e1">number_float_t</a> v) noexcept : number_float(v) {}</div><div class="line"><a name="l00843"></a><span class="lineno"> 843</span>&#160; json_value(<a class="code" href="classnlohmann_1_1basic__json_a231b02148577b69a154b2ce2c87a5522.html#a231b02148577b69a154b2ce2c87a5522">value_t</a> t)</div><div class="line"><a name="l00844"></a><span class="lineno"> 844</span>&#160; {</div><div class="line"><a name="l00845"></a><span class="lineno"> 845</span>&#160; <span class="keywordflow">switch</span> (t)</div><div class="line"><a name="l00846"></a><span class="lineno"> 846</span>&#160; {</div><div class="line"><a name="l00847"></a><span class="lineno"> 847</span>&#160; <span class="keywordflow">case</span> value_t::object:</div><div class="line"><a name="l00848"></a><span class="lineno"> 848</span>&#160; {</div><div class="line"><a name="l00849"></a><span class="lineno"> 849</span>&#160; <span class="keywordtype">object</span> = create&lt;object_t&gt;();</div><div class="line"><a name="l00850"></a><span class="lineno"> 850</span>&#160; <span class="keywordflow">break</span>;</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="keywordflow">case</span> value_t::array:</div><div class="line"><a name="l00854"></a><span class="lineno"> 854</span>&#160; {</div><div class="line"><a name="l00855"></a><span class="lineno"> 855</span>&#160; array = create&lt;array_t&gt;();</div><div class="line"><a name="l00856"></a><span class="lineno"> 856</span>&#160; <span class="keywordflow">break</span>;</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;</div><div class="line"><a name="l00859"></a><span class="lineno"> 859</span>&#160; <span class="keywordflow">case</span> value_t::string:</div><div class="line"><a name="l00860"></a><span class="lineno"> 860</span>&#160; {</div><div class="line"><a name="l00861"></a><span class="lineno"> 861</span>&#160; <span class="keywordtype">string</span> = create&lt;string_t&gt;(<span class="stringliteral">&quot;&quot;</span>);</div><div class="line"><a name="l00862"></a><span class="lineno"> 862</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00863"></a><span class="lineno"> 863</span>&#160; }</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; <span class="keywordflow">case</span> value_t::boolean:</div><div class="line"><a name="l00866"></a><span class="lineno"> 866</span>&#160; {</div><div class="line"><a name="l00867"></a><span class="lineno"> 867</span>&#160; <span class="keywordtype">boolean</span> = <a class="code" href="classnlohmann_1_1basic__json_af3bc3e83aa162d7ba4df16a949872723.html#af3bc3e83aa162d7ba4df16a949872723">boolean_t</a>(<span class="keyword">false</span>);</div><div class="line"><a name="l00868"></a><span class="lineno"> 868</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00869"></a><span class="lineno"> 869</span>&#160; }</div><div class="line"><a name="l00870"></a><span class="lineno"> 870</span>&#160;</div><div class="line"><a name="l00871"></a><span class="lineno"> 871</span>&#160; <span class="keywordflow">case</span> value_t::number_integer:</div><div class="line"><a name="l00872"></a><span class="lineno"> 872</span>&#160; {</div><div class="line"><a name="l00873"></a><span class="lineno"> 873</span>&#160; number_integer = <a class="code" href="classnlohmann_1_1basic__json_ac4b10b2364f26ce47bdb9a413ff04a59.html#ac4b10b2364f26ce47bdb9a413ff04a59">number_integer_t</a>(0);</div><div class="line"><a name="l00874"></a><span class="lineno"> 874</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00875"></a><span class="lineno"> 875</span>&#160; }</div><div class="line"><a name="l00876"></a><span class="lineno"> 876</span>&#160;</div><div class="line"><a name="l00877"></a><span class="lineno"> 877</span>&#160; <span class="keywordflow">case</span> value_t::number_unsigned:</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; number_unsigned = <a class="code" href="classnlohmann_1_1basic__json_a60a04166c122072ab11eaf9845d9cd1d.html#a60a04166c122072ab11eaf9845d9cd1d">number_unsigned_t</a>(0);</div><div class="line"><a name="l00880"></a><span class="lineno"> 880</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00881"></a><span class="lineno"> 881</span>&#160; }</div><div class="line"><a name="l00882"></a><span class="lineno"> 882</span>&#160;</div><div class="line"><a name="l00883"></a><span class="lineno"> 883</span>&#160; <span class="keywordflow">case</span> value_t::number_float:</div><div class="line"><a name="l00884"></a><span class="lineno"> 884</span>&#160; {</div><div class="line"><a name="l00885"></a><span class="lineno"> 885</span>&#160; number_float = <a class="code" href="classnlohmann_1_1basic__json_a74a0013e847fdc574b48f931f0e757e1.html#a74a0013e847fdc574b48f931f0e757e1">number_float_t</a>(0.0);</div><div class="line"><a name="l00886"></a><span class="lineno"> 886</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00887"></a><span class="lineno"> 887</span>&#160; }</div><div class="line"><a name="l00888"></a><span class="lineno"> 888</span>&#160;</div><div class="line"><a name="l00889"></a><span class="lineno"> 889</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l00890"></a><span class="lineno"> 890</span>&#160; {</div><div class="line"><a name="l00891"></a><span class="lineno"> 891</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00892"></a><span class="lineno"> 892</span>&#160; }</div><div class="line"><a name="l00893"></a><span class="lineno"> 893</span>&#160; }</div><div class="line"><a name="l00894"></a><span class="lineno"> 894</span>&#160; }</div><div class="line"><a name="l00895"></a><span class="lineno"> 895</span>&#160;</div><div class="line"><a name="l00897"></a><span class="lineno"> 897</span>&#160; json_value(<span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_ab63e618bbb0371042b1bec17f5891f42.html#ab63e618bbb0371042b1bec17f5891f42">string_t</a>&amp; value)</div><div class="line"><a name="l00898"></a><span class="lineno"> 898</span>&#160; {</div><div class="line"><a name="l00899"></a><span class="lineno"> 899</span>&#160; <span class="keywordtype">string</span> = create&lt;string_t&gt;(value);</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="l00903"></a><span class="lineno"> 903</span>&#160; json_value(<span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_a0ac9894c9de8dc551cf2e5f1c605537f.html#a0ac9894c9de8dc551cf2e5f1c605537f">object_t</a>&amp; value)</div><div class="line"><a name="l00904"></a><span class="lineno"> 904</span>&#160; {</div><div class="line"><a name="l00905"></a><span class="lineno"> 905</span>&#160; <span class="keywordtype">object</span> = create&lt;object_t&gt;(value);</div><div class="line"><a name="l00906"></a><span class="lineno"> 906</span>&#160; }</div><div class="line"><a name="l00907"></a><span class="lineno"> 907</span>&#160;</div><div class="line"><a name="l00909"></a><span class="lineno"> 909</span>&#160; json_value(<span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_ab00b882d39306d663c23dab110f5cae0.html#ab00b882d39306d663c23dab110f5cae0">array_t</a>&amp; value)</div><div class="line"><a name="l00910"></a><span class="lineno"> 910</span>&#160; {</div><div class="line"><a name="l00911"></a><span class="lineno"> 911</span>&#160; array = create&lt;array_t&gt;(value);</div><div class="line"><a name="l00912"></a><span class="lineno"> 912</span>&#160; }</div><div class="line"><a name="l00913"></a><span class="lineno"> 913</span>&#160; };</div><div class="line"><a name="l00914"></a><span class="lineno"> 914</span>&#160;</div><div class="line"><a name="l00924"></a><span class="lineno"> 924</span>&#160; <span class="keywordtype">void</span> assert_invariant()<span class="keyword"> const</span></div><div class="line"><a name="l00925"></a><span class="lineno"> 925</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00926"></a><span class="lineno"> 926</span>&#160; assert(m_type != value_t::object or m_value.object != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00927"></a><span class="lineno"> 927</span>&#160; assert(m_type != value_t::array or m_value.array != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00928"></a><span class="lineno"> 928</span>&#160; assert(m_type != value_t::string or m_value.string != <span class="keyword">nullptr</span>);</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;</div><div class="line"><a name="l00931"></a><span class="lineno"> 931</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l00933"></a><span class="lineno"> 933</span>&#160; <span class="comment">// JSON parser callback //</span></div><div class="line"><a name="l00935"></a><span class="lineno"> 935</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00946"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_aea1c863b719b4ca5b77188c171bbfafe.html#aea1c863b719b4ca5b77188c171bbfafe"> 946</a></span>&#160; <span class="keyword">enum class</span> <a class="code" href="classnlohmann_1_1basic__json_aea1c863b719b4ca5b77188c171bbfafe.html#aea1c863b719b4ca5b77188c171bbfafe">parse_event_t</a> : uint8_t</div><div class="line"><a name="l00947"></a><span class="lineno"> 947</span>&#160; {</div><div class="line"><a name="l00949"></a><span class="lineno"> 949</span>&#160; object_start,</div><div class="line"><a name="l00951"></a><span class="lineno"> 951</span>&#160; object_end,</div><div class="line"><a name="l00953"></a><span class="lineno"> 953</span>&#160; array_start,</div><div class="line"><a name="l00955"></a><span class="lineno"> 955</span>&#160; array_end,</div><div class="line"><a name="l00957"></a><span class="lineno"> 957</span>&#160; key,</div><div class="line"><a name="l00959"></a><span class="lineno"> 959</span>&#160; value</div><div class="line"><a name="l00960"></a><span class="lineno"> 960</span>&#160; };</div><div class="line"><a name="l00961"></a><span class="lineno"> 961</span>&#160;</div><div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>&#160; <span class="keyword">using</span> <a class="code" href="classnlohmann_1_1basic__json_a9e35475e2027520a78e09f460dbe048a.html#a9e35475e2027520a78e09f460dbe048a">parser_callback_t</a> = std::function&lt;bool(<span class="keywordtype">int</span> depth,</div><div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_aea1c863b719b4ca5b77188c171bbfafe.html#aea1c863b719b4ca5b77188c171bbfafe">parse_event_t</a> event,</div><div class="line"><a name="l01016"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a9e35475e2027520a78e09f460dbe048a.html#a9e35475e2027520a78e09f460dbe048a"> 1016</a></span>&#160; basic_json&amp; parsed)&gt;;</div><div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>&#160;</div><div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>&#160;</div><div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>&#160; <span class="comment">// constructors //</span></div><div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>&#160;</div><div class="line"><a name="l01067"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a8f77085bd98c97a983d9ba12efbf6148.html#a8f77085bd98c97a983d9ba12efbf6148"> 1067</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_a8f77085bd98c97a983d9ba12efbf6148.html#a8f77085bd98c97a983d9ba12efbf6148">basic_json</a>(<span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_a231b02148577b69a154b2ce2c87a5522.html#a231b02148577b69a154b2ce2c87a5522">value_t</a> <a class="code" href="classnlohmann_1_1basic__json.html">value_type</a>)</div><div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>&#160; : m_type(value_type), m_value(value_type)</div><div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>&#160; {</div><div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>&#160; assert_invariant();</div><div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>&#160; }</div><div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>&#160;</div><div class="line"><a name="l01091"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_aa7ad0ebda83e54c22ba8b3d954ef1293.html#aa7ad0ebda83e54c22ba8b3d954ef1293"> 1091</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_aa7ad0ebda83e54c22ba8b3d954ef1293.html#aa7ad0ebda83e54c22ba8b3d954ef1293">basic_json</a>(std::nullptr_t = <span class="keyword">nullptr</span>) noexcept</div><div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>&#160; : <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a>(<a class="code" href="classnlohmann_1_1basic__json_a231b02148577b69a154b2ce2c87a5522.html#a231b02148577b69a154b2ce2c87a5522">value_t</a>::null)</div><div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>&#160; {</div><div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>&#160; assert_invariant();</div><div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>&#160; }</div><div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>&#160;</div><div class="line"><a name="l01116"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a9af5ea68c88f423ddf35216aff7f1813.html#a9af5ea68c88f423ddf35216aff7f1813"> 1116</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_a9af5ea68c88f423ddf35216aff7f1813.html#a9af5ea68c88f423ddf35216aff7f1813">basic_json</a>(<span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_a0ac9894c9de8dc551cf2e5f1c605537f.html#a0ac9894c9de8dc551cf2e5f1c605537f">object_t</a>&amp; val)</div><div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>&#160; : m_type(<a class="code" href="classnlohmann_1_1basic__json_a231b02148577b69a154b2ce2c87a5522.html#a231b02148577b69a154b2ce2c87a5522">value_t</a>::object), m_value(val)</div><div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>&#160; {</div><div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>&#160; assert_invariant();</div><div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>&#160; }</div><div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>&#160;</div><div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">class </span>CompatibleObjectType, <span class="keyword">typename</span> std::enable_if&lt;</div><div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>&#160; std::is_constructible&lt;typename object_t::key_type, typename CompatibleObjectType::key_type&gt;::value and</div><div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>&#160; std::is_constructible&lt;basic_json, typename CompatibleObjectType::mapped_type&gt;::value, <span class="keywordtype">int</span>&gt;::type = 0&gt;</div><div class="line"><a name="l01151"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_ab7be2bc58ae0c2c2c30d40f15d6399f8.html#ab7be2bc58ae0c2c2c30d40f15d6399f8"> 1151</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_ab7be2bc58ae0c2c2c30d40f15d6399f8.html#ab7be2bc58ae0c2c2c30d40f15d6399f8">basic_json</a>(<span class="keyword">const</span> CompatibleObjectType&amp; val)</div><div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>&#160; : m_type(<a class="code" href="classnlohmann_1_1basic__json_a231b02148577b69a154b2ce2c87a5522.html#a231b02148577b69a154b2ce2c87a5522">value_t</a>::object)</div><div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>&#160; {</div><div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>&#160; <span class="keyword">using</span> std::begin;</div><div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>&#160; <span class="keyword">using</span> std::end;</div><div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>&#160; m_value.object = create&lt;object_t&gt;(begin(val), end(val));</div><div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>&#160; assert_invariant();</div><div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>&#160; }</div><div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>&#160;</div><div class="line"><a name="l01179"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a3aaf41d385f0d9a93deb92f9b14ae0cf.html#a3aaf41d385f0d9a93deb92f9b14ae0cf"> 1179</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_a3aaf41d385f0d9a93deb92f9b14ae0cf.html#a3aaf41d385f0d9a93deb92f9b14ae0cf">basic_json</a>(<span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_ab00b882d39306d663c23dab110f5cae0.html#ab00b882d39306d663c23dab110f5cae0">array_t</a>&amp; val)</div><div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>&#160; : m_type(<a class="code" href="classnlohmann_1_1basic__json_a231b02148577b69a154b2ce2c87a5522.html#a231b02148577b69a154b2ce2c87a5522">value_t</a>::array), m_value(val)</div><div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>&#160; {</div><div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>&#160; assert_invariant();</div><div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>&#160; }</div><div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>&#160;</div><div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">class </span>CompatibleArrayType, <span class="keyword">typename</span> std::enable_if&lt;</div><div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>&#160; not std::is_same&lt;CompatibleArrayType, typename basic_json_t::iterator&gt;::value and</div><div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>&#160; not std::is_same&lt;CompatibleArrayType, typename basic_json_t::const_iterator&gt;::value and</div><div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>&#160; not std::is_same&lt;CompatibleArrayType, typename basic_json_t::reverse_iterator&gt;::value and</div><div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>&#160; not std::is_same&lt;CompatibleArrayType, typename basic_json_t::const_reverse_iterator&gt;::value and</div><div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>&#160; not std::is_same&lt;CompatibleArrayType, typename array_t::iterator&gt;::value and</div><div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>&#160; not std::is_same&lt;CompatibleArrayType, typename array_t::const_iterator&gt;::value and</div><div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>&#160; std::is_constructible&lt;basic_json, typename CompatibleArrayType::value_type&gt;::value, <span class="keywordtype">int</span>&gt;::type = 0&gt;</div><div class="line"><a name="l01219"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a81aaaab0f3b326afda2d226daab4f1e1.html#a81aaaab0f3b326afda2d226daab4f1e1"> 1219</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_a81aaaab0f3b326afda2d226daab4f1e1.html#a81aaaab0f3b326afda2d226daab4f1e1">basic_json</a>(<span class="keyword">const</span> CompatibleArrayType&amp; val)</div><div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>&#160; : m_type(<a class="code" href="classnlohmann_1_1basic__json_a231b02148577b69a154b2ce2c87a5522.html#a231b02148577b69a154b2ce2c87a5522">value_t</a>::array)</div><div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>&#160; {</div><div class="line"><a name="l01222"></a><span class="lineno"> 1222</span>&#160; <span class="keyword">using</span> std::begin;</div><div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>&#160; <span class="keyword">using</span> std::end;</div><div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>&#160; m_value.array = create&lt;array_t&gt;(begin(val), end(val));</div><div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>&#160; assert_invariant();</div><div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>&#160; }</div><div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>&#160;</div><div class="line"><a name="l01249"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_ab8b43d92a042dde96c28aeea81dd52de.html#ab8b43d92a042dde96c28aeea81dd52de"> 1249</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_ab8b43d92a042dde96c28aeea81dd52de.html#ab8b43d92a042dde96c28aeea81dd52de">basic_json</a>(<span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_ab63e618bbb0371042b1bec17f5891f42.html#ab63e618bbb0371042b1bec17f5891f42">string_t</a>&amp; val)</div><div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>&#160; : m_type(<a class="code" href="classnlohmann_1_1basic__json_a231b02148577b69a154b2ce2c87a5522.html#a231b02148577b69a154b2ce2c87a5522">value_t</a>::string), m_value(val)</div><div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>&#160; {</div><div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>&#160; assert_invariant();</div><div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>&#160; }</div><div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>&#160;</div><div class="line"><a name="l01275"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a3654da9a84deaf61899c4eee5b93c2c5.html#a3654da9a84deaf61899c4eee5b93c2c5"> 1275</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_a3654da9a84deaf61899c4eee5b93c2c5.html#a3654da9a84deaf61899c4eee5b93c2c5">basic_json</a>(<span class="keyword">const</span> <span class="keyword">typename</span> string_t::value_type* val)</div><div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>&#160; : <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a>(<a class="code" href="classnlohmann_1_1basic__json_ab63e618bbb0371042b1bec17f5891f42.html#ab63e618bbb0371042b1bec17f5891f42">string_t</a>(val))</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; assert_invariant();</div><div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>&#160; }</div><div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>&#160;</div><div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">class </span>CompatibleStringType, <span class="keyword">typename</span> std::enable_if&lt;</div><div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>&#160; std::is_constructible&lt;string_t, CompatibleStringType&gt;::value, <span class="keywordtype">int</span>&gt;::type = 0&gt;</div><div class="line"><a name="l01306"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_ae85d91b0620650bcd9993e09d0e287d9.html#ae85d91b0620650bcd9993e09d0e287d9"> 1306</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_ae85d91b0620650bcd9993e09d0e287d9.html#ae85d91b0620650bcd9993e09d0e287d9">basic_json</a>(<span class="keyword">const</span> CompatibleStringType&amp; val)</div><div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>&#160; : <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a>(<a class="code" href="classnlohmann_1_1basic__json_ab63e618bbb0371042b1bec17f5891f42.html#ab63e618bbb0371042b1bec17f5891f42">string_t</a>(val))</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; assert_invariant();</div><div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>&#160; }</div><div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>&#160;</div><div class="line"><a name="l01326"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_aac36af84d907b5c3e469af889661620a.html#aac36af84d907b5c3e469af889661620a"> 1326</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_aac36af84d907b5c3e469af889661620a.html#aac36af84d907b5c3e469af889661620a">basic_json</a>(<a class="code" href="classnlohmann_1_1basic__json_af3bc3e83aa162d7ba4df16a949872723.html#af3bc3e83aa162d7ba4df16a949872723">boolean_t</a> val) noexcept</div><div class="line"><a name="l01327"></a><span class="lineno"> 1327</span>&#160; : m_type(value_t::boolean), m_value(val)</div><div class="line"><a name="l01328"></a><span class="lineno"> 1328</span>&#160; {</div><div class="line"><a name="l01329"></a><span class="lineno"> 1329</span>&#160; assert_invariant();</div><div class="line"><a name="l01330"></a><span class="lineno"> 1330</span>&#160; }</div><div class="line"><a name="l01331"></a><span class="lineno"> 1331</span>&#160;</div><div class="line"><a name="l01355"></a><span class="lineno"> 1355</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, <span class="keyword">typename</span> std::enable_if&lt;</div><div class="line"><a name="l01356"></a><span class="lineno"> 1356</span>&#160; not (std::is_same&lt;T, int&gt;::value) and</div><div class="line"><a name="l01357"></a><span class="lineno"> 1357</span>&#160; std::is_same&lt;T, number_integer_t&gt;::value, <span class="keywordtype">int</span>&gt;::type = 0&gt;</div><div class="line"><a name="l01358"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a0d838bc7ffca6017f51167e0a8ffd9b6.html#a0d838bc7ffca6017f51167e0a8ffd9b6"> 1358</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_a0d838bc7ffca6017f51167e0a8ffd9b6.html#a0d838bc7ffca6017f51167e0a8ffd9b6">basic_json</a>(<span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_ac4b10b2364f26ce47bdb9a413ff04a59.html#ac4b10b2364f26ce47bdb9a413ff04a59">number_integer_t</a> val) noexcept</div><div class="line"><a name="l01359"></a><span class="lineno"> 1359</span>&#160; : m_type(value_t::number_integer), m_value(val)</div><div class="line"><a name="l01360"></a><span class="lineno"> 1360</span>&#160; {</div><div class="line"><a name="l01361"></a><span class="lineno"> 1361</span>&#160; assert_invariant();</div><div class="line"><a name="l01362"></a><span class="lineno"> 1362</span>&#160; }</div><div class="line"><a name="l01363"></a><span class="lineno"> 1363</span>&#160;</div><div class="line"><a name="l01389"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a70ae1f0747f5b7a89979512866474f1a.html#a70ae1f0747f5b7a89979512866474f1a"> 1389</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_a70ae1f0747f5b7a89979512866474f1a.html#a70ae1f0747f5b7a89979512866474f1a">basic_json</a>(<span class="keyword">const</span> <span class="keywordtype">int</span> val) noexcept</div><div class="line"><a name="l01390"></a><span class="lineno"> 1390</span>&#160; : m_type(value_t::number_integer),</div><div class="line"><a name="l01391"></a><span class="lineno"> 1391</span>&#160; m_value(static_cast&lt;number_integer_t&gt;(val))</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; assert_invariant();</div><div class="line"><a name="l01394"></a><span class="lineno"> 1394</span>&#160; }</div><div class="line"><a name="l01395"></a><span class="lineno"> 1395</span>&#160;</div><div class="line"><a name="l01421"></a><span class="lineno"> 1421</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> CompatibleNumberIntegerType, <span class="keyword">typename</span> std::enable_if&lt;</div><div class="line"><a name="l01422"></a><span class="lineno"> 1422</span>&#160; std::is_constructible&lt;number_integer_t, CompatibleNumberIntegerType&gt;::value and</div><div class="line"><a name="l01423"></a><span class="lineno"> 1423</span>&#160; std::numeric_limits&lt;CompatibleNumberIntegerType&gt;::is_integer and</div><div class="line"><a name="l01424"></a><span class="lineno"> 1424</span>&#160; std::numeric_limits&lt;CompatibleNumberIntegerType&gt;::is_signed,</div><div class="line"><a name="l01425"></a><span class="lineno"> 1425</span>&#160; CompatibleNumberIntegerType&gt;::type = 0&gt;</div><div class="line"><a name="l01426"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_ad2eddc2c13ab084f067eaba65d381ad2.html#ad2eddc2c13ab084f067eaba65d381ad2"> 1426</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_ad2eddc2c13ab084f067eaba65d381ad2.html#ad2eddc2c13ab084f067eaba65d381ad2">basic_json</a>(<span class="keyword">const</span> CompatibleNumberIntegerType val) noexcept</div><div class="line"><a name="l01427"></a><span class="lineno"> 1427</span>&#160; : m_type(value_t::number_integer),</div><div class="line"><a name="l01428"></a><span class="lineno"> 1428</span>&#160; m_value(static_cast&lt;number_integer_t&gt;(val))</div><div class="line"><a name="l01429"></a><span class="lineno"> 1429</span>&#160; {</div><div class="line"><a name="l01430"></a><span class="lineno"> 1430</span>&#160; assert_invariant();</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="l01450"></a><span class="lineno"> 1450</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, <span class="keyword">typename</span> std::enable_if&lt;</div><div class="line"><a name="l01451"></a><span class="lineno"> 1451</span>&#160; not (std::is_same&lt;T, int&gt;::value) and</div><div class="line"><a name="l01452"></a><span class="lineno"> 1452</span>&#160; std::is_same&lt;T, number_unsigned_t&gt;::value, <span class="keywordtype">int</span>&gt;::type = 0&gt;</div><div class="line"><a name="l01453"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a85b09b03916d3d1e73373f49cdd4136d.html#a85b09b03916d3d1e73373f49cdd4136d"> 1453</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_a85b09b03916d3d1e73373f49cdd4136d.html#a85b09b03916d3d1e73373f49cdd4136d">basic_json</a>(<span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_a60a04166c122072ab11eaf9845d9cd1d.html#a60a04166c122072ab11eaf9845d9cd1d">number_unsigned_t</a> val) noexcept</div><div class="line"><a name="l01454"></a><span class="lineno"> 1454</span>&#160; : m_type(value_t::number_unsigned), m_value(val)</div><div class="line"><a name="l01455"></a><span class="lineno"> 1455</span>&#160; {</div><div class="line"><a name="l01456"></a><span class="lineno"> 1456</span>&#160; assert_invariant();</div><div class="line"><a name="l01457"></a><span class="lineno"> 1457</span>&#160; }</div><div class="line"><a name="l01458"></a><span class="lineno"> 1458</span>&#160;</div><div class="line"><a name="l01479"></a><span class="lineno"> 1479</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> CompatibleNumberUnsignedType, <span class="keyword">typename</span> std::enable_if &lt;</div><div class="line"><a name="l01480"></a><span class="lineno"> 1480</span>&#160; std::is_constructible&lt;number_unsigned_t, CompatibleNumberUnsignedType&gt;::value and</div><div class="line"><a name="l01481"></a><span class="lineno"> 1481</span>&#160; std::numeric_limits&lt;CompatibleNumberUnsignedType&gt;::is_integer and</div><div class="line"><a name="l01482"></a><span class="lineno"> 1482</span>&#160; not std::numeric_limits&lt;CompatibleNumberUnsignedType&gt;::is_signed,</div><div class="line"><a name="l01483"></a><span class="lineno"> 1483</span>&#160; CompatibleNumberUnsignedType&gt;::type = 0&gt;</div><div class="line"><a name="l01484"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a68a5f34b164a07b8ced13fcf2b7ec834.html#a68a5f34b164a07b8ced13fcf2b7ec834"> 1484</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_a68a5f34b164a07b8ced13fcf2b7ec834.html#a68a5f34b164a07b8ced13fcf2b7ec834">basic_json</a>(<span class="keyword">const</span> CompatibleNumberUnsignedType val) noexcept</div><div class="line"><a name="l01485"></a><span class="lineno"> 1485</span>&#160; : m_type(value_t::number_unsigned),</div><div class="line"><a name="l01486"></a><span class="lineno"> 1486</span>&#160; m_value(static_cast&lt;number_unsigned_t&gt;(val))</div><div class="line"><a name="l01487"></a><span class="lineno"> 1487</span>&#160; {</div><div class="line"><a name="l01488"></a><span class="lineno"> 1488</span>&#160; assert_invariant();</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="l01515"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a2badcf191deabf579abcf8d3654da26f.html#a2badcf191deabf579abcf8d3654da26f"> 1515</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_a2badcf191deabf579abcf8d3654da26f.html#a2badcf191deabf579abcf8d3654da26f">basic_json</a>(<span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_a74a0013e847fdc574b48f931f0e757e1.html#a74a0013e847fdc574b48f931f0e757e1">number_float_t</a> val) noexcept</div><div class="line"><a name="l01516"></a><span class="lineno"> 1516</span>&#160; : m_type(value_t::number_float), m_value(val)</div><div class="line"><a name="l01517"></a><span class="lineno"> 1517</span>&#160; {</div><div class="line"><a name="l01518"></a><span class="lineno"> 1518</span>&#160; <span class="comment">// replace infinity and NAN by null</span></div><div class="line"><a name="l01519"></a><span class="lineno"> 1519</span>&#160; <span class="keywordflow">if</span> (not std::isfinite(val))</div><div class="line"><a name="l01520"></a><span class="lineno"> 1520</span>&#160; {</div><div class="line"><a name="l01521"></a><span class="lineno"> 1521</span>&#160; m_type = value_t::null;</div><div class="line"><a name="l01522"></a><span class="lineno"> 1522</span>&#160; m_value = json_value();</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; assert_invariant();</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;</div><div class="line"><a name="l01559"></a><span class="lineno"> 1559</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> CompatibleNumberFloatType, <span class="keyword">typename</span> = <span class="keyword">typename</span> std::enable_if&lt;</div><div class="line"><a name="l01560"></a><span class="lineno"> 1560</span>&#160; std::is_constructible&lt;number_float_t, CompatibleNumberFloatType&gt;::value and</div><div class="line"><a name="l01561"></a><span class="lineno"> 1561</span>&#160; std::is_floating_point&lt;CompatibleNumberFloatType&gt;::value&gt;::type&gt;</div><div class="line"><a name="l01562"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a4bbdfd6dd8d2e6fc9ac5d81ef61ba3fe.html#a4bbdfd6dd8d2e6fc9ac5d81ef61ba3fe"> 1562</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_a4bbdfd6dd8d2e6fc9ac5d81ef61ba3fe.html#a4bbdfd6dd8d2e6fc9ac5d81ef61ba3fe">basic_json</a>(<span class="keyword">const</span> CompatibleNumberFloatType val) noexcept</div><div class="line"><a name="l01563"></a><span class="lineno"> 1563</span>&#160; : <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a>(<a class="code" href="classnlohmann_1_1basic__json_a74a0013e847fdc574b48f931f0e757e1.html#a74a0013e847fdc574b48f931f0e757e1">number_float_t</a>(val))</div><div class="line"><a name="l01564"></a><span class="lineno"> 1564</span>&#160; {</div><div class="line"><a name="l01565"></a><span class="lineno"> 1565</span>&#160; assert_invariant();</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="l01637"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_afeb998aec45296bc2050bd1c41ef41eb.html#afeb998aec45296bc2050bd1c41ef41eb"> 1637</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_afeb998aec45296bc2050bd1c41ef41eb.html#afeb998aec45296bc2050bd1c41ef41eb">basic_json</a>(std::initializer_list&lt;basic_json&gt; init,</div><div class="line"><a name="l01638"></a><span class="lineno"> 1638</span>&#160; <span class="keywordtype">bool</span> type_deduction = <span class="keyword">true</span>,</div><div class="line"><a name="l01639"></a><span class="lineno"> 1639</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_a231b02148577b69a154b2ce2c87a5522.html#a231b02148577b69a154b2ce2c87a5522">value_t</a> manual_type = value_t::array)</div><div class="line"><a name="l01640"></a><span class="lineno"> 1640</span>&#160; {</div><div class="line"><a name="l01641"></a><span class="lineno"> 1641</span>&#160; <span class="comment">// check if each element is an array with two elements whose first</span></div><div class="line"><a name="l01642"></a><span class="lineno"> 1642</span>&#160; <span class="comment">// element is a string</span></div><div class="line"><a name="l01643"></a><span class="lineno"> 1643</span>&#160; <span class="keywordtype">bool</span> is_an_object = std::all_of(init.begin(), init.end(),</div><div class="line"><a name="l01644"></a><span class="lineno"> 1644</span>&#160; [](<span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a> &amp; element)</div><div class="line"><a name="l01645"></a><span class="lineno"> 1645</span>&#160; {</div><div class="line"><a name="l01646"></a><span class="lineno"> 1646</span>&#160; <span class="keywordflow">return</span> element.is_array() and element.size() == 2 and element[0].is_string();</div><div class="line"><a name="l01647"></a><span class="lineno"> 1647</span>&#160; });</div><div class="line"><a name="l01648"></a><span class="lineno"> 1648</span>&#160;</div><div class="line"><a name="l01649"></a><span class="lineno"> 1649</span>&#160; <span class="comment">// adjust type if type deduction is not wanted</span></div><div class="line"><a name="l01650"></a><span class="lineno"> 1650</span>&#160; <span class="keywordflow">if</span> (not type_deduction)</div><div class="line"><a name="l01651"></a><span class="lineno"> 1651</span>&#160; {</div><div class="line"><a name="l01652"></a><span class="lineno"> 1652</span>&#160; <span class="comment">// if array is wanted, do not create an object though possible</span></div><div class="line"><a name="l01653"></a><span class="lineno"> 1653</span>&#160; <span class="keywordflow">if</span> (manual_type == value_t::array)</div><div class="line"><a name="l01654"></a><span class="lineno"> 1654</span>&#160; {</div><div class="line"><a name="l01655"></a><span class="lineno"> 1655</span>&#160; is_an_object = <span class="keyword">false</span>;</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; <span class="comment">// if object is wanted but impossible, throw an exception</span></div><div class="line"><a name="l01659"></a><span class="lineno"> 1659</span>&#160; <span class="keywordflow">if</span> (manual_type == value_t::object and not is_an_object)</div><div class="line"><a name="l01660"></a><span class="lineno"> 1660</span>&#160; {</div><div class="line"><a name="l01661"></a><span class="lineno"> 1661</span>&#160; <span class="keywordflow">throw</span> std::domain_error(<span class="stringliteral">&quot;cannot create object from initializer list&quot;</span>);</div><div class="line"><a name="l01662"></a><span class="lineno"> 1662</span>&#160; }</div><div class="line"><a name="l01663"></a><span class="lineno"> 1663</span>&#160; }</div><div class="line"><a name="l01664"></a><span class="lineno"> 1664</span>&#160;</div><div class="line"><a name="l01665"></a><span class="lineno"> 1665</span>&#160; <span class="keywordflow">if</span> (is_an_object)</div><div class="line"><a name="l01666"></a><span class="lineno"> 1666</span>&#160; {</div><div class="line"><a name="l01667"></a><span class="lineno"> 1667</span>&#160; <span class="comment">// the initializer list is a list of pairs -&gt; create object</span></div><div class="line"><a name="l01668"></a><span class="lineno"> 1668</span>&#160; m_type = value_t::object;</div><div class="line"><a name="l01669"></a><span class="lineno"> 1669</span>&#160; m_value = value_t::object;</div><div class="line"><a name="l01670"></a><span class="lineno"> 1670</span>&#160;</div><div class="line"><a name="l01671"></a><span class="lineno"> 1671</span>&#160; std::for_each(init.begin(), init.end(), [<span class="keyword">this</span>](<span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a> &amp; element)</div><div class="line"><a name="l01672"></a><span class="lineno"> 1672</span>&#160; {</div><div class="line"><a name="l01673"></a><span class="lineno"> 1673</span>&#160; m_value.object-&gt;emplace(*(element[0].m_value.string), element[1]);</div><div class="line"><a name="l01674"></a><span class="lineno"> 1674</span>&#160; });</div><div class="line"><a name="l01675"></a><span class="lineno"> 1675</span>&#160; }</div><div class="line"><a name="l01676"></a><span class="lineno"> 1676</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01677"></a><span class="lineno"> 1677</span>&#160; {</div><div class="line"><a name="l01678"></a><span class="lineno"> 1678</span>&#160; <span class="comment">// the initializer list describes an array -&gt; create array</span></div><div class="line"><a name="l01679"></a><span class="lineno"> 1679</span>&#160; m_type = value_t::array;</div><div class="line"><a name="l01680"></a><span class="lineno"> 1680</span>&#160; m_value.array = create&lt;array_t&gt;(init);</div><div class="line"><a name="l01681"></a><span class="lineno"> 1681</span>&#160; }</div><div class="line"><a name="l01682"></a><span class="lineno"> 1682</span>&#160;</div><div class="line"><a name="l01683"></a><span class="lineno"> 1683</span>&#160; assert_invariant();</div><div class="line"><a name="l01684"></a><span class="lineno"> 1684</span>&#160; }</div><div class="line"><a name="l01685"></a><span class="lineno"> 1685</span>&#160;</div><div class="line"><a name="l01720"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a5685815624b086caa532f41e853d4b0f.html#a5685815624b086caa532f41e853d4b0f"> 1720</a></span>&#160; <span class="keyword">static</span> <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a> <a class="code" href="classnlohmann_1_1basic__json_a5685815624b086caa532f41e853d4b0f.html#a5685815624b086caa532f41e853d4b0f">array</a>(std::initializer_list&lt;basic_json&gt; init =</div><div class="line"><a name="l01721"></a><span class="lineno"> 1721</span>&#160; std::initializer_list&lt;basic_json&gt;())</div><div class="line"><a name="l01722"></a><span class="lineno"> 1722</span>&#160; {</div><div class="line"><a name="l01723"></a><span class="lineno"> 1723</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a>(init, <span class="keyword">false</span>, value_t::array);</div><div class="line"><a name="l01724"></a><span class="lineno"> 1724</span>&#160; }</div><div class="line"><a name="l01725"></a><span class="lineno"> 1725</span>&#160;</div><div class="line"><a name="l01760"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_ad25b2f8c21e241e2d63455537a9294ff.html#ad25b2f8c21e241e2d63455537a9294ff"> 1760</a></span>&#160; <span class="keyword">static</span> <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a> <a class="code" href="classnlohmann_1_1basic__json_ad25b2f8c21e241e2d63455537a9294ff.html#ad25b2f8c21e241e2d63455537a9294ff">object</a>(std::initializer_list&lt;basic_json&gt; init =</div><div class="line"><a name="l01761"></a><span class="lineno"> 1761</span>&#160; std::initializer_list&lt;basic_json&gt;())</div><div class="line"><a name="l01762"></a><span class="lineno"> 1762</span>&#160; {</div><div class="line"><a name="l01763"></a><span class="lineno"> 1763</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a>(init, <span class="keyword">false</span>, value_t::object);</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;</div><div class="line"><a name="l01784"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a112a2d8e76345ea64f71e2985fee4c52.html#a112a2d8e76345ea64f71e2985fee4c52"> 1784</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_a112a2d8e76345ea64f71e2985fee4c52.html#a112a2d8e76345ea64f71e2985fee4c52">basic_json</a>(<a class="code" href="classnlohmann_1_1basic__json_a1579a8f72a230358d6cd1a6e8a62859b.html#a1579a8f72a230358d6cd1a6e8a62859b">size_type</a> cnt, <span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a>&amp; val)</div><div class="line"><a name="l01785"></a><span class="lineno"> 1785</span>&#160; : m_type(<a class="code" href="classnlohmann_1_1basic__json_a231b02148577b69a154b2ce2c87a5522.html#a231b02148577b69a154b2ce2c87a5522">value_t</a>::array)</div><div class="line"><a name="l01786"></a><span class="lineno"> 1786</span>&#160; {</div><div class="line"><a name="l01787"></a><span class="lineno"> 1787</span>&#160; m_value.array = create&lt;array_t&gt;(cnt, val);</div><div class="line"><a name="l01788"></a><span class="lineno"> 1788</span>&#160; assert_invariant();</div><div class="line"><a name="l01789"></a><span class="lineno"> 1789</span>&#160; }</div><div class="line"><a name="l01790"></a><span class="lineno"> 1790</span>&#160;</div><div class="line"><a name="l01828"></a><span class="lineno"> 1828</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">class </span>InputIT, <span class="keyword">typename</span> std::enable_if&lt;</div><div class="line"><a name="l01829"></a><span class="lineno"> 1829</span>&#160; std::is_same&lt;InputIT, typename basic_json_t::iterator&gt;::value or</div><div class="line"><a name="l01830"></a><span class="lineno"> 1830</span>&#160; std::is_same&lt;InputIT, typename basic_json_t::const_iterator&gt;::value, <span class="keywordtype">int</span>&gt;::type = 0&gt;</div><div class="line"><a name="l01831"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_af7acf3838a79363356f24538941a559c.html#af7acf3838a79363356f24538941a559c"> 1831</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_af7acf3838a79363356f24538941a559c.html#af7acf3838a79363356f24538941a559c">basic_json</a>(InputIT first, InputIT last)</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; assert(first.m_object != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l01834"></a><span class="lineno"> 1834</span>&#160; assert(last.m_object != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l01835"></a><span class="lineno"> 1835</span>&#160;</div><div class="line"><a name="l01836"></a><span class="lineno"> 1836</span>&#160; <span class="comment">// make sure iterator fits the current value</span></div><div class="line"><a name="l01837"></a><span class="lineno"> 1837</span>&#160; <span class="keywordflow">if</span> (first.m_object != last.m_object)</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; <span class="keywordflow">throw</span> std::domain_error(<span class="stringliteral">&quot;iterators are not compatible&quot;</span>);</div><div class="line"><a name="l01840"></a><span class="lineno"> 1840</span>&#160; }</div><div class="line"><a name="l01841"></a><span class="lineno"> 1841</span>&#160;</div><div class="line"><a name="l01842"></a><span class="lineno"> 1842</span>&#160; <span class="comment">// copy type from first iterator</span></div><div class="line"><a name="l01843"></a><span class="lineno"> 1843</span>&#160; m_type = first.m_object-&gt;m_type;</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; <span class="comment">// check if iterator range is complete for primitive values</span></div><div class="line"><a name="l01846"></a><span class="lineno"> 1846</span>&#160; <span class="keywordflow">switch</span> (m_type)</div><div class="line"><a name="l01847"></a><span class="lineno"> 1847</span>&#160; {</div><div class="line"><a name="l01848"></a><span class="lineno"> 1848</span>&#160; <span class="keywordflow">case</span> value_t::boolean:</div><div class="line"><a name="l01849"></a><span class="lineno"> 1849</span>&#160; <span class="keywordflow">case</span> value_t::number_float:</div><div class="line"><a name="l01850"></a><span class="lineno"> 1850</span>&#160; <span class="keywordflow">case</span> value_t::number_integer:</div><div class="line"><a name="l01851"></a><span class="lineno"> 1851</span>&#160; <span class="keywordflow">case</span> value_t::number_unsigned:</div><div class="line"><a name="l01852"></a><span class="lineno"> 1852</span>&#160; <span class="keywordflow">case</span> value_t::string:</div><div class="line"><a name="l01853"></a><span class="lineno"> 1853</span>&#160; {</div><div class="line"><a name="l01854"></a><span class="lineno"> 1854</span>&#160; <span class="keywordflow">if</span> (not first.m_it.primitive_iterator.is_begin() or not last.m_it.primitive_iterator.is_end())</div><div class="line"><a name="l01855"></a><span class="lineno"> 1855</span>&#160; {</div><div class="line"><a name="l01856"></a><span class="lineno"> 1856</span>&#160; <span class="keywordflow">throw</span> std::out_of_range(<span class="stringliteral">&quot;iterators out of range&quot;</span>);</div><div class="line"><a name="l01857"></a><span class="lineno"> 1857</span>&#160; }</div><div class="line"><a name="l01858"></a><span class="lineno"> 1858</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01859"></a><span class="lineno"> 1859</span>&#160; }</div><div class="line"><a name="l01860"></a><span class="lineno"> 1860</span>&#160;</div><div class="line"><a name="l01861"></a><span class="lineno"> 1861</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l01862"></a><span class="lineno"> 1862</span>&#160; {</div><div class="line"><a name="l01863"></a><span class="lineno"> 1863</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01864"></a><span class="lineno"> 1864</span>&#160; }</div><div class="line"><a name="l01865"></a><span class="lineno"> 1865</span>&#160; }</div><div class="line"><a name="l01866"></a><span class="lineno"> 1866</span>&#160;</div><div class="line"><a name="l01867"></a><span class="lineno"> 1867</span>&#160; <span class="keywordflow">switch</span> (m_type)</div><div class="line"><a name="l01868"></a><span class="lineno"> 1868</span>&#160; {</div><div class="line"><a name="l01869"></a><span class="lineno"> 1869</span>&#160; <span class="keywordflow">case</span> value_t::number_integer:</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; m_value.number_integer = first.m_object-&gt;m_value.number_integer;</div><div class="line"><a name="l01872"></a><span class="lineno"> 1872</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01873"></a><span class="lineno"> 1873</span>&#160; }</div><div class="line"><a name="l01874"></a><span class="lineno"> 1874</span>&#160;</div><div class="line"><a name="l01875"></a><span class="lineno"> 1875</span>&#160; <span class="keywordflow">case</span> value_t::number_unsigned:</div><div class="line"><a name="l01876"></a><span class="lineno"> 1876</span>&#160; {</div><div class="line"><a name="l01877"></a><span class="lineno"> 1877</span>&#160; m_value.number_unsigned = first.m_object-&gt;m_value.number_unsigned;</div><div class="line"><a name="l01878"></a><span class="lineno"> 1878</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01879"></a><span class="lineno"> 1879</span>&#160; }</div><div class="line"><a name="l01880"></a><span class="lineno"> 1880</span>&#160;</div><div class="line"><a name="l01881"></a><span class="lineno"> 1881</span>&#160; <span class="keywordflow">case</span> value_t::number_float:</div><div class="line"><a name="l01882"></a><span class="lineno"> 1882</span>&#160; {</div><div class="line"><a name="l01883"></a><span class="lineno"> 1883</span>&#160; m_value.number_float = first.m_object-&gt;m_value.number_float;</div><div class="line"><a name="l01884"></a><span class="lineno"> 1884</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01885"></a><span class="lineno"> 1885</span>&#160; }</div><div class="line"><a name="l01886"></a><span class="lineno"> 1886</span>&#160;</div><div class="line"><a name="l01887"></a><span class="lineno"> 1887</span>&#160; <span class="keywordflow">case</span> value_t::boolean:</div><div class="line"><a name="l01888"></a><span class="lineno"> 1888</span>&#160; {</div><div class="line"><a name="l01889"></a><span class="lineno"> 1889</span>&#160; m_value.boolean = first.m_object-&gt;m_value.boolean;</div><div class="line"><a name="l01890"></a><span class="lineno"> 1890</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01891"></a><span class="lineno"> 1891</span>&#160; }</div><div class="line"><a name="l01892"></a><span class="lineno"> 1892</span>&#160;</div><div class="line"><a name="l01893"></a><span class="lineno"> 1893</span>&#160; <span class="keywordflow">case</span> value_t::string:</div><div class="line"><a name="l01894"></a><span class="lineno"> 1894</span>&#160; {</div><div class="line"><a name="l01895"></a><span class="lineno"> 1895</span>&#160; m_value = *first.m_object-&gt;m_value.string;</div><div class="line"><a name="l01896"></a><span class="lineno"> 1896</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01897"></a><span class="lineno"> 1897</span>&#160; }</div><div class="line"><a name="l01898"></a><span class="lineno"> 1898</span>&#160;</div><div class="line"><a name="l01899"></a><span class="lineno"> 1899</span>&#160; <span class="keywordflow">case</span> value_t::object:</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; m_value.object = create&lt;object_t&gt;(first.m_it.object_iterator, last.m_it.object_iterator);</div><div class="line"><a name="l01902"></a><span class="lineno"> 1902</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01903"></a><span class="lineno"> 1903</span>&#160; }</div><div class="line"><a name="l01904"></a><span class="lineno"> 1904</span>&#160;</div><div class="line"><a name="l01905"></a><span class="lineno"> 1905</span>&#160; <span class="keywordflow">case</span> value_t::array:</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; m_value.array = create&lt;array_t&gt;(first.m_it.array_iterator, last.m_it.array_iterator);</div><div class="line"><a name="l01908"></a><span class="lineno"> 1908</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01909"></a><span class="lineno"> 1909</span>&#160; }</div><div class="line"><a name="l01910"></a><span class="lineno"> 1910</span>&#160;</div><div class="line"><a name="l01911"></a><span class="lineno"> 1911</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l01912"></a><span class="lineno"> 1912</span>&#160; {</div><div class="line"><a name="l01913"></a><span class="lineno"> 1913</span>&#160; <span class="keywordflow">throw</span> std::domain_error(<span class="stringliteral">&quot;cannot use construct with iterators from &quot;</span> + first.m_object-&gt;type_name());</div><div class="line"><a name="l01914"></a><span class="lineno"> 1914</span>&#160; }</div><div class="line"><a name="l01915"></a><span class="lineno"> 1915</span>&#160; }</div><div class="line"><a name="l01916"></a><span class="lineno"> 1916</span>&#160;</div><div class="line"><a name="l01917"></a><span class="lineno"> 1917</span>&#160; assert_invariant();</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;</div><div class="line"><a name="l01948"></a><span class="lineno"> 1948</span>&#160; JSON_DEPRECATED</div><div class="line"><a name="l01949"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a32350263eb105764844c5a85e156a255.html#a32350263eb105764844c5a85e156a255"> 1949</a></span>&#160; <span class="keyword">explicit</span> <a class="code" href="classnlohmann_1_1basic__json_a32350263eb105764844c5a85e156a255.html#a32350263eb105764844c5a85e156a255">basic_json</a>(std::istream&amp; i, <span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_a9e35475e2027520a78e09f460dbe048a.html#a9e35475e2027520a78e09f460dbe048a">parser_callback_t</a> cb = <span class="keyword">nullptr</span>)</div><div class="line"><a name="l01950"></a><span class="lineno"> 1950</span>&#160; {</div><div class="line"><a name="l01951"></a><span class="lineno"> 1951</span>&#160; *<span class="keyword">this</span> = parser(i, cb).parse();</div><div class="line"><a name="l01952"></a><span class="lineno"> 1952</span>&#160; assert_invariant();</div><div class="line"><a name="l01953"></a><span class="lineno"> 1953</span>&#160; }</div><div class="line"><a name="l01954"></a><span class="lineno"> 1954</span>&#160;</div><div class="line"><a name="l01956"></a><span class="lineno"> 1956</span>&#160; <span class="comment">// other constructors and destructor //</span></div><div class="line"><a name="l01958"></a><span class="lineno"> 1958</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01981"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a4ab93491f82545342562c7ee7e3166c7.html#a4ab93491f82545342562c7ee7e3166c7"> 1981</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_a4ab93491f82545342562c7ee7e3166c7.html#a4ab93491f82545342562c7ee7e3166c7">basic_json</a>(<span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a>&amp; other)</div><div class="line"><a name="l01982"></a><span class="lineno"> 1982</span>&#160; : m_type(other.m_type)</div><div class="line"><a name="l01983"></a><span class="lineno"> 1983</span>&#160; {</div><div class="line"><a name="l01984"></a><span class="lineno"> 1984</span>&#160; <span class="comment">// check of passed value is valid</span></div><div class="line"><a name="l01985"></a><span class="lineno"> 1985</span>&#160; other.assert_invariant();</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="keywordflow">switch</span> (m_type)</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">case</span> value_t::object:</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; m_value = *other.m_value.object;</div><div class="line"><a name="l01992"></a><span class="lineno"> 1992</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01993"></a><span class="lineno"> 1993</span>&#160; }</div><div class="line"><a name="l01994"></a><span class="lineno"> 1994</span>&#160;</div><div class="line"><a name="l01995"></a><span class="lineno"> 1995</span>&#160; <span class="keywordflow">case</span> value_t::array:</div><div class="line"><a name="l01996"></a><span class="lineno"> 1996</span>&#160; {</div><div class="line"><a name="l01997"></a><span class="lineno"> 1997</span>&#160; m_value = *other.m_value.array;</div><div class="line"><a name="l01998"></a><span class="lineno"> 1998</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01999"></a><span class="lineno"> 1999</span>&#160; }</div><div class="line"><a name="l02000"></a><span class="lineno"> 2000</span>&#160;</div><div class="line"><a name="l02001"></a><span class="lineno"> 2001</span>&#160; <span class="keywordflow">case</span> value_t::string:</div><div class="line"><a name="l02002"></a><span class="lineno"> 2002</span>&#160; {</div><div class="line"><a name="l02003"></a><span class="lineno"> 2003</span>&#160; m_value = *other.m_value.string;</div><div class="line"><a name="l02004"></a><span class="lineno"> 2004</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l02005"></a><span class="lineno"> 2005</span>&#160; }</div><div class="line"><a name="l02006"></a><span class="lineno"> 2006</span>&#160;</div><div class="line"><a name="l02007"></a><span class="lineno"> 2007</span>&#160; <span class="keywordflow">case</span> value_t::boolean:</div><div class="line"><a name="l02008"></a><span class="lineno"> 2008</span>&#160; {</div><div class="line"><a name="l02009"></a><span class="lineno"> 2009</span>&#160; m_value = other.m_value.boolean;</div><div class="line"><a name="l02010"></a><span class="lineno"> 2010</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l02011"></a><span class="lineno"> 2011</span>&#160; }</div><div class="line"><a name="l02012"></a><span class="lineno"> 2012</span>&#160;</div><div class="line"><a name="l02013"></a><span class="lineno"> 2013</span>&#160; <span class="keywordflow">case</span> value_t::number_integer:</div><div class="line"><a name="l02014"></a><span class="lineno"> 2014</span>&#160; {</div><div class="line"><a name="l02015"></a><span class="lineno"> 2015</span>&#160; m_value = other.m_value.number_integer;</div><div class="line"><a name="l02016"></a><span class="lineno"> 2016</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l02017"></a><span class="lineno"> 2017</span>&#160; }</div><div class="line"><a name="l02018"></a><span class="lineno"> 2018</span>&#160;</div><div class="line"><a name="l02019"></a><span class="lineno"> 2019</span>&#160; <span class="keywordflow">case</span> value_t::number_unsigned:</div><div class="line"><a name="l02020"></a><span class="lineno"> 2020</span>&#160; {</div><div class="line"><a name="l02021"></a><span class="lineno"> 2021</span>&#160; m_value = other.m_value.number_unsigned;</div><div class="line"><a name="l02022"></a><span class="lineno"> 2022</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l02023"></a><span class="lineno"> 2023</span>&#160; }</div><div class="line"><a name="l02024"></a><span class="lineno"> 2024</span>&#160;</div><div class="line"><a name="l02025"></a><span class="lineno"> 2025</span>&#160; <span class="keywordflow">case</span> value_t::number_float:</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; m_value = other.m_value.number_float;</div><div class="line"><a name="l02028"></a><span class="lineno"> 2028</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l02029"></a><span class="lineno"> 2029</span>&#160; }</div><div class="line"><a name="l02030"></a><span class="lineno"> 2030</span>&#160;</div><div class="line"><a name="l02031"></a><span class="lineno"> 2031</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l02032"></a><span class="lineno"> 2032</span>&#160; {</div><div class="line"><a name="l02033"></a><span class="lineno"> 2033</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l02034"></a><span class="lineno"> 2034</span>&#160; }</div><div class="line"><a name="l02035"></a><span class="lineno"> 2035</span>&#160; }</div><div class="line"><a name="l02036"></a><span class="lineno"> 2036</span>&#160;</div><div class="line"><a name="l02037"></a><span class="lineno"> 2037</span>&#160; assert_invariant();</div><div class="line"><a name="l02038"></a><span class="lineno"> 2038</span>&#160; }</div><div class="line"><a name="l02039"></a><span class="lineno"> 2039</span>&#160;</div><div class="line"><a name="l02058"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a73e150cbcba5643cb89de8f515eb64e2.html#a73e150cbcba5643cb89de8f515eb64e2"> 2058</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_a73e150cbcba5643cb89de8f515eb64e2.html#a73e150cbcba5643cb89de8f515eb64e2">basic_json</a>(<a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a>&amp;&amp; other) noexcept</div><div class="line"><a name="l02059"></a><span class="lineno"> 2059</span>&#160; : m_type(<a class="code" href="namespacestd.html">std</a>::move(other.m_type)),</div><div class="line"><a name="l02060"></a><span class="lineno"> 2060</span>&#160; m_value(<a class="code" href="namespacestd.html">std</a>::move(other.m_value))</div><div class="line"><a name="l02061"></a><span class="lineno"> 2061</span>&#160; {</div><div class="line"><a name="l02062"></a><span class="lineno"> 2062</span>&#160; <span class="comment">// check that passed value is valid</span></div><div class="line"><a name="l02063"></a><span class="lineno"> 2063</span>&#160; other.assert_invariant();</div><div class="line"><a name="l02064"></a><span class="lineno"> 2064</span>&#160;</div><div class="line"><a name="l02065"></a><span class="lineno"> 2065</span>&#160; <span class="comment">// invalidate payload</span></div><div class="line"><a name="l02066"></a><span class="lineno"> 2066</span>&#160; other.m_type = value_t::null;</div><div class="line"><a name="l02067"></a><span class="lineno"> 2067</span>&#160; other.m_value = {};</div><div class="line"><a name="l02068"></a><span class="lineno"> 2068</span>&#160;</div><div class="line"><a name="l02069"></a><span class="lineno"> 2069</span>&#160; assert_invariant();</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;</div><div class="line"><a name="l02095"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_ae08fa64b9f0a5b5c878cbbabb7a296ee.html#ae08fa64b9f0a5b5c878cbbabb7a296ee"> 2095</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">reference</a>&amp; <a class="code" href="classnlohmann_1_1basic__json_ae08fa64b9f0a5b5c878cbbabb7a296ee.html#ae08fa64b9f0a5b5c878cbbabb7a296ee">operator=</a>(<a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a> other) noexcept (</div><div class="line"><a name="l02096"></a><span class="lineno"> 2096</span>&#160; std::is_nothrow_move_constructible&lt;value_t&gt;::value and</div><div class="line"><a name="l02097"></a><span class="lineno"> 2097</span>&#160; std::is_nothrow_move_assignable&lt;value_t&gt;::value and</div><div class="line"><a name="l02098"></a><span class="lineno"> 2098</span>&#160; std::is_nothrow_move_constructible&lt;json_value&gt;::value and</div><div class="line"><a name="l02099"></a><span class="lineno"> 2099</span>&#160; std::is_nothrow_move_assignable&lt;json_value&gt;::value</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; {</div><div class="line"><a name="l02102"></a><span class="lineno"> 2102</span>&#160; <span class="comment">// check that passed value is valid</span></div><div class="line"><a name="l02103"></a><span class="lineno"> 2103</span>&#160; other.assert_invariant();</div><div class="line"><a name="l02104"></a><span class="lineno"> 2104</span>&#160;</div><div class="line"><a name="l02105"></a><span class="lineno"> 2105</span>&#160; <span class="keyword">using</span> std::swap;</div><div class="line"><a name="l02106"></a><span class="lineno"> 2106</span>&#160; swap(m_type, other.m_type);</div><div class="line"><a name="l02107"></a><span class="lineno"> 2107</span>&#160; swap(m_value, other.m_value);</div><div class="line"><a name="l02108"></a><span class="lineno"> 2108</span>&#160;</div><div class="line"><a name="l02109"></a><span class="lineno"> 2109</span>&#160; assert_invariant();</div><div class="line"><a name="l02110"></a><span class="lineno"> 2110</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l02111"></a><span class="lineno"> 2111</span>&#160; }</div><div class="line"><a name="l02112"></a><span class="lineno"> 2112</span>&#160;</div><div class="line"><a name="l02128"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a947b5b2a832e490858dbdddfe7085831.html#a947b5b2a832e490858dbdddfe7085831"> 2128</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_a947b5b2a832e490858dbdddfe7085831.html#a947b5b2a832e490858dbdddfe7085831">~basic_json</a>()</div><div class="line"><a name="l02129"></a><span class="lineno"> 2129</span>&#160; {</div><div class="line"><a name="l02130"></a><span class="lineno"> 2130</span>&#160; assert_invariant();</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="keywordflow">switch</span> (m_type)</div><div class="line"><a name="l02133"></a><span class="lineno"> 2133</span>&#160; {</div><div class="line"><a name="l02134"></a><span class="lineno"> 2134</span>&#160; <span class="keywordflow">case</span> value_t::object:</div><div class="line"><a name="l02135"></a><span class="lineno"> 2135</span>&#160; {</div><div class="line"><a name="l02136"></a><span class="lineno"> 2136</span>&#160; AllocatorType&lt;object_t&gt; alloc;</div><div class="line"><a name="l02137"></a><span class="lineno"> 2137</span>&#160; alloc.destroy(m_value.object);</div><div class="line"><a name="l02138"></a><span class="lineno"> 2138</span>&#160; alloc.deallocate(m_value.object, 1);</div><div class="line"><a name="l02139"></a><span class="lineno"> 2139</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l02140"></a><span class="lineno"> 2140</span>&#160; }</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">case</span> value_t::array:</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; AllocatorType&lt;array_t&gt; alloc;</div><div class="line"><a name="l02145"></a><span class="lineno"> 2145</span>&#160; alloc.destroy(m_value.array);</div><div class="line"><a name="l02146"></a><span class="lineno"> 2146</span>&#160; alloc.deallocate(m_value.array, 1);</div><div class="line"><a name="l02147"></a><span class="lineno"> 2147</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l02148"></a><span class="lineno"> 2148</span>&#160; }</div><div class="line"><a name="l02149"></a><span class="lineno"> 2149</span>&#160;</div><div class="line"><a name="l02150"></a><span class="lineno"> 2150</span>&#160; <span class="keywordflow">case</span> value_t::string:</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; AllocatorType&lt;string_t&gt; alloc;</div><div class="line"><a name="l02153"></a><span class="lineno"> 2153</span>&#160; alloc.destroy(m_value.string);</div><div class="line"><a name="l02154"></a><span class="lineno"> 2154</span>&#160; alloc.deallocate(m_value.string, 1);</div><div class="line"><a name="l02155"></a><span class="lineno"> 2155</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l02156"></a><span class="lineno"> 2156</span>&#160; }</div><div class="line"><a name="l02157"></a><span class="lineno"> 2157</span>&#160;</div><div class="line"><a name="l02158"></a><span class="lineno"> 2158</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l02159"></a><span class="lineno"> 2159</span>&#160; {</div><div class="line"><a name="l02160"></a><span class="lineno"> 2160</span>&#160; <span class="comment">// all other types need no specific destructor</span></div><div class="line"><a name="l02161"></a><span class="lineno"> 2161</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l02162"></a><span class="lineno"> 2162</span>&#160; }</div><div class="line"><a name="l02163"></a><span class="lineno"> 2163</span>&#160; }</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="l02167"></a><span class="lineno"> 2167</span>&#160;</div><div class="line"><a name="l02168"></a><span class="lineno"> 2168</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l02170"></a><span class="lineno"> 2170</span>&#160; <span class="comment">// object inspection //</span></div><div class="line"><a name="l02172"></a><span class="lineno"> 2172</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02176"></a><span class="lineno"> 2176</span>&#160;</div><div class="line"><a name="l02200"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_afd4b7d7bcadc62da7c582fa36ba6805f.html#afd4b7d7bcadc62da7c582fa36ba6805f"> 2200</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_ab63e618bbb0371042b1bec17f5891f42.html#ab63e618bbb0371042b1bec17f5891f42">string_t</a> <a class="code" href="classnlohmann_1_1basic__json_afd4b7d7bcadc62da7c582fa36ba6805f.html#afd4b7d7bcadc62da7c582fa36ba6805f">dump</a>(<span class="keyword">const</span> <span class="keywordtype">int</span> indent = -1)<span class="keyword"> const</span></div><div class="line"><a name="l02201"></a><span class="lineno"> 2201</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l02202"></a><span class="lineno"> 2202</span>&#160; std::stringstream ss;</div><div class="line"><a name="l02203"></a><span class="lineno"> 2203</span>&#160; <span class="comment">// fix locale problems</span></div><div class="line"><a name="l02204"></a><span class="lineno"> 2204</span>&#160; <span class="keyword">const</span> <span class="keyword">static</span> std::locale loc(std::locale(), <span class="keyword">new</span> DecimalSeparator);</div><div class="line"><a name="l02205"></a><span class="lineno"> 2205</span>&#160; ss.imbue(loc);</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="comment">// 6, 15 or 16 digits of precision allows round-trip IEEE 754</span></div><div class="line"><a name="l02208"></a><span class="lineno"> 2208</span>&#160; <span class="comment">// string-&gt;float-&gt;string, string-&gt;double-&gt;string or string-&gt;long</span></div><div class="line"><a name="l02209"></a><span class="lineno"> 2209</span>&#160; <span class="comment">// double-&gt;string; to be safe, we read this value from</span></div><div class="line"><a name="l02210"></a><span class="lineno"> 2210</span>&#160; <span class="comment">// std::numeric_limits&lt;number_float_t&gt;::digits10</span></div><div class="line"><a name="l02211"></a><span class="lineno"> 2211</span>&#160; ss.precision(std::numeric_limits&lt;double&gt;::digits10);</div><div class="line"><a name="l02212"></a><span class="lineno"> 2212</span>&#160;</div><div class="line"><a name="l02213"></a><span class="lineno"> 2213</span>&#160; <span class="keywordflow">if</span> (indent &gt;= 0)</div><div class="line"><a name="l02214"></a><span class="lineno"> 2214</span>&#160; {</div><div class="line"><a name="l02215"></a><span class="lineno"> 2215</span>&#160; dump(ss, <span class="keyword">true</span>, static_cast&lt;unsigned int&gt;(indent));</div><div class="line"><a name="l02216"></a><span class="lineno"> 2216</span>&#160; }</div><div class="line"><a name="l02217"></a><span class="lineno"> 2217</span>&#160; <span class="keywordflow">else</span></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; dump(ss, <span class="keyword">false</span>, 0);</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;</div><div class="line"><a name="l02222"></a><span class="lineno"> 2222</span>&#160; <span class="keywordflow">return</span> ss.str();</div><div class="line"><a name="l02223"></a><span class="lineno"> 2223</span>&#160; }</div><div class="line"><a name="l02224"></a><span class="lineno"> 2224</span>&#160;</div><div class="line"><a name="l02243"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a5d466b240d0ba9f648d7fd4ff42359f5.html#a5d466b240d0ba9f648d7fd4ff42359f5"> 2243</a></span>&#160; constexpr <a class="code" href="classnlohmann_1_1basic__json_a231b02148577b69a154b2ce2c87a5522.html#a231b02148577b69a154b2ce2c87a5522">value_t</a> <a class="code" href="classnlohmann_1_1basic__json_a5d466b240d0ba9f648d7fd4ff42359f5.html#a5d466b240d0ba9f648d7fd4ff42359f5">type</a>() const noexcept</div><div class="line"><a name="l02244"></a><span class="lineno"> 2244</span>&#160; {</div><div class="line"><a name="l02245"></a><span class="lineno"> 2245</span>&#160; <span class="keywordflow">return</span> m_type;</div><div class="line"><a name="l02246"></a><span class="lineno"> 2246</span>&#160; }</div><div class="line"><a name="l02247"></a><span class="lineno"> 2247</span>&#160;</div><div class="line"><a name="l02273"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_adcd6086bac286854d5cc8b7f84d74a49.html#adcd6086bac286854d5cc8b7f84d74a49"> 2273</a></span>&#160; constexpr <span class="keywordtype">bool</span> <a class="code" href="classnlohmann_1_1basic__json_adcd6086bac286854d5cc8b7f84d74a49.html#adcd6086bac286854d5cc8b7f84d74a49">is_primitive</a>() const noexcept</div><div class="line"><a name="l02274"></a><span class="lineno"> 2274</span>&#160; {</div><div class="line"><a name="l02275"></a><span class="lineno"> 2275</span>&#160; <span class="keywordflow">return</span> is_null() or is_string() or is_boolean() or is_number();</div><div class="line"><a name="l02276"></a><span class="lineno"> 2276</span>&#160; }</div><div class="line"><a name="l02277"></a><span class="lineno"> 2277</span>&#160;</div><div class="line"><a name="l02300"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a873f4bff2f2a83f68fc1b5341ebdd446.html#a873f4bff2f2a83f68fc1b5341ebdd446"> 2300</a></span>&#160; constexpr <span class="keywordtype">bool</span> <a class="code" href="classnlohmann_1_1basic__json_a873f4bff2f2a83f68fc1b5341ebdd446.html#a873f4bff2f2a83f68fc1b5341ebdd446">is_structured</a>() const noexcept</div><div class="line"><a name="l02301"></a><span class="lineno"> 2301</span>&#160; {</div><div class="line"><a name="l02302"></a><span class="lineno"> 2302</span>&#160; <span class="keywordflow">return</span> is_array() or is_object();</div><div class="line"><a name="l02303"></a><span class="lineno"> 2303</span>&#160; }</div><div class="line"><a name="l02304"></a><span class="lineno"> 2304</span>&#160;</div><div class="line"><a name="l02322"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a8abdfc0d6e051f6fa29d49da57bce631.html#a8abdfc0d6e051f6fa29d49da57bce631"> 2322</a></span>&#160; constexpr <span class="keywordtype">bool</span> <a class="code" href="classnlohmann_1_1basic__json_a8abdfc0d6e051f6fa29d49da57bce631.html#a8abdfc0d6e051f6fa29d49da57bce631">is_null</a>() const noexcept</div><div class="line"><a name="l02323"></a><span class="lineno"> 2323</span>&#160; {</div><div class="line"><a name="l02324"></a><span class="lineno"> 2324</span>&#160; <span class="keywordflow">return</span> m_type == value_t::null;</div><div class="line"><a name="l02325"></a><span class="lineno"> 2325</span>&#160; }</div><div class="line"><a name="l02326"></a><span class="lineno"> 2326</span>&#160;</div><div class="line"><a name="l02344"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_adade77415e7f7bf08a9b5150c742714d.html#adade77415e7f7bf08a9b5150c742714d"> 2344</a></span>&#160; constexpr <span class="keywordtype">bool</span> <a class="code" href="classnlohmann_1_1basic__json_adade77415e7f7bf08a9b5150c742714d.html#adade77415e7f7bf08a9b5150c742714d">is_boolean</a>() const noexcept</div><div class="line"><a name="l02345"></a><span class="lineno"> 2345</span>&#160; {</div><div class="line"><a name="l02346"></a><span class="lineno"> 2346</span>&#160; <span class="keywordflow">return</span> m_type == value_t::boolean;</div><div class="line"><a name="l02347"></a><span class="lineno"> 2347</span>&#160; }</div><div class="line"><a name="l02348"></a><span class="lineno"> 2348</span>&#160;</div><div class="line"><a name="l02374"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a957eb9594c7f0ca93212c30f3a400873.html#a957eb9594c7f0ca93212c30f3a400873"> 2374</a></span>&#160; constexpr <span class="keywordtype">bool</span> <a class="code" href="classnlohmann_1_1basic__json_a957eb9594c7f0ca93212c30f3a400873.html#a957eb9594c7f0ca93212c30f3a400873">is_number</a>() const noexcept</div><div class="line"><a name="l02375"></a><span class="lineno"> 2375</span>&#160; {</div><div class="line"><a name="l02376"></a><span class="lineno"> 2376</span>&#160; <span class="keywordflow">return</span> is_number_integer() or is_number_float();</div><div class="line"><a name="l02377"></a><span class="lineno"> 2377</span>&#160; }</div><div class="line"><a name="l02378"></a><span class="lineno"> 2378</span>&#160;</div><div class="line"><a name="l02403"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a435c93d06ef28f8003c31f62ffe4aed1.html#a435c93d06ef28f8003c31f62ffe4aed1"> 2403</a></span>&#160; constexpr <span class="keywordtype">bool</span> <a class="code" href="classnlohmann_1_1basic__json_a435c93d06ef28f8003c31f62ffe4aed1.html#a435c93d06ef28f8003c31f62ffe4aed1">is_number_integer</a>() const noexcept</div><div class="line"><a name="l02404"></a><span class="lineno"> 2404</span>&#160; {</div><div class="line"><a name="l02405"></a><span class="lineno"> 2405</span>&#160; <span class="keywordflow">return</span> m_type == value_t::number_integer or m_type == value_t::number_unsigned;</div><div class="line"><a name="l02406"></a><span class="lineno"> 2406</span>&#160; }</div><div class="line"><a name="l02407"></a><span class="lineno"> 2407</span>&#160;</div><div class="line"><a name="l02431"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_aa388dc101bc285a98122a38fd2e3a9db.html#aa388dc101bc285a98122a38fd2e3a9db"> 2431</a></span>&#160; constexpr <span class="keywordtype">bool</span> <a class="code" href="classnlohmann_1_1basic__json_aa388dc101bc285a98122a38fd2e3a9db.html#aa388dc101bc285a98122a38fd2e3a9db">is_number_unsigned</a>() const noexcept</div><div class="line"><a name="l02432"></a><span class="lineno"> 2432</span>&#160; {</div><div class="line"><a name="l02433"></a><span class="lineno"> 2433</span>&#160; <span class="keywordflow">return</span> m_type == value_t::number_unsigned;</div><div class="line"><a name="l02434"></a><span class="lineno"> 2434</span>&#160; }</div><div class="line"><a name="l02435"></a><span class="lineno"> 2435</span>&#160;</div><div class="line"><a name="l02459"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a7641371be8a347f3c1e05ac089a74c36.html#a7641371be8a347f3c1e05ac089a74c36"> 2459</a></span>&#160; constexpr <span class="keywordtype">bool</span> <a class="code" href="classnlohmann_1_1basic__json_a7641371be8a347f3c1e05ac089a74c36.html#a7641371be8a347f3c1e05ac089a74c36">is_number_float</a>() const noexcept</div><div class="line"><a name="l02460"></a><span class="lineno"> 2460</span>&#160; {</div><div class="line"><a name="l02461"></a><span class="lineno"> 2461</span>&#160; <span class="keywordflow">return</span> m_type == value_t::number_float;</div><div class="line"><a name="l02462"></a><span class="lineno"> 2462</span>&#160; }</div><div class="line"><a name="l02463"></a><span class="lineno"> 2463</span>&#160;</div><div class="line"><a name="l02481"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a94ba313c00f1713fa4be85de64083754.html#a94ba313c00f1713fa4be85de64083754"> 2481</a></span>&#160; constexpr <span class="keywordtype">bool</span> <a class="code" href="classnlohmann_1_1basic__json_a94ba313c00f1713fa4be85de64083754.html#a94ba313c00f1713fa4be85de64083754">is_object</a>() const noexcept</div><div class="line"><a name="l02482"></a><span class="lineno"> 2482</span>&#160; {</div><div class="line"><a name="l02483"></a><span class="lineno"> 2483</span>&#160; <span class="keywordflow">return</span> m_type == value_t::object;</div><div class="line"><a name="l02484"></a><span class="lineno"> 2484</span>&#160; }</div><div class="line"><a name="l02485"></a><span class="lineno"> 2485</span>&#160;</div><div class="line"><a name="l02503"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a256a4cef002023acab3c9d75b569f54a.html#a256a4cef002023acab3c9d75b569f54a"> 2503</a></span>&#160; constexpr <span class="keywordtype">bool</span> <a class="code" href="classnlohmann_1_1basic__json_a256a4cef002023acab3c9d75b569f54a.html#a256a4cef002023acab3c9d75b569f54a">is_array</a>() const noexcept</div><div class="line"><a name="l02504"></a><span class="lineno"> 2504</span>&#160; {</div><div class="line"><a name="l02505"></a><span class="lineno"> 2505</span>&#160; <span class="keywordflow">return</span> m_type == value_t::array;</div><div class="line"><a name="l02506"></a><span class="lineno"> 2506</span>&#160; }</div><div class="line"><a name="l02507"></a><span class="lineno"> 2507</span>&#160;</div><div class="line"><a name="l02525"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a409e854d754f5684b2cce74ee20dbc3b.html#a409e854d754f5684b2cce74ee20dbc3b"> 2525</a></span>&#160; constexpr <span class="keywordtype">bool</span> <a class="code" href="classnlohmann_1_1basic__json_a409e854d754f5684b2cce74ee20dbc3b.html#a409e854d754f5684b2cce74ee20dbc3b">is_string</a>() const noexcept</div><div class="line"><a name="l02526"></a><span class="lineno"> 2526</span>&#160; {</div><div class="line"><a name="l02527"></a><span class="lineno"> 2527</span>&#160; <span class="keywordflow">return</span> m_type == value_t::string;</div><div class="line"><a name="l02528"></a><span class="lineno"> 2528</span>&#160; }</div><div class="line"><a name="l02529"></a><span class="lineno"> 2529</span>&#160;</div><div class="line"><a name="l02552"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a1002d187e05b5323bda5de124cbe95a8.html#a1002d187e05b5323bda5de124cbe95a8"> 2552</a></span>&#160; constexpr <span class="keywordtype">bool</span> <a class="code" href="classnlohmann_1_1basic__json_a1002d187e05b5323bda5de124cbe95a8.html#a1002d187e05b5323bda5de124cbe95a8">is_discarded</a>() const noexcept</div><div class="line"><a name="l02553"></a><span class="lineno"> 2553</span>&#160; {</div><div class="line"><a name="l02554"></a><span class="lineno"> 2554</span>&#160; <span class="keywordflow">return</span> m_type == value_t::discarded;</div><div class="line"><a name="l02555"></a><span class="lineno"> 2555</span>&#160; }</div><div class="line"><a name="l02556"></a><span class="lineno"> 2556</span>&#160;</div><div class="line"><a name="l02575"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a02397f02bb1182bf1e1bc7ecf7f2c227.html#a02397f02bb1182bf1e1bc7ecf7f2c227"> 2575</a></span>&#160; constexpr <span class="keyword">operator</span> <a class="code" href="classnlohmann_1_1basic__json_a231b02148577b69a154b2ce2c87a5522.html#a231b02148577b69a154b2ce2c87a5522">value_t</a>() const noexcept</div><div class="line"><a name="l02576"></a><span class="lineno"> 2576</span>&#160; {</div><div class="line"><a name="l02577"></a><span class="lineno"> 2577</span>&#160; <span class="keywordflow">return</span> m_type;</div><div class="line"><a name="l02578"></a><span class="lineno"> 2578</span>&#160; }</div><div class="line"><a name="l02579"></a><span class="lineno"> 2579</span>&#160;</div><div class="line"><a name="l02581"></a><span class="lineno"> 2581</span>&#160;</div><div class="line"><a name="l02582"></a><span class="lineno"> 2582</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l02584"></a><span class="lineno"> 2584</span>&#160; <span class="comment">// value access //</span></div><div class="line"><a name="l02586"></a><span class="lineno"> 2586</span>&#160;<span class="comment"></span></div><div class="line"><a name="l02588"></a><span class="lineno"> 2588</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">class </span>T, <span class="keyword">typename</span> std::enable_if&lt;</div><div class="line"><a name="l02589"></a><span class="lineno"> 2589</span>&#160; std::is_convertible&lt;typename object_t::key_type, typename T::key_type&gt;::value and</div><div class="line"><a name="l02590"></a><span class="lineno"> 2590</span>&#160; std::is_convertible&lt;basic_json_t, typename T::mapped_type&gt;::value, <span class="keywordtype">int</span>&gt;::type = 0&gt;</div><div class="line"><a name="l02591"></a><span class="lineno"> 2591</span>&#160; T get_impl(T*)<span class="keyword"> const</span></div><div class="line"><a name="l02592"></a><span class="lineno"> 2592</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l02593"></a><span class="lineno"> 2593</span>&#160; <span class="keywordflow">if</span> (is_object())</div><div class="line"><a name="l02594"></a><span class="lineno"> 2594</span>&#160; {</div><div class="line"><a name="l02595"></a><span class="lineno"> 2595</span>&#160; <span class="keywordflow">return</span> T(m_value.object-&gt;begin(), m_value.object-&gt;end());</div><div class="line"><a name="l02596"></a><span class="lineno"> 2596</span>&#160; }</div><div class="line"><a name="l02597"></a><span class="lineno"> 2597</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l02598"></a><span class="lineno"> 2598</span>&#160; {</div><div class="line"><a name="l02599"></a><span class="lineno"> 2599</span>&#160; <span class="keywordflow">throw</span> std::domain_error(<span class="stringliteral">&quot;type must be object, but is &quot;</span> + type_name());</div><div class="line"><a name="l02600"></a><span class="lineno"> 2600</span>&#160; }</div><div class="line"><a name="l02601"></a><span class="lineno"> 2601</span>&#160; }</div><div class="line"><a name="l02602"></a><span class="lineno"> 2602</span>&#160;</div><div class="line"><a name="l02604"></a><span class="lineno"> 2604</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_a0ac9894c9de8dc551cf2e5f1c605537f.html#a0ac9894c9de8dc551cf2e5f1c605537f">object_t</a> get_impl(<a class="code" href="classnlohmann_1_1basic__json_a0ac9894c9de8dc551cf2e5f1c605537f.html#a0ac9894c9de8dc551cf2e5f1c605537f">object_t</a>*)<span class="keyword"> const</span></div><div class="line"><a name="l02605"></a><span class="lineno"> 2605</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l02606"></a><span class="lineno"> 2606</span>&#160; <span class="keywordflow">if</span> (is_object())</div><div class="line"><a name="l02607"></a><span class="lineno"> 2607</span>&#160; {</div><div class="line"><a name="l02608"></a><span class="lineno"> 2608</span>&#160; <span class="keywordflow">return</span> *(m_value.object);</div><div class="line"><a name="l02609"></a><span class="lineno"> 2609</span>&#160; }</div><div class="line"><a name="l02610"></a><span class="lineno"> 2610</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l02611"></a><span class="lineno"> 2611</span>&#160; {</div><div class="line"><a name="l02612"></a><span class="lineno"> 2612</span>&#160; <span class="keywordflow">throw</span> std::domain_error(<span class="stringliteral">&quot;type must be object, but is &quot;</span> + type_name());</div><div class="line"><a name="l02613"></a><span class="lineno"> 2613</span>&#160; }</div><div class="line"><a name="l02614"></a><span class="lineno"> 2614</span>&#160; }</div><div class="line"><a name="l02615"></a><span class="lineno"> 2615</span>&#160;</div><div class="line"><a name="l02617"></a><span class="lineno"> 2617</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">class </span>T, <span class="keyword">typename</span> std::enable_if&lt;</div><div class="line"><a name="l02618"></a><span class="lineno"> 2618</span>&#160; std::is_convertible&lt;basic_json_t, typename T::value_type&gt;::value and</div><div class="line"><a name="l02619"></a><span class="lineno"> 2619</span>&#160; not std::is_same&lt;basic_json_t, typename T::value_type&gt;::value and</div><div class="line"><a name="l02620"></a><span class="lineno"> 2620</span>&#160; not std::is_arithmetic&lt;T&gt;::value and</div><div class="line"><a name="l02621"></a><span class="lineno"> 2621</span>&#160; not std::is_convertible&lt;std::string, T&gt;::value and</div><div class="line"><a name="l02622"></a><span class="lineno"> 2622</span>&#160; not has_mapped_type&lt;T&gt;::value, <span class="keywordtype">int</span>&gt;::type = 0&gt;</div><div class="line"><a name="l02623"></a><span class="lineno"> 2623</span>&#160; T get_impl(T*)<span class="keyword"> const</span></div><div class="line"><a name="l02624"></a><span class="lineno"> 2624</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l02625"></a><span class="lineno"> 2625</span>&#160; <span class="keywordflow">if</span> (is_array())</div><div class="line"><a name="l02626"></a><span class="lineno"> 2626</span>&#160; {</div><div class="line"><a name="l02627"></a><span class="lineno"> 2627</span>&#160; T to_vector;</div><div class="line"><a name="l02628"></a><span class="lineno"> 2628</span>&#160; std::transform(m_value.array-&gt;begin(), m_value.array-&gt;end(),</div><div class="line"><a name="l02629"></a><span class="lineno"> 2629</span>&#160; std::inserter(to_vector, to_vector.end()), [](<a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a> i)</div><div class="line"><a name="l02630"></a><span class="lineno"> 2630</span>&#160; {</div><div class="line"><a name="l02631"></a><span class="lineno"> 2631</span>&#160; <span class="keywordflow">return</span> i.<a class="code" href="classnlohmann_1_1basic__json_aba0695744dbcdad65825f91768a8f04f.html#aba0695744dbcdad65825f91768a8f04f">get</a>&lt;<span class="keyword">typename</span> T::value_type&gt;();</div><div class="line"><a name="l02632"></a><span class="lineno"> 2632</span>&#160; });</div><div class="line"><a name="l02633"></a><span class="lineno"> 2633</span>&#160; <span class="keywordflow">return</span> to_vector;</div><div class="line"><a name="l02634"></a><span class="lineno"> 2634</span>&#160; }</div><div class="line"><a name="l02635"></a><span class="lineno"> 2635</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l02636"></a><span class="lineno"> 2636</span>&#160; {</div><div class="line"><a name="l02637"></a><span class="lineno"> 2637</span>&#160; <span class="keywordflow">throw</span> std::domain_error(<span class="stringliteral">&quot;type must be array, but is &quot;</span> + type_name());</div><div class="line"><a name="l02638"></a><span class="lineno"> 2638</span>&#160; }</div><div class="line"><a name="l02639"></a><span class="lineno"> 2639</span>&#160; }</div><div class="line"><a name="l02640"></a><span class="lineno"> 2640</span>&#160;</div><div class="line"><a name="l02642"></a><span class="lineno"> 2642</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">class </span>T, <span class="keyword">typename</span> std::enable_if&lt;</div><div class="line"><a name="l02643"></a><span class="lineno"> 2643</span>&#160; std::is_convertible&lt;basic_json_t, T&gt;::value and</div><div class="line"><a name="l02644"></a><span class="lineno"> 2644</span>&#160; not std::is_same&lt;basic_json_t, T&gt;::value, <span class="keywordtype">int</span>&gt;::type = 0&gt;</div><div class="line"><a name="l02645"></a><span class="lineno"> 2645</span>&#160; std::vector&lt;T&gt; get_impl(std::vector&lt;T&gt;*)<span class="keyword"> const</span></div><div class="line"><a name="l02646"></a><span class="lineno"> 2646</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l02647"></a><span class="lineno"> 2647</span>&#160; <span class="keywordflow">if</span> (is_array())</div><div class="line"><a name="l02648"></a><span class="lineno"> 2648</span>&#160; {</div><div class="line"><a name="l02649"></a><span class="lineno"> 2649</span>&#160; std::vector&lt;T&gt; to_vector;</div><div class="line"><a name="l02650"></a><span class="lineno"> 2650</span>&#160; to_vector.reserve(m_value.array-&gt;size());</div><div class="line"><a name="l02651"></a><span class="lineno"> 2651</span>&#160; std::transform(m_value.array-&gt;begin(), m_value.array-&gt;end(),</div><div class="line"><a name="l02652"></a><span class="lineno"> 2652</span>&#160; std::inserter(to_vector, to_vector.end()), [](<a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a> i)</div><div class="line"><a name="l02653"></a><span class="lineno"> 2653</span>&#160; {</div><div class="line"><a name="l02654"></a><span class="lineno"> 2654</span>&#160; <span class="keywordflow">return</span> i.<a class="code" href="classnlohmann_1_1basic__json_aba0695744dbcdad65825f91768a8f04f.html#aba0695744dbcdad65825f91768a8f04f">get</a>&lt;T&gt;();</div><div class="line"><a name="l02655"></a><span class="lineno"> 2655</span>&#160; });</div><div class="line"><a name="l02656"></a><span class="lineno"> 2656</span>&#160; <span class="keywordflow">return</span> to_vector;</div><div class="line"><a name="l02657"></a><span class="lineno"> 2657</span>&#160; }</div><div class="line"><a name="l02658"></a><span class="lineno"> 2658</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l02659"></a><span class="lineno"> 2659</span>&#160; {</div><div class="line"><a name="l02660"></a><span class="lineno"> 2660</span>&#160; <span class="keywordflow">throw</span> std::domain_error(<span class="stringliteral">&quot;type must be array, but is &quot;</span> + type_name());</div><div class="line"><a name="l02661"></a><span class="lineno"> 2661</span>&#160; }</div><div class="line"><a name="l02662"></a><span class="lineno"> 2662</span>&#160; }</div><div class="line"><a name="l02663"></a><span class="lineno"> 2663</span>&#160;</div><div class="line"><a name="l02665"></a><span class="lineno"> 2665</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">class </span>T, <span class="keyword">typename</span> std::enable_if&lt;</div><div class="line"><a name="l02666"></a><span class="lineno"> 2666</span>&#160; std::is_same&lt;basic_json, typename T::value_type&gt;::value and</div><div class="line"><a name="l02667"></a><span class="lineno"> 2667</span>&#160; not has_mapped_type&lt;T&gt;::value, <span class="keywordtype">int</span>&gt;::type = 0&gt;</div><div class="line"><a name="l02668"></a><span class="lineno"> 2668</span>&#160; T get_impl(T*)<span class="keyword"> const</span></div><div class="line"><a name="l02669"></a><span class="lineno"> 2669</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l02670"></a><span class="lineno"> 2670</span>&#160; <span class="keywordflow">if</span> (is_array())</div><div class="line"><a name="l02671"></a><span class="lineno"> 2671</span>&#160; {</div><div class="line"><a name="l02672"></a><span class="lineno"> 2672</span>&#160; <span class="keywordflow">return</span> T(m_value.array-&gt;begin(), m_value.array-&gt;end());</div><div class="line"><a name="l02673"></a><span class="lineno"> 2673</span>&#160; }</div><div class="line"><a name="l02674"></a><span class="lineno"> 2674</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l02675"></a><span class="lineno"> 2675</span>&#160; {</div><div class="line"><a name="l02676"></a><span class="lineno"> 2676</span>&#160; <span class="keywordflow">throw</span> std::domain_error(<span class="stringliteral">&quot;type must be array, but is &quot;</span> + type_name());</div><div class="line"><a name="l02677"></a><span class="lineno"> 2677</span>&#160; }</div><div class="line"><a name="l02678"></a><span class="lineno"> 2678</span>&#160; }</div><div class="line"><a name="l02679"></a><span class="lineno"> 2679</span>&#160;</div><div class="line"><a name="l02681"></a><span class="lineno"> 2681</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_ab00b882d39306d663c23dab110f5cae0.html#ab00b882d39306d663c23dab110f5cae0">array_t</a> get_impl(<a class="code" href="classnlohmann_1_1basic__json_ab00b882d39306d663c23dab110f5cae0.html#ab00b882d39306d663c23dab110f5cae0">array_t</a>*)<span class="keyword"> const</span></div><div class="line"><a name="l02682"></a><span class="lineno"> 2682</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l02683"></a><span class="lineno"> 2683</span>&#160; <span class="keywordflow">if</span> (is_array())</div><div class="line"><a name="l02684"></a><span class="lineno"> 2684</span>&#160; {</div><div class="line"><a name="l02685"></a><span class="lineno"> 2685</span>&#160; <span class="keywordflow">return</span> *(m_value.array);</div><div class="line"><a name="l02686"></a><span class="lineno"> 2686</span>&#160; }</div><div class="line"><a name="l02687"></a><span class="lineno"> 2687</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l02688"></a><span class="lineno"> 2688</span>&#160; {</div><div class="line"><a name="l02689"></a><span class="lineno"> 2689</span>&#160; <span class="keywordflow">throw</span> std::domain_error(<span class="stringliteral">&quot;type must be array, but is &quot;</span> + type_name());</div><div class="line"><a name="l02690"></a><span class="lineno"> 2690</span>&#160; }</div><div class="line"><a name="l02691"></a><span class="lineno"> 2691</span>&#160; }</div><div class="line"><a name="l02692"></a><span class="lineno"> 2692</span>&#160;</div><div class="line"><a name="l02694"></a><span class="lineno"> 2694</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, <span class="keyword">typename</span> std::enable_if&lt;</div><div class="line"><a name="l02695"></a><span class="lineno"> 2695</span>&#160; std::is_convertible&lt;string_t, T&gt;::value, <span class="keywordtype">int</span>&gt;::type = 0&gt;</div><div class="line"><a name="l02696"></a><span class="lineno"> 2696</span>&#160; T get_impl(T*)<span class="keyword"> const</span></div><div class="line"><a name="l02697"></a><span class="lineno"> 2697</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l02698"></a><span class="lineno"> 2698</span>&#160; <span class="keywordflow">if</span> (is_string())</div><div class="line"><a name="l02699"></a><span class="lineno"> 2699</span>&#160; {</div><div class="line"><a name="l02700"></a><span class="lineno"> 2700</span>&#160; <span class="keywordflow">return</span> *m_value.string;</div><div class="line"><a name="l02701"></a><span class="lineno"> 2701</span>&#160; }</div><div class="line"><a name="l02702"></a><span class="lineno"> 2702</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l02703"></a><span class="lineno"> 2703</span>&#160; {</div><div class="line"><a name="l02704"></a><span class="lineno"> 2704</span>&#160; <span class="keywordflow">throw</span> std::domain_error(<span class="stringliteral">&quot;type must be string, but is &quot;</span> + type_name());</div><div class="line"><a name="l02705"></a><span class="lineno"> 2705</span>&#160; }</div><div class="line"><a name="l02706"></a><span class="lineno"> 2706</span>&#160; }</div><div class="line"><a name="l02707"></a><span class="lineno"> 2707</span>&#160;</div><div class="line"><a name="l02709"></a><span class="lineno"> 2709</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, <span class="keyword">typename</span> std::enable_if&lt;</div><div class="line"><a name="l02710"></a><span class="lineno"> 2710</span>&#160; std::is_arithmetic&lt;T&gt;::value, <span class="keywordtype">int</span>&gt;::type = 0&gt;</div><div class="line"><a name="l02711"></a><span class="lineno"> 2711</span>&#160; T get_impl(T*)<span class="keyword"> const</span></div><div class="line"><a name="l02712"></a><span class="lineno"> 2712</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l02713"></a><span class="lineno"> 2713</span>&#160; <span class="keywordflow">switch</span> (m_type)</div><div class="line"><a name="l02714"></a><span class="lineno"> 2714</span>&#160; {</div><div class="line"><a name="l02715"></a><span class="lineno"> 2715</span>&#160; <span class="keywordflow">case</span> value_t::number_integer:</div><div class="line"><a name="l02716"></a><span class="lineno"> 2716</span>&#160; {</div><div class="line"><a name="l02717"></a><span class="lineno"> 2717</span>&#160; <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span>T<span class="keyword">&gt;</span>(m_value.number_integer);</div><div class="line"><a name="l02718"></a><span class="lineno"> 2718</span>&#160; }</div><div class="line"><a name="l02719"></a><span class="lineno"> 2719</span>&#160;</div><div class="line"><a name="l02720"></a><span class="lineno"> 2720</span>&#160; <span class="keywordflow">case</span> value_t::number_unsigned:</div><div class="line"><a name="l02721"></a><span class="lineno"> 2721</span>&#160; {</div><div class="line"><a name="l02722"></a><span class="lineno"> 2722</span>&#160; <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span>T<span class="keyword">&gt;</span>(m_value.number_unsigned);</div><div class="line"><a name="l02723"></a><span class="lineno"> 2723</span>&#160; }</div><div class="line"><a name="l02724"></a><span class="lineno"> 2724</span>&#160;</div><div class="line"><a name="l02725"></a><span class="lineno"> 2725</span>&#160; <span class="keywordflow">case</span> value_t::number_float:</div><div class="line"><a name="l02726"></a><span class="lineno"> 2726</span>&#160; {</div><div class="line"><a name="l02727"></a><span class="lineno"> 2727</span>&#160; <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span>T<span class="keyword">&gt;</span>(m_value.number_float);</div><div class="line"><a name="l02728"></a><span class="lineno"> 2728</span>&#160; }</div><div class="line"><a name="l02729"></a><span class="lineno"> 2729</span>&#160;</div><div class="line"><a name="l02730"></a><span class="lineno"> 2730</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l02731"></a><span class="lineno"> 2731</span>&#160; {</div><div class="line"><a name="l02732"></a><span class="lineno"> 2732</span>&#160; <span class="keywordflow">throw</span> std::domain_error(<span class="stringliteral">&quot;type must be number, but is &quot;</span> + type_name());</div><div class="line"><a name="l02733"></a><span class="lineno"> 2733</span>&#160; }</div><div class="line"><a name="l02734"></a><span class="lineno"> 2734</span>&#160; }</div><div class="line"><a name="l02735"></a><span class="lineno"> 2735</span>&#160; }</div><div class="line"><a name="l02736"></a><span class="lineno"> 2736</span>&#160;</div><div class="line"><a name="l02738"></a><span class="lineno"> 2738</span>&#160; constexpr <a class="code" href="classnlohmann_1_1basic__json_af3bc3e83aa162d7ba4df16a949872723.html#af3bc3e83aa162d7ba4df16a949872723">boolean_t</a> get_impl(<a class="code" href="classnlohmann_1_1basic__json_af3bc3e83aa162d7ba4df16a949872723.html#af3bc3e83aa162d7ba4df16a949872723">boolean_t</a>*)<span class="keyword"> const</span></div><div class="line"><a name="l02739"></a><span class="lineno"> 2739</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l02740"></a><span class="lineno"> 2740</span>&#160; <span class="keywordflow">return</span> is_boolean()</div><div class="line"><a name="l02741"></a><span class="lineno"> 2741</span>&#160; ? m_value.boolean</div><div class="line"><a name="l02742"></a><span class="lineno"> 2742</span>&#160; : <span class="keywordflow">throw</span> std::domain_error(<span class="stringliteral">&quot;type must be boolean, but is &quot;</span> + type_name());</div><div class="line"><a name="l02743"></a><span class="lineno"> 2743</span>&#160; }</div><div class="line"><a name="l02744"></a><span class="lineno"> 2744</span>&#160;</div><div class="line"><a name="l02746"></a><span class="lineno"> 2746</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_a0ac9894c9de8dc551cf2e5f1c605537f.html#a0ac9894c9de8dc551cf2e5f1c605537f">object_t</a>* get_impl_ptr(<a class="code" href="classnlohmann_1_1basic__json_a0ac9894c9de8dc551cf2e5f1c605537f.html#a0ac9894c9de8dc551cf2e5f1c605537f">object_t</a>*) noexcept</div><div class="line"><a name="l02747"></a><span class="lineno"> 2747</span>&#160; {</div><div class="line"><a name="l02748"></a><span class="lineno"> 2748</span>&#160; <span class="keywordflow">return</span> is_object() ? m_value.object : <span class="keyword">nullptr</span>;</div><div class="line"><a name="l02749"></a><span class="lineno"> 2749</span>&#160; }</div><div class="line"><a name="l02750"></a><span class="lineno"> 2750</span>&#160;</div><div class="line"><a name="l02752"></a><span class="lineno"> 2752</span>&#160; constexpr <span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_a0ac9894c9de8dc551cf2e5f1c605537f.html#a0ac9894c9de8dc551cf2e5f1c605537f">object_t</a>* get_impl_ptr(<span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_a0ac9894c9de8dc551cf2e5f1c605537f.html#a0ac9894c9de8dc551cf2e5f1c605537f">object_t</a>*) <span class="keyword">const</span> noexcept</div><div class="line"><a name="l02753"></a><span class="lineno"> 2753</span>&#160; {</div><div class="line"><a name="l02754"></a><span class="lineno"> 2754</span>&#160; <span class="keywordflow">return</span> is_object() ? m_value.object : <span class="keyword">nullptr</span>;</div><div class="line"><a name="l02755"></a><span class="lineno"> 2755</span>&#160; }</div><div class="line"><a name="l02756"></a><span class="lineno"> 2756</span>&#160;</div><div class="line"><a name="l02758"></a><span class="lineno"> 2758</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_ab00b882d39306d663c23dab110f5cae0.html#ab00b882d39306d663c23dab110f5cae0">array_t</a>* get_impl_ptr(<a class="code" href="classnlohmann_1_1basic__json_ab00b882d39306d663c23dab110f5cae0.html#ab00b882d39306d663c23dab110f5cae0">array_t</a>*) noexcept</div><div class="line"><a name="l02759"></a><span class="lineno"> 2759</span>&#160; {</div><div class="line"><a name="l02760"></a><span class="lineno"> 2760</span>&#160; <span class="keywordflow">return</span> is_array() ? m_value.array : <span class="keyword">nullptr</span>;</div><div class="line"><a name="l02761"></a><span class="lineno"> 2761</span>&#160; }</div><div class="line"><a name="l02762"></a><span class="lineno"> 2762</span>&#160;</div><div class="line"><a name="l02764"></a><span class="lineno"> 2764</span>&#160; constexpr <span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_ab00b882d39306d663c23dab110f5cae0.html#ab00b882d39306d663c23dab110f5cae0">array_t</a>* get_impl_ptr(<span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_ab00b882d39306d663c23dab110f5cae0.html#ab00b882d39306d663c23dab110f5cae0">array_t</a>*) <span class="keyword">const</span> noexcept</div><div class="line"><a name="l02765"></a><span class="lineno"> 2765</span>&#160; {</div><div class="line"><a name="l02766"></a><span class="lineno"> 2766</span>&#160; <span class="keywordflow">return</span> is_array() ? m_value.array : <span class="keyword">nullptr</span>;</div><div class="line"><a name="l02767"></a><span class="lineno"> 2767</span>&#160; }</div><div class="line"><a name="l02768"></a><span class="lineno"> 2768</span>&#160;</div><div class="line"><a name="l02770"></a><span class="lineno"> 2770</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_ab63e618bbb0371042b1bec17f5891f42.html#ab63e618bbb0371042b1bec17f5891f42">string_t</a>* get_impl_ptr(<a class="code" href="classnlohmann_1_1basic__json_ab63e618bbb0371042b1bec17f5891f42.html#ab63e618bbb0371042b1bec17f5891f42">string_t</a>*) noexcept</div><div class="line"><a name="l02771"></a><span class="lineno"> 2771</span>&#160; {</div><div class="line"><a name="l02772"></a><span class="lineno"> 2772</span>&#160; <span class="keywordflow">return</span> is_string() ? m_value.string : <span class="keyword">nullptr</span>;</div><div class="line"><a name="l02773"></a><span class="lineno"> 2773</span>&#160; }</div><div class="line"><a name="l02774"></a><span class="lineno"> 2774</span>&#160;</div><div class="line"><a name="l02776"></a><span class="lineno"> 2776</span>&#160; constexpr <span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_ab63e618bbb0371042b1bec17f5891f42.html#ab63e618bbb0371042b1bec17f5891f42">string_t</a>* get_impl_ptr(<span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_ab63e618bbb0371042b1bec17f5891f42.html#ab63e618bbb0371042b1bec17f5891f42">string_t</a>*) <span class="keyword">const</span> noexcept</div><div class="line"><a name="l02777"></a><span class="lineno"> 2777</span>&#160; {</div><div class="line"><a name="l02778"></a><span class="lineno"> 2778</span>&#160; <span class="keywordflow">return</span> is_string() ? m_value.string : <span class="keyword">nullptr</span>;</div><div class="line"><a name="l02779"></a><span class="lineno"> 2779</span>&#160; }</div><div class="line"><a name="l02780"></a><span class="lineno"> 2780</span>&#160;</div><div class="line"><a name="l02782"></a><span class="lineno"> 2782</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_af3bc3e83aa162d7ba4df16a949872723.html#af3bc3e83aa162d7ba4df16a949872723">boolean_t</a>* get_impl_ptr(<a class="code" href="classnlohmann_1_1basic__json_af3bc3e83aa162d7ba4df16a949872723.html#af3bc3e83aa162d7ba4df16a949872723">boolean_t</a>*) noexcept</div><div class="line"><a name="l02783"></a><span class="lineno"> 2783</span>&#160; {</div><div class="line"><a name="l02784"></a><span class="lineno"> 2784</span>&#160; <span class="keywordflow">return</span> is_boolean() ? &amp;m_value.boolean : <span class="keyword">nullptr</span>;</div><div class="line"><a name="l02785"></a><span class="lineno"> 2785</span>&#160; }</div><div class="line"><a name="l02786"></a><span class="lineno"> 2786</span>&#160;</div><div class="line"><a name="l02788"></a><span class="lineno"> 2788</span>&#160; constexpr <span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_af3bc3e83aa162d7ba4df16a949872723.html#af3bc3e83aa162d7ba4df16a949872723">boolean_t</a>* get_impl_ptr(<span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_af3bc3e83aa162d7ba4df16a949872723.html#af3bc3e83aa162d7ba4df16a949872723">boolean_t</a>*) <span class="keyword">const</span> noexcept</div><div class="line"><a name="l02789"></a><span class="lineno"> 2789</span>&#160; {</div><div class="line"><a name="l02790"></a><span class="lineno"> 2790</span>&#160; <span class="keywordflow">return</span> is_boolean() ? &amp;m_value.boolean : <span class="keyword">nullptr</span>;</div><div class="line"><a name="l02791"></a><span class="lineno"> 2791</span>&#160; }</div><div class="line"><a name="l02792"></a><span class="lineno"> 2792</span>&#160;</div><div class="line"><a name="l02794"></a><span class="lineno"> 2794</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_ac4b10b2364f26ce47bdb9a413ff04a59.html#ac4b10b2364f26ce47bdb9a413ff04a59">number_integer_t</a>* get_impl_ptr(<a class="code" href="classnlohmann_1_1basic__json_ac4b10b2364f26ce47bdb9a413ff04a59.html#ac4b10b2364f26ce47bdb9a413ff04a59">number_integer_t</a>*) noexcept</div><div class="line"><a name="l02795"></a><span class="lineno"> 2795</span>&#160; {</div><div class="line"><a name="l02796"></a><span class="lineno"> 2796</span>&#160; <span class="keywordflow">return</span> is_number_integer() ? &amp;m_value.number_integer : <span class="keyword">nullptr</span>;</div><div class="line"><a name="l02797"></a><span class="lineno"> 2797</span>&#160; }</div><div class="line"><a name="l02798"></a><span class="lineno"> 2798</span>&#160;</div><div class="line"><a name="l02800"></a><span class="lineno"> 2800</span>&#160; constexpr <span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_ac4b10b2364f26ce47bdb9a413ff04a59.html#ac4b10b2364f26ce47bdb9a413ff04a59">number_integer_t</a>* get_impl_ptr(<span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_ac4b10b2364f26ce47bdb9a413ff04a59.html#ac4b10b2364f26ce47bdb9a413ff04a59">number_integer_t</a>*) <span class="keyword">const</span> noexcept</div><div class="line"><a name="l02801"></a><span class="lineno"> 2801</span>&#160; {</div><div class="line"><a name="l02802"></a><span class="lineno"> 2802</span>&#160; <span class="keywordflow">return</span> is_number_integer() ? &amp;m_value.number_integer : <span class="keyword">nullptr</span>;</div><div class="line"><a name="l02803"></a><span class="lineno"> 2803</span>&#160; }</div><div class="line"><a name="l02804"></a><span class="lineno"> 2804</span>&#160;</div><div class="line"><a name="l02806"></a><span class="lineno"> 2806</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_a60a04166c122072ab11eaf9845d9cd1d.html#a60a04166c122072ab11eaf9845d9cd1d">number_unsigned_t</a>* get_impl_ptr(<a class="code" href="classnlohmann_1_1basic__json_a60a04166c122072ab11eaf9845d9cd1d.html#a60a04166c122072ab11eaf9845d9cd1d">number_unsigned_t</a>*) noexcept</div><div class="line"><a name="l02807"></a><span class="lineno"> 2807</span>&#160; {</div><div class="line"><a name="l02808"></a><span class="lineno"> 2808</span>&#160; <span class="keywordflow">return</span> is_number_unsigned() ? &amp;m_value.number_unsigned : <span class="keyword">nullptr</span>;</div><div class="line"><a name="l02809"></a><span class="lineno"> 2809</span>&#160; }</div><div class="line"><a name="l02810"></a><span class="lineno"> 2810</span>&#160;</div><div class="line"><a name="l02812"></a><span class="lineno"> 2812</span>&#160; constexpr <span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_a60a04166c122072ab11eaf9845d9cd1d.html#a60a04166c122072ab11eaf9845d9cd1d">number_unsigned_t</a>* get_impl_ptr(<span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_a60a04166c122072ab11eaf9845d9cd1d.html#a60a04166c122072ab11eaf9845d9cd1d">number_unsigned_t</a>*) <span class="keyword">const</span> noexcept</div><div class="line"><a name="l02813"></a><span class="lineno"> 2813</span>&#160; {</div><div class="line"><a name="l02814"></a><span class="lineno"> 2814</span>&#160; <span class="keywordflow">return</span> is_number_unsigned() ? &amp;m_value.number_unsigned : <span class="keyword">nullptr</span>;</div><div class="line"><a name="l02815"></a><span class="lineno"> 2815</span>&#160; }</div><div class="line"><a name="l02816"></a><span class="lineno"> 2816</span>&#160;</div><div class="line"><a name="l02818"></a><span class="lineno"> 2818</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_a74a0013e847fdc574b48f931f0e757e1.html#a74a0013e847fdc574b48f931f0e757e1">number_float_t</a>* get_impl_ptr(<a class="code" href="classnlohmann_1_1basic__json_a74a0013e847fdc574b48f931f0e757e1.html#a74a0013e847fdc574b48f931f0e757e1">number_float_t</a>*) noexcept</div><div class="line"><a name="l02819"></a><span class="lineno"> 2819</span>&#160; {</div><div class="line"><a name="l02820"></a><span class="lineno"> 2820</span>&#160; <span class="keywordflow">return</span> is_number_float() ? &amp;m_value.number_float : <span class="keyword">nullptr</span>;</div><div class="line"><a name="l02821"></a><span class="lineno"> 2821</span>&#160; }</div><div class="line"><a name="l02822"></a><span class="lineno"> 2822</span>&#160;</div><div class="line"><a name="l02824"></a><span class="lineno"> 2824</span>&#160; constexpr <span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_a74a0013e847fdc574b48f931f0e757e1.html#a74a0013e847fdc574b48f931f0e757e1">number_float_t</a>* get_impl_ptr(<span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_a74a0013e847fdc574b48f931f0e757e1.html#a74a0013e847fdc574b48f931f0e757e1">number_float_t</a>*) <span class="keyword">const</span> noexcept</div><div class="line"><a name="l02825"></a><span class="lineno"> 2825</span>&#160; {</div><div class="line"><a name="l02826"></a><span class="lineno"> 2826</span>&#160; <span class="keywordflow">return</span> is_number_float() ? &amp;m_value.number_float : <span class="keyword">nullptr</span>;</div><div class="line"><a name="l02827"></a><span class="lineno"> 2827</span>&#160; }</div><div class="line"><a name="l02828"></a><span class="lineno"> 2828</span>&#160;</div><div class="line"><a name="l02840"></a><span class="lineno"> 2840</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> ReferenceType, <span class="keyword">typename</span> ThisType&gt;</div><div class="line"><a name="l02841"></a><span class="lineno"> 2841</span>&#160; <span class="keyword">static</span> ReferenceType get_ref_impl(ThisType&amp; obj)</div><div class="line"><a name="l02842"></a><span class="lineno"> 2842</span>&#160; {</div><div class="line"><a name="l02843"></a><span class="lineno"> 2843</span>&#160; <span class="comment">// helper type</span></div><div class="line"><a name="l02844"></a><span class="lineno"> 2844</span>&#160; <span class="keyword">using</span> PointerType = <span class="keyword">typename</span> std::add_pointer&lt;ReferenceType&gt;::type;</div><div class="line"><a name="l02845"></a><span class="lineno"> 2845</span>&#160;</div><div class="line"><a name="l02846"></a><span class="lineno"> 2846</span>&#160; <span class="comment">// delegate the call to get_ptr&lt;&gt;()</span></div><div class="line"><a name="l02847"></a><span class="lineno"> 2847</span>&#160; <span class="keyword">auto</span> ptr = obj.template get_ptr&lt;PointerType&gt;();</div><div class="line"><a name="l02848"></a><span class="lineno"> 2848</span>&#160;</div><div class="line"><a name="l02849"></a><span class="lineno"> 2849</span>&#160; <span class="keywordflow">if</span> (ptr != <span class="keyword">nullptr</span>)</div><div class="line"><a name="l02850"></a><span class="lineno"> 2850</span>&#160; {</div><div class="line"><a name="l02851"></a><span class="lineno"> 2851</span>&#160; <span class="keywordflow">return</span> *ptr;</div><div class="line"><a name="l02852"></a><span class="lineno"> 2852</span>&#160; }</div><div class="line"><a name="l02853"></a><span class="lineno"> 2853</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l02854"></a><span class="lineno"> 2854</span>&#160; {</div><div class="line"><a name="l02855"></a><span class="lineno"> 2855</span>&#160; <span class="keywordflow">throw</span> std::domain_error(<span class="stringliteral">&quot;incompatible ReferenceType for get_ref, actual type is &quot;</span> +</div><div class="line"><a name="l02856"></a><span class="lineno"> 2856</span>&#160; obj.type_name());</div><div class="line"><a name="l02857"></a><span class="lineno"> 2857</span>&#160; }</div><div class="line"><a name="l02858"></a><span class="lineno"> 2858</span>&#160; }</div><div class="line"><a name="l02859"></a><span class="lineno"> 2859</span>&#160;</div><div class="line"><a name="l02860"></a><span class="lineno"> 2860</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l02861"></a><span class="lineno"> 2861</span>&#160;</div><div class="line"><a name="l02865"></a><span class="lineno"> 2865</span>&#160;</div><div class="line"><a name="l02899"></a><span class="lineno"> 2899</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> ValueType, <span class="keyword">typename</span> std::enable_if&lt;</div><div class="line"><a name="l02900"></a><span class="lineno"> 2900</span>&#160; not std::is_pointer&lt;ValueType&gt;::value, <span class="keywordtype">int</span>&gt;::type = 0&gt;</div><div class="line"><a name="l02901"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_aba0695744dbcdad65825f91768a8f04f.html#aba0695744dbcdad65825f91768a8f04f"> 2901</a></span>&#160; ValueType <span class="keyword">get</span>() <span class="keyword">const</span></div><div class="line"><a name="l02902"></a><span class="lineno"> 2902</span>&#160; {</div><div class="line"><a name="l02903"></a><span class="lineno"> 2903</span>&#160; <span class="keywordflow">return</span> get_impl(static_cast&lt;ValueType*&gt;(<span class="keyword">nullptr</span>));</div><div class="line"><a name="l02904"></a><span class="lineno"> 2904</span>&#160; }</div><div class="line"><a name="l02905"></a><span class="lineno"> 2905</span>&#160;</div><div class="line"><a name="l02933"></a><span class="lineno"> 2933</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> PointerType, <span class="keyword">typename</span> std::enable_if&lt;</div><div class="line"><a name="l02934"></a><span class="lineno"> 2934</span>&#160; std::is_pointer&lt;PointerType&gt;::value, <span class="keywordtype">int</span>&gt;::type = 0&gt;</div><div class="line"><a name="l02935"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_ac5693cff1df0775cd3fbe960412cde4b.html#ac5693cff1df0775cd3fbe960412cde4b"> 2935</a></span>&#160; PointerType <span class="keyword">get</span>() noexcept</div><div class="line"><a name="l02936"></a><span class="lineno"> 2936</span>&#160; {</div><div class="line"><a name="l02937"></a><span class="lineno"> 2937</span>&#160; <span class="comment">// delegate the call to get_ptr</span></div><div class="line"><a name="l02938"></a><span class="lineno"> 2938</span>&#160; <span class="keywordflow">return</span> get_ptr&lt;PointerType&gt;();</div><div class="line"><a name="l02939"></a><span class="lineno"> 2939</span>&#160; }</div><div class="line"><a name="l02940"></a><span class="lineno"> 2940</span>&#160;</div><div class="line"><a name="l02945"></a><span class="lineno"> 2945</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> PointerType, <span class="keyword">typename</span> std::enable_if&lt;</div><div class="line"><a name="l02946"></a><span class="lineno"> 2946</span>&#160; std::is_pointer&lt;PointerType&gt;::value, <span class="keywordtype">int</span>&gt;::type = 0&gt;</div><div class="line"><a name="l02947"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a9008c688b9bd5798e4090c971d20ee92.html#a9008c688b9bd5798e4090c971d20ee92"> 2947</a></span>&#160; constexpr <span class="keyword">const</span> PointerType <span class="keyword">get</span>() <span class="keyword">const</span> noexcept</div><div class="line"><a name="l02948"></a><span class="lineno"> 2948</span>&#160; {</div><div class="line"><a name="l02949"></a><span class="lineno"> 2949</span>&#160; <span class="comment">// delegate the call to get_ptr</span></div><div class="line"><a name="l02950"></a><span class="lineno"> 2950</span>&#160; <span class="keywordflow">return</span> get_ptr&lt;PointerType&gt;();</div><div class="line"><a name="l02951"></a><span class="lineno"> 2951</span>&#160; }</div><div class="line"><a name="l02952"></a><span class="lineno"> 2952</span>&#160;</div><div class="line"><a name="l02979"></a><span class="lineno"> 2979</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> PointerType, <span class="keyword">typename</span> std::enable_if&lt;</div><div class="line"><a name="l02980"></a><span class="lineno"> 2980</span>&#160; std::is_pointer&lt;PointerType&gt;::value, <span class="keywordtype">int</span>&gt;::type = 0&gt;</div><div class="line"><a name="l02981"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a7ab11375ed2e29c2fcb6119386851445.html#a7ab11375ed2e29c2fcb6119386851445"> 2981</a></span>&#160; PointerType <a class="code" href="classnlohmann_1_1basic__json_a7ab11375ed2e29c2fcb6119386851445.html#a7ab11375ed2e29c2fcb6119386851445">get_ptr</a>() noexcept</div><div class="line"><a name="l02982"></a><span class="lineno"> 2982</span>&#160; {</div><div class="line"><a name="l02983"></a><span class="lineno"> 2983</span>&#160; <span class="comment">// get the type of the PointerType (remove pointer and const)</span></div><div class="line"><a name="l02984"></a><span class="lineno"> 2984</span>&#160; <span class="keyword">using</span> pointee_t = <span class="keyword">typename</span> std::remove_const&lt;<span class="keyword">typename</span></div><div class="line"><a name="l02985"></a><span class="lineno"> 2985</span>&#160; std::remove_pointer&lt;<span class="keyword">typename</span></div><div class="line"><a name="l02986"></a><span class="lineno"> 2986</span>&#160; std::remove_const&lt;PointerType&gt;::type&gt;::type&gt;::type;</div><div class="line"><a name="l02987"></a><span class="lineno"> 2987</span>&#160; <span class="comment">// make sure the type matches the allowed types</span></div><div class="line"><a name="l02988"></a><span class="lineno"> 2988</span>&#160; static_assert(</div><div class="line"><a name="l02989"></a><span class="lineno"> 2989</span>&#160; std::is_same&lt;object_t, pointee_t&gt;::value</div><div class="line"><a name="l02990"></a><span class="lineno"> 2990</span>&#160; or std::is_same&lt;array_t, pointee_t&gt;::value</div><div class="line"><a name="l02991"></a><span class="lineno"> 2991</span>&#160; or std::is_same&lt;string_t, pointee_t&gt;::value</div><div class="line"><a name="l02992"></a><span class="lineno"> 2992</span>&#160; or std::is_same&lt;boolean_t, pointee_t&gt;::value</div><div class="line"><a name="l02993"></a><span class="lineno"> 2993</span>&#160; or std::is_same&lt;number_integer_t, pointee_t&gt;::value</div><div class="line"><a name="l02994"></a><span class="lineno"> 2994</span>&#160; or std::is_same&lt;number_unsigned_t, pointee_t&gt;::value</div><div class="line"><a name="l02995"></a><span class="lineno"> 2995</span>&#160; or std::is_same&lt;number_float_t, pointee_t&gt;::value</div><div class="line"><a name="l02996"></a><span class="lineno"> 2996</span>&#160; , <span class="stringliteral">&quot;incompatible pointer type&quot;</span>);</div><div class="line"><a name="l02997"></a><span class="lineno"> 2997</span>&#160;</div><div class="line"><a name="l02998"></a><span class="lineno"> 2998</span>&#160; <span class="comment">// delegate the call to get_impl_ptr&lt;&gt;()</span></div><div class="line"><a name="l02999"></a><span class="lineno"> 2999</span>&#160; <span class="keywordflow">return</span> get_impl_ptr(static_cast&lt;PointerType&gt;(<span class="keyword">nullptr</span>));</div><div class="line"><a name="l03000"></a><span class="lineno"> 3000</span>&#160; }</div><div class="line"><a name="l03001"></a><span class="lineno"> 3001</span>&#160;</div><div class="line"><a name="l03006"></a><span class="lineno"> 3006</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> PointerType, <span class="keyword">typename</span> std::enable_if&lt;</div><div class="line"><a name="l03007"></a><span class="lineno"> 3007</span>&#160; std::is_pointer&lt;PointerType&gt;::value and</div><div class="line"><a name="l03008"></a><span class="lineno"> 3008</span>&#160; std::is_const&lt;typename std::remove_pointer&lt;PointerType&gt;::type&gt;::value, <span class="keywordtype">int</span>&gt;::type = 0&gt;</div><div class="line"><a name="l03009"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a9780ea9bb66b6191cb087b14396972c1.html#a9780ea9bb66b6191cb087b14396972c1"> 3009</a></span>&#160; constexpr <span class="keyword">const</span> PointerType <a class="code" href="classnlohmann_1_1basic__json_a9780ea9bb66b6191cb087b14396972c1.html#a9780ea9bb66b6191cb087b14396972c1">get_ptr</a>() const noexcept</div><div class="line"><a name="l03010"></a><span class="lineno"> 3010</span>&#160; {</div><div class="line"><a name="l03011"></a><span class="lineno"> 3011</span>&#160; <span class="comment">// get the type of the PointerType (remove pointer and const)</span></div><div class="line"><a name="l03012"></a><span class="lineno"> 3012</span>&#160; <span class="keyword">using</span> pointee_t = <span class="keyword">typename</span> std::remove_const&lt;<span class="keyword">typename</span></div><div class="line"><a name="l03013"></a><span class="lineno"> 3013</span>&#160; std::remove_pointer&lt;<span class="keyword">typename</span></div><div class="line"><a name="l03014"></a><span class="lineno"> 3014</span>&#160; std::remove_const&lt;PointerType&gt;::type&gt;::type&gt;::type;</div><div class="line"><a name="l03015"></a><span class="lineno"> 3015</span>&#160; <span class="comment">// make sure the type matches the allowed types</span></div><div class="line"><a name="l03016"></a><span class="lineno"> 3016</span>&#160; static_assert(</div><div class="line"><a name="l03017"></a><span class="lineno"> 3017</span>&#160; std::is_same&lt;object_t, pointee_t&gt;::value</div><div class="line"><a name="l03018"></a><span class="lineno"> 3018</span>&#160; or std::is_same&lt;array_t, pointee_t&gt;::value</div><div class="line"><a name="l03019"></a><span class="lineno"> 3019</span>&#160; or std::is_same&lt;string_t, pointee_t&gt;::value</div><div class="line"><a name="l03020"></a><span class="lineno"> 3020</span>&#160; or std::is_same&lt;boolean_t, pointee_t&gt;::value</div><div class="line"><a name="l03021"></a><span class="lineno"> 3021</span>&#160; or std::is_same&lt;number_integer_t, pointee_t&gt;::value</div><div class="line"><a name="l03022"></a><span class="lineno"> 3022</span>&#160; or std::is_same&lt;number_unsigned_t, pointee_t&gt;::value</div><div class="line"><a name="l03023"></a><span class="lineno"> 3023</span>&#160; or std::is_same&lt;number_float_t, pointee_t&gt;::value</div><div class="line"><a name="l03024"></a><span class="lineno"> 3024</span>&#160; , <span class="stringliteral">&quot;incompatible pointer type&quot;</span>);</div><div class="line"><a name="l03025"></a><span class="lineno"> 3025</span>&#160;</div><div class="line"><a name="l03026"></a><span class="lineno"> 3026</span>&#160; <span class="comment">// delegate the call to get_impl_ptr&lt;&gt;() const</span></div><div class="line"><a name="l03027"></a><span class="lineno"> 3027</span>&#160; <span class="keywordflow">return</span> get_impl_ptr(static_cast&lt;const PointerType&gt;(<span class="keyword">nullptr</span>));</div><div class="line"><a name="l03028"></a><span class="lineno"> 3028</span>&#160; }</div><div class="line"><a name="l03029"></a><span class="lineno"> 3029</span>&#160;</div><div class="line"><a name="l03056"></a><span class="lineno"> 3056</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> ReferenceType, <span class="keyword">typename</span> std::enable_if&lt;</div><div class="line"><a name="l03057"></a><span class="lineno"> 3057</span>&#160; std::is_reference&lt;ReferenceType&gt;::value, <span class="keywordtype">int</span>&gt;::type = 0&gt;</div><div class="line"><a name="l03058"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a4f332e90f3cae562d0c3fa6ba48f74f9.html#a4f332e90f3cae562d0c3fa6ba48f74f9"> 3058</a></span>&#160; ReferenceType <a class="code" href="classnlohmann_1_1basic__json_a4f332e90f3cae562d0c3fa6ba48f74f9.html#a4f332e90f3cae562d0c3fa6ba48f74f9">get_ref</a>()</div><div class="line"><a name="l03059"></a><span class="lineno"> 3059</span>&#160; {</div><div class="line"><a name="l03060"></a><span class="lineno"> 3060</span>&#160; <span class="comment">// delegate call to get_ref_impl</span></div><div class="line"><a name="l03061"></a><span class="lineno"> 3061</span>&#160; <span class="keywordflow">return</span> get_ref_impl&lt;ReferenceType&gt;(*this);</div><div class="line"><a name="l03062"></a><span class="lineno"> 3062</span>&#160; }</div><div class="line"><a name="l03063"></a><span class="lineno"> 3063</span>&#160;</div><div class="line"><a name="l03068"></a><span class="lineno"> 3068</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> ReferenceType, <span class="keyword">typename</span> std::enable_if&lt;</div><div class="line"><a name="l03069"></a><span class="lineno"> 3069</span>&#160; std::is_reference&lt;ReferenceType&gt;::value and</div><div class="line"><a name="l03070"></a><span class="lineno"> 3070</span>&#160; std::is_const&lt;typename std::remove_reference&lt;ReferenceType&gt;::type&gt;::value, <span class="keywordtype">int</span>&gt;::type = 0&gt;</div><div class="line"><a name="l03071"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_ab5386a09a24b341435172f43962a43f2.html#ab5386a09a24b341435172f43962a43f2"> 3071</a></span>&#160; ReferenceType <a class="code" href="classnlohmann_1_1basic__json_ab5386a09a24b341435172f43962a43f2.html#ab5386a09a24b341435172f43962a43f2">get_ref</a>()<span class="keyword"> const</span></div><div class="line"><a name="l03072"></a><span class="lineno"> 3072</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l03073"></a><span class="lineno"> 3073</span>&#160; <span class="comment">// delegate call to get_ref_impl</span></div><div class="line"><a name="l03074"></a><span class="lineno"> 3074</span>&#160; <span class="keywordflow">return</span> get_ref_impl&lt;ReferenceType&gt;(*this);</div><div class="line"><a name="l03075"></a><span class="lineno"> 3075</span>&#160; }</div><div class="line"><a name="l03076"></a><span class="lineno"> 3076</span>&#160;</div><div class="line"><a name="l03105"></a><span class="lineno"> 3105</span>&#160; <span class="keyword">template</span> &lt; <span class="keyword">typename</span> ValueType, <span class="keyword">typename</span> std::enable_if &lt;</div><div class="line"><a name="l03106"></a><span class="lineno"> 3106</span>&#160; not std::is_pointer&lt;ValueType&gt;::value and</div><div class="line"><a name="l03107"></a><span class="lineno"> 3107</span>&#160; not std::is_same&lt;ValueType, typename string_t::value_type&gt;::value</div><div class="line"><a name="l03108"></a><span class="lineno"> 3108</span>&#160;<span class="preprocessor">#ifndef _MSC_VER // Fix for issue #167 operator&lt;&lt; abiguity under VS2015</span></div><div class="line"><a name="l03109"></a><span class="lineno"> 3109</span>&#160; and not std::is_same&lt;ValueType, std::initializer_list&lt;typename string_t::value_type&gt;&gt;::value</div><div class="line"><a name="l03110"></a><span class="lineno"> 3110</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l03111"></a><span class="lineno"> 3111</span>&#160; , <span class="keywordtype">int</span> &gt;::type = 0 &gt;</div><div class="line"><a name="l03112"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_ac5bed64638180098b5db82f8e482d855.html#ac5bed64638180098b5db82f8e482d855"> 3112</a></span>&#160; <span class="keyword">operator</span> ValueType()<span class="keyword"> const</span></div><div class="line"><a name="l03113"></a><span class="lineno"> 3113</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l03114"></a><span class="lineno"> 3114</span>&#160; <span class="comment">// delegate the call to get&lt;&gt;() const</span></div><div class="line"><a name="l03115"></a><span class="lineno"> 3115</span>&#160; <span class="keywordflow">return</span> get&lt;ValueType&gt;();</div><div class="line"><a name="l03116"></a><span class="lineno"> 3116</span>&#160; }</div><div class="line"><a name="l03117"></a><span class="lineno"> 3117</span>&#160;</div><div class="line"><a name="l03119"></a><span class="lineno"> 3119</span>&#160;</div><div class="line"><a name="l03120"></a><span class="lineno"> 3120</span>&#160;</div><div class="line"><a name="l03122"></a><span class="lineno"> 3122</span>&#160; <span class="comment">// element access //</span></div><div class="line"><a name="l03124"></a><span class="lineno"> 3124</span>&#160;<span class="comment"></span></div><div class="line"><a name="l03128"></a><span class="lineno"> 3128</span>&#160;</div><div class="line"><a name="l03151"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a214a8c22d616fd3567b88932c07436c9.html#a214a8c22d616fd3567b88932c07436c9"> 3151</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">reference</a> <a class="code" href="classnlohmann_1_1basic__json_a214a8c22d616fd3567b88932c07436c9.html#a214a8c22d616fd3567b88932c07436c9">at</a>(<a class="code" href="classnlohmann_1_1basic__json_a1579a8f72a230358d6cd1a6e8a62859b.html#a1579a8f72a230358d6cd1a6e8a62859b">size_type</a> idx)</div><div class="line"><a name="l03152"></a><span class="lineno"> 3152</span>&#160; {</div><div class="line"><a name="l03153"></a><span class="lineno"> 3153</span>&#160; <span class="comment">// at only works for arrays</span></div><div class="line"><a name="l03154"></a><span class="lineno"> 3154</span>&#160; <span class="keywordflow">if</span> (is_array())</div><div class="line"><a name="l03155"></a><span class="lineno"> 3155</span>&#160; {</div><div class="line"><a name="l03156"></a><span class="lineno"> 3156</span>&#160; <span class="keywordflow">try</span></div><div class="line"><a name="l03157"></a><span class="lineno"> 3157</span>&#160; {</div><div class="line"><a name="l03158"></a><span class="lineno"> 3158</span>&#160; <span class="keywordflow">return</span> m_value.<a class="code" href="classnlohmann_1_1basic__json_a5685815624b086caa532f41e853d4b0f.html#a5685815624b086caa532f41e853d4b0f">array</a>-&gt;<a class="code" href="classnlohmann_1_1basic__json_a214a8c22d616fd3567b88932c07436c9.html#a214a8c22d616fd3567b88932c07436c9">at</a>(idx);</div><div class="line"><a name="l03159"></a><span class="lineno"> 3159</span>&#160; }</div><div class="line"><a name="l03160"></a><span class="lineno"> 3160</span>&#160; <span class="keywordflow">catch</span> (std::out_of_range&amp;)</div><div class="line"><a name="l03161"></a><span class="lineno"> 3161</span>&#160; {</div><div class="line"><a name="l03162"></a><span class="lineno"> 3162</span>&#160; <span class="comment">// create better exception explanation</span></div><div class="line"><a name="l03163"></a><span class="lineno"> 3163</span>&#160; <span class="keywordflow">throw</span> std::out_of_range(<span class="stringliteral">&quot;array index &quot;</span> + std::to_string(idx) + <span class="stringliteral">&quot; is out of range&quot;</span>);</div><div class="line"><a name="l03164"></a><span class="lineno"> 3164</span>&#160; }</div><div class="line"><a name="l03165"></a><span class="lineno"> 3165</span>&#160; }</div><div class="line"><a name="l03166"></a><span class="lineno"> 3166</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l03167"></a><span class="lineno"> 3167</span>&#160; {</div><div class="line"><a name="l03168"></a><span class="lineno"> 3168</span>&#160; <span class="keywordflow">throw</span> std::domain_error(<span class="stringliteral">&quot;cannot use at() with &quot;</span> + type_name());</div><div class="line"><a name="l03169"></a><span class="lineno"> 3169</span>&#160; }</div><div class="line"><a name="l03170"></a><span class="lineno"> 3170</span>&#160; }</div><div class="line"><a name="l03171"></a><span class="lineno"> 3171</span>&#160;</div><div class="line"><a name="l03194"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a3f7029fe6d929cf2fa48df1233ccd761.html#a3f7029fe6d929cf2fa48df1233ccd761"> 3194</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">const_reference</a> <a class="code" href="classnlohmann_1_1basic__json_a3f7029fe6d929cf2fa48df1233ccd761.html#a3f7029fe6d929cf2fa48df1233ccd761">at</a>(<a class="code" href="classnlohmann_1_1basic__json_a1579a8f72a230358d6cd1a6e8a62859b.html#a1579a8f72a230358d6cd1a6e8a62859b">size_type</a> idx)<span class="keyword"> const</span></div><div class="line"><a name="l03195"></a><span class="lineno"> 3195</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l03196"></a><span class="lineno"> 3196</span>&#160; <span class="comment">// at only works for arrays</span></div><div class="line"><a name="l03197"></a><span class="lineno"> 3197</span>&#160; <span class="keywordflow">if</span> (is_array())</div><div class="line"><a name="l03198"></a><span class="lineno"> 3198</span>&#160; {</div><div class="line"><a name="l03199"></a><span class="lineno"> 3199</span>&#160; <span class="keywordflow">try</span></div><div class="line"><a name="l03200"></a><span class="lineno"> 3200</span>&#160; {</div><div class="line"><a name="l03201"></a><span class="lineno"> 3201</span>&#160; <span class="keywordflow">return</span> m_value.<a class="code" href="classnlohmann_1_1basic__json_a5685815624b086caa532f41e853d4b0f.html#a5685815624b086caa532f41e853d4b0f">array</a>-&gt;<a class="code" href="classnlohmann_1_1basic__json_a214a8c22d616fd3567b88932c07436c9.html#a214a8c22d616fd3567b88932c07436c9">at</a>(idx);</div><div class="line"><a name="l03202"></a><span class="lineno"> 3202</span>&#160; }</div><div class="line"><a name="l03203"></a><span class="lineno"> 3203</span>&#160; <span class="keywordflow">catch</span> (std::out_of_range&amp;)</div><div class="line"><a name="l03204"></a><span class="lineno"> 3204</span>&#160; {</div><div class="line"><a name="l03205"></a><span class="lineno"> 3205</span>&#160; <span class="comment">// create better exception explanation</span></div><div class="line"><a name="l03206"></a><span class="lineno"> 3206</span>&#160; <span class="keywordflow">throw</span> std::out_of_range(<span class="stringliteral">&quot;array index &quot;</span> + std::to_string(idx) + <span class="stringliteral">&quot; is out of range&quot;</span>);</div><div class="line"><a name="l03207"></a><span class="lineno"> 3207</span>&#160; }</div><div class="line"><a name="l03208"></a><span class="lineno"> 3208</span>&#160; }</div><div class="line"><a name="l03209"></a><span class="lineno"> 3209</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l03210"></a><span class="lineno"> 3210</span>&#160; {</div><div class="line"><a name="l03211"></a><span class="lineno"> 3211</span>&#160; <span class="keywordflow">throw</span> std::domain_error(<span class="stringliteral">&quot;cannot use at() with &quot;</span> + type_name());</div><div class="line"><a name="l03212"></a><span class="lineno"> 3212</span>&#160; }</div><div class="line"><a name="l03213"></a><span class="lineno"> 3213</span>&#160; }</div><div class="line"><a name="l03214"></a><span class="lineno"> 3214</span>&#160;</div><div class="line"><a name="l03241"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a7ed92d56cb313b243c1917696ffdf074.html#a7ed92d56cb313b243c1917696ffdf074"> 3241</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">reference</a> <a class="code" href="classnlohmann_1_1basic__json_a7ed92d56cb313b243c1917696ffdf074.html#a7ed92d56cb313b243c1917696ffdf074">at</a>(<span class="keyword">const</span> <span class="keyword">typename</span> object_t::key_type&amp; key)</div><div class="line"><a name="l03242"></a><span class="lineno"> 3242</span>&#160; {</div><div class="line"><a name="l03243"></a><span class="lineno"> 3243</span>&#160; <span class="comment">// at only works for objects</span></div><div class="line"><a name="l03244"></a><span class="lineno"> 3244</span>&#160; <span class="keywordflow">if</span> (is_object())</div><div class="line"><a name="l03245"></a><span class="lineno"> 3245</span>&#160; {</div><div class="line"><a name="l03246"></a><span class="lineno"> 3246</span>&#160; <span class="keywordflow">try</span></div><div class="line"><a name="l03247"></a><span class="lineno"> 3247</span>&#160; {</div><div class="line"><a name="l03248"></a><span class="lineno"> 3248</span>&#160; <span class="keywordflow">return</span> m_value.<a class="code" href="classnlohmann_1_1basic__json_ad25b2f8c21e241e2d63455537a9294ff.html#ad25b2f8c21e241e2d63455537a9294ff">object</a>-&gt;<a class="code" href="classnlohmann_1_1basic__json_a214a8c22d616fd3567b88932c07436c9.html#a214a8c22d616fd3567b88932c07436c9">at</a>(key);</div><div class="line"><a name="l03249"></a><span class="lineno"> 3249</span>&#160; }</div><div class="line"><a name="l03250"></a><span class="lineno"> 3250</span>&#160; <span class="keywordflow">catch</span> (std::out_of_range&amp;)</div><div class="line"><a name="l03251"></a><span class="lineno"> 3251</span>&#160; {</div><div class="line"><a name="l03252"></a><span class="lineno"> 3252</span>&#160; <span class="comment">// create better exception explanation</span></div><div class="line"><a name="l03253"></a><span class="lineno"> 3253</span>&#160; <span class="keywordflow">throw</span> std::out_of_range(<span class="stringliteral">&quot;key &#39;&quot;</span> + key + <span class="stringliteral">&quot;&#39; not found&quot;</span>);</div><div class="line"><a name="l03254"></a><span class="lineno"> 3254</span>&#160; }</div><div class="line"><a name="l03255"></a><span class="lineno"> 3255</span>&#160; }</div><div class="line"><a name="l03256"></a><span class="lineno"> 3256</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l03257"></a><span class="lineno"> 3257</span>&#160; {</div><div class="line"><a name="l03258"></a><span class="lineno"> 3258</span>&#160; <span class="keywordflow">throw</span> std::domain_error(<span class="stringliteral">&quot;cannot use at() with &quot;</span> + type_name());</div><div class="line"><a name="l03259"></a><span class="lineno"> 3259</span>&#160; }</div><div class="line"><a name="l03260"></a><span class="lineno"> 3260</span>&#160; }</div><div class="line"><a name="l03261"></a><span class="lineno"> 3261</span>&#160;</div><div class="line"><a name="l03288"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a2ec9378f9545adf4b79099aa8f8a1673.html#a2ec9378f9545adf4b79099aa8f8a1673"> 3288</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">const_reference</a> <a class="code" href="classnlohmann_1_1basic__json_a2ec9378f9545adf4b79099aa8f8a1673.html#a2ec9378f9545adf4b79099aa8f8a1673">at</a>(<span class="keyword">const</span> <span class="keyword">typename</span> object_t::key_type&amp; key)<span class="keyword"> const</span></div><div class="line"><a name="l03289"></a><span class="lineno"> 3289</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l03290"></a><span class="lineno"> 3290</span>&#160; <span class="comment">// at only works for objects</span></div><div class="line"><a name="l03291"></a><span class="lineno"> 3291</span>&#160; <span class="keywordflow">if</span> (is_object())</div><div class="line"><a name="l03292"></a><span class="lineno"> 3292</span>&#160; {</div><div class="line"><a name="l03293"></a><span class="lineno"> 3293</span>&#160; <span class="keywordflow">try</span></div><div class="line"><a name="l03294"></a><span class="lineno"> 3294</span>&#160; {</div><div class="line"><a name="l03295"></a><span class="lineno"> 3295</span>&#160; <span class="keywordflow">return</span> m_value.<a class="code" href="classnlohmann_1_1basic__json_ad25b2f8c21e241e2d63455537a9294ff.html#ad25b2f8c21e241e2d63455537a9294ff">object</a>-&gt;<a class="code" href="classnlohmann_1_1basic__json_a214a8c22d616fd3567b88932c07436c9.html#a214a8c22d616fd3567b88932c07436c9">at</a>(key);</div><div class="line"><a name="l03296"></a><span class="lineno"> 3296</span>&#160; }</div><div class="line"><a name="l03297"></a><span class="lineno"> 3297</span>&#160; <span class="keywordflow">catch</span> (std::out_of_range&amp;)</div><div class="line"><a name="l03298"></a><span class="lineno"> 3298</span>&#160; {</div><div class="line"><a name="l03299"></a><span class="lineno"> 3299</span>&#160; <span class="comment">// create better exception explanation</span></div><div class="line"><a name="l03300"></a><span class="lineno"> 3300</span>&#160; <span class="keywordflow">throw</span> std::out_of_range(<span class="stringliteral">&quot;key &#39;&quot;</span> + key + <span class="stringliteral">&quot;&#39; not found&quot;</span>);</div><div class="line"><a name="l03301"></a><span class="lineno"> 3301</span>&#160; }</div><div class="line"><a name="l03302"></a><span class="lineno"> 3302</span>&#160; }</div><div class="line"><a name="l03303"></a><span class="lineno"> 3303</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l03304"></a><span class="lineno"> 3304</span>&#160; {</div><div class="line"><a name="l03305"></a><span class="lineno"> 3305</span>&#160; <span class="keywordflow">throw</span> std::domain_error(<span class="stringliteral">&quot;cannot use at() with &quot;</span> + type_name());</div><div class="line"><a name="l03306"></a><span class="lineno"> 3306</span>&#160; }</div><div class="line"><a name="l03307"></a><span class="lineno"> 3307</span>&#160; }</div><div class="line"><a name="l03308"></a><span class="lineno"> 3308</span>&#160;</div><div class="line"><a name="l03334"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a59732a1de287a7301cca19a7a7748159.html#a59732a1de287a7301cca19a7a7748159"> 3334</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">reference</a> <a class="code" href="classnlohmann_1_1basic__json_a59732a1de287a7301cca19a7a7748159.html#a59732a1de287a7301cca19a7a7748159">operator[]</a>(<a class="code" href="classnlohmann_1_1basic__json_a1579a8f72a230358d6cd1a6e8a62859b.html#a1579a8f72a230358d6cd1a6e8a62859b">size_type</a> idx)</div><div class="line"><a name="l03335"></a><span class="lineno"> 3335</span>&#160; {</div><div class="line"><a name="l03336"></a><span class="lineno"> 3336</span>&#160; <span class="comment">// implicitly convert null value to an empty array</span></div><div class="line"><a name="l03337"></a><span class="lineno"> 3337</span>&#160; <span class="keywordflow">if</span> (is_null())</div><div class="line"><a name="l03338"></a><span class="lineno"> 3338</span>&#160; {</div><div class="line"><a name="l03339"></a><span class="lineno"> 3339</span>&#160; m_type = value_t::array;</div><div class="line"><a name="l03340"></a><span class="lineno"> 3340</span>&#160; m_value.<a class="code" href="classnlohmann_1_1basic__json_a5685815624b086caa532f41e853d4b0f.html#a5685815624b086caa532f41e853d4b0f">array</a> = create&lt;array_t&gt;();</div><div class="line"><a name="l03341"></a><span class="lineno"> 3341</span>&#160; assert_invariant();</div><div class="line"><a name="l03342"></a><span class="lineno"> 3342</span>&#160; }</div><div class="line"><a name="l03343"></a><span class="lineno"> 3343</span>&#160;</div><div class="line"><a name="l03344"></a><span class="lineno"> 3344</span>&#160; <span class="comment">// operator[] only works for arrays</span></div><div class="line"><a name="l03345"></a><span class="lineno"> 3345</span>&#160; <span class="keywordflow">if</span> (is_array())</div><div class="line"><a name="l03346"></a><span class="lineno"> 3346</span>&#160; {</div><div class="line"><a name="l03347"></a><span class="lineno"> 3347</span>&#160; <span class="comment">// fill up array with null values if given idx is outside range</span></div><div class="line"><a name="l03348"></a><span class="lineno"> 3348</span>&#160; <span class="keywordflow">if</span> (idx &gt;= m_value.array-&gt;size())</div><div class="line"><a name="l03349"></a><span class="lineno"> 3349</span>&#160; {</div><div class="line"><a name="l03350"></a><span class="lineno"> 3350</span>&#160; m_value.array-&gt;insert(m_value.array-&gt;end(),</div><div class="line"><a name="l03351"></a><span class="lineno"> 3351</span>&#160; idx - m_value.array-&gt;size() + 1,</div><div class="line"><a name="l03352"></a><span class="lineno"> 3352</span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a>());</div><div class="line"><a name="l03353"></a><span class="lineno"> 3353</span>&#160; }</div><div class="line"><a name="l03354"></a><span class="lineno"> 3354</span>&#160;</div><div class="line"><a name="l03355"></a><span class="lineno"> 3355</span>&#160; <span class="keywordflow">return</span> m_value.array-&gt;operator[](idx);</div><div class="line"><a name="l03356"></a><span class="lineno"> 3356</span>&#160; }</div><div class="line"><a name="l03357"></a><span class="lineno"> 3357</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l03358"></a><span class="lineno"> 3358</span>&#160; {</div><div class="line"><a name="l03359"></a><span class="lineno"> 3359</span>&#160; <span class="keywordflow">throw</span> std::domain_error(<span class="stringliteral">&quot;cannot use operator[] with &quot;</span> + type_name());</div><div class="line"><a name="l03360"></a><span class="lineno"> 3360</span>&#160; }</div><div class="line"><a name="l03361"></a><span class="lineno"> 3361</span>&#160; }</div><div class="line"><a name="l03362"></a><span class="lineno"> 3362</span>&#160;</div><div class="line"><a name="l03382"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a2dea7491d9fa709311459f87201e25aa.html#a2dea7491d9fa709311459f87201e25aa"> 3382</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">const_reference</a> <a class="code" href="classnlohmann_1_1basic__json_a2dea7491d9fa709311459f87201e25aa.html#a2dea7491d9fa709311459f87201e25aa">operator[]</a>(<a class="code" href="classnlohmann_1_1basic__json_a1579a8f72a230358d6cd1a6e8a62859b.html#a1579a8f72a230358d6cd1a6e8a62859b">size_type</a> idx)<span class="keyword"> const</span></div><div class="line"><a name="l03383"></a><span class="lineno"> 3383</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l03384"></a><span class="lineno"> 3384</span>&#160; <span class="comment">// const operator[] only works for arrays</span></div><div class="line"><a name="l03385"></a><span class="lineno"> 3385</span>&#160; <span class="keywordflow">if</span> (is_array())</div><div class="line"><a name="l03386"></a><span class="lineno"> 3386</span>&#160; {</div><div class="line"><a name="l03387"></a><span class="lineno"> 3387</span>&#160; <span class="keywordflow">return</span> m_value.<a class="code" href="classnlohmann_1_1basic__json_a5685815624b086caa532f41e853d4b0f.html#a5685815624b086caa532f41e853d4b0f">array</a>-&gt;operator[](idx);</div><div class="line"><a name="l03388"></a><span class="lineno"> 3388</span>&#160; }</div><div class="line"><a name="l03389"></a><span class="lineno"> 3389</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l03390"></a><span class="lineno"> 3390</span>&#160; {</div><div class="line"><a name="l03391"></a><span class="lineno"> 3391</span>&#160; <span class="keywordflow">throw</span> std::domain_error(<span class="stringliteral">&quot;cannot use operator[] with &quot;</span> + type_name());</div><div class="line"><a name="l03392"></a><span class="lineno"> 3392</span>&#160; }</div><div class="line"><a name="l03393"></a><span class="lineno"> 3393</span>&#160; }</div><div class="line"><a name="l03394"></a><span class="lineno"> 3394</span>&#160;</div><div class="line"><a name="l03422"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a92fbb711a36b5ce78ee228b26787c034.html#a92fbb711a36b5ce78ee228b26787c034"> 3422</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">reference</a> <a class="code" href="classnlohmann_1_1basic__json_a92fbb711a36b5ce78ee228b26787c034.html#a92fbb711a36b5ce78ee228b26787c034">operator[]</a>(<span class="keyword">const</span> <span class="keyword">typename</span> object_t::key_type&amp; key)</div><div class="line"><a name="l03423"></a><span class="lineno"> 3423</span>&#160; {</div><div class="line"><a name="l03424"></a><span class="lineno"> 3424</span>&#160; <span class="comment">// implicitly convert null value to an empty object</span></div><div class="line"><a name="l03425"></a><span class="lineno"> 3425</span>&#160; <span class="keywordflow">if</span> (is_null())</div><div class="line"><a name="l03426"></a><span class="lineno"> 3426</span>&#160; {</div><div class="line"><a name="l03427"></a><span class="lineno"> 3427</span>&#160; m_type = value_t::object;</div><div class="line"><a name="l03428"></a><span class="lineno"> 3428</span>&#160; m_value.<a class="code" href="classnlohmann_1_1basic__json_ad25b2f8c21e241e2d63455537a9294ff.html#ad25b2f8c21e241e2d63455537a9294ff">object</a> = create&lt;object_t&gt;();</div><div class="line"><a name="l03429"></a><span class="lineno"> 3429</span>&#160; assert_invariant();</div><div class="line"><a name="l03430"></a><span class="lineno"> 3430</span>&#160; }</div><div class="line"><a name="l03431"></a><span class="lineno"> 3431</span>&#160;</div><div class="line"><a name="l03432"></a><span class="lineno"> 3432</span>&#160; <span class="comment">// operator[] only works for objects</span></div><div class="line"><a name="l03433"></a><span class="lineno"> 3433</span>&#160; <span class="keywordflow">if</span> (is_object())</div><div class="line"><a name="l03434"></a><span class="lineno"> 3434</span>&#160; {</div><div class="line"><a name="l03435"></a><span class="lineno"> 3435</span>&#160; <span class="keywordflow">return</span> m_value.object-&gt;operator[](key);</div><div class="line"><a name="l03436"></a><span class="lineno"> 3436</span>&#160; }</div><div class="line"><a name="l03437"></a><span class="lineno"> 3437</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l03438"></a><span class="lineno"> 3438</span>&#160; {</div><div class="line"><a name="l03439"></a><span class="lineno"> 3439</span>&#160; <span class="keywordflow">throw</span> std::domain_error(<span class="stringliteral">&quot;cannot use operator[] with &quot;</span> + type_name());</div><div class="line"><a name="l03440"></a><span class="lineno"> 3440</span>&#160; }</div><div class="line"><a name="l03441"></a><span class="lineno"> 3441</span>&#160; }</div><div class="line"><a name="l03442"></a><span class="lineno"> 3442</span>&#160;</div><div class="line"><a name="l03473"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a6eb50ec247cc53bdd46fb13e38e0de04.html#a6eb50ec247cc53bdd46fb13e38e0de04"> 3473</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">const_reference</a> <a class="code" href="classnlohmann_1_1basic__json_a6eb50ec247cc53bdd46fb13e38e0de04.html#a6eb50ec247cc53bdd46fb13e38e0de04">operator[]</a>(<span class="keyword">const</span> <span class="keyword">typename</span> object_t::key_type&amp; key)<span class="keyword"> const</span></div><div class="line"><a name="l03474"></a><span class="lineno"> 3474</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l03475"></a><span class="lineno"> 3475</span>&#160; <span class="comment">// const operator[] only works for objects</span></div><div class="line"><a name="l03476"></a><span class="lineno"> 3476</span>&#160; <span class="keywordflow">if</span> (is_object())</div><div class="line"><a name="l03477"></a><span class="lineno"> 3477</span>&#160; {</div><div class="line"><a name="l03478"></a><span class="lineno"> 3478</span>&#160; assert(m_value.object-&gt;find(key) != m_value.object-&gt;end());</div><div class="line"><a name="l03479"></a><span class="lineno"> 3479</span>&#160; <span class="keywordflow">return</span> m_value.<a class="code" href="classnlohmann_1_1basic__json_ad25b2f8c21e241e2d63455537a9294ff.html#ad25b2f8c21e241e2d63455537a9294ff">object</a>-&gt;<a class="code" href="classnlohmann_1_1basic__json_affe7e160e7bb06eed83c8b437af4692f.html#affe7e160e7bb06eed83c8b437af4692f">find</a>(key)-&gt;second;</div><div class="line"><a name="l03480"></a><span class="lineno"> 3480</span>&#160; }</div><div class="line"><a name="l03481"></a><span class="lineno"> 3481</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l03482"></a><span class="lineno"> 3482</span>&#160; {</div><div class="line"><a name="l03483"></a><span class="lineno"> 3483</span>&#160; <span class="keywordflow">throw</span> std::domain_error(<span class="stringliteral">&quot;cannot use operator[] with &quot;</span> + type_name());</div><div class="line"><a name="l03484"></a><span class="lineno"> 3484</span>&#160; }</div><div class="line"><a name="l03485"></a><span class="lineno"> 3485</span>&#160; }</div><div class="line"><a name="l03486"></a><span class="lineno"> 3486</span>&#160;</div><div class="line"><a name="l03514"></a><span class="lineno"> 3514</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, std::<span class="keywordtype">size_t</span> n&gt;</div><div class="line"><a name="l03515"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a140b8251f82e99ad279dcad5c977e26b.html#a140b8251f82e99ad279dcad5c977e26b"> 3515</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">reference</a> <a class="code" href="classnlohmann_1_1basic__json_a140b8251f82e99ad279dcad5c977e26b.html#a140b8251f82e99ad279dcad5c977e26b">operator[]</a>(T * (&amp;key)[n])</div><div class="line"><a name="l03516"></a><span class="lineno"> 3516</span>&#160; {</div><div class="line"><a name="l03517"></a><span class="lineno"> 3517</span>&#160; <span class="keywordflow">return</span> operator[](static_cast&lt;const T&gt;(key));</div><div class="line"><a name="l03518"></a><span class="lineno"> 3518</span>&#160; }</div><div class="line"><a name="l03519"></a><span class="lineno"> 3519</span>&#160;</div><div class="line"><a name="l03549"></a><span class="lineno"> 3549</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, std::<span class="keywordtype">size_t</span> n&gt;</div><div class="line"><a name="l03550"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_ad797fbde8b35ce96549d4bee5d42b234.html#ad797fbde8b35ce96549d4bee5d42b234"> 3550</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">const_reference</a> <a class="code" href="classnlohmann_1_1basic__json_ad797fbde8b35ce96549d4bee5d42b234.html#ad797fbde8b35ce96549d4bee5d42b234">operator[]</a>(T * (&amp;key)[n])<span class="keyword"> const</span></div><div class="line"><a name="l03551"></a><span class="lineno"> 3551</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l03552"></a><span class="lineno"> 3552</span>&#160; <span class="keywordflow">return</span> operator[](static_cast&lt;const T&gt;(key));</div><div class="line"><a name="l03553"></a><span class="lineno"> 3553</span>&#160; }</div><div class="line"><a name="l03554"></a><span class="lineno"> 3554</span>&#160;</div><div class="line"><a name="l03582"></a><span class="lineno"> 3582</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l03583"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_ac7c006e2345a76859c4802db7d130e0e.html#ac7c006e2345a76859c4802db7d130e0e"> 3583</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">reference</a> <a class="code" href="classnlohmann_1_1basic__json_ac7c006e2345a76859c4802db7d130e0e.html#ac7c006e2345a76859c4802db7d130e0e">operator[]</a>(T* key)</div><div class="line"><a name="l03584"></a><span class="lineno"> 3584</span>&#160; {</div><div class="line"><a name="l03585"></a><span class="lineno"> 3585</span>&#160; <span class="comment">// implicitly convert null to object</span></div><div class="line"><a name="l03586"></a><span class="lineno"> 3586</span>&#160; <span class="keywordflow">if</span> (is_null())</div><div class="line"><a name="l03587"></a><span class="lineno"> 3587</span>&#160; {</div><div class="line"><a name="l03588"></a><span class="lineno"> 3588</span>&#160; m_type = value_t::object;</div><div class="line"><a name="l03589"></a><span class="lineno"> 3589</span>&#160; m_value = value_t::object;</div><div class="line"><a name="l03590"></a><span class="lineno"> 3590</span>&#160; assert_invariant();</div><div class="line"><a name="l03591"></a><span class="lineno"> 3591</span>&#160; }</div><div class="line"><a name="l03592"></a><span class="lineno"> 3592</span>&#160;</div><div class="line"><a name="l03593"></a><span class="lineno"> 3593</span>&#160; <span class="comment">// at only works for objects</span></div><div class="line"><a name="l03594"></a><span class="lineno"> 3594</span>&#160; <span class="keywordflow">if</span> (is_object())</div><div class="line"><a name="l03595"></a><span class="lineno"> 3595</span>&#160; {</div><div class="line"><a name="l03596"></a><span class="lineno"> 3596</span>&#160; <span class="keywordflow">return</span> m_value.object-&gt;operator[](key);</div><div class="line"><a name="l03597"></a><span class="lineno"> 3597</span>&#160; }</div><div class="line"><a name="l03598"></a><span class="lineno"> 3598</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l03599"></a><span class="lineno"> 3599</span>&#160; {</div><div class="line"><a name="l03600"></a><span class="lineno"> 3600</span>&#160; <span class="keywordflow">throw</span> std::domain_error(<span class="stringliteral">&quot;cannot use operator[] with &quot;</span> + type_name());</div><div class="line"><a name="l03601"></a><span class="lineno"> 3601</span>&#160; }</div><div class="line"><a name="l03602"></a><span class="lineno"> 3602</span>&#160; }</div><div class="line"><a name="l03603"></a><span class="lineno"> 3603</span>&#160;</div><div class="line"><a name="l03634"></a><span class="lineno"> 3634</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div><div class="line"><a name="l03635"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a95d9c6a59674193aa55798968d1a9de6.html#a95d9c6a59674193aa55798968d1a9de6"> 3635</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">const_reference</a> <a class="code" href="classnlohmann_1_1basic__json_a95d9c6a59674193aa55798968d1a9de6.html#a95d9c6a59674193aa55798968d1a9de6">operator[]</a>(T* key)<span class="keyword"> const</span></div><div class="line"><a name="l03636"></a><span class="lineno"> 3636</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l03637"></a><span class="lineno"> 3637</span>&#160; <span class="comment">// at only works for objects</span></div><div class="line"><a name="l03638"></a><span class="lineno"> 3638</span>&#160; <span class="keywordflow">if</span> (is_object())</div><div class="line"><a name="l03639"></a><span class="lineno"> 3639</span>&#160; {</div><div class="line"><a name="l03640"></a><span class="lineno"> 3640</span>&#160; assert(m_value.object-&gt;find(key) != m_value.object-&gt;end());</div><div class="line"><a name="l03641"></a><span class="lineno"> 3641</span>&#160; <span class="keywordflow">return</span> m_value.<a class="code" href="classnlohmann_1_1basic__json_ad25b2f8c21e241e2d63455537a9294ff.html#ad25b2f8c21e241e2d63455537a9294ff">object</a>-&gt;<a class="code" href="classnlohmann_1_1basic__json_affe7e160e7bb06eed83c8b437af4692f.html#affe7e160e7bb06eed83c8b437af4692f">find</a>(key)-&gt;second;</div><div class="line"><a name="l03642"></a><span class="lineno"> 3642</span>&#160; }</div><div class="line"><a name="l03643"></a><span class="lineno"> 3643</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l03644"></a><span class="lineno"> 3644</span>&#160; {</div><div class="line"><a name="l03645"></a><span class="lineno"> 3645</span>&#160; <span class="keywordflow">throw</span> std::domain_error(<span class="stringliteral">&quot;cannot use operator[] with &quot;</span> + type_name());</div><div class="line"><a name="l03646"></a><span class="lineno"> 3646</span>&#160; }</div><div class="line"><a name="l03647"></a><span class="lineno"> 3647</span>&#160; }</div><div class="line"><a name="l03648"></a><span class="lineno"> 3648</span>&#160;</div><div class="line"><a name="l03697"></a><span class="lineno"> 3697</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">class </span>ValueType, <span class="keyword">typename</span> std::enable_if&lt;</div><div class="line"><a name="l03698"></a><span class="lineno"> 3698</span>&#160; std::is_convertible&lt;basic_json_t, ValueType&gt;::value, <span class="keywordtype">int</span>&gt;::type = 0&gt;</div><div class="line"><a name="l03699"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a407e73a037e6e3067ef7aa2c25a79f39.html#a407e73a037e6e3067ef7aa2c25a79f39"> 3699</a></span>&#160; ValueType <a class="code" href="classnlohmann_1_1basic__json_a407e73a037e6e3067ef7aa2c25a79f39.html#a407e73a037e6e3067ef7aa2c25a79f39">value</a>(<span class="keyword">const</span> <span class="keyword">typename</span> object_t::key_type&amp; key, ValueType default_value)<span class="keyword"> const</span></div><div class="line"><a name="l03700"></a><span class="lineno"> 3700</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l03701"></a><span class="lineno"> 3701</span>&#160; <span class="comment">// at only works for objects</span></div><div class="line"><a name="l03702"></a><span class="lineno"> 3702</span>&#160; <span class="keywordflow">if</span> (is_object())</div><div class="line"><a name="l03703"></a><span class="lineno"> 3703</span>&#160; {</div><div class="line"><a name="l03704"></a><span class="lineno"> 3704</span>&#160; <span class="comment">// if key is found, return value and given default value otherwise</span></div><div class="line"><a name="l03705"></a><span class="lineno"> 3705</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> it = find(key);</div><div class="line"><a name="l03706"></a><span class="lineno"> 3706</span>&#160; <span class="keywordflow">if</span> (it != end())</div><div class="line"><a name="l03707"></a><span class="lineno"> 3707</span>&#160; {</div><div class="line"><a name="l03708"></a><span class="lineno"> 3708</span>&#160; <span class="keywordflow">return</span> *it;</div><div class="line"><a name="l03709"></a><span class="lineno"> 3709</span>&#160; }</div><div class="line"><a name="l03710"></a><span class="lineno"> 3710</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l03711"></a><span class="lineno"> 3711</span>&#160; {</div><div class="line"><a name="l03712"></a><span class="lineno"> 3712</span>&#160; <span class="keywordflow">return</span> default_value;</div><div class="line"><a name="l03713"></a><span class="lineno"> 3713</span>&#160; }</div><div class="line"><a name="l03714"></a><span class="lineno"> 3714</span>&#160; }</div><div class="line"><a name="l03715"></a><span class="lineno"> 3715</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l03716"></a><span class="lineno"> 3716</span>&#160; {</div><div class="line"><a name="l03717"></a><span class="lineno"> 3717</span>&#160; <span class="keywordflow">throw</span> std::domain_error(<span class="stringliteral">&quot;cannot use value() with &quot;</span> + type_name());</div><div class="line"><a name="l03718"></a><span class="lineno"> 3718</span>&#160; }</div><div class="line"><a name="l03719"></a><span class="lineno"> 3719</span>&#160; }</div><div class="line"><a name="l03720"></a><span class="lineno"> 3720</span>&#160;</div><div class="line"><a name="l03725"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a0491b6739b54dcf83d5e10c4f604ca8f.html#a0491b6739b54dcf83d5e10c4f604ca8f"> 3725</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_ab63e618bbb0371042b1bec17f5891f42.html#ab63e618bbb0371042b1bec17f5891f42">string_t</a> <a class="code" href="classnlohmann_1_1basic__json_a0491b6739b54dcf83d5e10c4f604ca8f.html#a0491b6739b54dcf83d5e10c4f604ca8f">value</a>(<span class="keyword">const</span> <span class="keyword">typename</span> object_t::key_type&amp; key, <span class="keyword">const</span> <span class="keywordtype">char</span>* default_value)<span class="keyword"> const</span></div><div class="line"><a name="l03726"></a><span class="lineno"> 3726</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l03727"></a><span class="lineno"> 3727</span>&#160; <span class="keywordflow">return</span> value(key, <a class="code" href="classnlohmann_1_1basic__json_ab63e618bbb0371042b1bec17f5891f42.html#ab63e618bbb0371042b1bec17f5891f42">string_t</a>(default_value));</div><div class="line"><a name="l03728"></a><span class="lineno"> 3728</span>&#160; }</div><div class="line"><a name="l03729"></a><span class="lineno"> 3729</span>&#160;</div><div class="line"><a name="l03771"></a><span class="lineno"> 3771</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">class </span>ValueType, <span class="keyword">typename</span> std::enable_if&lt;</div><div class="line"><a name="l03772"></a><span class="lineno"> 3772</span>&#160; std::is_convertible&lt;basic_json_t, ValueType&gt;::value, <span class="keywordtype">int</span>&gt;::type = 0&gt;</div><div class="line"><a name="l03773"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a576ca17f297a7a43200088c24b8437e6.html#a576ca17f297a7a43200088c24b8437e6"> 3773</a></span>&#160; ValueType <a class="code" href="classnlohmann_1_1basic__json_a576ca17f297a7a43200088c24b8437e6.html#a576ca17f297a7a43200088c24b8437e6">value</a>(<span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_1_1json__pointer.html">json_pointer</a>&amp; ptr, ValueType default_value)<span class="keyword"> const</span></div><div class="line"><a name="l03774"></a><span class="lineno"> 3774</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l03775"></a><span class="lineno"> 3775</span>&#160; <span class="comment">// at only works for objects</span></div><div class="line"><a name="l03776"></a><span class="lineno"> 3776</span>&#160; <span class="keywordflow">if</span> (is_object())</div><div class="line"><a name="l03777"></a><span class="lineno"> 3777</span>&#160; {</div><div class="line"><a name="l03778"></a><span class="lineno"> 3778</span>&#160; <span class="comment">// if pointer resolves a value, return it or use default value</span></div><div class="line"><a name="l03779"></a><span class="lineno"> 3779</span>&#160; <span class="keywordflow">try</span></div><div class="line"><a name="l03780"></a><span class="lineno"> 3780</span>&#160; {</div><div class="line"><a name="l03781"></a><span class="lineno"> 3781</span>&#160; <span class="keywordflow">return</span> ptr.get_checked(<span class="keyword">this</span>);</div><div class="line"><a name="l03782"></a><span class="lineno"> 3782</span>&#160; }</div><div class="line"><a name="l03783"></a><span class="lineno"> 3783</span>&#160; <span class="keywordflow">catch</span> (std::out_of_range&amp;)</div><div class="line"><a name="l03784"></a><span class="lineno"> 3784</span>&#160; {</div><div class="line"><a name="l03785"></a><span class="lineno"> 3785</span>&#160; <span class="keywordflow">return</span> default_value;</div><div class="line"><a name="l03786"></a><span class="lineno"> 3786</span>&#160; }</div><div class="line"><a name="l03787"></a><span class="lineno"> 3787</span>&#160; }</div><div class="line"><a name="l03788"></a><span class="lineno"> 3788</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l03789"></a><span class="lineno"> 3789</span>&#160; {</div><div class="line"><a name="l03790"></a><span class="lineno"> 3790</span>&#160; <span class="keywordflow">throw</span> std::domain_error(<span class="stringliteral">&quot;cannot use value() with &quot;</span> + type_name());</div><div class="line"><a name="l03791"></a><span class="lineno"> 3791</span>&#160; }</div><div class="line"><a name="l03792"></a><span class="lineno"> 3792</span>&#160; }</div><div class="line"><a name="l03793"></a><span class="lineno"> 3793</span>&#160;</div><div class="line"><a name="l03798"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a2dff00633c2e914fa464f23b4bce6bcb.html#a2dff00633c2e914fa464f23b4bce6bcb"> 3798</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_ab63e618bbb0371042b1bec17f5891f42.html#ab63e618bbb0371042b1bec17f5891f42">string_t</a> <a class="code" href="classnlohmann_1_1basic__json_a2dff00633c2e914fa464f23b4bce6bcb.html#a2dff00633c2e914fa464f23b4bce6bcb">value</a>(<span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_1_1json__pointer.html">json_pointer</a>&amp; ptr, <span class="keyword">const</span> <span class="keywordtype">char</span>* default_value)<span class="keyword"> const</span></div><div class="line"><a name="l03799"></a><span class="lineno"> 3799</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l03800"></a><span class="lineno"> 3800</span>&#160; <span class="keywordflow">return</span> value(ptr, <a class="code" href="classnlohmann_1_1basic__json_ab63e618bbb0371042b1bec17f5891f42.html#ab63e618bbb0371042b1bec17f5891f42">string_t</a>(default_value));</div><div class="line"><a name="l03801"></a><span class="lineno"> 3801</span>&#160; }</div><div class="line"><a name="l03802"></a><span class="lineno"> 3802</span>&#160;</div><div class="line"><a name="l03828"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_aa45753034bea87f9d2c0c42ace9ff75c.html#aa45753034bea87f9d2c0c42ace9ff75c"> 3828</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">reference</a> <a class="code" href="classnlohmann_1_1basic__json_aa45753034bea87f9d2c0c42ace9ff75c.html#aa45753034bea87f9d2c0c42ace9ff75c">front</a>()</div><div class="line"><a name="l03829"></a><span class="lineno"> 3829</span>&#160; {</div><div class="line"><a name="l03830"></a><span class="lineno"> 3830</span>&#160; <span class="keywordflow">return</span> *begin();</div><div class="line"><a name="l03831"></a><span class="lineno"> 3831</span>&#160; }</div><div class="line"><a name="l03832"></a><span class="lineno"> 3832</span>&#160;</div><div class="line"><a name="l03836"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a2256d4912473af915739ddde259c7ca8.html#a2256d4912473af915739ddde259c7ca8"> 3836</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">const_reference</a> <a class="code" href="classnlohmann_1_1basic__json_a2256d4912473af915739ddde259c7ca8.html#a2256d4912473af915739ddde259c7ca8">front</a>()<span class="keyword"> const</span></div><div class="line"><a name="l03837"></a><span class="lineno"> 3837</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l03838"></a><span class="lineno"> 3838</span>&#160; <span class="keywordflow">return</span> *cbegin();</div><div class="line"><a name="l03839"></a><span class="lineno"> 3839</span>&#160; }</div><div class="line"><a name="l03840"></a><span class="lineno"> 3840</span>&#160;</div><div class="line"><a name="l03871"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a71b1d38ef402dfee58fba1fe01fa67f5.html#a71b1d38ef402dfee58fba1fe01fa67f5"> 3871</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">reference</a> <a class="code" href="classnlohmann_1_1basic__json_a71b1d38ef402dfee58fba1fe01fa67f5.html#a71b1d38ef402dfee58fba1fe01fa67f5">back</a>()</div><div class="line"><a name="l03872"></a><span class="lineno"> 3872</span>&#160; {</div><div class="line"><a name="l03873"></a><span class="lineno"> 3873</span>&#160; <span class="keyword">auto</span> tmp = end();</div><div class="line"><a name="l03874"></a><span class="lineno"> 3874</span>&#160; --tmp;</div><div class="line"><a name="l03875"></a><span class="lineno"> 3875</span>&#160; <span class="keywordflow">return</span> *tmp;</div><div class="line"><a name="l03876"></a><span class="lineno"> 3876</span>&#160; }</div><div class="line"><a name="l03877"></a><span class="lineno"> 3877</span>&#160;</div><div class="line"><a name="l03881"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a5b3bd4f3fc1458835770c5a22cb74de1.html#a5b3bd4f3fc1458835770c5a22cb74de1"> 3881</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">const_reference</a> <a class="code" href="classnlohmann_1_1basic__json_a5b3bd4f3fc1458835770c5a22cb74de1.html#a5b3bd4f3fc1458835770c5a22cb74de1">back</a>()<span class="keyword"> const</span></div><div class="line"><a name="l03882"></a><span class="lineno"> 3882</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l03883"></a><span class="lineno"> 3883</span>&#160; <span class="keyword">auto</span> tmp = cend();</div><div class="line"><a name="l03884"></a><span class="lineno"> 3884</span>&#160; --tmp;</div><div class="line"><a name="l03885"></a><span class="lineno"> 3885</span>&#160; <span class="keywordflow">return</span> *tmp;</div><div class="line"><a name="l03886"></a><span class="lineno"> 3886</span>&#160; }</div><div class="line"><a name="l03887"></a><span class="lineno"> 3887</span>&#160;</div><div class="line"><a name="l03933"></a><span class="lineno"> 3933</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">class </span>IteratorType, <span class="keyword">typename</span> std::enable_if&lt;</div><div class="line"><a name="l03934"></a><span class="lineno"> 3934</span>&#160; std::is_same&lt;IteratorType, typename basic_json_t::iterator&gt;::value or</div><div class="line"><a name="l03935"></a><span class="lineno"> 3935</span>&#160; std::is_same&lt;IteratorType, typename basic_json_t::const_iterator&gt;::value, <span class="keywordtype">int</span>&gt;::type</div><div class="line"><a name="l03936"></a><span class="lineno"> 3936</span>&#160; = 0&gt;</div><div class="line"><a name="l03937"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_ab9f8c9a02d6bb794ee26801a232ca4f4.html#ab9f8c9a02d6bb794ee26801a232ca4f4"> 3937</a></span>&#160; IteratorType <a class="code" href="classnlohmann_1_1basic__json_ab9f8c9a02d6bb794ee26801a232ca4f4.html#ab9f8c9a02d6bb794ee26801a232ca4f4">erase</a>(IteratorType pos)</div><div class="line"><a name="l03938"></a><span class="lineno"> 3938</span>&#160; {</div><div class="line"><a name="l03939"></a><span class="lineno"> 3939</span>&#160; <span class="comment">// make sure iterator fits the current value</span></div><div class="line"><a name="l03940"></a><span class="lineno"> 3940</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">this</span> != pos.m_object)</div><div class="line"><a name="l03941"></a><span class="lineno"> 3941</span>&#160; {</div><div class="line"><a name="l03942"></a><span class="lineno"> 3942</span>&#160; <span class="keywordflow">throw</span> std::domain_error(<span class="stringliteral">&quot;iterator does not fit current value&quot;</span>);</div><div class="line"><a name="l03943"></a><span class="lineno"> 3943</span>&#160; }</div><div class="line"><a name="l03944"></a><span class="lineno"> 3944</span>&#160;</div><div class="line"><a name="l03945"></a><span class="lineno"> 3945</span>&#160; IteratorType result = end();</div><div class="line"><a name="l03946"></a><span class="lineno"> 3946</span>&#160;</div><div class="line"><a name="l03947"></a><span class="lineno"> 3947</span>&#160; <span class="keywordflow">switch</span> (m_type)</div><div class="line"><a name="l03948"></a><span class="lineno"> 3948</span>&#160; {</div><div class="line"><a name="l03949"></a><span class="lineno"> 3949</span>&#160; <span class="keywordflow">case</span> value_t::boolean:</div><div class="line"><a name="l03950"></a><span class="lineno"> 3950</span>&#160; <span class="keywordflow">case</span> value_t::number_float:</div><div class="line"><a name="l03951"></a><span class="lineno"> 3951</span>&#160; <span class="keywordflow">case</span> value_t::number_integer:</div><div class="line"><a name="l03952"></a><span class="lineno"> 3952</span>&#160; <span class="keywordflow">case</span> value_t::number_unsigned:</div><div class="line"><a name="l03953"></a><span class="lineno"> 3953</span>&#160; <span class="keywordflow">case</span> value_t::string:</div><div class="line"><a name="l03954"></a><span class="lineno"> 3954</span>&#160; {</div><div class="line"><a name="l03955"></a><span class="lineno"> 3955</span>&#160; <span class="keywordflow">if</span> (not pos.m_it.primitive_iterator.is_begin())</div><div class="line"><a name="l03956"></a><span class="lineno"> 3956</span>&#160; {</div><div class="line"><a name="l03957"></a><span class="lineno"> 3957</span>&#160; <span class="keywordflow">throw</span> std::out_of_range(<span class="stringliteral">&quot;iterator out of range&quot;</span>);</div><div class="line"><a name="l03958"></a><span class="lineno"> 3958</span>&#160; }</div><div class="line"><a name="l03959"></a><span class="lineno"> 3959</span>&#160;</div><div class="line"><a name="l03960"></a><span class="lineno"> 3960</span>&#160; <span class="keywordflow">if</span> (is_string())</div><div class="line"><a name="l03961"></a><span class="lineno"> 3961</span>&#160; {</div><div class="line"><a name="l03962"></a><span class="lineno"> 3962</span>&#160; AllocatorType&lt;string_t&gt; alloc;</div><div class="line"><a name="l03963"></a><span class="lineno"> 3963</span>&#160; alloc.destroy(m_value.string);</div><div class="line"><a name="l03964"></a><span class="lineno"> 3964</span>&#160; alloc.deallocate(m_value.string, 1);</div><div class="line"><a name="l03965"></a><span class="lineno"> 3965</span>&#160; m_value.string = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l03966"></a><span class="lineno"> 3966</span>&#160; }</div><div class="line"><a name="l03967"></a><span class="lineno"> 3967</span>&#160;</div><div class="line"><a name="l03968"></a><span class="lineno"> 3968</span>&#160; m_type = value_t::null;</div><div class="line"><a name="l03969"></a><span class="lineno"> 3969</span>&#160; assert_invariant();</div><div class="line"><a name="l03970"></a><span class="lineno"> 3970</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l03971"></a><span class="lineno"> 3971</span>&#160; }</div><div class="line"><a name="l03972"></a><span class="lineno"> 3972</span>&#160;</div><div class="line"><a name="l03973"></a><span class="lineno"> 3973</span>&#160; <span class="keywordflow">case</span> value_t::object:</div><div class="line"><a name="l03974"></a><span class="lineno"> 3974</span>&#160; {</div><div class="line"><a name="l03975"></a><span class="lineno"> 3975</span>&#160; result.m_it.object_iterator = m_value.object-&gt;erase(pos.m_it.object_iterator);</div><div class="line"><a name="l03976"></a><span class="lineno"> 3976</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l03977"></a><span class="lineno"> 3977</span>&#160; }</div><div class="line"><a name="l03978"></a><span class="lineno"> 3978</span>&#160;</div><div class="line"><a name="l03979"></a><span class="lineno"> 3979</span>&#160; <span class="keywordflow">case</span> value_t::array:</div><div class="line"><a name="l03980"></a><span class="lineno"> 3980</span>&#160; {</div><div class="line"><a name="l03981"></a><span class="lineno"> 3981</span>&#160; result.m_it.array_iterator = m_value.array-&gt;erase(pos.m_it.array_iterator);</div><div class="line"><a name="l03982"></a><span class="lineno"> 3982</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l03983"></a><span class="lineno"> 3983</span>&#160; }</div><div class="line"><a name="l03984"></a><span class="lineno"> 3984</span>&#160;</div><div class="line"><a name="l03985"></a><span class="lineno"> 3985</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l03986"></a><span class="lineno"> 3986</span>&#160; {</div><div class="line"><a name="l03987"></a><span class="lineno"> 3987</span>&#160; <span class="keywordflow">throw</span> std::domain_error(<span class="stringliteral">&quot;cannot use erase() with &quot;</span> + type_name());</div><div class="line"><a name="l03988"></a><span class="lineno"> 3988</span>&#160; }</div><div class="line"><a name="l03989"></a><span class="lineno"> 3989</span>&#160; }</div><div class="line"><a name="l03990"></a><span class="lineno"> 3990</span>&#160;</div><div class="line"><a name="l03991"></a><span class="lineno"> 3991</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l03992"></a><span class="lineno"> 3992</span>&#160; }</div><div class="line"><a name="l03993"></a><span class="lineno"> 3993</span>&#160;</div><div class="line"><a name="l04040"></a><span class="lineno"> 4040</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">class </span>IteratorType, <span class="keyword">typename</span> std::enable_if&lt;</div><div class="line"><a name="l04041"></a><span class="lineno"> 4041</span>&#160; std::is_same&lt;IteratorType, typename basic_json_t::iterator&gt;::value or</div><div class="line"><a name="l04042"></a><span class="lineno"> 4042</span>&#160; std::is_same&lt;IteratorType, typename basic_json_t::const_iterator&gt;::value, <span class="keywordtype">int</span>&gt;::type</div><div class="line"><a name="l04043"></a><span class="lineno"> 4043</span>&#160; = 0&gt;</div><div class="line"><a name="l04044"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_aa8996e3f8cd3e5113dcc3cb34bef7c0a.html#aa8996e3f8cd3e5113dcc3cb34bef7c0a"> 4044</a></span>&#160; IteratorType <a class="code" href="classnlohmann_1_1basic__json_aa8996e3f8cd3e5113dcc3cb34bef7c0a.html#aa8996e3f8cd3e5113dcc3cb34bef7c0a">erase</a>(IteratorType first, IteratorType last)</div><div class="line"><a name="l04045"></a><span class="lineno"> 4045</span>&#160; {</div><div class="line"><a name="l04046"></a><span class="lineno"> 4046</span>&#160; <span class="comment">// make sure iterator fits the current value</span></div><div class="line"><a name="l04047"></a><span class="lineno"> 4047</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">this</span> != first.m_object or <span class="keyword">this</span> != last.m_object)</div><div class="line"><a name="l04048"></a><span class="lineno"> 4048</span>&#160; {</div><div class="line"><a name="l04049"></a><span class="lineno"> 4049</span>&#160; <span class="keywordflow">throw</span> std::domain_error(<span class="stringliteral">&quot;iterators do not fit current value&quot;</span>);</div><div class="line"><a name="l04050"></a><span class="lineno"> 4050</span>&#160; }</div><div class="line"><a name="l04051"></a><span class="lineno"> 4051</span>&#160;</div><div class="line"><a name="l04052"></a><span class="lineno"> 4052</span>&#160; IteratorType result = end();</div><div class="line"><a name="l04053"></a><span class="lineno"> 4053</span>&#160;</div><div class="line"><a name="l04054"></a><span class="lineno"> 4054</span>&#160; <span class="keywordflow">switch</span> (m_type)</div><div class="line"><a name="l04055"></a><span class="lineno"> 4055</span>&#160; {</div><div class="line"><a name="l04056"></a><span class="lineno"> 4056</span>&#160; <span class="keywordflow">case</span> value_t::boolean:</div><div class="line"><a name="l04057"></a><span class="lineno"> 4057</span>&#160; <span class="keywordflow">case</span> value_t::number_float:</div><div class="line"><a name="l04058"></a><span class="lineno"> 4058</span>&#160; <span class="keywordflow">case</span> value_t::number_integer:</div><div class="line"><a name="l04059"></a><span class="lineno"> 4059</span>&#160; <span class="keywordflow">case</span> value_t::number_unsigned:</div><div class="line"><a name="l04060"></a><span class="lineno"> 4060</span>&#160; <span class="keywordflow">case</span> value_t::string:</div><div class="line"><a name="l04061"></a><span class="lineno"> 4061</span>&#160; {</div><div class="line"><a name="l04062"></a><span class="lineno"> 4062</span>&#160; <span class="keywordflow">if</span> (not first.m_it.primitive_iterator.is_begin() or not last.m_it.primitive_iterator.is_end())</div><div class="line"><a name="l04063"></a><span class="lineno"> 4063</span>&#160; {</div><div class="line"><a name="l04064"></a><span class="lineno"> 4064</span>&#160; <span class="keywordflow">throw</span> std::out_of_range(<span class="stringliteral">&quot;iterators out of range&quot;</span>);</div><div class="line"><a name="l04065"></a><span class="lineno"> 4065</span>&#160; }</div><div class="line"><a name="l04066"></a><span class="lineno"> 4066</span>&#160;</div><div class="line"><a name="l04067"></a><span class="lineno"> 4067</span>&#160; <span class="keywordflow">if</span> (is_string())</div><div class="line"><a name="l04068"></a><span class="lineno"> 4068</span>&#160; {</div><div class="line"><a name="l04069"></a><span class="lineno"> 4069</span>&#160; AllocatorType&lt;string_t&gt; alloc;</div><div class="line"><a name="l04070"></a><span class="lineno"> 4070</span>&#160; alloc.destroy(m_value.string);</div><div class="line"><a name="l04071"></a><span class="lineno"> 4071</span>&#160; alloc.deallocate(m_value.string, 1);</div><div class="line"><a name="l04072"></a><span class="lineno"> 4072</span>&#160; m_value.string = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l04073"></a><span class="lineno"> 4073</span>&#160; }</div><div class="line"><a name="l04074"></a><span class="lineno"> 4074</span>&#160;</div><div class="line"><a name="l04075"></a><span class="lineno"> 4075</span>&#160; m_type = value_t::null;</div><div class="line"><a name="l04076"></a><span class="lineno"> 4076</span>&#160; assert_invariant();</div><div class="line"><a name="l04077"></a><span class="lineno"> 4077</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l04078"></a><span class="lineno"> 4078</span>&#160; }</div><div class="line"><a name="l04079"></a><span class="lineno"> 4079</span>&#160;</div><div class="line"><a name="l04080"></a><span class="lineno"> 4080</span>&#160; <span class="keywordflow">case</span> value_t::object:</div><div class="line"><a name="l04081"></a><span class="lineno"> 4081</span>&#160; {</div><div class="line"><a name="l04082"></a><span class="lineno"> 4082</span>&#160; result.m_it.object_iterator = m_value.object-&gt;erase(first.m_it.object_iterator,</div><div class="line"><a name="l04083"></a><span class="lineno"> 4083</span>&#160; last.m_it.object_iterator);</div><div class="line"><a name="l04084"></a><span class="lineno"> 4084</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l04085"></a><span class="lineno"> 4085</span>&#160; }</div><div class="line"><a name="l04086"></a><span class="lineno"> 4086</span>&#160;</div><div class="line"><a name="l04087"></a><span class="lineno"> 4087</span>&#160; <span class="keywordflow">case</span> value_t::array:</div><div class="line"><a name="l04088"></a><span class="lineno"> 4088</span>&#160; {</div><div class="line"><a name="l04089"></a><span class="lineno"> 4089</span>&#160; result.m_it.array_iterator = m_value.array-&gt;erase(first.m_it.array_iterator,</div><div class="line"><a name="l04090"></a><span class="lineno"> 4090</span>&#160; last.m_it.array_iterator);</div><div class="line"><a name="l04091"></a><span class="lineno"> 4091</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l04092"></a><span class="lineno"> 4092</span>&#160; }</div><div class="line"><a name="l04093"></a><span class="lineno"> 4093</span>&#160;</div><div class="line"><a name="l04094"></a><span class="lineno"> 4094</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l04095"></a><span class="lineno"> 4095</span>&#160; {</div><div class="line"><a name="l04096"></a><span class="lineno"> 4096</span>&#160; <span class="keywordflow">throw</span> std::domain_error(<span class="stringliteral">&quot;cannot use erase() with &quot;</span> + type_name());</div><div class="line"><a name="l04097"></a><span class="lineno"> 4097</span>&#160; }</div><div class="line"><a name="l04098"></a><span class="lineno"> 4098</span>&#160; }</div><div class="line"><a name="l04099"></a><span class="lineno"> 4099</span>&#160;</div><div class="line"><a name="l04100"></a><span class="lineno"> 4100</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l04101"></a><span class="lineno"> 4101</span>&#160; }</div><div class="line"><a name="l04102"></a><span class="lineno"> 4102</span>&#160;</div><div class="line"><a name="l04132"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_aa36e72ffc3241b960fe9186d19e03bc3.html#aa36e72ffc3241b960fe9186d19e03bc3"> 4132</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_a1579a8f72a230358d6cd1a6e8a62859b.html#a1579a8f72a230358d6cd1a6e8a62859b">size_type</a> <a class="code" href="classnlohmann_1_1basic__json_aa36e72ffc3241b960fe9186d19e03bc3.html#aa36e72ffc3241b960fe9186d19e03bc3">erase</a>(<span class="keyword">const</span> <span class="keyword">typename</span> object_t::key_type&amp; key)</div><div class="line"><a name="l04133"></a><span class="lineno"> 4133</span>&#160; {</div><div class="line"><a name="l04134"></a><span class="lineno"> 4134</span>&#160; <span class="comment">// this erase only works for objects</span></div><div class="line"><a name="l04135"></a><span class="lineno"> 4135</span>&#160; <span class="keywordflow">if</span> (is_object())</div><div class="line"><a name="l04136"></a><span class="lineno"> 4136</span>&#160; {</div><div class="line"><a name="l04137"></a><span class="lineno"> 4137</span>&#160; <span class="keywordflow">return</span> m_value.object-&gt;erase(key);</div><div class="line"><a name="l04138"></a><span class="lineno"> 4138</span>&#160; }</div><div class="line"><a name="l04139"></a><span class="lineno"> 4139</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l04140"></a><span class="lineno"> 4140</span>&#160; {</div><div class="line"><a name="l04141"></a><span class="lineno"> 4141</span>&#160; <span class="keywordflow">throw</span> std::domain_error(<span class="stringliteral">&quot;cannot use erase() with &quot;</span> + type_name());</div><div class="line"><a name="l04142"></a><span class="lineno"> 4142</span>&#160; }</div><div class="line"><a name="l04143"></a><span class="lineno"> 4143</span>&#160; }</div><div class="line"><a name="l04144"></a><span class="lineno"> 4144</span>&#160;</div><div class="line"><a name="l04169"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a3da254c422ede5495f2815c5e48c00c5.html#a3da254c422ede5495f2815c5e48c00c5"> 4169</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classnlohmann_1_1basic__json_a3da254c422ede5495f2815c5e48c00c5.html#a3da254c422ede5495f2815c5e48c00c5">erase</a>(<span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_a1579a8f72a230358d6cd1a6e8a62859b.html#a1579a8f72a230358d6cd1a6e8a62859b">size_type</a> idx)</div><div class="line"><a name="l04170"></a><span class="lineno"> 4170</span>&#160; {</div><div class="line"><a name="l04171"></a><span class="lineno"> 4171</span>&#160; <span class="comment">// this erase only works for arrays</span></div><div class="line"><a name="l04172"></a><span class="lineno"> 4172</span>&#160; <span class="keywordflow">if</span> (is_array())</div><div class="line"><a name="l04173"></a><span class="lineno"> 4173</span>&#160; {</div><div class="line"><a name="l04174"></a><span class="lineno"> 4174</span>&#160; <span class="keywordflow">if</span> (idx &gt;= size())</div><div class="line"><a name="l04175"></a><span class="lineno"> 4175</span>&#160; {</div><div class="line"><a name="l04176"></a><span class="lineno"> 4176</span>&#160; <span class="keywordflow">throw</span> std::out_of_range(<span class="stringliteral">&quot;array index &quot;</span> + std::to_string(idx) + <span class="stringliteral">&quot; is out of range&quot;</span>);</div><div class="line"><a name="l04177"></a><span class="lineno"> 4177</span>&#160; }</div><div class="line"><a name="l04178"></a><span class="lineno"> 4178</span>&#160;</div><div class="line"><a name="l04179"></a><span class="lineno"> 4179</span>&#160; m_value.array-&gt;erase(m_value.array-&gt;begin() + <span class="keyword">static_cast&lt;</span><a class="code" href="classnlohmann_1_1basic__json_aec316934a555dd1acdd3600e5d4a4cdf.html#aec316934a555dd1acdd3600e5d4a4cdf">difference_type</a><span class="keyword">&gt;</span>(idx));</div><div class="line"><a name="l04180"></a><span class="lineno"> 4180</span>&#160; }</div><div class="line"><a name="l04181"></a><span class="lineno"> 4181</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l04182"></a><span class="lineno"> 4182</span>&#160; {</div><div class="line"><a name="l04183"></a><span class="lineno"> 4183</span>&#160; <span class="keywordflow">throw</span> std::domain_error(<span class="stringliteral">&quot;cannot use erase() with &quot;</span> + type_name());</div><div class="line"><a name="l04184"></a><span class="lineno"> 4184</span>&#160; }</div><div class="line"><a name="l04185"></a><span class="lineno"> 4185</span>&#160; }</div><div class="line"><a name="l04186"></a><span class="lineno"> 4186</span>&#160;</div><div class="line"><a name="l04188"></a><span class="lineno"> 4188</span>&#160;</div><div class="line"><a name="l04189"></a><span class="lineno"> 4189</span>&#160;</div><div class="line"><a name="l04191"></a><span class="lineno"> 4191</span>&#160; <span class="comment">// lookup //</span></div><div class="line"><a name="l04193"></a><span class="lineno"> 4193</span>&#160;<span class="comment"></span></div><div class="line"><a name="l04196"></a><span class="lineno"> 4196</span>&#160;</div><div class="line"><a name="l04215"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_affe7e160e7bb06eed83c8b437af4692f.html#affe7e160e7bb06eed83c8b437af4692f"> 4215</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1iterator.html">iterator</a> <a class="code" href="classnlohmann_1_1basic__json_affe7e160e7bb06eed83c8b437af4692f.html#affe7e160e7bb06eed83c8b437af4692f">find</a>(<span class="keyword">typename</span> object_t::key_type key)</div><div class="line"><a name="l04216"></a><span class="lineno"> 4216</span>&#160; {</div><div class="line"><a name="l04217"></a><span class="lineno"> 4217</span>&#160; <span class="keyword">auto</span> result = end();</div><div class="line"><a name="l04218"></a><span class="lineno"> 4218</span>&#160;</div><div class="line"><a name="l04219"></a><span class="lineno"> 4219</span>&#160; <span class="keywordflow">if</span> (is_object())</div><div class="line"><a name="l04220"></a><span class="lineno"> 4220</span>&#160; {</div><div class="line"><a name="l04221"></a><span class="lineno"> 4221</span>&#160; result.m_it.object_iterator = m_value.object-&gt;find(key);</div><div class="line"><a name="l04222"></a><span class="lineno"> 4222</span>&#160; }</div><div class="line"><a name="l04223"></a><span class="lineno"> 4223</span>&#160;</div><div class="line"><a name="l04224"></a><span class="lineno"> 4224</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l04225"></a><span class="lineno"> 4225</span>&#160; }</div><div class="line"><a name="l04226"></a><span class="lineno"> 4226</span>&#160;</div><div class="line"><a name="l04231"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a41aa8439842493e0595928a3e2cb7106.html#a41aa8439842493e0595928a3e2cb7106"> 4231</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator.html">const_iterator</a> <a class="code" href="classnlohmann_1_1basic__json_a41aa8439842493e0595928a3e2cb7106.html#a41aa8439842493e0595928a3e2cb7106">find</a>(<span class="keyword">typename</span> object_t::key_type key)<span class="keyword"> const</span></div><div class="line"><a name="l04232"></a><span class="lineno"> 4232</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l04233"></a><span class="lineno"> 4233</span>&#160; <span class="keyword">auto</span> result = cend();</div><div class="line"><a name="l04234"></a><span class="lineno"> 4234</span>&#160;</div><div class="line"><a name="l04235"></a><span class="lineno"> 4235</span>&#160; <span class="keywordflow">if</span> (is_object())</div><div class="line"><a name="l04236"></a><span class="lineno"> 4236</span>&#160; {</div><div class="line"><a name="l04237"></a><span class="lineno"> 4237</span>&#160; result.m_it.object_iterator = m_value.object-&gt;find(key);</div><div class="line"><a name="l04238"></a><span class="lineno"> 4238</span>&#160; }</div><div class="line"><a name="l04239"></a><span class="lineno"> 4239</span>&#160;</div><div class="line"><a name="l04240"></a><span class="lineno"> 4240</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l04241"></a><span class="lineno"> 4241</span>&#160; }</div><div class="line"><a name="l04242"></a><span class="lineno"> 4242</span>&#160;</div><div class="line"><a name="l04261"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a20d85eb83c2c0cfa0918f630b192635c.html#a20d85eb83c2c0cfa0918f630b192635c"> 4261</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_a1579a8f72a230358d6cd1a6e8a62859b.html#a1579a8f72a230358d6cd1a6e8a62859b">size_type</a> <a class="code" href="classnlohmann_1_1basic__json_a20d85eb83c2c0cfa0918f630b192635c.html#a20d85eb83c2c0cfa0918f630b192635c">count</a>(<span class="keyword">typename</span> object_t::key_type key)<span class="keyword"> const</span></div><div class="line"><a name="l04262"></a><span class="lineno"> 4262</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l04263"></a><span class="lineno"> 4263</span>&#160; <span class="comment">// return 0 for all nonobject types</span></div><div class="line"><a name="l04264"></a><span class="lineno"> 4264</span>&#160; <span class="keywordflow">return</span> is_object() ? m_value.object-&gt;count(key) : 0;</div><div class="line"><a name="l04265"></a><span class="lineno"> 4265</span>&#160; }</div><div class="line"><a name="l04266"></a><span class="lineno"> 4266</span>&#160;</div><div class="line"><a name="l04268"></a><span class="lineno"> 4268</span>&#160;</div><div class="line"><a name="l04269"></a><span class="lineno"> 4269</span>&#160;</div><div class="line"><a name="l04271"></a><span class="lineno"> 4271</span>&#160; <span class="comment">// iterators //</span></div><div class="line"><a name="l04273"></a><span class="lineno"> 4273</span>&#160;<span class="comment"></span></div><div class="line"><a name="l04276"></a><span class="lineno"> 4276</span>&#160;</div><div class="line"><a name="l04301"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_ad4e381c54039607be08d7af41a1f6ad1.html#ad4e381c54039607be08d7af41a1f6ad1"> 4301</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1iterator.html">iterator</a> <a class="code" href="classnlohmann_1_1basic__json_ad4e381c54039607be08d7af41a1f6ad1.html#ad4e381c54039607be08d7af41a1f6ad1">begin</a>() noexcept</div><div class="line"><a name="l04302"></a><span class="lineno"> 4302</span>&#160; {</div><div class="line"><a name="l04303"></a><span class="lineno"> 4303</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1iterator.html">iterator</a> result(<span class="keyword">this</span>);</div><div class="line"><a name="l04304"></a><span class="lineno"> 4304</span>&#160; result.set_begin();</div><div class="line"><a name="l04305"></a><span class="lineno"> 4305</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l04306"></a><span class="lineno"> 4306</span>&#160; }</div><div class="line"><a name="l04307"></a><span class="lineno"> 4307</span>&#160;</div><div class="line"><a name="l04311"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_af9587bc58ebfac62b2c6b08799f57c2f.html#af9587bc58ebfac62b2c6b08799f57c2f"> 4311</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator.html">const_iterator</a> <a class="code" href="classnlohmann_1_1basic__json_af9587bc58ebfac62b2c6b08799f57c2f.html#af9587bc58ebfac62b2c6b08799f57c2f">begin</a>() const noexcept</div><div class="line"><a name="l04312"></a><span class="lineno"> 4312</span>&#160; {</div><div class="line"><a name="l04313"></a><span class="lineno"> 4313</span>&#160; <span class="keywordflow">return</span> cbegin();</div><div class="line"><a name="l04314"></a><span class="lineno"> 4314</span>&#160; }</div><div class="line"><a name="l04315"></a><span class="lineno"> 4315</span>&#160;</div><div class="line"><a name="l04341"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a7355a41b0033ff8a27d58550544d5a59.html#a7355a41b0033ff8a27d58550544d5a59"> 4341</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator.html">const_iterator</a> <a class="code" href="classnlohmann_1_1basic__json_a7355a41b0033ff8a27d58550544d5a59.html#a7355a41b0033ff8a27d58550544d5a59">cbegin</a>() const noexcept</div><div class="line"><a name="l04342"></a><span class="lineno"> 4342</span>&#160; {</div><div class="line"><a name="l04343"></a><span class="lineno"> 4343</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator.html">const_iterator</a> result(<span class="keyword">this</span>);</div><div class="line"><a name="l04344"></a><span class="lineno"> 4344</span>&#160; result.set_begin();</div><div class="line"><a name="l04345"></a><span class="lineno"> 4345</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l04346"></a><span class="lineno"> 4346</span>&#160; }</div><div class="line"><a name="l04347"></a><span class="lineno"> 4347</span>&#160;</div><div class="line"><a name="l04372"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a12ccf14d39ddae52f6c7e126105a230b.html#a12ccf14d39ddae52f6c7e126105a230b"> 4372</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1iterator.html">iterator</a> <a class="code" href="classnlohmann_1_1basic__json_a12ccf14d39ddae52f6c7e126105a230b.html#a12ccf14d39ddae52f6c7e126105a230b">end</a>() noexcept</div><div class="line"><a name="l04373"></a><span class="lineno"> 4373</span>&#160; {</div><div class="line"><a name="l04374"></a><span class="lineno"> 4374</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1iterator.html">iterator</a> result(<span class="keyword">this</span>);</div><div class="line"><a name="l04375"></a><span class="lineno"> 4375</span>&#160; result.set_end();</div><div class="line"><a name="l04376"></a><span class="lineno"> 4376</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l04377"></a><span class="lineno"> 4377</span>&#160; }</div><div class="line"><a name="l04378"></a><span class="lineno"> 4378</span>&#160;</div><div class="line"><a name="l04382"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_abd7e95159740e94160c13392b1536eb1.html#abd7e95159740e94160c13392b1536eb1"> 4382</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator.html">const_iterator</a> <a class="code" href="classnlohmann_1_1basic__json_abd7e95159740e94160c13392b1536eb1.html#abd7e95159740e94160c13392b1536eb1">end</a>() const noexcept</div><div class="line"><a name="l04383"></a><span class="lineno"> 4383</span>&#160; {</div><div class="line"><a name="l04384"></a><span class="lineno"> 4384</span>&#160; <span class="keywordflow">return</span> cend();</div><div class="line"><a name="l04385"></a><span class="lineno"> 4385</span>&#160; }</div><div class="line"><a name="l04386"></a><span class="lineno"> 4386</span>&#160;</div><div class="line"><a name="l04412"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_aa730d68d55ccc48d2cd4835ff46d2a0f.html#aa730d68d55ccc48d2cd4835ff46d2a0f"> 4412</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator.html">const_iterator</a> <a class="code" href="classnlohmann_1_1basic__json_aa730d68d55ccc48d2cd4835ff46d2a0f.html#aa730d68d55ccc48d2cd4835ff46d2a0f">cend</a>() const noexcept</div><div class="line"><a name="l04413"></a><span class="lineno"> 4413</span>&#160; {</div><div class="line"><a name="l04414"></a><span class="lineno"> 4414</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator.html">const_iterator</a> result(<span class="keyword">this</span>);</div><div class="line"><a name="l04415"></a><span class="lineno"> 4415</span>&#160; result.set_end();</div><div class="line"><a name="l04416"></a><span class="lineno"> 4416</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l04417"></a><span class="lineno"> 4417</span>&#160; }</div><div class="line"><a name="l04418"></a><span class="lineno"> 4418</span>&#160;</div><div class="line"><a name="l04442"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a62ccf5b9b3674aec2403fbc02da03db8.html#a62ccf5b9b3674aec2403fbc02da03db8"> 4442</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1json__reverse__iterator.html">reverse_iterator</a> <a class="code" href="classnlohmann_1_1basic__json_a62ccf5b9b3674aec2403fbc02da03db8.html#a62ccf5b9b3674aec2403fbc02da03db8">rbegin</a>() noexcept</div><div class="line"><a name="l04443"></a><span class="lineno"> 4443</span>&#160; {</div><div class="line"><a name="l04444"></a><span class="lineno"> 4444</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classnlohmann_1_1basic__json_1_1json__reverse__iterator.html">reverse_iterator</a>(end());</div><div class="line"><a name="l04445"></a><span class="lineno"> 4445</span>&#160; }</div><div class="line"><a name="l04446"></a><span class="lineno"> 4446</span>&#160;</div><div class="line"><a name="l04450"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a15e70a44e2a8db929694819fed256653.html#a15e70a44e2a8db929694819fed256653"> 4450</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1json__reverse__iterator.html">const_reverse_iterator</a> <a class="code" href="classnlohmann_1_1basic__json_a15e70a44e2a8db929694819fed256653.html#a15e70a44e2a8db929694819fed256653">rbegin</a>() const noexcept</div><div class="line"><a name="l04451"></a><span class="lineno"> 4451</span>&#160; {</div><div class="line"><a name="l04452"></a><span class="lineno"> 4452</span>&#160; <span class="keywordflow">return</span> crbegin();</div><div class="line"><a name="l04453"></a><span class="lineno"> 4453</span>&#160; }</div><div class="line"><a name="l04454"></a><span class="lineno"> 4454</span>&#160;</div><div class="line"><a name="l04479"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_aaa160a960dd3dd90856a72b1d8dbe707.html#aaa160a960dd3dd90856a72b1d8dbe707"> 4479</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1json__reverse__iterator.html">reverse_iterator</a> <a class="code" href="classnlohmann_1_1basic__json_aaa160a960dd3dd90856a72b1d8dbe707.html#aaa160a960dd3dd90856a72b1d8dbe707">rend</a>() noexcept</div><div class="line"><a name="l04480"></a><span class="lineno"> 4480</span>&#160; {</div><div class="line"><a name="l04481"></a><span class="lineno"> 4481</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classnlohmann_1_1basic__json_1_1json__reverse__iterator.html">reverse_iterator</a>(begin());</div><div class="line"><a name="l04482"></a><span class="lineno"> 4482</span>&#160; }</div><div class="line"><a name="l04483"></a><span class="lineno"> 4483</span>&#160;</div><div class="line"><a name="l04487"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a36fda9749be288cac96cfd846cb62561.html#a36fda9749be288cac96cfd846cb62561"> 4487</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1json__reverse__iterator.html">const_reverse_iterator</a> <a class="code" href="classnlohmann_1_1basic__json_a36fda9749be288cac96cfd846cb62561.html#a36fda9749be288cac96cfd846cb62561">rend</a>() const noexcept</div><div class="line"><a name="l04488"></a><span class="lineno"> 4488</span>&#160; {</div><div class="line"><a name="l04489"></a><span class="lineno"> 4489</span>&#160; <span class="keywordflow">return</span> crend();</div><div class="line"><a name="l04490"></a><span class="lineno"> 4490</span>&#160; }</div><div class="line"><a name="l04491"></a><span class="lineno"> 4491</span>&#160;</div><div class="line"><a name="l04516"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a060b33f8f255986088652625f9d50681.html#a060b33f8f255986088652625f9d50681"> 4516</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1json__reverse__iterator.html">const_reverse_iterator</a> <a class="code" href="classnlohmann_1_1basic__json_a060b33f8f255986088652625f9d50681.html#a060b33f8f255986088652625f9d50681">crbegin</a>() const noexcept</div><div class="line"><a name="l04517"></a><span class="lineno"> 4517</span>&#160; {</div><div class="line"><a name="l04518"></a><span class="lineno"> 4518</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classnlohmann_1_1basic__json_1_1json__reverse__iterator.html">const_reverse_iterator</a>(cend());</div><div class="line"><a name="l04519"></a><span class="lineno"> 4519</span>&#160; }</div><div class="line"><a name="l04520"></a><span class="lineno"> 4520</span>&#160;</div><div class="line"><a name="l04545"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_aa7084e62b93ef0236698b246a58bb2da.html#aa7084e62b93ef0236698b246a58bb2da"> 4545</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1json__reverse__iterator.html">const_reverse_iterator</a> <a class="code" href="classnlohmann_1_1basic__json_aa7084e62b93ef0236698b246a58bb2da.html#aa7084e62b93ef0236698b246a58bb2da">crend</a>() const noexcept</div><div class="line"><a name="l04546"></a><span class="lineno"> 4546</span>&#160; {</div><div class="line"><a name="l04547"></a><span class="lineno"> 4547</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classnlohmann_1_1basic__json_1_1json__reverse__iterator.html">const_reverse_iterator</a>(cbegin());</div><div class="line"><a name="l04548"></a><span class="lineno"> 4548</span>&#160; }</div><div class="line"><a name="l04549"></a><span class="lineno"> 4549</span>&#160;</div><div class="line"><a name="l04550"></a><span class="lineno"> 4550</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l04551"></a><span class="lineno"> 4551</span>&#160; <span class="comment">// forward declaration</span></div><div class="line"><a name="l04552"></a><span class="lineno"> 4552</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> IteratorType&gt; <span class="keyword">class </span>iteration_proxy;</div><div class="line"><a name="l04553"></a><span class="lineno"> 4553</span>&#160;</div><div class="line"><a name="l04554"></a><span class="lineno"> 4554</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l04566"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_ab936779c70bec68343ef440ed13251e5.html#ab936779c70bec68343ef440ed13251e5"> 4566</a></span>&#160; <span class="keyword">static</span> iteration_proxy&lt;iterator&gt; <a class="code" href="classnlohmann_1_1basic__json_ab936779c70bec68343ef440ed13251e5.html#ab936779c70bec68343ef440ed13251e5">iterator_wrapper</a>(<a class="code" href="classnlohmann_1_1basic__json.html">reference</a> cont)</div><div class="line"><a name="l04567"></a><span class="lineno"> 4567</span>&#160; {</div><div class="line"><a name="l04568"></a><span class="lineno"> 4568</span>&#160; <span class="keywordflow">return</span> iteration_proxy&lt;iterator&gt;(cont);</div><div class="line"><a name="l04569"></a><span class="lineno"> 4569</span>&#160; }</div><div class="line"><a name="l04570"></a><span class="lineno"> 4570</span>&#160;</div><div class="line"><a name="l04574"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_af148cdab12df5bf86119fac735ccaac5.html#af148cdab12df5bf86119fac735ccaac5"> 4574</a></span>&#160; <span class="keyword">static</span> iteration_proxy&lt;const_iterator&gt; <a class="code" href="classnlohmann_1_1basic__json_af148cdab12df5bf86119fac735ccaac5.html#af148cdab12df5bf86119fac735ccaac5">iterator_wrapper</a>(<a class="code" href="classnlohmann_1_1basic__json.html">const_reference</a> cont)</div><div class="line"><a name="l04575"></a><span class="lineno"> 4575</span>&#160; {</div><div class="line"><a name="l04576"></a><span class="lineno"> 4576</span>&#160; <span class="keywordflow">return</span> iteration_proxy&lt;const_iterator&gt;(cont);</div><div class="line"><a name="l04577"></a><span class="lineno"> 4577</span>&#160; }</div><div class="line"><a name="l04578"></a><span class="lineno"> 4578</span>&#160;</div><div class="line"><a name="l04580"></a><span class="lineno"> 4580</span>&#160;</div><div class="line"><a name="l04581"></a><span class="lineno"> 4581</span>&#160;</div><div class="line"><a name="l04583"></a><span class="lineno"> 4583</span>&#160; <span class="comment">// capacity //</span></div><div class="line"><a name="l04585"></a><span class="lineno"> 4585</span>&#160;<span class="comment"></span></div><div class="line"><a name="l04588"></a><span class="lineno"> 4588</span>&#160;</div><div class="line"><a name="l04626"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_ae3fe0423252e171973cdd5786d036e30.html#ae3fe0423252e171973cdd5786d036e30"> 4626</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classnlohmann_1_1basic__json_ae3fe0423252e171973cdd5786d036e30.html#ae3fe0423252e171973cdd5786d036e30">empty</a>() const noexcept</div><div class="line"><a name="l04627"></a><span class="lineno"> 4627</span>&#160; {</div><div class="line"><a name="l04628"></a><span class="lineno"> 4628</span>&#160; <span class="keywordflow">switch</span> (m_type)</div><div class="line"><a name="l04629"></a><span class="lineno"> 4629</span>&#160; {</div><div class="line"><a name="l04630"></a><span class="lineno"> 4630</span>&#160; <span class="keywordflow">case</span> value_t::null:</div><div class="line"><a name="l04631"></a><span class="lineno"> 4631</span>&#160; {</div><div class="line"><a name="l04632"></a><span class="lineno"> 4632</span>&#160; <span class="comment">// null values are empty</span></div><div class="line"><a name="l04633"></a><span class="lineno"> 4633</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l04634"></a><span class="lineno"> 4634</span>&#160; }</div><div class="line"><a name="l04635"></a><span class="lineno"> 4635</span>&#160;</div><div class="line"><a name="l04636"></a><span class="lineno"> 4636</span>&#160; <span class="keywordflow">case</span> value_t::array:</div><div class="line"><a name="l04637"></a><span class="lineno"> 4637</span>&#160; {</div><div class="line"><a name="l04638"></a><span class="lineno"> 4638</span>&#160; <span class="comment">// delegate call to array_t::empty()</span></div><div class="line"><a name="l04639"></a><span class="lineno"> 4639</span>&#160; <span class="keywordflow">return</span> m_value.array-&gt;empty();</div><div class="line"><a name="l04640"></a><span class="lineno"> 4640</span>&#160; }</div><div class="line"><a name="l04641"></a><span class="lineno"> 4641</span>&#160;</div><div class="line"><a name="l04642"></a><span class="lineno"> 4642</span>&#160; <span class="keywordflow">case</span> value_t::object:</div><div class="line"><a name="l04643"></a><span class="lineno"> 4643</span>&#160; {</div><div class="line"><a name="l04644"></a><span class="lineno"> 4644</span>&#160; <span class="comment">// delegate call to object_t::empty()</span></div><div class="line"><a name="l04645"></a><span class="lineno"> 4645</span>&#160; <span class="keywordflow">return</span> m_value.object-&gt;empty();</div><div class="line"><a name="l04646"></a><span class="lineno"> 4646</span>&#160; }</div><div class="line"><a name="l04647"></a><span class="lineno"> 4647</span>&#160;</div><div class="line"><a name="l04648"></a><span class="lineno"> 4648</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l04649"></a><span class="lineno"> 4649</span>&#160; {</div><div class="line"><a name="l04650"></a><span class="lineno"> 4650</span>&#160; <span class="comment">// all other types are nonempty</span></div><div class="line"><a name="l04651"></a><span class="lineno"> 4651</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l04652"></a><span class="lineno"> 4652</span>&#160; }</div><div class="line"><a name="l04653"></a><span class="lineno"> 4653</span>&#160; }</div><div class="line"><a name="l04654"></a><span class="lineno"> 4654</span>&#160; }</div><div class="line"><a name="l04655"></a><span class="lineno"> 4655</span>&#160;</div><div class="line"><a name="l04694"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a0ea8a1ecca4b3cb0ba09ad7552c364b6.html#a0ea8a1ecca4b3cb0ba09ad7552c364b6"> 4694</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_a1579a8f72a230358d6cd1a6e8a62859b.html#a1579a8f72a230358d6cd1a6e8a62859b">size_type</a> <a class="code" href="classnlohmann_1_1basic__json_a0ea8a1ecca4b3cb0ba09ad7552c364b6.html#a0ea8a1ecca4b3cb0ba09ad7552c364b6">size</a>() const noexcept</div><div class="line"><a name="l04695"></a><span class="lineno"> 4695</span>&#160; {</div><div class="line"><a name="l04696"></a><span class="lineno"> 4696</span>&#160; <span class="keywordflow">switch</span> (m_type)</div><div class="line"><a name="l04697"></a><span class="lineno"> 4697</span>&#160; {</div><div class="line"><a name="l04698"></a><span class="lineno"> 4698</span>&#160; <span class="keywordflow">case</span> value_t::null:</div><div class="line"><a name="l04699"></a><span class="lineno"> 4699</span>&#160; {</div><div class="line"><a name="l04700"></a><span class="lineno"> 4700</span>&#160; <span class="comment">// null values are empty</span></div><div class="line"><a name="l04701"></a><span class="lineno"> 4701</span>&#160; <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l04702"></a><span class="lineno"> 4702</span>&#160; }</div><div class="line"><a name="l04703"></a><span class="lineno"> 4703</span>&#160;</div><div class="line"><a name="l04704"></a><span class="lineno"> 4704</span>&#160; <span class="keywordflow">case</span> value_t::array:</div><div class="line"><a name="l04705"></a><span class="lineno"> 4705</span>&#160; {</div><div class="line"><a name="l04706"></a><span class="lineno"> 4706</span>&#160; <span class="comment">// delegate call to array_t::size()</span></div><div class="line"><a name="l04707"></a><span class="lineno"> 4707</span>&#160; <span class="keywordflow">return</span> m_value.array-&gt;size();</div><div class="line"><a name="l04708"></a><span class="lineno"> 4708</span>&#160; }</div><div class="line"><a name="l04709"></a><span class="lineno"> 4709</span>&#160;</div><div class="line"><a name="l04710"></a><span class="lineno"> 4710</span>&#160; <span class="keywordflow">case</span> value_t::object:</div><div class="line"><a name="l04711"></a><span class="lineno"> 4711</span>&#160; {</div><div class="line"><a name="l04712"></a><span class="lineno"> 4712</span>&#160; <span class="comment">// delegate call to object_t::size()</span></div><div class="line"><a name="l04713"></a><span class="lineno"> 4713</span>&#160; <span class="keywordflow">return</span> m_value.object-&gt;size();</div><div class="line"><a name="l04714"></a><span class="lineno"> 4714</span>&#160; }</div><div class="line"><a name="l04715"></a><span class="lineno"> 4715</span>&#160;</div><div class="line"><a name="l04716"></a><span class="lineno"> 4716</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l04717"></a><span class="lineno"> 4717</span>&#160; {</div><div class="line"><a name="l04718"></a><span class="lineno"> 4718</span>&#160; <span class="comment">// all other types have size 1</span></div><div class="line"><a name="l04719"></a><span class="lineno"> 4719</span>&#160; <span class="keywordflow">return</span> 1;</div><div class="line"><a name="l04720"></a><span class="lineno"> 4720</span>&#160; }</div><div class="line"><a name="l04721"></a><span class="lineno"> 4721</span>&#160; }</div><div class="line"><a name="l04722"></a><span class="lineno"> 4722</span>&#160; }</div><div class="line"><a name="l04723"></a><span class="lineno"> 4723</span>&#160;</div><div class="line"><a name="l04760"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a7936417b875b7ec737f77ef84bbf7871.html#a7936417b875b7ec737f77ef84bbf7871"> 4760</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_a1579a8f72a230358d6cd1a6e8a62859b.html#a1579a8f72a230358d6cd1a6e8a62859b">size_type</a> <a class="code" href="classnlohmann_1_1basic__json_a7936417b875b7ec737f77ef84bbf7871.html#a7936417b875b7ec737f77ef84bbf7871">max_size</a>() const noexcept</div><div class="line"><a name="l04761"></a><span class="lineno"> 4761</span>&#160; {</div><div class="line"><a name="l04762"></a><span class="lineno"> 4762</span>&#160; <span class="keywordflow">switch</span> (m_type)</div><div class="line"><a name="l04763"></a><span class="lineno"> 4763</span>&#160; {</div><div class="line"><a name="l04764"></a><span class="lineno"> 4764</span>&#160; <span class="keywordflow">case</span> value_t::array:</div><div class="line"><a name="l04765"></a><span class="lineno"> 4765</span>&#160; {</div><div class="line"><a name="l04766"></a><span class="lineno"> 4766</span>&#160; <span class="comment">// delegate call to array_t::max_size()</span></div><div class="line"><a name="l04767"></a><span class="lineno"> 4767</span>&#160; <span class="keywordflow">return</span> m_value.array-&gt;max_size();</div><div class="line"><a name="l04768"></a><span class="lineno"> 4768</span>&#160; }</div><div class="line"><a name="l04769"></a><span class="lineno"> 4769</span>&#160;</div><div class="line"><a name="l04770"></a><span class="lineno"> 4770</span>&#160; <span class="keywordflow">case</span> value_t::object:</div><div class="line"><a name="l04771"></a><span class="lineno"> 4771</span>&#160; {</div><div class="line"><a name="l04772"></a><span class="lineno"> 4772</span>&#160; <span class="comment">// delegate call to object_t::max_size()</span></div><div class="line"><a name="l04773"></a><span class="lineno"> 4773</span>&#160; <span class="keywordflow">return</span> m_value.object-&gt;max_size();</div><div class="line"><a name="l04774"></a><span class="lineno"> 4774</span>&#160; }</div><div class="line"><a name="l04775"></a><span class="lineno"> 4775</span>&#160;</div><div class="line"><a name="l04776"></a><span class="lineno"> 4776</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l04777"></a><span class="lineno"> 4777</span>&#160; {</div><div class="line"><a name="l04778"></a><span class="lineno"> 4778</span>&#160; <span class="comment">// all other types have max_size() == size()</span></div><div class="line"><a name="l04779"></a><span class="lineno"> 4779</span>&#160; <span class="keywordflow">return</span> size();</div><div class="line"><a name="l04780"></a><span class="lineno"> 4780</span>&#160; }</div><div class="line"><a name="l04781"></a><span class="lineno"> 4781</span>&#160; }</div><div class="line"><a name="l04782"></a><span class="lineno"> 4782</span>&#160; }</div><div class="line"><a name="l04783"></a><span class="lineno"> 4783</span>&#160;</div><div class="line"><a name="l04785"></a><span class="lineno"> 4785</span>&#160;</div><div class="line"><a name="l04786"></a><span class="lineno"> 4786</span>&#160;</div><div class="line"><a name="l04788"></a><span class="lineno"> 4788</span>&#160; <span class="comment">// modifiers //</span></div><div class="line"><a name="l04790"></a><span class="lineno"> 4790</span>&#160;<span class="comment"></span></div><div class="line"><a name="l04793"></a><span class="lineno"> 4793</span>&#160;</div><div class="line"><a name="l04819"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_ad6e51670e9c0052856f3fee01df5c44f.html#ad6e51670e9c0052856f3fee01df5c44f"> 4819</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classnlohmann_1_1basic__json_ad6e51670e9c0052856f3fee01df5c44f.html#ad6e51670e9c0052856f3fee01df5c44f">clear</a>() noexcept</div><div class="line"><a name="l04820"></a><span class="lineno"> 4820</span>&#160; {</div><div class="line"><a name="l04821"></a><span class="lineno"> 4821</span>&#160; <span class="keywordflow">switch</span> (m_type)</div><div class="line"><a name="l04822"></a><span class="lineno"> 4822</span>&#160; {</div><div class="line"><a name="l04823"></a><span class="lineno"> 4823</span>&#160; <span class="keywordflow">case</span> value_t::number_integer:</div><div class="line"><a name="l04824"></a><span class="lineno"> 4824</span>&#160; {</div><div class="line"><a name="l04825"></a><span class="lineno"> 4825</span>&#160; m_value.number_integer = 0;</div><div class="line"><a name="l04826"></a><span class="lineno"> 4826</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l04827"></a><span class="lineno"> 4827</span>&#160; }</div><div class="line"><a name="l04828"></a><span class="lineno"> 4828</span>&#160;</div><div class="line"><a name="l04829"></a><span class="lineno"> 4829</span>&#160; <span class="keywordflow">case</span> value_t::number_unsigned:</div><div class="line"><a name="l04830"></a><span class="lineno"> 4830</span>&#160; {</div><div class="line"><a name="l04831"></a><span class="lineno"> 4831</span>&#160; m_value.number_unsigned = 0;</div><div class="line"><a name="l04832"></a><span class="lineno"> 4832</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l04833"></a><span class="lineno"> 4833</span>&#160; }</div><div class="line"><a name="l04834"></a><span class="lineno"> 4834</span>&#160;</div><div class="line"><a name="l04835"></a><span class="lineno"> 4835</span>&#160; <span class="keywordflow">case</span> value_t::number_float:</div><div class="line"><a name="l04836"></a><span class="lineno"> 4836</span>&#160; {</div><div class="line"><a name="l04837"></a><span class="lineno"> 4837</span>&#160; m_value.number_float = 0.0;</div><div class="line"><a name="l04838"></a><span class="lineno"> 4838</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l04839"></a><span class="lineno"> 4839</span>&#160; }</div><div class="line"><a name="l04840"></a><span class="lineno"> 4840</span>&#160;</div><div class="line"><a name="l04841"></a><span class="lineno"> 4841</span>&#160; <span class="keywordflow">case</span> value_t::boolean:</div><div class="line"><a name="l04842"></a><span class="lineno"> 4842</span>&#160; {</div><div class="line"><a name="l04843"></a><span class="lineno"> 4843</span>&#160; m_value.boolean = <span class="keyword">false</span>;</div><div class="line"><a name="l04844"></a><span class="lineno"> 4844</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l04845"></a><span class="lineno"> 4845</span>&#160; }</div><div class="line"><a name="l04846"></a><span class="lineno"> 4846</span>&#160;</div><div class="line"><a name="l04847"></a><span class="lineno"> 4847</span>&#160; <span class="keywordflow">case</span> value_t::string:</div><div class="line"><a name="l04848"></a><span class="lineno"> 4848</span>&#160; {</div><div class="line"><a name="l04849"></a><span class="lineno"> 4849</span>&#160; m_value.string-&gt;clear();</div><div class="line"><a name="l04850"></a><span class="lineno"> 4850</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l04851"></a><span class="lineno"> 4851</span>&#160; }</div><div class="line"><a name="l04852"></a><span class="lineno"> 4852</span>&#160;</div><div class="line"><a name="l04853"></a><span class="lineno"> 4853</span>&#160; <span class="keywordflow">case</span> value_t::array:</div><div class="line"><a name="l04854"></a><span class="lineno"> 4854</span>&#160; {</div><div class="line"><a name="l04855"></a><span class="lineno"> 4855</span>&#160; m_value.array-&gt;clear();</div><div class="line"><a name="l04856"></a><span class="lineno"> 4856</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l04857"></a><span class="lineno"> 4857</span>&#160; }</div><div class="line"><a name="l04858"></a><span class="lineno"> 4858</span>&#160;</div><div class="line"><a name="l04859"></a><span class="lineno"> 4859</span>&#160; <span class="keywordflow">case</span> value_t::object:</div><div class="line"><a name="l04860"></a><span class="lineno"> 4860</span>&#160; {</div><div class="line"><a name="l04861"></a><span class="lineno"> 4861</span>&#160; m_value.object-&gt;clear();</div><div class="line"><a name="l04862"></a><span class="lineno"> 4862</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l04863"></a><span class="lineno"> 4863</span>&#160; }</div><div class="line"><a name="l04864"></a><span class="lineno"> 4864</span>&#160;</div><div class="line"><a name="l04865"></a><span class="lineno"> 4865</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l04866"></a><span class="lineno"> 4866</span>&#160; {</div><div class="line"><a name="l04867"></a><span class="lineno"> 4867</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l04868"></a><span class="lineno"> 4868</span>&#160; }</div><div class="line"><a name="l04869"></a><span class="lineno"> 4869</span>&#160; }</div><div class="line"><a name="l04870"></a><span class="lineno"> 4870</span>&#160; }</div><div class="line"><a name="l04871"></a><span class="lineno"> 4871</span>&#160;</div><div class="line"><a name="l04892"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a486b96adbf4886c38e38c952394a220f.html#a486b96adbf4886c38e38c952394a220f"> 4892</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classnlohmann_1_1basic__json_a486b96adbf4886c38e38c952394a220f.html#a486b96adbf4886c38e38c952394a220f">push_back</a>(<a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a>&amp;&amp; val)</div><div class="line"><a name="l04893"></a><span class="lineno"> 4893</span>&#160; {</div><div class="line"><a name="l04894"></a><span class="lineno"> 4894</span>&#160; <span class="comment">// push_back only works for null objects or arrays</span></div><div class="line"><a name="l04895"></a><span class="lineno"> 4895</span>&#160; <span class="keywordflow">if</span> (not(is_null() or is_array()))</div><div class="line"><a name="l04896"></a><span class="lineno"> 4896</span>&#160; {</div><div class="line"><a name="l04897"></a><span class="lineno"> 4897</span>&#160; <span class="keywordflow">throw</span> std::domain_error(<span class="stringliteral">&quot;cannot use push_back() with &quot;</span> + type_name());</div><div class="line"><a name="l04898"></a><span class="lineno"> 4898</span>&#160; }</div><div class="line"><a name="l04899"></a><span class="lineno"> 4899</span>&#160;</div><div class="line"><a name="l04900"></a><span class="lineno"> 4900</span>&#160; <span class="comment">// transform null object into an array</span></div><div class="line"><a name="l04901"></a><span class="lineno"> 4901</span>&#160; <span class="keywordflow">if</span> (is_null())</div><div class="line"><a name="l04902"></a><span class="lineno"> 4902</span>&#160; {</div><div class="line"><a name="l04903"></a><span class="lineno"> 4903</span>&#160; m_type = value_t::array;</div><div class="line"><a name="l04904"></a><span class="lineno"> 4904</span>&#160; m_value = value_t::array;</div><div class="line"><a name="l04905"></a><span class="lineno"> 4905</span>&#160; assert_invariant();</div><div class="line"><a name="l04906"></a><span class="lineno"> 4906</span>&#160; }</div><div class="line"><a name="l04907"></a><span class="lineno"> 4907</span>&#160;</div><div class="line"><a name="l04908"></a><span class="lineno"> 4908</span>&#160; <span class="comment">// add element to array (move semantics)</span></div><div class="line"><a name="l04909"></a><span class="lineno"> 4909</span>&#160; m_value.array-&gt;push_back(std::move(val));</div><div class="line"><a name="l04910"></a><span class="lineno"> 4910</span>&#160; <span class="comment">// invalidate object</span></div><div class="line"><a name="l04911"></a><span class="lineno"> 4911</span>&#160; val.m_type = value_t::null;</div><div class="line"><a name="l04912"></a><span class="lineno"> 4912</span>&#160; }</div><div class="line"><a name="l04913"></a><span class="lineno"> 4913</span>&#160;</div><div class="line"><a name="l04918"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a1c1aa2d148a3e4ce0d4e50cf5b894f41.html#a1c1aa2d148a3e4ce0d4e50cf5b894f41"> 4918</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">reference</a> <a class="code" href="classnlohmann_1_1basic__json_a1c1aa2d148a3e4ce0d4e50cf5b894f41.html#a1c1aa2d148a3e4ce0d4e50cf5b894f41">operator+=</a>(<a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a>&amp;&amp; val)</div><div class="line"><a name="l04919"></a><span class="lineno"> 4919</span>&#160; {</div><div class="line"><a name="l04920"></a><span class="lineno"> 4920</span>&#160; push_back(std::move(val));</div><div class="line"><a name="l04921"></a><span class="lineno"> 4921</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l04922"></a><span class="lineno"> 4922</span>&#160; }</div><div class="line"><a name="l04923"></a><span class="lineno"> 4923</span>&#160;</div><div class="line"><a name="l04928"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a6f3dfd3e83a1e907d7946b47fcd7ceba.html#a6f3dfd3e83a1e907d7946b47fcd7ceba"> 4928</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classnlohmann_1_1basic__json_a6f3dfd3e83a1e907d7946b47fcd7ceba.html#a6f3dfd3e83a1e907d7946b47fcd7ceba">push_back</a>(<span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a>&amp; val)</div><div class="line"><a name="l04929"></a><span class="lineno"> 4929</span>&#160; {</div><div class="line"><a name="l04930"></a><span class="lineno"> 4930</span>&#160; <span class="comment">// push_back only works for null objects or arrays</span></div><div class="line"><a name="l04931"></a><span class="lineno"> 4931</span>&#160; <span class="keywordflow">if</span> (not(is_null() or is_array()))</div><div class="line"><a name="l04932"></a><span class="lineno"> 4932</span>&#160; {</div><div class="line"><a name="l04933"></a><span class="lineno"> 4933</span>&#160; <span class="keywordflow">throw</span> std::domain_error(<span class="stringliteral">&quot;cannot use push_back() with &quot;</span> + type_name());</div><div class="line"><a name="l04934"></a><span class="lineno"> 4934</span>&#160; }</div><div class="line"><a name="l04935"></a><span class="lineno"> 4935</span>&#160;</div><div class="line"><a name="l04936"></a><span class="lineno"> 4936</span>&#160; <span class="comment">// transform null object into an array</span></div><div class="line"><a name="l04937"></a><span class="lineno"> 4937</span>&#160; <span class="keywordflow">if</span> (is_null())</div><div class="line"><a name="l04938"></a><span class="lineno"> 4938</span>&#160; {</div><div class="line"><a name="l04939"></a><span class="lineno"> 4939</span>&#160; m_type = value_t::array;</div><div class="line"><a name="l04940"></a><span class="lineno"> 4940</span>&#160; m_value = value_t::array;</div><div class="line"><a name="l04941"></a><span class="lineno"> 4941</span>&#160; assert_invariant();</div><div class="line"><a name="l04942"></a><span class="lineno"> 4942</span>&#160; }</div><div class="line"><a name="l04943"></a><span class="lineno"> 4943</span>&#160;</div><div class="line"><a name="l04944"></a><span class="lineno"> 4944</span>&#160; <span class="comment">// add element to array</span></div><div class="line"><a name="l04945"></a><span class="lineno"> 4945</span>&#160; m_value.array-&gt;push_back(val);</div><div class="line"><a name="l04946"></a><span class="lineno"> 4946</span>&#160; }</div><div class="line"><a name="l04947"></a><span class="lineno"> 4947</span>&#160;</div><div class="line"><a name="l04952"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a80c21170db6b5ffd9274b3f351cebadc.html#a80c21170db6b5ffd9274b3f351cebadc"> 4952</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">reference</a> <a class="code" href="classnlohmann_1_1basic__json_a80c21170db6b5ffd9274b3f351cebadc.html#a80c21170db6b5ffd9274b3f351cebadc">operator+=</a>(<span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a>&amp; val)</div><div class="line"><a name="l04953"></a><span class="lineno"> 4953</span>&#160; {</div><div class="line"><a name="l04954"></a><span class="lineno"> 4954</span>&#160; push_back(val);</div><div class="line"><a name="l04955"></a><span class="lineno"> 4955</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l04956"></a><span class="lineno"> 4956</span>&#160; }</div><div class="line"><a name="l04957"></a><span class="lineno"> 4957</span>&#160;</div><div class="line"><a name="l04978"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a5212588544f6d2266384c3be9bfda0c5.html#a5212588544f6d2266384c3be9bfda0c5"> 4978</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classnlohmann_1_1basic__json_a5212588544f6d2266384c3be9bfda0c5.html#a5212588544f6d2266384c3be9bfda0c5">push_back</a>(<span class="keyword">const</span> <span class="keyword">typename</span> object_t::value_type&amp; val)</div><div class="line"><a name="l04979"></a><span class="lineno"> 4979</span>&#160; {</div><div class="line"><a name="l04980"></a><span class="lineno"> 4980</span>&#160; <span class="comment">// push_back only works for null objects or objects</span></div><div class="line"><a name="l04981"></a><span class="lineno"> 4981</span>&#160; <span class="keywordflow">if</span> (not(is_null() or is_object()))</div><div class="line"><a name="l04982"></a><span class="lineno"> 4982</span>&#160; {</div><div class="line"><a name="l04983"></a><span class="lineno"> 4983</span>&#160; <span class="keywordflow">throw</span> std::domain_error(<span class="stringliteral">&quot;cannot use push_back() with &quot;</span> + type_name());</div><div class="line"><a name="l04984"></a><span class="lineno"> 4984</span>&#160; }</div><div class="line"><a name="l04985"></a><span class="lineno"> 4985</span>&#160;</div><div class="line"><a name="l04986"></a><span class="lineno"> 4986</span>&#160; <span class="comment">// transform null object into an object</span></div><div class="line"><a name="l04987"></a><span class="lineno"> 4987</span>&#160; <span class="keywordflow">if</span> (is_null())</div><div class="line"><a name="l04988"></a><span class="lineno"> 4988</span>&#160; {</div><div class="line"><a name="l04989"></a><span class="lineno"> 4989</span>&#160; m_type = value_t::object;</div><div class="line"><a name="l04990"></a><span class="lineno"> 4990</span>&#160; m_value = value_t::object;</div><div class="line"><a name="l04991"></a><span class="lineno"> 4991</span>&#160; assert_invariant();</div><div class="line"><a name="l04992"></a><span class="lineno"> 4992</span>&#160; }</div><div class="line"><a name="l04993"></a><span class="lineno"> 4993</span>&#160;</div><div class="line"><a name="l04994"></a><span class="lineno"> 4994</span>&#160; <span class="comment">// add element to array</span></div><div class="line"><a name="l04995"></a><span class="lineno"> 4995</span>&#160; m_value.object-&gt;insert(val);</div><div class="line"><a name="l04996"></a><span class="lineno"> 4996</span>&#160; }</div><div class="line"><a name="l04997"></a><span class="lineno"> 4997</span>&#160;</div><div class="line"><a name="l05002"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a9486a272e034c0548305d7a12f3045e6.html#a9486a272e034c0548305d7a12f3045e6"> 5002</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">reference</a> <a class="code" href="classnlohmann_1_1basic__json_a9486a272e034c0548305d7a12f3045e6.html#a9486a272e034c0548305d7a12f3045e6">operator+=</a>(<span class="keyword">const</span> <span class="keyword">typename</span> object_t::value_type&amp; val)</div><div class="line"><a name="l05003"></a><span class="lineno"> 5003</span>&#160; {</div><div class="line"><a name="l05004"></a><span class="lineno"> 5004</span>&#160; push_back(val);</div><div class="line"><a name="l05005"></a><span class="lineno"> 5005</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l05006"></a><span class="lineno"> 5006</span>&#160; }</div><div class="line"><a name="l05007"></a><span class="lineno"> 5007</span>&#160;</div><div class="line"><a name="l05033"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a9c9b4932b26a9630e1a3f25ea42a2c43.html#a9c9b4932b26a9630e1a3f25ea42a2c43"> 5033</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classnlohmann_1_1basic__json_a9c9b4932b26a9630e1a3f25ea42a2c43.html#a9c9b4932b26a9630e1a3f25ea42a2c43">push_back</a>(std::initializer_list&lt;basic_json&gt; init)</div><div class="line"><a name="l05034"></a><span class="lineno"> 5034</span>&#160; {</div><div class="line"><a name="l05035"></a><span class="lineno"> 5035</span>&#160; <span class="keywordflow">if</span> (is_object() and init.size() == 2 and init.begin()-&gt;is_string())</div><div class="line"><a name="l05036"></a><span class="lineno"> 5036</span>&#160; {</div><div class="line"><a name="l05037"></a><span class="lineno"> 5037</span>&#160; <span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_ab63e618bbb0371042b1bec17f5891f42.html#ab63e618bbb0371042b1bec17f5891f42">string_t</a> key = *init.begin();</div><div class="line"><a name="l05038"></a><span class="lineno"> 5038</span>&#160; push_back(<span class="keyword">typename</span> object_t::value_type(key, *(init.begin() + 1)));</div><div class="line"><a name="l05039"></a><span class="lineno"> 5039</span>&#160; }</div><div class="line"><a name="l05040"></a><span class="lineno"> 5040</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l05041"></a><span class="lineno"> 5041</span>&#160; {</div><div class="line"><a name="l05042"></a><span class="lineno"> 5042</span>&#160; push_back(<a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a>(init));</div><div class="line"><a name="l05043"></a><span class="lineno"> 5043</span>&#160; }</div><div class="line"><a name="l05044"></a><span class="lineno"> 5044</span>&#160; }</div><div class="line"><a name="l05045"></a><span class="lineno"> 5045</span>&#160;</div><div class="line"><a name="l05050"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_aa0033766b4d3134b9bb57d81762d75a2.html#aa0033766b4d3134b9bb57d81762d75a2"> 5050</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">reference</a> <a class="code" href="classnlohmann_1_1basic__json_aa0033766b4d3134b9bb57d81762d75a2.html#aa0033766b4d3134b9bb57d81762d75a2">operator+=</a>(std::initializer_list&lt;basic_json&gt; init)</div><div class="line"><a name="l05051"></a><span class="lineno"> 5051</span>&#160; {</div><div class="line"><a name="l05052"></a><span class="lineno"> 5052</span>&#160; push_back(init);</div><div class="line"><a name="l05053"></a><span class="lineno"> 5053</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l05054"></a><span class="lineno"> 5054</span>&#160; }</div><div class="line"><a name="l05055"></a><span class="lineno"> 5055</span>&#160;</div><div class="line"><a name="l05078"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a7f7bbb3a9efef2e2442f538a24c1c47b.html#a7f7bbb3a9efef2e2442f538a24c1c47b"> 5078</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1iterator.html">iterator</a> <a class="code" href="classnlohmann_1_1basic__json_a7f7bbb3a9efef2e2442f538a24c1c47b.html#a7f7bbb3a9efef2e2442f538a24c1c47b">insert</a>(<a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator.html">const_iterator</a> pos, <span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a>&amp; val)</div><div class="line"><a name="l05079"></a><span class="lineno"> 5079</span>&#160; {</div><div class="line"><a name="l05080"></a><span class="lineno"> 5080</span>&#160; <span class="comment">// insert only works for arrays</span></div><div class="line"><a name="l05081"></a><span class="lineno"> 5081</span>&#160; <span class="keywordflow">if</span> (is_array())</div><div class="line"><a name="l05082"></a><span class="lineno"> 5082</span>&#160; {</div><div class="line"><a name="l05083"></a><span class="lineno"> 5083</span>&#160; <span class="comment">// check if iterator pos fits to this JSON value</span></div><div class="line"><a name="l05084"></a><span class="lineno"> 5084</span>&#160; <span class="keywordflow">if</span> (pos.m_object != <span class="keyword">this</span>)</div><div class="line"><a name="l05085"></a><span class="lineno"> 5085</span>&#160; {</div><div class="line"><a name="l05086"></a><span class="lineno"> 5086</span>&#160; <span class="keywordflow">throw</span> std::domain_error(<span class="stringliteral">&quot;iterator does not fit current value&quot;</span>);</div><div class="line"><a name="l05087"></a><span class="lineno"> 5087</span>&#160; }</div><div class="line"><a name="l05088"></a><span class="lineno"> 5088</span>&#160;</div><div class="line"><a name="l05089"></a><span class="lineno"> 5089</span>&#160; <span class="comment">// insert to array and return iterator</span></div><div class="line"><a name="l05090"></a><span class="lineno"> 5090</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1iterator.html">iterator</a> result(<span class="keyword">this</span>);</div><div class="line"><a name="l05091"></a><span class="lineno"> 5091</span>&#160; result.m_it.array_iterator = m_value.array-&gt;insert(pos.m_it.array_iterator, val);</div><div class="line"><a name="l05092"></a><span class="lineno"> 5092</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l05093"></a><span class="lineno"> 5093</span>&#160; }</div><div class="line"><a name="l05094"></a><span class="lineno"> 5094</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l05095"></a><span class="lineno"> 5095</span>&#160; {</div><div class="line"><a name="l05096"></a><span class="lineno"> 5096</span>&#160; <span class="keywordflow">throw</span> std::domain_error(<span class="stringliteral">&quot;cannot use insert() with &quot;</span> + type_name());</div><div class="line"><a name="l05097"></a><span class="lineno"> 5097</span>&#160; }</div><div class="line"><a name="l05098"></a><span class="lineno"> 5098</span>&#160; }</div><div class="line"><a name="l05099"></a><span class="lineno"> 5099</span>&#160;</div><div class="line"><a name="l05104"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a8468efcfcd95db15f46887b29924ed5c.html#a8468efcfcd95db15f46887b29924ed5c"> 5104</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1iterator.html">iterator</a> <a class="code" href="classnlohmann_1_1basic__json_a8468efcfcd95db15f46887b29924ed5c.html#a8468efcfcd95db15f46887b29924ed5c">insert</a>(<a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator.html">const_iterator</a> pos, <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a>&amp;&amp; val)</div><div class="line"><a name="l05105"></a><span class="lineno"> 5105</span>&#160; {</div><div class="line"><a name="l05106"></a><span class="lineno"> 5106</span>&#160; <span class="keywordflow">return</span> insert(pos, val);</div><div class="line"><a name="l05107"></a><span class="lineno"> 5107</span>&#160; }</div><div class="line"><a name="l05108"></a><span class="lineno"> 5108</span>&#160;</div><div class="line"><a name="l05133"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a624025acfcf64364d98424402b837bc6.html#a624025acfcf64364d98424402b837bc6"> 5133</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1iterator.html">iterator</a> <a class="code" href="classnlohmann_1_1basic__json_a624025acfcf64364d98424402b837bc6.html#a624025acfcf64364d98424402b837bc6">insert</a>(<a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator.html">const_iterator</a> pos, <a class="code" href="classnlohmann_1_1basic__json_a1579a8f72a230358d6cd1a6e8a62859b.html#a1579a8f72a230358d6cd1a6e8a62859b">size_type</a> cnt, <span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a>&amp; val)</div><div class="line"><a name="l05134"></a><span class="lineno"> 5134</span>&#160; {</div><div class="line"><a name="l05135"></a><span class="lineno"> 5135</span>&#160; <span class="comment">// insert only works for arrays</span></div><div class="line"><a name="l05136"></a><span class="lineno"> 5136</span>&#160; <span class="keywordflow">if</span> (is_array())</div><div class="line"><a name="l05137"></a><span class="lineno"> 5137</span>&#160; {</div><div class="line"><a name="l05138"></a><span class="lineno"> 5138</span>&#160; <span class="comment">// check if iterator pos fits to this JSON value</span></div><div class="line"><a name="l05139"></a><span class="lineno"> 5139</span>&#160; <span class="keywordflow">if</span> (pos.m_object != <span class="keyword">this</span>)</div><div class="line"><a name="l05140"></a><span class="lineno"> 5140</span>&#160; {</div><div class="line"><a name="l05141"></a><span class="lineno"> 5141</span>&#160; <span class="keywordflow">throw</span> std::domain_error(<span class="stringliteral">&quot;iterator does not fit current value&quot;</span>);</div><div class="line"><a name="l05142"></a><span class="lineno"> 5142</span>&#160; }</div><div class="line"><a name="l05143"></a><span class="lineno"> 5143</span>&#160;</div><div class="line"><a name="l05144"></a><span class="lineno"> 5144</span>&#160; <span class="comment">// insert to array and return iterator</span></div><div class="line"><a name="l05145"></a><span class="lineno"> 5145</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1iterator.html">iterator</a> result(<span class="keyword">this</span>);</div><div class="line"><a name="l05146"></a><span class="lineno"> 5146</span>&#160; result.m_it.array_iterator = m_value.array-&gt;insert(pos.m_it.array_iterator, cnt, val);</div><div class="line"><a name="l05147"></a><span class="lineno"> 5147</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l05148"></a><span class="lineno"> 5148</span>&#160; }</div><div class="line"><a name="l05149"></a><span class="lineno"> 5149</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l05150"></a><span class="lineno"> 5150</span>&#160; {</div><div class="line"><a name="l05151"></a><span class="lineno"> 5151</span>&#160; <span class="keywordflow">throw</span> std::domain_error(<span class="stringliteral">&quot;cannot use insert() with &quot;</span> + type_name());</div><div class="line"><a name="l05152"></a><span class="lineno"> 5152</span>&#160; }</div><div class="line"><a name="l05153"></a><span class="lineno"> 5153</span>&#160; }</div><div class="line"><a name="l05154"></a><span class="lineno"> 5154</span>&#160;</div><div class="line"><a name="l05185"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_aeaa0644fd6b99af364e772092268dfd6.html#aeaa0644fd6b99af364e772092268dfd6"> 5185</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1iterator.html">iterator</a> <a class="code" href="classnlohmann_1_1basic__json_aeaa0644fd6b99af364e772092268dfd6.html#aeaa0644fd6b99af364e772092268dfd6">insert</a>(<a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator.html">const_iterator</a> pos, <a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator.html">const_iterator</a> first, <a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator.html">const_iterator</a> last)</div><div class="line"><a name="l05186"></a><span class="lineno"> 5186</span>&#160; {</div><div class="line"><a name="l05187"></a><span class="lineno"> 5187</span>&#160; <span class="comment">// insert only works for arrays</span></div><div class="line"><a name="l05188"></a><span class="lineno"> 5188</span>&#160; <span class="keywordflow">if</span> (not is_array())</div><div class="line"><a name="l05189"></a><span class="lineno"> 5189</span>&#160; {</div><div class="line"><a name="l05190"></a><span class="lineno"> 5190</span>&#160; <span class="keywordflow">throw</span> std::domain_error(<span class="stringliteral">&quot;cannot use insert() with &quot;</span> + type_name());</div><div class="line"><a name="l05191"></a><span class="lineno"> 5191</span>&#160; }</div><div class="line"><a name="l05192"></a><span class="lineno"> 5192</span>&#160;</div><div class="line"><a name="l05193"></a><span class="lineno"> 5193</span>&#160; <span class="comment">// check if iterator pos fits to this JSON value</span></div><div class="line"><a name="l05194"></a><span class="lineno"> 5194</span>&#160; <span class="keywordflow">if</span> (pos.m_object != <span class="keyword">this</span>)</div><div class="line"><a name="l05195"></a><span class="lineno"> 5195</span>&#160; {</div><div class="line"><a name="l05196"></a><span class="lineno"> 5196</span>&#160; <span class="keywordflow">throw</span> std::domain_error(<span class="stringliteral">&quot;iterator does not fit current value&quot;</span>);</div><div class="line"><a name="l05197"></a><span class="lineno"> 5197</span>&#160; }</div><div class="line"><a name="l05198"></a><span class="lineno"> 5198</span>&#160;</div><div class="line"><a name="l05199"></a><span class="lineno"> 5199</span>&#160; <span class="comment">// check if range iterators belong to the same JSON object</span></div><div class="line"><a name="l05200"></a><span class="lineno"> 5200</span>&#160; <span class="keywordflow">if</span> (first.m_object != last.m_object)</div><div class="line"><a name="l05201"></a><span class="lineno"> 5201</span>&#160; {</div><div class="line"><a name="l05202"></a><span class="lineno"> 5202</span>&#160; <span class="keywordflow">throw</span> std::domain_error(<span class="stringliteral">&quot;iterators do not fit&quot;</span>);</div><div class="line"><a name="l05203"></a><span class="lineno"> 5203</span>&#160; }</div><div class="line"><a name="l05204"></a><span class="lineno"> 5204</span>&#160;</div><div class="line"><a name="l05205"></a><span class="lineno"> 5205</span>&#160; <span class="keywordflow">if</span> (first.m_object == <span class="keyword">this</span> or last.m_object == <span class="keyword">this</span>)</div><div class="line"><a name="l05206"></a><span class="lineno"> 5206</span>&#160; {</div><div class="line"><a name="l05207"></a><span class="lineno"> 5207</span>&#160; <span class="keywordflow">throw</span> std::domain_error(<span class="stringliteral">&quot;passed iterators may not belong to container&quot;</span>);</div><div class="line"><a name="l05208"></a><span class="lineno"> 5208</span>&#160; }</div><div class="line"><a name="l05209"></a><span class="lineno"> 5209</span>&#160;</div><div class="line"><a name="l05210"></a><span class="lineno"> 5210</span>&#160; <span class="comment">// insert to array and return iterator</span></div><div class="line"><a name="l05211"></a><span class="lineno"> 5211</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1iterator.html">iterator</a> result(<span class="keyword">this</span>);</div><div class="line"><a name="l05212"></a><span class="lineno"> 5212</span>&#160; result.m_it.array_iterator = m_value.array-&gt;insert(</div><div class="line"><a name="l05213"></a><span class="lineno"> 5213</span>&#160; pos.m_it.array_iterator,</div><div class="line"><a name="l05214"></a><span class="lineno"> 5214</span>&#160; first.m_it.array_iterator,</div><div class="line"><a name="l05215"></a><span class="lineno"> 5215</span>&#160; last.m_it.array_iterator);</div><div class="line"><a name="l05216"></a><span class="lineno"> 5216</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l05217"></a><span class="lineno"> 5217</span>&#160; }</div><div class="line"><a name="l05218"></a><span class="lineno"> 5218</span>&#160;</div><div class="line"><a name="l05243"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_aadb4e5be88221e5e28cdb752332f3d13.html#aadb4e5be88221e5e28cdb752332f3d13"> 5243</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1iterator.html">iterator</a> <a class="code" href="classnlohmann_1_1basic__json_aadb4e5be88221e5e28cdb752332f3d13.html#aadb4e5be88221e5e28cdb752332f3d13">insert</a>(<a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator.html">const_iterator</a> pos, std::initializer_list&lt;basic_json&gt; ilist)</div><div class="line"><a name="l05244"></a><span class="lineno"> 5244</span>&#160; {</div><div class="line"><a name="l05245"></a><span class="lineno"> 5245</span>&#160; <span class="comment">// insert only works for arrays</span></div><div class="line"><a name="l05246"></a><span class="lineno"> 5246</span>&#160; <span class="keywordflow">if</span> (not is_array())</div><div class="line"><a name="l05247"></a><span class="lineno"> 5247</span>&#160; {</div><div class="line"><a name="l05248"></a><span class="lineno"> 5248</span>&#160; <span class="keywordflow">throw</span> std::domain_error(<span class="stringliteral">&quot;cannot use insert() with &quot;</span> + type_name());</div><div class="line"><a name="l05249"></a><span class="lineno"> 5249</span>&#160; }</div><div class="line"><a name="l05250"></a><span class="lineno"> 5250</span>&#160;</div><div class="line"><a name="l05251"></a><span class="lineno"> 5251</span>&#160; <span class="comment">// check if iterator pos fits to this JSON value</span></div><div class="line"><a name="l05252"></a><span class="lineno"> 5252</span>&#160; <span class="keywordflow">if</span> (pos.m_object != <span class="keyword">this</span>)</div><div class="line"><a name="l05253"></a><span class="lineno"> 5253</span>&#160; {</div><div class="line"><a name="l05254"></a><span class="lineno"> 5254</span>&#160; <span class="keywordflow">throw</span> std::domain_error(<span class="stringliteral">&quot;iterator does not fit current value&quot;</span>);</div><div class="line"><a name="l05255"></a><span class="lineno"> 5255</span>&#160; }</div><div class="line"><a name="l05256"></a><span class="lineno"> 5256</span>&#160;</div><div class="line"><a name="l05257"></a><span class="lineno"> 5257</span>&#160; <span class="comment">// insert to array and return iterator</span></div><div class="line"><a name="l05258"></a><span class="lineno"> 5258</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1iterator.html">iterator</a> result(<span class="keyword">this</span>);</div><div class="line"><a name="l05259"></a><span class="lineno"> 5259</span>&#160; result.m_it.array_iterator = m_value.array-&gt;insert(pos.m_it.array_iterator, ilist);</div><div class="line"><a name="l05260"></a><span class="lineno"> 5260</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l05261"></a><span class="lineno"> 5261</span>&#160; }</div><div class="line"><a name="l05262"></a><span class="lineno"> 5262</span>&#160;</div><div class="line"><a name="l05280"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a2f774129440c427253dc97406e2d9010.html#a2f774129440c427253dc97406e2d9010"> 5280</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classnlohmann_1_1basic__json_a2f774129440c427253dc97406e2d9010.html#a2f774129440c427253dc97406e2d9010">swap</a>(<a class="code" href="classnlohmann_1_1basic__json.html">reference</a> other) noexcept (</div><div class="line"><a name="l05281"></a><span class="lineno"> 5281</span>&#160; std::is_nothrow_move_constructible&lt;value_t&gt;::value and</div><div class="line"><a name="l05282"></a><span class="lineno"> 5282</span>&#160; std::is_nothrow_move_assignable&lt;value_t&gt;::value and</div><div class="line"><a name="l05283"></a><span class="lineno"> 5283</span>&#160; std::is_nothrow_move_constructible&lt;json_value&gt;::value and</div><div class="line"><a name="l05284"></a><span class="lineno"> 5284</span>&#160; std::is_nothrow_move_assignable&lt;json_value&gt;::value</div><div class="line"><a name="l05285"></a><span class="lineno"> 5285</span>&#160; )</div><div class="line"><a name="l05286"></a><span class="lineno"> 5286</span>&#160; {</div><div class="line"><a name="l05287"></a><span class="lineno"> 5287</span>&#160; std::swap(m_type, other.m_type);</div><div class="line"><a name="l05288"></a><span class="lineno"> 5288</span>&#160; std::swap(m_value, other.m_value);</div><div class="line"><a name="l05289"></a><span class="lineno"> 5289</span>&#160; assert_invariant();</div><div class="line"><a name="l05290"></a><span class="lineno"> 5290</span>&#160; }</div><div class="line"><a name="l05291"></a><span class="lineno"> 5291</span>&#160;</div><div class="line"><a name="l05312"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a8209621de6184d9eabe136b7c8f61935.html#a8209621de6184d9eabe136b7c8f61935"> 5312</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classnlohmann_1_1basic__json_a8209621de6184d9eabe136b7c8f61935.html#a8209621de6184d9eabe136b7c8f61935">swap</a>(<a class="code" href="classnlohmann_1_1basic__json_ab00b882d39306d663c23dab110f5cae0.html#ab00b882d39306d663c23dab110f5cae0">array_t</a>&amp; other)</div><div class="line"><a name="l05313"></a><span class="lineno"> 5313</span>&#160; {</div><div class="line"><a name="l05314"></a><span class="lineno"> 5314</span>&#160; <span class="comment">// swap only works for arrays</span></div><div class="line"><a name="l05315"></a><span class="lineno"> 5315</span>&#160; <span class="keywordflow">if</span> (is_array())</div><div class="line"><a name="l05316"></a><span class="lineno"> 5316</span>&#160; {</div><div class="line"><a name="l05317"></a><span class="lineno"> 5317</span>&#160; std::swap(*(m_value.array), other);</div><div class="line"><a name="l05318"></a><span class="lineno"> 5318</span>&#160; }</div><div class="line"><a name="l05319"></a><span class="lineno"> 5319</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l05320"></a><span class="lineno"> 5320</span>&#160; {</div><div class="line"><a name="l05321"></a><span class="lineno"> 5321</span>&#160; <span class="keywordflow">throw</span> std::domain_error(<span class="stringliteral">&quot;cannot use swap() with &quot;</span> + type_name());</div><div class="line"><a name="l05322"></a><span class="lineno"> 5322</span>&#160; }</div><div class="line"><a name="l05323"></a><span class="lineno"> 5323</span>&#160; }</div><div class="line"><a name="l05324"></a><span class="lineno"> 5324</span>&#160;</div><div class="line"><a name="l05345"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a38ee0f09a318d003add75e0787040794.html#a38ee0f09a318d003add75e0787040794"> 5345</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classnlohmann_1_1basic__json_a38ee0f09a318d003add75e0787040794.html#a38ee0f09a318d003add75e0787040794">swap</a>(<a class="code" href="classnlohmann_1_1basic__json_a0ac9894c9de8dc551cf2e5f1c605537f.html#a0ac9894c9de8dc551cf2e5f1c605537f">object_t</a>&amp; other)</div><div class="line"><a name="l05346"></a><span class="lineno"> 5346</span>&#160; {</div><div class="line"><a name="l05347"></a><span class="lineno"> 5347</span>&#160; <span class="comment">// swap only works for objects</span></div><div class="line"><a name="l05348"></a><span class="lineno"> 5348</span>&#160; <span class="keywordflow">if</span> (is_object())</div><div class="line"><a name="l05349"></a><span class="lineno"> 5349</span>&#160; {</div><div class="line"><a name="l05350"></a><span class="lineno"> 5350</span>&#160; std::swap(*(m_value.object), other);</div><div class="line"><a name="l05351"></a><span class="lineno"> 5351</span>&#160; }</div><div class="line"><a name="l05352"></a><span class="lineno"> 5352</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l05353"></a><span class="lineno"> 5353</span>&#160; {</div><div class="line"><a name="l05354"></a><span class="lineno"> 5354</span>&#160; <span class="keywordflow">throw</span> std::domain_error(<span class="stringliteral">&quot;cannot use swap() with &quot;</span> + type_name());</div><div class="line"><a name="l05355"></a><span class="lineno"> 5355</span>&#160; }</div><div class="line"><a name="l05356"></a><span class="lineno"> 5356</span>&#160; }</div><div class="line"><a name="l05357"></a><span class="lineno"> 5357</span>&#160;</div><div class="line"><a name="l05378"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a86089c703a2e563b9f760c2f8408efa7.html#a86089c703a2e563b9f760c2f8408efa7"> 5378</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classnlohmann_1_1basic__json_a86089c703a2e563b9f760c2f8408efa7.html#a86089c703a2e563b9f760c2f8408efa7">swap</a>(<a class="code" href="classnlohmann_1_1basic__json_ab63e618bbb0371042b1bec17f5891f42.html#ab63e618bbb0371042b1bec17f5891f42">string_t</a>&amp; other)</div><div class="line"><a name="l05379"></a><span class="lineno"> 5379</span>&#160; {</div><div class="line"><a name="l05380"></a><span class="lineno"> 5380</span>&#160; <span class="comment">// swap only works for strings</span></div><div class="line"><a name="l05381"></a><span class="lineno"> 5381</span>&#160; <span class="keywordflow">if</span> (is_string())</div><div class="line"><a name="l05382"></a><span class="lineno"> 5382</span>&#160; {</div><div class="line"><a name="l05383"></a><span class="lineno"> 5383</span>&#160; std::swap(*(m_value.string), other);</div><div class="line"><a name="l05384"></a><span class="lineno"> 5384</span>&#160; }</div><div class="line"><a name="l05385"></a><span class="lineno"> 5385</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l05386"></a><span class="lineno"> 5386</span>&#160; {</div><div class="line"><a name="l05387"></a><span class="lineno"> 5387</span>&#160; <span class="keywordflow">throw</span> std::domain_error(<span class="stringliteral">&quot;cannot use swap() with &quot;</span> + type_name());</div><div class="line"><a name="l05388"></a><span class="lineno"> 5388</span>&#160; }</div><div class="line"><a name="l05389"></a><span class="lineno"> 5389</span>&#160; }</div><div class="line"><a name="l05390"></a><span class="lineno"> 5390</span>&#160;</div><div class="line"><a name="l05392"></a><span class="lineno"> 5392</span>&#160;</div><div class="line"><a name="l05393"></a><span class="lineno"> 5393</span>&#160;</div><div class="line"><a name="l05395"></a><span class="lineno"> 5395</span>&#160; <span class="comment">// lexicographical comparison operators //</span></div><div class="line"><a name="l05397"></a><span class="lineno"> 5397</span>&#160;<span class="comment"></span></div><div class="line"><a name="l05400"></a><span class="lineno"> 5400</span>&#160;</div><div class="line"><a name="l05401"></a><span class="lineno"> 5401</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l05411"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a24d7df0b5b41319dbab2713d3641faf7.html#a24d7df0b5b41319dbab2713d3641faf7"> 5411</a></span>&#160; <span class="keyword">friend</span> <span class="keywordtype">bool</span> <a class="code" href="classnlohmann_1_1basic__json_a24d7df0b5b41319dbab2713d3641faf7.html#a24d7df0b5b41319dbab2713d3641faf7">operator&lt;</a>(<span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_a231b02148577b69a154b2ce2c87a5522.html#a231b02148577b69a154b2ce2c87a5522">value_t</a> lhs, <span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_a231b02148577b69a154b2ce2c87a5522.html#a231b02148577b69a154b2ce2c87a5522">value_t</a> rhs) noexcept</div><div class="line"><a name="l05412"></a><span class="lineno"> 5412</span>&#160; {</div><div class="line"><a name="l05413"></a><span class="lineno"> 5413</span>&#160; <span class="keyword">static</span> constexpr std::array&lt;uint8_t, 8&gt; order = {{</div><div class="line"><a name="l05414"></a><span class="lineno"> 5414</span>&#160; 0, <span class="comment">// null</span></div><div class="line"><a name="l05415"></a><span class="lineno"> 5415</span>&#160; 3, <span class="comment">// object</span></div><div class="line"><a name="l05416"></a><span class="lineno"> 5416</span>&#160; 4, <span class="comment">// array</span></div><div class="line"><a name="l05417"></a><span class="lineno"> 5417</span>&#160; 5, <span class="comment">// string</span></div><div class="line"><a name="l05418"></a><span class="lineno"> 5418</span>&#160; 1, <span class="comment">// boolean</span></div><div class="line"><a name="l05419"></a><span class="lineno"> 5419</span>&#160; 2, <span class="comment">// integer</span></div><div class="line"><a name="l05420"></a><span class="lineno"> 5420</span>&#160; 2, <span class="comment">// unsigned</span></div><div class="line"><a name="l05421"></a><span class="lineno"> 5421</span>&#160; 2, <span class="comment">// float</span></div><div class="line"><a name="l05422"></a><span class="lineno"> 5422</span>&#160; }</div><div class="line"><a name="l05423"></a><span class="lineno"> 5423</span>&#160; };</div><div class="line"><a name="l05424"></a><span class="lineno"> 5424</span>&#160;</div><div class="line"><a name="l05425"></a><span class="lineno"> 5425</span>&#160; <span class="comment">// discarded values are not comparable</span></div><div class="line"><a name="l05426"></a><span class="lineno"> 5426</span>&#160; <span class="keywordflow">if</span> (lhs == value_t::discarded or rhs == value_t::discarded)</div><div class="line"><a name="l05427"></a><span class="lineno"> 5427</span>&#160; {</div><div class="line"><a name="l05428"></a><span class="lineno"> 5428</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l05429"></a><span class="lineno"> 5429</span>&#160; }</div><div class="line"><a name="l05430"></a><span class="lineno"> 5430</span>&#160;</div><div class="line"><a name="l05431"></a><span class="lineno"> 5431</span>&#160; <span class="keywordflow">return</span> order[<span class="keyword">static_cast&lt;</span>std::size_t<span class="keyword">&gt;</span>(lhs)] &lt; order[static_cast&lt;std::size_t&gt;(rhs)];</div><div class="line"><a name="l05432"></a><span class="lineno"> 5432</span>&#160; }</div><div class="line"><a name="l05433"></a><span class="lineno"> 5433</span>&#160;</div><div class="line"><a name="l05434"></a><span class="lineno"> 5434</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l05458"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a122640e7e2db1814fc7bbb3c122ec76e.html#a122640e7e2db1814fc7bbb3c122ec76e"> 5458</a></span>&#160; <span class="keyword">friend</span> <span class="keywordtype">bool</span> <a class="code" href="classnlohmann_1_1basic__json_a122640e7e2db1814fc7bbb3c122ec76e.html#a122640e7e2db1814fc7bbb3c122ec76e">operator==</a>(<a class="code" href="classnlohmann_1_1basic__json.html">const_reference</a> lhs, <a class="code" href="classnlohmann_1_1basic__json.html">const_reference</a> rhs) noexcept</div><div class="line"><a name="l05459"></a><span class="lineno"> 5459</span>&#160; {</div><div class="line"><a name="l05460"></a><span class="lineno"> 5460</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> lhs_type = lhs.type();</div><div class="line"><a name="l05461"></a><span class="lineno"> 5461</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> rhs_type = rhs.type();</div><div class="line"><a name="l05462"></a><span class="lineno"> 5462</span>&#160;</div><div class="line"><a name="l05463"></a><span class="lineno"> 5463</span>&#160; <span class="keywordflow">if</span> (lhs_type == rhs_type)</div><div class="line"><a name="l05464"></a><span class="lineno"> 5464</span>&#160; {</div><div class="line"><a name="l05465"></a><span class="lineno"> 5465</span>&#160; <span class="keywordflow">switch</span> (lhs_type)</div><div class="line"><a name="l05466"></a><span class="lineno"> 5466</span>&#160; {</div><div class="line"><a name="l05467"></a><span class="lineno"> 5467</span>&#160; <span class="keywordflow">case</span> value_t::array:</div><div class="line"><a name="l05468"></a><span class="lineno"> 5468</span>&#160; {</div><div class="line"><a name="l05469"></a><span class="lineno"> 5469</span>&#160; <span class="keywordflow">return</span> *lhs.m_value.array == *rhs.m_value.array;</div><div class="line"><a name="l05470"></a><span class="lineno"> 5470</span>&#160; }</div><div class="line"><a name="l05471"></a><span class="lineno"> 5471</span>&#160; <span class="keywordflow">case</span> value_t::object:</div><div class="line"><a name="l05472"></a><span class="lineno"> 5472</span>&#160; {</div><div class="line"><a name="l05473"></a><span class="lineno"> 5473</span>&#160; <span class="keywordflow">return</span> *lhs.m_value.object == *rhs.m_value.object;</div><div class="line"><a name="l05474"></a><span class="lineno"> 5474</span>&#160; }</div><div class="line"><a name="l05475"></a><span class="lineno"> 5475</span>&#160; <span class="keywordflow">case</span> value_t::null:</div><div class="line"><a name="l05476"></a><span class="lineno"> 5476</span>&#160; {</div><div class="line"><a name="l05477"></a><span class="lineno"> 5477</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l05478"></a><span class="lineno"> 5478</span>&#160; }</div><div class="line"><a name="l05479"></a><span class="lineno"> 5479</span>&#160; <span class="keywordflow">case</span> value_t::string:</div><div class="line"><a name="l05480"></a><span class="lineno"> 5480</span>&#160; {</div><div class="line"><a name="l05481"></a><span class="lineno"> 5481</span>&#160; <span class="keywordflow">return</span> *lhs.m_value.string == *rhs.m_value.string;</div><div class="line"><a name="l05482"></a><span class="lineno"> 5482</span>&#160; }</div><div class="line"><a name="l05483"></a><span class="lineno"> 5483</span>&#160; <span class="keywordflow">case</span> value_t::boolean:</div><div class="line"><a name="l05484"></a><span class="lineno"> 5484</span>&#160; {</div><div class="line"><a name="l05485"></a><span class="lineno"> 5485</span>&#160; <span class="keywordflow">return</span> lhs.m_value.boolean == rhs.m_value.boolean;</div><div class="line"><a name="l05486"></a><span class="lineno"> 5486</span>&#160; }</div><div class="line"><a name="l05487"></a><span class="lineno"> 5487</span>&#160; <span class="keywordflow">case</span> value_t::number_integer:</div><div class="line"><a name="l05488"></a><span class="lineno"> 5488</span>&#160; {</div><div class="line"><a name="l05489"></a><span class="lineno"> 5489</span>&#160; <span class="keywordflow">return</span> lhs.m_value.number_integer == rhs.m_value.number_integer;</div><div class="line"><a name="l05490"></a><span class="lineno"> 5490</span>&#160; }</div><div class="line"><a name="l05491"></a><span class="lineno"> 5491</span>&#160; <span class="keywordflow">case</span> value_t::number_unsigned:</div><div class="line"><a name="l05492"></a><span class="lineno"> 5492</span>&#160; {</div><div class="line"><a name="l05493"></a><span class="lineno"> 5493</span>&#160; <span class="keywordflow">return</span> lhs.m_value.number_unsigned == rhs.m_value.number_unsigned;</div><div class="line"><a name="l05494"></a><span class="lineno"> 5494</span>&#160; }</div><div class="line"><a name="l05495"></a><span class="lineno"> 5495</span>&#160; <span class="keywordflow">case</span> value_t::number_float:</div><div class="line"><a name="l05496"></a><span class="lineno"> 5496</span>&#160; {</div><div class="line"><a name="l05497"></a><span class="lineno"> 5497</span>&#160; <span class="keywordflow">return</span> lhs.m_value.number_float == rhs.m_value.number_float;</div><div class="line"><a name="l05498"></a><span class="lineno"> 5498</span>&#160; }</div><div class="line"><a name="l05499"></a><span class="lineno"> 5499</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l05500"></a><span class="lineno"> 5500</span>&#160; {</div><div class="line"><a name="l05501"></a><span class="lineno"> 5501</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l05502"></a><span class="lineno"> 5502</span>&#160; }</div><div class="line"><a name="l05503"></a><span class="lineno"> 5503</span>&#160; }</div><div class="line"><a name="l05504"></a><span class="lineno"> 5504</span>&#160; }</div><div class="line"><a name="l05505"></a><span class="lineno"> 5505</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lhs_type == value_t::number_integer and rhs_type == value_t::number_float)</div><div class="line"><a name="l05506"></a><span class="lineno"> 5506</span>&#160; {</div><div class="line"><a name="l05507"></a><span class="lineno"> 5507</span>&#160; <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span><a class="code" href="classnlohmann_1_1basic__json_a74a0013e847fdc574b48f931f0e757e1.html#a74a0013e847fdc574b48f931f0e757e1">number_float_t</a><span class="keyword">&gt;</span>(lhs.m_value.number_integer) == rhs.m_value.number_float;</div><div class="line"><a name="l05508"></a><span class="lineno"> 5508</span>&#160; }</div><div class="line"><a name="l05509"></a><span class="lineno"> 5509</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lhs_type == value_t::number_float and rhs_type == value_t::number_integer)</div><div class="line"><a name="l05510"></a><span class="lineno"> 5510</span>&#160; {</div><div class="line"><a name="l05511"></a><span class="lineno"> 5511</span>&#160; <span class="keywordflow">return</span> lhs.m_value.number_float == <span class="keyword">static_cast&lt;</span><a class="code" href="classnlohmann_1_1basic__json_a74a0013e847fdc574b48f931f0e757e1.html#a74a0013e847fdc574b48f931f0e757e1">number_float_t</a><span class="keyword">&gt;</span>(rhs.m_value.number_integer);</div><div class="line"><a name="l05512"></a><span class="lineno"> 5512</span>&#160; }</div><div class="line"><a name="l05513"></a><span class="lineno"> 5513</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lhs_type == value_t::number_unsigned and rhs_type == value_t::number_float)</div><div class="line"><a name="l05514"></a><span class="lineno"> 5514</span>&#160; {</div><div class="line"><a name="l05515"></a><span class="lineno"> 5515</span>&#160; <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span><a class="code" href="classnlohmann_1_1basic__json_a74a0013e847fdc574b48f931f0e757e1.html#a74a0013e847fdc574b48f931f0e757e1">number_float_t</a><span class="keyword">&gt;</span>(lhs.m_value.number_unsigned) == rhs.m_value.number_float;</div><div class="line"><a name="l05516"></a><span class="lineno"> 5516</span>&#160; }</div><div class="line"><a name="l05517"></a><span class="lineno"> 5517</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lhs_type == value_t::number_float and rhs_type == value_t::number_unsigned)</div><div class="line"><a name="l05518"></a><span class="lineno"> 5518</span>&#160; {</div><div class="line"><a name="l05519"></a><span class="lineno"> 5519</span>&#160; <span class="keywordflow">return</span> lhs.m_value.number_float == <span class="keyword">static_cast&lt;</span><a class="code" href="classnlohmann_1_1basic__json_a74a0013e847fdc574b48f931f0e757e1.html#a74a0013e847fdc574b48f931f0e757e1">number_float_t</a><span class="keyword">&gt;</span>(rhs.m_value.number_unsigned);</div><div class="line"><a name="l05520"></a><span class="lineno"> 5520</span>&#160; }</div><div class="line"><a name="l05521"></a><span class="lineno"> 5521</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lhs_type == value_t::number_unsigned and rhs_type == value_t::number_integer)</div><div class="line"><a name="l05522"></a><span class="lineno"> 5522</span>&#160; {</div><div class="line"><a name="l05523"></a><span class="lineno"> 5523</span>&#160; <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span><a class="code" href="classnlohmann_1_1basic__json_ac4b10b2364f26ce47bdb9a413ff04a59.html#ac4b10b2364f26ce47bdb9a413ff04a59">number_integer_t</a><span class="keyword">&gt;</span>(lhs.m_value.number_unsigned) == rhs.m_value.number_integer;</div><div class="line"><a name="l05524"></a><span class="lineno"> 5524</span>&#160; }</div><div class="line"><a name="l05525"></a><span class="lineno"> 5525</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lhs_type == value_t::number_integer and rhs_type == value_t::number_unsigned)</div><div class="line"><a name="l05526"></a><span class="lineno"> 5526</span>&#160; {</div><div class="line"><a name="l05527"></a><span class="lineno"> 5527</span>&#160; <span class="keywordflow">return</span> lhs.m_value.number_integer == <span class="keyword">static_cast&lt;</span><a class="code" href="classnlohmann_1_1basic__json_ac4b10b2364f26ce47bdb9a413ff04a59.html#ac4b10b2364f26ce47bdb9a413ff04a59">number_integer_t</a><span class="keyword">&gt;</span>(rhs.m_value.number_unsigned);</div><div class="line"><a name="l05528"></a><span class="lineno"> 5528</span>&#160; }</div><div class="line"><a name="l05529"></a><span class="lineno"> 5529</span>&#160;</div><div class="line"><a name="l05530"></a><span class="lineno"> 5530</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l05531"></a><span class="lineno"> 5531</span>&#160; }</div><div class="line"><a name="l05532"></a><span class="lineno"> 5532</span>&#160;</div><div class="line"><a name="l05551"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a9730b9f7bc2150e641fe20198d4477c7.html#a9730b9f7bc2150e641fe20198d4477c7"> 5551</a></span>&#160; <span class="keyword">friend</span> <span class="keywordtype">bool</span> <a class="code" href="classnlohmann_1_1basic__json_a9730b9f7bc2150e641fe20198d4477c7.html#a9730b9f7bc2150e641fe20198d4477c7">operator==</a>(<a class="code" href="classnlohmann_1_1basic__json.html">const_reference</a> v, std::nullptr_t) noexcept</div><div class="line"><a name="l05552"></a><span class="lineno"> 5552</span>&#160; {</div><div class="line"><a name="l05553"></a><span class="lineno"> 5553</span>&#160; <span class="keywordflow">return</span> v.<a class="code" href="classnlohmann_1_1basic__json_a8abdfc0d6e051f6fa29d49da57bce631.html#a8abdfc0d6e051f6fa29d49da57bce631">is_null</a>();</div><div class="line"><a name="l05554"></a><span class="lineno"> 5554</span>&#160; }</div><div class="line"><a name="l05555"></a><span class="lineno"> 5555</span>&#160;</div><div class="line"><a name="l05560"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a98e05a2c9b8f74bd60442772cddeee52.html#a98e05a2c9b8f74bd60442772cddeee52"> 5560</a></span>&#160; <span class="keyword">friend</span> <span class="keywordtype">bool</span> <a class="code" href="classnlohmann_1_1basic__json_a98e05a2c9b8f74bd60442772cddeee52.html#a98e05a2c9b8f74bd60442772cddeee52">operator==</a>(std::nullptr_t, <a class="code" href="classnlohmann_1_1basic__json.html">const_reference</a> v) noexcept</div><div class="line"><a name="l05561"></a><span class="lineno"> 5561</span>&#160; {</div><div class="line"><a name="l05562"></a><span class="lineno"> 5562</span>&#160; <span class="keywordflow">return</span> v.is_null();</div><div class="line"><a name="l05563"></a><span class="lineno"> 5563</span>&#160; }</div><div class="line"><a name="l05564"></a><span class="lineno"> 5564</span>&#160;</div><div class="line"><a name="l05581"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a6e2e21da48f5d9471716cd868a068327.html#a6e2e21da48f5d9471716cd868a068327"> 5581</a></span>&#160; <span class="keyword">friend</span> <span class="keywordtype">bool</span> <a class="code" href="classnlohmann_1_1basic__json_a6e2e21da48f5d9471716cd868a068327.html#a6e2e21da48f5d9471716cd868a068327">operator!=</a>(<a class="code" href="classnlohmann_1_1basic__json.html">const_reference</a> lhs, <a class="code" href="classnlohmann_1_1basic__json.html">const_reference</a> rhs) noexcept</div><div class="line"><a name="l05582"></a><span class="lineno"> 5582</span>&#160; {</div><div class="line"><a name="l05583"></a><span class="lineno"> 5583</span>&#160; <span class="keywordflow">return</span> not (lhs == rhs);</div><div class="line"><a name="l05584"></a><span class="lineno"> 5584</span>&#160; }</div><div class="line"><a name="l05585"></a><span class="lineno"> 5585</span>&#160;</div><div class="line"><a name="l05604"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_ae347859ec88176ef76a0cbe5b4514fcf.html#ae347859ec88176ef76a0cbe5b4514fcf"> 5604</a></span>&#160; <span class="keyword">friend</span> <span class="keywordtype">bool</span> <a class="code" href="classnlohmann_1_1basic__json_ae347859ec88176ef76a0cbe5b4514fcf.html#ae347859ec88176ef76a0cbe5b4514fcf">operator!=</a>(<a class="code" href="classnlohmann_1_1basic__json.html">const_reference</a> v, std::nullptr_t) noexcept</div><div class="line"><a name="l05605"></a><span class="lineno"> 5605</span>&#160; {</div><div class="line"><a name="l05606"></a><span class="lineno"> 5606</span>&#160; <span class="keywordflow">return</span> not v.<a class="code" href="classnlohmann_1_1basic__json_a8abdfc0d6e051f6fa29d49da57bce631.html#a8abdfc0d6e051f6fa29d49da57bce631">is_null</a>();</div><div class="line"><a name="l05607"></a><span class="lineno"> 5607</span>&#160; }</div><div class="line"><a name="l05608"></a><span class="lineno"> 5608</span>&#160;</div><div class="line"><a name="l05613"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a7f97a91ad8f1d5cf0b9213bd24f247c4.html#a7f97a91ad8f1d5cf0b9213bd24f247c4"> 5613</a></span>&#160; <span class="keyword">friend</span> <span class="keywordtype">bool</span> <a class="code" href="classnlohmann_1_1basic__json_a7f97a91ad8f1d5cf0b9213bd24f247c4.html#a7f97a91ad8f1d5cf0b9213bd24f247c4">operator!=</a>(std::nullptr_t, <a class="code" href="classnlohmann_1_1basic__json.html">const_reference</a> v) noexcept</div><div class="line"><a name="l05614"></a><span class="lineno"> 5614</span>&#160; {</div><div class="line"><a name="l05615"></a><span class="lineno"> 5615</span>&#160; <span class="keywordflow">return</span> not v.is_null();</div><div class="line"><a name="l05616"></a><span class="lineno"> 5616</span>&#160; }</div><div class="line"><a name="l05617"></a><span class="lineno"> 5617</span>&#160;</div><div class="line"><a name="l05642"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_aacd442b66140c764c594ac8ad7dfd5b3.html#aacd442b66140c764c594ac8ad7dfd5b3"> 5642</a></span>&#160; <span class="keyword">friend</span> <span class="keywordtype">bool</span> <a class="code" href="classnlohmann_1_1basic__json_aacd442b66140c764c594ac8ad7dfd5b3.html#aacd442b66140c764c594ac8ad7dfd5b3">operator&lt;</a>(<a class="code" href="classnlohmann_1_1basic__json.html">const_reference</a> lhs, <a class="code" href="classnlohmann_1_1basic__json.html">const_reference</a> rhs) noexcept</div><div class="line"><a name="l05643"></a><span class="lineno"> 5643</span>&#160; {</div><div class="line"><a name="l05644"></a><span class="lineno"> 5644</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> lhs_type = lhs.type();</div><div class="line"><a name="l05645"></a><span class="lineno"> 5645</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> rhs_type = rhs.type();</div><div class="line"><a name="l05646"></a><span class="lineno"> 5646</span>&#160;</div><div class="line"><a name="l05647"></a><span class="lineno"> 5647</span>&#160; <span class="keywordflow">if</span> (lhs_type == rhs_type)</div><div class="line"><a name="l05648"></a><span class="lineno"> 5648</span>&#160; {</div><div class="line"><a name="l05649"></a><span class="lineno"> 5649</span>&#160; <span class="keywordflow">switch</span> (lhs_type)</div><div class="line"><a name="l05650"></a><span class="lineno"> 5650</span>&#160; {</div><div class="line"><a name="l05651"></a><span class="lineno"> 5651</span>&#160; <span class="keywordflow">case</span> value_t::array:</div><div class="line"><a name="l05652"></a><span class="lineno"> 5652</span>&#160; {</div><div class="line"><a name="l05653"></a><span class="lineno"> 5653</span>&#160; <span class="keywordflow">return</span> *lhs.m_value.array &lt; *rhs.m_value.array;</div><div class="line"><a name="l05654"></a><span class="lineno"> 5654</span>&#160; }</div><div class="line"><a name="l05655"></a><span class="lineno"> 5655</span>&#160; <span class="keywordflow">case</span> value_t::object:</div><div class="line"><a name="l05656"></a><span class="lineno"> 5656</span>&#160; {</div><div class="line"><a name="l05657"></a><span class="lineno"> 5657</span>&#160; <span class="keywordflow">return</span> *lhs.m_value.object &lt; *rhs.m_value.object;</div><div class="line"><a name="l05658"></a><span class="lineno"> 5658</span>&#160; }</div><div class="line"><a name="l05659"></a><span class="lineno"> 5659</span>&#160; <span class="keywordflow">case</span> value_t::null:</div><div class="line"><a name="l05660"></a><span class="lineno"> 5660</span>&#160; {</div><div class="line"><a name="l05661"></a><span class="lineno"> 5661</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l05662"></a><span class="lineno"> 5662</span>&#160; }</div><div class="line"><a name="l05663"></a><span class="lineno"> 5663</span>&#160; <span class="keywordflow">case</span> value_t::string:</div><div class="line"><a name="l05664"></a><span class="lineno"> 5664</span>&#160; {</div><div class="line"><a name="l05665"></a><span class="lineno"> 5665</span>&#160; <span class="keywordflow">return</span> *lhs.m_value.string &lt; *rhs.m_value.string;</div><div class="line"><a name="l05666"></a><span class="lineno"> 5666</span>&#160; }</div><div class="line"><a name="l05667"></a><span class="lineno"> 5667</span>&#160; <span class="keywordflow">case</span> value_t::boolean:</div><div class="line"><a name="l05668"></a><span class="lineno"> 5668</span>&#160; {</div><div class="line"><a name="l05669"></a><span class="lineno"> 5669</span>&#160; <span class="keywordflow">return</span> lhs.m_value.boolean &lt; rhs.m_value.boolean;</div><div class="line"><a name="l05670"></a><span class="lineno"> 5670</span>&#160; }</div><div class="line"><a name="l05671"></a><span class="lineno"> 5671</span>&#160; <span class="keywordflow">case</span> value_t::number_integer:</div><div class="line"><a name="l05672"></a><span class="lineno"> 5672</span>&#160; {</div><div class="line"><a name="l05673"></a><span class="lineno"> 5673</span>&#160; <span class="keywordflow">return</span> lhs.m_value.number_integer &lt; rhs.m_value.number_integer;</div><div class="line"><a name="l05674"></a><span class="lineno"> 5674</span>&#160; }</div><div class="line"><a name="l05675"></a><span class="lineno"> 5675</span>&#160; <span class="keywordflow">case</span> value_t::number_unsigned:</div><div class="line"><a name="l05676"></a><span class="lineno"> 5676</span>&#160; {</div><div class="line"><a name="l05677"></a><span class="lineno"> 5677</span>&#160; <span class="keywordflow">return</span> lhs.m_value.number_unsigned &lt; rhs.m_value.number_unsigned;</div><div class="line"><a name="l05678"></a><span class="lineno"> 5678</span>&#160; }</div><div class="line"><a name="l05679"></a><span class="lineno"> 5679</span>&#160; <span class="keywordflow">case</span> value_t::number_float:</div><div class="line"><a name="l05680"></a><span class="lineno"> 5680</span>&#160; {</div><div class="line"><a name="l05681"></a><span class="lineno"> 5681</span>&#160; <span class="keywordflow">return</span> lhs.m_value.number_float &lt; rhs.m_value.number_float;</div><div class="line"><a name="l05682"></a><span class="lineno"> 5682</span>&#160; }</div><div class="line"><a name="l05683"></a><span class="lineno"> 5683</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l05684"></a><span class="lineno"> 5684</span>&#160; {</div><div class="line"><a name="l05685"></a><span class="lineno"> 5685</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l05686"></a><span class="lineno"> 5686</span>&#160; }</div><div class="line"><a name="l05687"></a><span class="lineno"> 5687</span>&#160; }</div><div class="line"><a name="l05688"></a><span class="lineno"> 5688</span>&#160; }</div><div class="line"><a name="l05689"></a><span class="lineno"> 5689</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lhs_type == value_t::number_integer and rhs_type == value_t::number_float)</div><div class="line"><a name="l05690"></a><span class="lineno"> 5690</span>&#160; {</div><div class="line"><a name="l05691"></a><span class="lineno"> 5691</span>&#160; <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span><a class="code" href="classnlohmann_1_1basic__json_a74a0013e847fdc574b48f931f0e757e1.html#a74a0013e847fdc574b48f931f0e757e1">number_float_t</a><span class="keyword">&gt;</span>(lhs.m_value.number_integer) &lt; rhs.m_value.number_float;</div><div class="line"><a name="l05692"></a><span class="lineno"> 5692</span>&#160; }</div><div class="line"><a name="l05693"></a><span class="lineno"> 5693</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lhs_type == value_t::number_float and rhs_type == value_t::number_integer)</div><div class="line"><a name="l05694"></a><span class="lineno"> 5694</span>&#160; {</div><div class="line"><a name="l05695"></a><span class="lineno"> 5695</span>&#160; <span class="keywordflow">return</span> lhs.m_value.number_float &lt; <span class="keyword">static_cast&lt;</span><a class="code" href="classnlohmann_1_1basic__json_a74a0013e847fdc574b48f931f0e757e1.html#a74a0013e847fdc574b48f931f0e757e1">number_float_t</a><span class="keyword">&gt;</span>(rhs.m_value.number_integer);</div><div class="line"><a name="l05696"></a><span class="lineno"> 5696</span>&#160; }</div><div class="line"><a name="l05697"></a><span class="lineno"> 5697</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lhs_type == value_t::number_unsigned and rhs_type == value_t::number_float)</div><div class="line"><a name="l05698"></a><span class="lineno"> 5698</span>&#160; {</div><div class="line"><a name="l05699"></a><span class="lineno"> 5699</span>&#160; <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span><a class="code" href="classnlohmann_1_1basic__json_a74a0013e847fdc574b48f931f0e757e1.html#a74a0013e847fdc574b48f931f0e757e1">number_float_t</a><span class="keyword">&gt;</span>(lhs.m_value.number_unsigned) &lt; rhs.m_value.number_float;</div><div class="line"><a name="l05700"></a><span class="lineno"> 5700</span>&#160; }</div><div class="line"><a name="l05701"></a><span class="lineno"> 5701</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lhs_type == value_t::number_float and rhs_type == value_t::number_unsigned)</div><div class="line"><a name="l05702"></a><span class="lineno"> 5702</span>&#160; {</div><div class="line"><a name="l05703"></a><span class="lineno"> 5703</span>&#160; <span class="keywordflow">return</span> lhs.m_value.number_float &lt; <span class="keyword">static_cast&lt;</span><a class="code" href="classnlohmann_1_1basic__json_a74a0013e847fdc574b48f931f0e757e1.html#a74a0013e847fdc574b48f931f0e757e1">number_float_t</a><span class="keyword">&gt;</span>(rhs.m_value.number_unsigned);</div><div class="line"><a name="l05704"></a><span class="lineno"> 5704</span>&#160; }</div><div class="line"><a name="l05705"></a><span class="lineno"> 5705</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lhs_type == value_t::number_integer and rhs_type == value_t::number_unsigned)</div><div class="line"><a name="l05706"></a><span class="lineno"> 5706</span>&#160; {</div><div class="line"><a name="l05707"></a><span class="lineno"> 5707</span>&#160; <span class="keywordflow">return</span> lhs.m_value.number_integer &lt; <span class="keyword">static_cast&lt;</span><a class="code" href="classnlohmann_1_1basic__json_ac4b10b2364f26ce47bdb9a413ff04a59.html#ac4b10b2364f26ce47bdb9a413ff04a59">number_integer_t</a><span class="keyword">&gt;</span>(rhs.m_value.number_unsigned);</div><div class="line"><a name="l05708"></a><span class="lineno"> 5708</span>&#160; }</div><div class="line"><a name="l05709"></a><span class="lineno"> 5709</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lhs_type == value_t::number_unsigned and rhs_type == value_t::number_integer)</div><div class="line"><a name="l05710"></a><span class="lineno"> 5710</span>&#160; {</div><div class="line"><a name="l05711"></a><span class="lineno"> 5711</span>&#160; <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span><a class="code" href="classnlohmann_1_1basic__json_ac4b10b2364f26ce47bdb9a413ff04a59.html#ac4b10b2364f26ce47bdb9a413ff04a59">number_integer_t</a><span class="keyword">&gt;</span>(lhs.m_value.number_unsigned) &lt; rhs.m_value.number_integer;</div><div class="line"><a name="l05712"></a><span class="lineno"> 5712</span>&#160; }</div><div class="line"><a name="l05713"></a><span class="lineno"> 5713</span>&#160;</div><div class="line"><a name="l05714"></a><span class="lineno"> 5714</span>&#160; <span class="comment">// We only reach this line if we cannot compare values. In that case,</span></div><div class="line"><a name="l05715"></a><span class="lineno"> 5715</span>&#160; <span class="comment">// we compare types. Note we have to call the operator explicitly,</span></div><div class="line"><a name="l05716"></a><span class="lineno"> 5716</span>&#160; <span class="comment">// because MSVC has problems otherwise.</span></div><div class="line"><a name="l05717"></a><span class="lineno"> 5717</span>&#160; <span class="keywordflow">return</span> operator&lt;(lhs_type, rhs_type);</div><div class="line"><a name="l05718"></a><span class="lineno"> 5718</span>&#160; }</div><div class="line"><a name="l05719"></a><span class="lineno"> 5719</span>&#160;</div><div class="line"><a name="l05737"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a5c8bb5200f5eac10d31e26be46e5b1ac.html#a5c8bb5200f5eac10d31e26be46e5b1ac"> 5737</a></span>&#160; <span class="keyword">friend</span> <span class="keywordtype">bool</span> <a class="code" href="classnlohmann_1_1basic__json_a5c8bb5200f5eac10d31e26be46e5b1ac.html#a5c8bb5200f5eac10d31e26be46e5b1ac">operator&lt;=</a>(<a class="code" href="classnlohmann_1_1basic__json.html">const_reference</a> lhs, <a class="code" href="classnlohmann_1_1basic__json.html">const_reference</a> rhs) noexcept</div><div class="line"><a name="l05738"></a><span class="lineno"> 5738</span>&#160; {</div><div class="line"><a name="l05739"></a><span class="lineno"> 5739</span>&#160; <span class="keywordflow">return</span> not (rhs &lt; lhs);</div><div class="line"><a name="l05740"></a><span class="lineno"> 5740</span>&#160; }</div><div class="line"><a name="l05741"></a><span class="lineno"> 5741</span>&#160;</div><div class="line"><a name="l05759"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a87db51b6b936fb2ea293cdbc8702dcb8.html#a87db51b6b936fb2ea293cdbc8702dcb8"> 5759</a></span>&#160; <span class="keyword">friend</span> <span class="keywordtype">bool</span> <a class="code" href="classnlohmann_1_1basic__json_a87db51b6b936fb2ea293cdbc8702dcb8.html#a87db51b6b936fb2ea293cdbc8702dcb8">operator&gt;</a>(<a class="code" href="classnlohmann_1_1basic__json.html">const_reference</a> lhs, <a class="code" href="classnlohmann_1_1basic__json.html">const_reference</a> rhs) noexcept</div><div class="line"><a name="l05760"></a><span class="lineno"> 5760</span>&#160; {</div><div class="line"><a name="l05761"></a><span class="lineno"> 5761</span>&#160; <span class="keywordflow">return</span> not (lhs &lt;= rhs);</div><div class="line"><a name="l05762"></a><span class="lineno"> 5762</span>&#160; }</div><div class="line"><a name="l05763"></a><span class="lineno"> 5763</span>&#160;</div><div class="line"><a name="l05781"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a74a943800c7f103d0990d7eef82c6453.html#a74a943800c7f103d0990d7eef82c6453"> 5781</a></span>&#160; <span class="keyword">friend</span> <span class="keywordtype">bool</span> <a class="code" href="classnlohmann_1_1basic__json_a74a943800c7f103d0990d7eef82c6453.html#a74a943800c7f103d0990d7eef82c6453">operator&gt;=</a>(<a class="code" href="classnlohmann_1_1basic__json.html">const_reference</a> lhs, <a class="code" href="classnlohmann_1_1basic__json.html">const_reference</a> rhs) noexcept</div><div class="line"><a name="l05782"></a><span class="lineno"> 5782</span>&#160; {</div><div class="line"><a name="l05783"></a><span class="lineno"> 5783</span>&#160; <span class="keywordflow">return</span> not (lhs &lt; rhs);</div><div class="line"><a name="l05784"></a><span class="lineno"> 5784</span>&#160; }</div><div class="line"><a name="l05785"></a><span class="lineno"> 5785</span>&#160;</div><div class="line"><a name="l05787"></a><span class="lineno"> 5787</span>&#160;</div><div class="line"><a name="l05788"></a><span class="lineno"> 5788</span>&#160;</div><div class="line"><a name="l05790"></a><span class="lineno"> 5790</span>&#160; <span class="comment">// serialization //</span></div><div class="line"><a name="l05792"></a><span class="lineno"> 5792</span>&#160;<span class="comment"></span></div><div class="line"><a name="l05795"></a><span class="lineno"> 5795</span>&#160;</div><div class="line"><a name="l05822"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a5e34c5435e557d0bf666bd7311211405.html#a5e34c5435e557d0bf666bd7311211405"> 5822</a></span>&#160; <span class="keyword">friend</span> std::ostream&amp; <a class="code" href="classnlohmann_1_1basic__json_a5e34c5435e557d0bf666bd7311211405.html#a5e34c5435e557d0bf666bd7311211405">operator&lt;&lt;</a>(std::ostream&amp; o, <span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a>&amp; j)</div><div class="line"><a name="l05823"></a><span class="lineno"> 5823</span>&#160; {</div><div class="line"><a name="l05824"></a><span class="lineno"> 5824</span>&#160; <span class="comment">// read width member and use it as indentation parameter if nonzero</span></div><div class="line"><a name="l05825"></a><span class="lineno"> 5825</span>&#160; <span class="keyword">const</span> <span class="keywordtype">bool</span> pretty_print = (o.width() &gt; 0);</div><div class="line"><a name="l05826"></a><span class="lineno"> 5826</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> indentation = (pretty_print ? o.width() : 0);</div><div class="line"><a name="l05827"></a><span class="lineno"> 5827</span>&#160;</div><div class="line"><a name="l05828"></a><span class="lineno"> 5828</span>&#160; <span class="comment">// reset width to 0 for subsequent calls to this stream</span></div><div class="line"><a name="l05829"></a><span class="lineno"> 5829</span>&#160; o.width(0);</div><div class="line"><a name="l05830"></a><span class="lineno"> 5830</span>&#160;</div><div class="line"><a name="l05831"></a><span class="lineno"> 5831</span>&#160; <span class="comment">// fix locale problems</span></div><div class="line"><a name="l05832"></a><span class="lineno"> 5832</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> old_locale = o.imbue(std::locale(std::locale(), <span class="keyword">new</span> DecimalSeparator));</div><div class="line"><a name="l05833"></a><span class="lineno"> 5833</span>&#160; <span class="comment">// set precision</span></div><div class="line"><a name="l05834"></a><span class="lineno"> 5834</span>&#160;</div><div class="line"><a name="l05835"></a><span class="lineno"> 5835</span>&#160; <span class="comment">// 6, 15 or 16 digits of precision allows round-trip IEEE 754</span></div><div class="line"><a name="l05836"></a><span class="lineno"> 5836</span>&#160; <span class="comment">// string-&gt;float-&gt;string, string-&gt;double-&gt;string or string-&gt;long</span></div><div class="line"><a name="l05837"></a><span class="lineno"> 5837</span>&#160; <span class="comment">// double-&gt;string; to be safe, we read this value from</span></div><div class="line"><a name="l05838"></a><span class="lineno"> 5838</span>&#160; <span class="comment">// std::numeric_limits&lt;number_float_t&gt;::digits10</span></div><div class="line"><a name="l05839"></a><span class="lineno"> 5839</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> old_precision = o.precision(std::numeric_limits&lt;double&gt;::digits10);</div><div class="line"><a name="l05840"></a><span class="lineno"> 5840</span>&#160;</div><div class="line"><a name="l05841"></a><span class="lineno"> 5841</span>&#160; <span class="comment">// do the actual serialization</span></div><div class="line"><a name="l05842"></a><span class="lineno"> 5842</span>&#160; j.<a class="code" href="classnlohmann_1_1basic__json_afd4b7d7bcadc62da7c582fa36ba6805f.html#afd4b7d7bcadc62da7c582fa36ba6805f">dump</a>(o, pretty_print, static_cast&lt;unsigned int&gt;(indentation));</div><div class="line"><a name="l05843"></a><span class="lineno"> 5843</span>&#160;</div><div class="line"><a name="l05844"></a><span class="lineno"> 5844</span>&#160; <span class="comment">// reset locale and precision</span></div><div class="line"><a name="l05845"></a><span class="lineno"> 5845</span>&#160; o.imbue(old_locale);</div><div class="line"><a name="l05846"></a><span class="lineno"> 5846</span>&#160; o.precision(old_precision);</div><div class="line"><a name="l05847"></a><span class="lineno"> 5847</span>&#160; <span class="keywordflow">return</span> o;</div><div class="line"><a name="l05848"></a><span class="lineno"> 5848</span>&#160; }</div><div class="line"><a name="l05849"></a><span class="lineno"> 5849</span>&#160;</div><div class="line"><a name="l05854"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a34d6a60dd99e9f33b8273a1c8db5669b.html#a34d6a60dd99e9f33b8273a1c8db5669b"> 5854</a></span>&#160; <span class="keyword">friend</span> std::ostream&amp; <a class="code" href="classnlohmann_1_1basic__json_a34d6a60dd99e9f33b8273a1c8db5669b.html#a34d6a60dd99e9f33b8273a1c8db5669b">operator&gt;&gt;</a>(<span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a>&amp; j, std::ostream&amp; o)</div><div class="line"><a name="l05855"></a><span class="lineno"> 5855</span>&#160; {</div><div class="line"><a name="l05856"></a><span class="lineno"> 5856</span>&#160; <span class="keywordflow">return</span> o &lt;&lt; j;</div><div class="line"><a name="l05857"></a><span class="lineno"> 5857</span>&#160; }</div><div class="line"><a name="l05858"></a><span class="lineno"> 5858</span>&#160;</div><div class="line"><a name="l05860"></a><span class="lineno"> 5860</span>&#160;</div><div class="line"><a name="l05861"></a><span class="lineno"> 5861</span>&#160;</div><div class="line"><a name="l05863"></a><span class="lineno"> 5863</span>&#160; <span class="comment">// deserialization //</span></div><div class="line"><a name="l05865"></a><span class="lineno"> 5865</span>&#160;<span class="comment"></span></div><div class="line"><a name="l05868"></a><span class="lineno"> 5868</span>&#160;</div><div class="line"><a name="l05896"></a><span class="lineno"> 5896</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">class</span> T, std::<span class="keywordtype">size_t</span> N&gt;</div><div class="line"><a name="l05897"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_ace63ac4eb1dd7251a259d32e397461a3.html#ace63ac4eb1dd7251a259d32e397461a3"> 5897</a></span>&#160; <span class="keyword">static</span> <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a> <a class="code" href="classnlohmann_1_1basic__json_ace63ac4eb1dd7251a259d32e397461a3.html#ace63ac4eb1dd7251a259d32e397461a3">parse</a>(T (&amp;array)[N],</div><div class="line"><a name="l05898"></a><span class="lineno"> 5898</span>&#160; <span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_a9e35475e2027520a78e09f460dbe048a.html#a9e35475e2027520a78e09f460dbe048a">parser_callback_t</a> cb = <span class="keyword">nullptr</span>)</div><div class="line"><a name="l05899"></a><span class="lineno"> 5899</span>&#160; {</div><div class="line"><a name="l05900"></a><span class="lineno"> 5900</span>&#160; <span class="comment">// delegate the call to the iterator-range parse overload</span></div><div class="line"><a name="l05901"></a><span class="lineno"> 5901</span>&#160; <span class="keywordflow">return</span> parse(std::begin(array), std::end(array), cb);</div><div class="line"><a name="l05902"></a><span class="lineno"> 5902</span>&#160; }</div><div class="line"><a name="l05903"></a><span class="lineno"> 5903</span>&#160;</div><div class="line"><a name="l05931"></a><span class="lineno"> 5931</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> CharPT, <span class="keyword">typename</span> std::enable_if&lt;</div><div class="line"><a name="l05932"></a><span class="lineno"> 5932</span>&#160; std::is_pointer&lt;CharPT&gt;::value and</div><div class="line"><a name="l05933"></a><span class="lineno"> 5933</span>&#160; std::is_integral&lt;typename std::remove_pointer&lt;CharPT&gt;::type&gt;::value and</div><div class="line"><a name="l05934"></a><span class="lineno"> 5934</span>&#160; <span class="keyword">sizeof</span>(<span class="keyword">typename</span> std::remove_pointer&lt;CharPT&gt;::type) == 1, <span class="keywordtype">int</span>&gt;::type = 0&gt;</div><div class="line"><a name="l05935"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a90f05d55d9d0702c075cd281fd0d85ae.html#a90f05d55d9d0702c075cd281fd0d85ae"> 5935</a></span>&#160; <span class="keyword">static</span> <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a> <a class="code" href="classnlohmann_1_1basic__json_a90f05d55d9d0702c075cd281fd0d85ae.html#a90f05d55d9d0702c075cd281fd0d85ae">parse</a>(<span class="keyword">const</span> CharPT s,</div><div class="line"><a name="l05936"></a><span class="lineno"> 5936</span>&#160; <span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_a9e35475e2027520a78e09f460dbe048a.html#a9e35475e2027520a78e09f460dbe048a">parser_callback_t</a> cb = <span class="keyword">nullptr</span>)</div><div class="line"><a name="l05937"></a><span class="lineno"> 5937</span>&#160; {</div><div class="line"><a name="l05938"></a><span class="lineno"> 5938</span>&#160; <span class="keywordflow">return</span> parser(reinterpret_cast&lt;const char*&gt;(s), cb).<a class="code" href="classnlohmann_1_1basic__json_ace63ac4eb1dd7251a259d32e397461a3.html#ace63ac4eb1dd7251a259d32e397461a3">parse</a>();</div><div class="line"><a name="l05939"></a><span class="lineno"> 5939</span>&#160; }</div><div class="line"><a name="l05940"></a><span class="lineno"> 5940</span>&#160;</div><div class="line"><a name="l05965"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a0923f9749409345a21f8cb15ee95fc0d.html#a0923f9749409345a21f8cb15ee95fc0d"> 5965</a></span>&#160; <span class="keyword">static</span> <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a> <a class="code" href="classnlohmann_1_1basic__json_a0923f9749409345a21f8cb15ee95fc0d.html#a0923f9749409345a21f8cb15ee95fc0d">parse</a>(std::istream&amp; i,</div><div class="line"><a name="l05966"></a><span class="lineno"> 5966</span>&#160; <span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_a9e35475e2027520a78e09f460dbe048a.html#a9e35475e2027520a78e09f460dbe048a">parser_callback_t</a> cb = <span class="keyword">nullptr</span>)</div><div class="line"><a name="l05967"></a><span class="lineno"> 5967</span>&#160; {</div><div class="line"><a name="l05968"></a><span class="lineno"> 5968</span>&#160; <span class="keywordflow">return</span> parser(i, cb).<a class="code" href="classnlohmann_1_1basic__json_ace63ac4eb1dd7251a259d32e397461a3.html#ace63ac4eb1dd7251a259d32e397461a3">parse</a>();</div><div class="line"><a name="l05969"></a><span class="lineno"> 5969</span>&#160; }</div><div class="line"><a name="l05970"></a><span class="lineno"> 5970</span>&#160;</div><div class="line"><a name="l05974"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a959bc32fc72a76cd5a1bd6977926f787.html#a959bc32fc72a76cd5a1bd6977926f787"> 5974</a></span>&#160; <span class="keyword">static</span> <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a> <a class="code" href="classnlohmann_1_1basic__json_a959bc32fc72a76cd5a1bd6977926f787.html#a959bc32fc72a76cd5a1bd6977926f787">parse</a>(std::istream&amp;&amp; i,</div><div class="line"><a name="l05975"></a><span class="lineno"> 5975</span>&#160; <span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_a9e35475e2027520a78e09f460dbe048a.html#a9e35475e2027520a78e09f460dbe048a">parser_callback_t</a> cb = <span class="keyword">nullptr</span>)</div><div class="line"><a name="l05976"></a><span class="lineno"> 5976</span>&#160; {</div><div class="line"><a name="l05977"></a><span class="lineno"> 5977</span>&#160; <span class="keywordflow">return</span> parser(i, cb).<a class="code" href="classnlohmann_1_1basic__json_ace63ac4eb1dd7251a259d32e397461a3.html#ace63ac4eb1dd7251a259d32e397461a3">parse</a>();</div><div class="line"><a name="l05978"></a><span class="lineno"> 5978</span>&#160; }</div><div class="line"><a name="l05979"></a><span class="lineno"> 5979</span>&#160;</div><div class="line"><a name="l06021"></a><span class="lineno"> 6021</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">class </span>IteratorType, <span class="keyword">typename</span> std::enable_if&lt;</div><div class="line"><a name="l06022"></a><span class="lineno"> 6022</span>&#160; std::is_base_of&lt;</div><div class="line"><a name="l06023"></a><span class="lineno"> 6023</span>&#160; std::random_access_iterator_tag,</div><div class="line"><a name="l06024"></a><span class="lineno"> 6024</span>&#160; <span class="keyword">typename</span> std::iterator_traits&lt;IteratorType&gt;::iterator_category&gt;::value, <span class="keywordtype">int</span>&gt;::type = 0&gt;</div><div class="line"><a name="l06025"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_aa8dca2e91a6301c36890f844e64f0023.html#aa8dca2e91a6301c36890f844e64f0023"> 6025</a></span>&#160; <span class="keyword">static</span> <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a> <a class="code" href="classnlohmann_1_1basic__json_aa8dca2e91a6301c36890f844e64f0023.html#aa8dca2e91a6301c36890f844e64f0023">parse</a>(IteratorType first, IteratorType last,</div><div class="line"><a name="l06026"></a><span class="lineno"> 6026</span>&#160; <span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_a9e35475e2027520a78e09f460dbe048a.html#a9e35475e2027520a78e09f460dbe048a">parser_callback_t</a> cb = <span class="keyword">nullptr</span>)</div><div class="line"><a name="l06027"></a><span class="lineno"> 6027</span>&#160; {</div><div class="line"><a name="l06028"></a><span class="lineno"> 6028</span>&#160; <span class="comment">// assertion to check that the iterator range is indeed contiguous,</span></div><div class="line"><a name="l06029"></a><span class="lineno"> 6029</span>&#160; <span class="comment">// see http://stackoverflow.com/a/35008842/266378 for more discussion</span></div><div class="line"><a name="l06030"></a><span class="lineno"> 6030</span>&#160; assert(std::accumulate(first, last, std::make_pair&lt;bool, int&gt;(<span class="keyword">true</span>, 0),</div><div class="line"><a name="l06031"></a><span class="lineno"> 6031</span>&#160; [&amp;first](std::pair&lt;bool, int&gt; res, decltype(*first) val)</div><div class="line"><a name="l06032"></a><span class="lineno"> 6032</span>&#160; {</div><div class="line"><a name="l06033"></a><span class="lineno"> 6033</span>&#160; res.first &amp;= (val == *(std::next(std::addressof(*first), res.second++)));</div><div class="line"><a name="l06034"></a><span class="lineno"> 6034</span>&#160; <span class="keywordflow">return</span> res;</div><div class="line"><a name="l06035"></a><span class="lineno"> 6035</span>&#160; }).first);</div><div class="line"><a name="l06036"></a><span class="lineno"> 6036</span>&#160;</div><div class="line"><a name="l06037"></a><span class="lineno"> 6037</span>&#160; <span class="comment">// assertion to check that each element is 1 byte long</span></div><div class="line"><a name="l06038"></a><span class="lineno"> 6038</span>&#160; static_assert(<span class="keyword">sizeof</span>(<span class="keyword">typename</span> std::iterator_traits&lt;IteratorType&gt;::value_type) == 1,</div><div class="line"><a name="l06039"></a><span class="lineno"> 6039</span>&#160; <span class="stringliteral">&quot;each element in the iterator range must have the size of 1 byte&quot;</span>);</div><div class="line"><a name="l06040"></a><span class="lineno"> 6040</span>&#160;</div><div class="line"><a name="l06041"></a><span class="lineno"> 6041</span>&#160; <span class="comment">// if iterator range is empty, create a parser with an empty string</span></div><div class="line"><a name="l06042"></a><span class="lineno"> 6042</span>&#160; <span class="comment">// to generate &quot;unexpected EOF&quot; error message</span></div><div class="line"><a name="l06043"></a><span class="lineno"> 6043</span>&#160; <span class="keywordflow">if</span> (std::distance(first, last) &lt;= 0)</div><div class="line"><a name="l06044"></a><span class="lineno"> 6044</span>&#160; {</div><div class="line"><a name="l06045"></a><span class="lineno"> 6045</span>&#160; <span class="keywordflow">return</span> parser(<span class="stringliteral">&quot;&quot;</span>).parse();</div><div class="line"><a name="l06046"></a><span class="lineno"> 6046</span>&#160; }</div><div class="line"><a name="l06047"></a><span class="lineno"> 6047</span>&#160;</div><div class="line"><a name="l06048"></a><span class="lineno"> 6048</span>&#160; <span class="keywordflow">return</span> parser(first, last, cb).parse();</div><div class="line"><a name="l06049"></a><span class="lineno"> 6049</span>&#160; }</div><div class="line"><a name="l06050"></a><span class="lineno"> 6050</span>&#160;</div><div class="line"><a name="l06091"></a><span class="lineno"> 6091</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">class </span>ContiguousContainer, <span class="keyword">typename</span> std::enable_if&lt;</div><div class="line"><a name="l06092"></a><span class="lineno"> 6092</span>&#160; not std::is_pointer&lt;ContiguousContainer&gt;::value and</div><div class="line"><a name="l06093"></a><span class="lineno"> 6093</span>&#160; std::is_base_of&lt;</div><div class="line"><a name="l06094"></a><span class="lineno"> 6094</span>&#160; std::random_access_iterator_tag,</div><div class="line"><a name="l06095"></a><span class="lineno"> 6095</span>&#160; <span class="keyword">typename</span> std::iterator_traits&lt;decltype(std::begin(std::declval&lt;ContiguousContainer const&gt;()))&gt;::iterator_category&gt;::value</div><div class="line"><a name="l06096"></a><span class="lineno"> 6096</span>&#160; , <span class="keywordtype">int</span>&gt;::type = 0&gt;</div><div class="line"><a name="l06097"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_aeffd70f622f8f2a51fd3d95af64b63a7.html#aeffd70f622f8f2a51fd3d95af64b63a7"> 6097</a></span>&#160; <span class="keyword">static</span> <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a> <a class="code" href="classnlohmann_1_1basic__json_aeffd70f622f8f2a51fd3d95af64b63a7.html#aeffd70f622f8f2a51fd3d95af64b63a7">parse</a>(<span class="keyword">const</span> ContiguousContainer&amp; c,</div><div class="line"><a name="l06098"></a><span class="lineno"> 6098</span>&#160; <span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_a9e35475e2027520a78e09f460dbe048a.html#a9e35475e2027520a78e09f460dbe048a">parser_callback_t</a> cb = <span class="keyword">nullptr</span>)</div><div class="line"><a name="l06099"></a><span class="lineno"> 6099</span>&#160; {</div><div class="line"><a name="l06100"></a><span class="lineno"> 6100</span>&#160; <span class="comment">// delegate the call to the iterator-range parse overload</span></div><div class="line"><a name="l06101"></a><span class="lineno"> 6101</span>&#160; <span class="keywordflow">return</span> parse(std::begin(c), std::end(c), cb);</div><div class="line"><a name="l06102"></a><span class="lineno"> 6102</span>&#160; }</div><div class="line"><a name="l06103"></a><span class="lineno"> 6103</span>&#160;</div><div class="line"><a name="l06127"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a60ca396028b8d9714c6e10efbf475af6.html#a60ca396028b8d9714c6e10efbf475af6"> 6127</a></span>&#160; <span class="keyword">friend</span> std::istream&amp; <a class="code" href="classnlohmann_1_1basic__json_a60ca396028b8d9714c6e10efbf475af6.html#a60ca396028b8d9714c6e10efbf475af6">operator&lt;&lt;</a>(<a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a>&amp; j, std::istream&amp; i)</div><div class="line"><a name="l06128"></a><span class="lineno"> 6128</span>&#160; {</div><div class="line"><a name="l06129"></a><span class="lineno"> 6129</span>&#160; j = parser(i).<a class="code" href="classnlohmann_1_1basic__json_ace63ac4eb1dd7251a259d32e397461a3.html#ace63ac4eb1dd7251a259d32e397461a3">parse</a>();</div><div class="line"><a name="l06130"></a><span class="lineno"> 6130</span>&#160; <span class="keywordflow">return</span> i;</div><div class="line"><a name="l06131"></a><span class="lineno"> 6131</span>&#160; }</div><div class="line"><a name="l06132"></a><span class="lineno"> 6132</span>&#160;</div><div class="line"><a name="l06137"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_aaf363408931d76472ded14017e59c9e8.html#aaf363408931d76472ded14017e59c9e8"> 6137</a></span>&#160; <span class="keyword">friend</span> std::istream&amp; <a class="code" href="classnlohmann_1_1basic__json_aaf363408931d76472ded14017e59c9e8.html#aaf363408931d76472ded14017e59c9e8">operator&gt;&gt;</a>(std::istream&amp; i, <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a>&amp; j)</div><div class="line"><a name="l06138"></a><span class="lineno"> 6138</span>&#160; {</div><div class="line"><a name="l06139"></a><span class="lineno"> 6139</span>&#160; j = parser(i).<a class="code" href="classnlohmann_1_1basic__json_ace63ac4eb1dd7251a259d32e397461a3.html#ace63ac4eb1dd7251a259d32e397461a3">parse</a>();</div><div class="line"><a name="l06140"></a><span class="lineno"> 6140</span>&#160; <span class="keywordflow">return</span> i;</div><div class="line"><a name="l06141"></a><span class="lineno"> 6141</span>&#160; }</div><div class="line"><a name="l06142"></a><span class="lineno"> 6142</span>&#160;</div><div class="line"><a name="l06144"></a><span class="lineno"> 6144</span>&#160;</div><div class="line"><a name="l06145"></a><span class="lineno"> 6145</span>&#160;</div><div class="line"><a name="l06146"></a><span class="lineno"> 6146</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l06148"></a><span class="lineno"> 6148</span>&#160; <span class="comment">// convenience functions //</span></div><div class="line"><a name="l06150"></a><span class="lineno"> 6150</span>&#160;<span class="comment"></span></div><div class="line"><a name="l06163"></a><span class="lineno"> 6163</span>&#160; std::string type_name()<span class="keyword"> const</span></div><div class="line"><a name="l06164"></a><span class="lineno"> 6164</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l06165"></a><span class="lineno"> 6165</span>&#160; <span class="keywordflow">switch</span> (m_type)</div><div class="line"><a name="l06166"></a><span class="lineno"> 6166</span>&#160; {</div><div class="line"><a name="l06167"></a><span class="lineno"> 6167</span>&#160; <span class="keywordflow">case</span> value_t::null:</div><div class="line"><a name="l06168"></a><span class="lineno"> 6168</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;null&quot;</span>;</div><div class="line"><a name="l06169"></a><span class="lineno"> 6169</span>&#160; <span class="keywordflow">case</span> value_t::object:</div><div class="line"><a name="l06170"></a><span class="lineno"> 6170</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;object&quot;</span>;</div><div class="line"><a name="l06171"></a><span class="lineno"> 6171</span>&#160; <span class="keywordflow">case</span> value_t::array:</div><div class="line"><a name="l06172"></a><span class="lineno"> 6172</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;array&quot;</span>;</div><div class="line"><a name="l06173"></a><span class="lineno"> 6173</span>&#160; <span class="keywordflow">case</span> value_t::string:</div><div class="line"><a name="l06174"></a><span class="lineno"> 6174</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;string&quot;</span>;</div><div class="line"><a name="l06175"></a><span class="lineno"> 6175</span>&#160; <span class="keywordflow">case</span> value_t::boolean:</div><div class="line"><a name="l06176"></a><span class="lineno"> 6176</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;boolean&quot;</span>;</div><div class="line"><a name="l06177"></a><span class="lineno"> 6177</span>&#160; <span class="keywordflow">case</span> value_t::discarded:</div><div class="line"><a name="l06178"></a><span class="lineno"> 6178</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;discarded&quot;</span>;</div><div class="line"><a name="l06179"></a><span class="lineno"> 6179</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l06180"></a><span class="lineno"> 6180</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;number&quot;</span>;</div><div class="line"><a name="l06181"></a><span class="lineno"> 6181</span>&#160; }</div><div class="line"><a name="l06182"></a><span class="lineno"> 6182</span>&#160; }</div><div class="line"><a name="l06183"></a><span class="lineno"> 6183</span>&#160;</div><div class="line"><a name="l06192"></a><span class="lineno"> 6192</span>&#160; <span class="keyword">static</span> std::size_t extra_space(<span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_ab63e618bbb0371042b1bec17f5891f42.html#ab63e618bbb0371042b1bec17f5891f42">string_t</a>&amp; s) noexcept</div><div class="line"><a name="l06193"></a><span class="lineno"> 6193</span>&#160; {</div><div class="line"><a name="l06194"></a><span class="lineno"> 6194</span>&#160; <span class="keywordflow">return</span> std::accumulate(s.begin(), s.end(), <span class="keywordtype">size_t</span>{},</div><div class="line"><a name="l06195"></a><span class="lineno"> 6195</span>&#160; [](<span class="keywordtype">size_t</span> res, <span class="keyword">typename</span> string_t::value_type c)</div><div class="line"><a name="l06196"></a><span class="lineno"> 6196</span>&#160; {</div><div class="line"><a name="l06197"></a><span class="lineno"> 6197</span>&#160; <span class="keywordflow">switch</span> (c)</div><div class="line"><a name="l06198"></a><span class="lineno"> 6198</span>&#160; {</div><div class="line"><a name="l06199"></a><span class="lineno"> 6199</span>&#160; <span class="keywordflow">case</span> <span class="charliteral">&#39;&quot;&#39;</span>:</div><div class="line"><a name="l06200"></a><span class="lineno"> 6200</span>&#160; <span class="keywordflow">case</span> <span class="charliteral">&#39;\\&#39;</span>:</div><div class="line"><a name="l06201"></a><span class="lineno"> 6201</span>&#160; <span class="keywordflow">case</span> <span class="charliteral">&#39;\b&#39;</span>:</div><div class="line"><a name="l06202"></a><span class="lineno"> 6202</span>&#160; <span class="keywordflow">case</span> <span class="charliteral">&#39;\f&#39;</span>:</div><div class="line"><a name="l06203"></a><span class="lineno"> 6203</span>&#160; <span class="keywordflow">case</span> <span class="charliteral">&#39;\n&#39;</span>:</div><div class="line"><a name="l06204"></a><span class="lineno"> 6204</span>&#160; <span class="keywordflow">case</span> <span class="charliteral">&#39;\r&#39;</span>:</div><div class="line"><a name="l06205"></a><span class="lineno"> 6205</span>&#160; <span class="keywordflow">case</span> <span class="charliteral">&#39;\t&#39;</span>:</div><div class="line"><a name="l06206"></a><span class="lineno"> 6206</span>&#160; {</div><div class="line"><a name="l06207"></a><span class="lineno"> 6207</span>&#160; <span class="comment">// from c (1 byte) to \x (2 bytes)</span></div><div class="line"><a name="l06208"></a><span class="lineno"> 6208</span>&#160; <span class="keywordflow">return</span> res + 1;</div><div class="line"><a name="l06209"></a><span class="lineno"> 6209</span>&#160; }</div><div class="line"><a name="l06210"></a><span class="lineno"> 6210</span>&#160;</div><div class="line"><a name="l06211"></a><span class="lineno"> 6211</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l06212"></a><span class="lineno"> 6212</span>&#160; {</div><div class="line"><a name="l06213"></a><span class="lineno"> 6213</span>&#160; <span class="keywordflow">if</span> (c &gt;= 0x00 and c &lt;= 0x1f)</div><div class="line"><a name="l06214"></a><span class="lineno"> 6214</span>&#160; {</div><div class="line"><a name="l06215"></a><span class="lineno"> 6215</span>&#160; <span class="comment">// from c (1 byte) to \uxxxx (6 bytes)</span></div><div class="line"><a name="l06216"></a><span class="lineno"> 6216</span>&#160; <span class="keywordflow">return</span> res + 5;</div><div class="line"><a name="l06217"></a><span class="lineno"> 6217</span>&#160; }</div><div class="line"><a name="l06218"></a><span class="lineno"> 6218</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l06219"></a><span class="lineno"> 6219</span>&#160; {</div><div class="line"><a name="l06220"></a><span class="lineno"> 6220</span>&#160; <span class="keywordflow">return</span> res;</div><div class="line"><a name="l06221"></a><span class="lineno"> 6221</span>&#160; }</div><div class="line"><a name="l06222"></a><span class="lineno"> 6222</span>&#160; }</div><div class="line"><a name="l06223"></a><span class="lineno"> 6223</span>&#160; }</div><div class="line"><a name="l06224"></a><span class="lineno"> 6224</span>&#160; });</div><div class="line"><a name="l06225"></a><span class="lineno"> 6225</span>&#160; }</div><div class="line"><a name="l06226"></a><span class="lineno"> 6226</span>&#160;</div><div class="line"><a name="l06240"></a><span class="lineno"> 6240</span>&#160; <span class="keyword">static</span> <a class="code" href="classnlohmann_1_1basic__json_ab63e618bbb0371042b1bec17f5891f42.html#ab63e618bbb0371042b1bec17f5891f42">string_t</a> escape_string(<span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_ab63e618bbb0371042b1bec17f5891f42.html#ab63e618bbb0371042b1bec17f5891f42">string_t</a>&amp; s)</div><div class="line"><a name="l06241"></a><span class="lineno"> 6241</span>&#160; {</div><div class="line"><a name="l06242"></a><span class="lineno"> 6242</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> space = extra_space(s);</div><div class="line"><a name="l06243"></a><span class="lineno"> 6243</span>&#160; <span class="keywordflow">if</span> (space == 0)</div><div class="line"><a name="l06244"></a><span class="lineno"> 6244</span>&#160; {</div><div class="line"><a name="l06245"></a><span class="lineno"> 6245</span>&#160; <span class="keywordflow">return</span> s;</div><div class="line"><a name="l06246"></a><span class="lineno"> 6246</span>&#160; }</div><div class="line"><a name="l06247"></a><span class="lineno"> 6247</span>&#160;</div><div class="line"><a name="l06248"></a><span class="lineno"> 6248</span>&#160; <span class="comment">// create a result string of necessary size</span></div><div class="line"><a name="l06249"></a><span class="lineno"> 6249</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_ab63e618bbb0371042b1bec17f5891f42.html#ab63e618bbb0371042b1bec17f5891f42">string_t</a> result(s.size() + space, <span class="charliteral">&#39;\\&#39;</span>);</div><div class="line"><a name="l06250"></a><span class="lineno"> 6250</span>&#160; std::size_t pos = 0;</div><div class="line"><a name="l06251"></a><span class="lineno"> 6251</span>&#160;</div><div class="line"><a name="l06252"></a><span class="lineno"> 6252</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; c : s)</div><div class="line"><a name="l06253"></a><span class="lineno"> 6253</span>&#160; {</div><div class="line"><a name="l06254"></a><span class="lineno"> 6254</span>&#160; <span class="keywordflow">switch</span> (c)</div><div class="line"><a name="l06255"></a><span class="lineno"> 6255</span>&#160; {</div><div class="line"><a name="l06256"></a><span class="lineno"> 6256</span>&#160; <span class="comment">// quotation mark (0x22)</span></div><div class="line"><a name="l06257"></a><span class="lineno"> 6257</span>&#160; <span class="keywordflow">case</span> <span class="charliteral">&#39;&quot;&#39;</span>:</div><div class="line"><a name="l06258"></a><span class="lineno"> 6258</span>&#160; {</div><div class="line"><a name="l06259"></a><span class="lineno"> 6259</span>&#160; result[pos + 1] = <span class="charliteral">&#39;&quot;&#39;</span>;</div><div class="line"><a name="l06260"></a><span class="lineno"> 6260</span>&#160; pos += 2;</div><div class="line"><a name="l06261"></a><span class="lineno"> 6261</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l06262"></a><span class="lineno"> 6262</span>&#160; }</div><div class="line"><a name="l06263"></a><span class="lineno"> 6263</span>&#160;</div><div class="line"><a name="l06264"></a><span class="lineno"> 6264</span>&#160; <span class="comment">// reverse solidus (0x5c)</span></div><div class="line"><a name="l06265"></a><span class="lineno"> 6265</span>&#160; <span class="keywordflow">case</span> <span class="charliteral">&#39;\\&#39;</span>:</div><div class="line"><a name="l06266"></a><span class="lineno"> 6266</span>&#160; {</div><div class="line"><a name="l06267"></a><span class="lineno"> 6267</span>&#160; <span class="comment">// nothing to change</span></div><div class="line"><a name="l06268"></a><span class="lineno"> 6268</span>&#160; pos += 2;</div><div class="line"><a name="l06269"></a><span class="lineno"> 6269</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l06270"></a><span class="lineno"> 6270</span>&#160; }</div><div class="line"><a name="l06271"></a><span class="lineno"> 6271</span>&#160;</div><div class="line"><a name="l06272"></a><span class="lineno"> 6272</span>&#160; <span class="comment">// backspace (0x08)</span></div><div class="line"><a name="l06273"></a><span class="lineno"> 6273</span>&#160; <span class="keywordflow">case</span> <span class="charliteral">&#39;\b&#39;</span>:</div><div class="line"><a name="l06274"></a><span class="lineno"> 6274</span>&#160; {</div><div class="line"><a name="l06275"></a><span class="lineno"> 6275</span>&#160; result[pos + 1] = <span class="charliteral">&#39;b&#39;</span>;</div><div class="line"><a name="l06276"></a><span class="lineno"> 6276</span>&#160; pos += 2;</div><div class="line"><a name="l06277"></a><span class="lineno"> 6277</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l06278"></a><span class="lineno"> 6278</span>&#160; }</div><div class="line"><a name="l06279"></a><span class="lineno"> 6279</span>&#160;</div><div class="line"><a name="l06280"></a><span class="lineno"> 6280</span>&#160; <span class="comment">// formfeed (0x0c)</span></div><div class="line"><a name="l06281"></a><span class="lineno"> 6281</span>&#160; <span class="keywordflow">case</span> <span class="charliteral">&#39;\f&#39;</span>:</div><div class="line"><a name="l06282"></a><span class="lineno"> 6282</span>&#160; {</div><div class="line"><a name="l06283"></a><span class="lineno"> 6283</span>&#160; result[pos + 1] = <span class="charliteral">&#39;f&#39;</span>;</div><div class="line"><a name="l06284"></a><span class="lineno"> 6284</span>&#160; pos += 2;</div><div class="line"><a name="l06285"></a><span class="lineno"> 6285</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l06286"></a><span class="lineno"> 6286</span>&#160; }</div><div class="line"><a name="l06287"></a><span class="lineno"> 6287</span>&#160;</div><div class="line"><a name="l06288"></a><span class="lineno"> 6288</span>&#160; <span class="comment">// newline (0x0a)</span></div><div class="line"><a name="l06289"></a><span class="lineno"> 6289</span>&#160; <span class="keywordflow">case</span> <span class="charliteral">&#39;\n&#39;</span>:</div><div class="line"><a name="l06290"></a><span class="lineno"> 6290</span>&#160; {</div><div class="line"><a name="l06291"></a><span class="lineno"> 6291</span>&#160; result[pos + 1] = <span class="charliteral">&#39;n&#39;</span>;</div><div class="line"><a name="l06292"></a><span class="lineno"> 6292</span>&#160; pos += 2;</div><div class="line"><a name="l06293"></a><span class="lineno"> 6293</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l06294"></a><span class="lineno"> 6294</span>&#160; }</div><div class="line"><a name="l06295"></a><span class="lineno"> 6295</span>&#160;</div><div class="line"><a name="l06296"></a><span class="lineno"> 6296</span>&#160; <span class="comment">// carriage return (0x0d)</span></div><div class="line"><a name="l06297"></a><span class="lineno"> 6297</span>&#160; <span class="keywordflow">case</span> <span class="charliteral">&#39;\r&#39;</span>:</div><div class="line"><a name="l06298"></a><span class="lineno"> 6298</span>&#160; {</div><div class="line"><a name="l06299"></a><span class="lineno"> 6299</span>&#160; result[pos + 1] = <span class="charliteral">&#39;r&#39;</span>;</div><div class="line"><a name="l06300"></a><span class="lineno"> 6300</span>&#160; pos += 2;</div><div class="line"><a name="l06301"></a><span class="lineno"> 6301</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l06302"></a><span class="lineno"> 6302</span>&#160; }</div><div class="line"><a name="l06303"></a><span class="lineno"> 6303</span>&#160;</div><div class="line"><a name="l06304"></a><span class="lineno"> 6304</span>&#160; <span class="comment">// horizontal tab (0x09)</span></div><div class="line"><a name="l06305"></a><span class="lineno"> 6305</span>&#160; <span class="keywordflow">case</span> <span class="charliteral">&#39;\t&#39;</span>:</div><div class="line"><a name="l06306"></a><span class="lineno"> 6306</span>&#160; {</div><div class="line"><a name="l06307"></a><span class="lineno"> 6307</span>&#160; result[pos + 1] = <span class="charliteral">&#39;t&#39;</span>;</div><div class="line"><a name="l06308"></a><span class="lineno"> 6308</span>&#160; pos += 2;</div><div class="line"><a name="l06309"></a><span class="lineno"> 6309</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l06310"></a><span class="lineno"> 6310</span>&#160; }</div><div class="line"><a name="l06311"></a><span class="lineno"> 6311</span>&#160;</div><div class="line"><a name="l06312"></a><span class="lineno"> 6312</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l06313"></a><span class="lineno"> 6313</span>&#160; {</div><div class="line"><a name="l06314"></a><span class="lineno"> 6314</span>&#160; <span class="keywordflow">if</span> (c &gt;= 0x00 and c &lt;= 0x1f)</div><div class="line"><a name="l06315"></a><span class="lineno"> 6315</span>&#160; {</div><div class="line"><a name="l06316"></a><span class="lineno"> 6316</span>&#160; <span class="comment">// convert a number 0..15 to its hex representation</span></div><div class="line"><a name="l06317"></a><span class="lineno"> 6317</span>&#160; <span class="comment">// (0..f)</span></div><div class="line"><a name="l06318"></a><span class="lineno"> 6318</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> hexify[16] =</div><div class="line"><a name="l06319"></a><span class="lineno"> 6319</span>&#160; {</div><div class="line"><a name="l06320"></a><span class="lineno"> 6320</span>&#160; <span class="charliteral">&#39;0&#39;</span>, <span class="charliteral">&#39;1&#39;</span>, <span class="charliteral">&#39;2&#39;</span>, <span class="charliteral">&#39;3&#39;</span>, <span class="charliteral">&#39;4&#39;</span>, <span class="charliteral">&#39;5&#39;</span>, <span class="charliteral">&#39;6&#39;</span>, <span class="charliteral">&#39;7&#39;</span>,</div><div class="line"><a name="l06321"></a><span class="lineno"> 6321</span>&#160; <span class="charliteral">&#39;8&#39;</span>, <span class="charliteral">&#39;9&#39;</span>, <span class="charliteral">&#39;a&#39;</span>, <span class="charliteral">&#39;b&#39;</span>, <span class="charliteral">&#39;c&#39;</span>, <span class="charliteral">&#39;d&#39;</span>, <span class="charliteral">&#39;e&#39;</span>, <span class="charliteral">&#39;f&#39;</span></div><div class="line"><a name="l06322"></a><span class="lineno"> 6322</span>&#160; };</div><div class="line"><a name="l06323"></a><span class="lineno"> 6323</span>&#160;</div><div class="line"><a name="l06324"></a><span class="lineno"> 6324</span>&#160; <span class="comment">// print character c as \uxxxx</span></div><div class="line"><a name="l06325"></a><span class="lineno"> 6325</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keywordtype">char</span> m :</div><div class="line"><a name="l06326"></a><span class="lineno"> 6326</span>&#160; { <span class="charliteral">&#39;u&#39;</span>, <span class="charliteral">&#39;0&#39;</span>, <span class="charliteral">&#39;0&#39;</span>, hexify[c &gt;&gt; 4], hexify[c &amp; 0x0f]</div><div class="line"><a name="l06327"></a><span class="lineno"> 6327</span>&#160; })</div><div class="line"><a name="l06328"></a><span class="lineno"> 6328</span>&#160; {</div><div class="line"><a name="l06329"></a><span class="lineno"> 6329</span>&#160; result[++pos] = m;</div><div class="line"><a name="l06330"></a><span class="lineno"> 6330</span>&#160; }</div><div class="line"><a name="l06331"></a><span class="lineno"> 6331</span>&#160;</div><div class="line"><a name="l06332"></a><span class="lineno"> 6332</span>&#160; ++pos;</div><div class="line"><a name="l06333"></a><span class="lineno"> 6333</span>&#160; }</div><div class="line"><a name="l06334"></a><span class="lineno"> 6334</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l06335"></a><span class="lineno"> 6335</span>&#160; {</div><div class="line"><a name="l06336"></a><span class="lineno"> 6336</span>&#160; <span class="comment">// all other characters are added as-is</span></div><div class="line"><a name="l06337"></a><span class="lineno"> 6337</span>&#160; result[pos++] = c;</div><div class="line"><a name="l06338"></a><span class="lineno"> 6338</span>&#160; }</div><div class="line"><a name="l06339"></a><span class="lineno"> 6339</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l06340"></a><span class="lineno"> 6340</span>&#160; }</div><div class="line"><a name="l06341"></a><span class="lineno"> 6341</span>&#160; }</div><div class="line"><a name="l06342"></a><span class="lineno"> 6342</span>&#160; }</div><div class="line"><a name="l06343"></a><span class="lineno"> 6343</span>&#160;</div><div class="line"><a name="l06344"></a><span class="lineno"> 6344</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l06345"></a><span class="lineno"> 6345</span>&#160; }</div><div class="line"><a name="l06346"></a><span class="lineno"> 6346</span>&#160;</div><div class="line"><a name="l06364"></a><span class="lineno"> 6364</span>&#160; <span class="keywordtype">void</span> dump(std::ostream&amp; o,</div><div class="line"><a name="l06365"></a><span class="lineno"> 6365</span>&#160; <span class="keyword">const</span> <span class="keywordtype">bool</span> pretty_print,</div><div class="line"><a name="l06366"></a><span class="lineno"> 6366</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> indent_step,</div><div class="line"><a name="l06367"></a><span class="lineno"> 6367</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> current_indent = 0)<span class="keyword"> const</span></div><div class="line"><a name="l06368"></a><span class="lineno"> 6368</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l06369"></a><span class="lineno"> 6369</span>&#160; <span class="comment">// variable to hold indentation for recursive calls</span></div><div class="line"><a name="l06370"></a><span class="lineno"> 6370</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> new_indent = current_indent;</div><div class="line"><a name="l06371"></a><span class="lineno"> 6371</span>&#160;</div><div class="line"><a name="l06372"></a><span class="lineno"> 6372</span>&#160; <span class="keywordflow">switch</span> (m_type)</div><div class="line"><a name="l06373"></a><span class="lineno"> 6373</span>&#160; {</div><div class="line"><a name="l06374"></a><span class="lineno"> 6374</span>&#160; <span class="keywordflow">case</span> value_t::object:</div><div class="line"><a name="l06375"></a><span class="lineno"> 6375</span>&#160; {</div><div class="line"><a name="l06376"></a><span class="lineno"> 6376</span>&#160; <span class="keywordflow">if</span> (m_value.object-&gt;empty())</div><div class="line"><a name="l06377"></a><span class="lineno"> 6377</span>&#160; {</div><div class="line"><a name="l06378"></a><span class="lineno"> 6378</span>&#160; o &lt;&lt; <span class="stringliteral">&quot;{}&quot;</span>;</div><div class="line"><a name="l06379"></a><span class="lineno"> 6379</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l06380"></a><span class="lineno"> 6380</span>&#160; }</div><div class="line"><a name="l06381"></a><span class="lineno"> 6381</span>&#160;</div><div class="line"><a name="l06382"></a><span class="lineno"> 6382</span>&#160; o &lt;&lt; <span class="stringliteral">&quot;{&quot;</span>;</div><div class="line"><a name="l06383"></a><span class="lineno"> 6383</span>&#160;</div><div class="line"><a name="l06384"></a><span class="lineno"> 6384</span>&#160; <span class="comment">// increase indentation</span></div><div class="line"><a name="l06385"></a><span class="lineno"> 6385</span>&#160; <span class="keywordflow">if</span> (pretty_print)</div><div class="line"><a name="l06386"></a><span class="lineno"> 6386</span>&#160; {</div><div class="line"><a name="l06387"></a><span class="lineno"> 6387</span>&#160; new_indent += indent_step;</div><div class="line"><a name="l06388"></a><span class="lineno"> 6388</span>&#160; o &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l06389"></a><span class="lineno"> 6389</span>&#160; }</div><div class="line"><a name="l06390"></a><span class="lineno"> 6390</span>&#160;</div><div class="line"><a name="l06391"></a><span class="lineno"> 6391</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> i = m_value.object-&gt;cbegin(); i != m_value.object-&gt;cend(); ++i)</div><div class="line"><a name="l06392"></a><span class="lineno"> 6392</span>&#160; {</div><div class="line"><a name="l06393"></a><span class="lineno"> 6393</span>&#160; <span class="keywordflow">if</span> (i != m_value.object-&gt;cbegin())</div><div class="line"><a name="l06394"></a><span class="lineno"> 6394</span>&#160; {</div><div class="line"><a name="l06395"></a><span class="lineno"> 6395</span>&#160; o &lt;&lt; (pretty_print ? <span class="stringliteral">&quot;,\n&quot;</span> : <span class="stringliteral">&quot;,&quot;</span>);</div><div class="line"><a name="l06396"></a><span class="lineno"> 6396</span>&#160; }</div><div class="line"><a name="l06397"></a><span class="lineno"> 6397</span>&#160; o &lt;&lt; <a class="code" href="classnlohmann_1_1basic__json_ab63e618bbb0371042b1bec17f5891f42.html#ab63e618bbb0371042b1bec17f5891f42">string_t</a>(new_indent, <span class="charliteral">&#39; &#39;</span>) &lt;&lt; <span class="stringliteral">&quot;\&quot;&quot;</span></div><div class="line"><a name="l06398"></a><span class="lineno"> 6398</span>&#160; &lt;&lt; escape_string(i-&gt;first) &lt;&lt; <span class="stringliteral">&quot;\&quot;:&quot;</span></div><div class="line"><a name="l06399"></a><span class="lineno"> 6399</span>&#160; &lt;&lt; (pretty_print ? <span class="stringliteral">&quot; &quot;</span> : <span class="stringliteral">&quot;&quot;</span>);</div><div class="line"><a name="l06400"></a><span class="lineno"> 6400</span>&#160; i-&gt;second.dump(o, pretty_print, indent_step, new_indent);</div><div class="line"><a name="l06401"></a><span class="lineno"> 6401</span>&#160; }</div><div class="line"><a name="l06402"></a><span class="lineno"> 6402</span>&#160;</div><div class="line"><a name="l06403"></a><span class="lineno"> 6403</span>&#160; <span class="comment">// decrease indentation</span></div><div class="line"><a name="l06404"></a><span class="lineno"> 6404</span>&#160; <span class="keywordflow">if</span> (pretty_print)</div><div class="line"><a name="l06405"></a><span class="lineno"> 6405</span>&#160; {</div><div class="line"><a name="l06406"></a><span class="lineno"> 6406</span>&#160; new_indent -= indent_step;</div><div class="line"><a name="l06407"></a><span class="lineno"> 6407</span>&#160; o &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l06408"></a><span class="lineno"> 6408</span>&#160; }</div><div class="line"><a name="l06409"></a><span class="lineno"> 6409</span>&#160;</div><div class="line"><a name="l06410"></a><span class="lineno"> 6410</span>&#160; o &lt;&lt; <a class="code" href="classnlohmann_1_1basic__json_ab63e618bbb0371042b1bec17f5891f42.html#ab63e618bbb0371042b1bec17f5891f42">string_t</a>(new_indent, <span class="charliteral">&#39; &#39;</span>) + <span class="stringliteral">&quot;}&quot;</span>;</div><div class="line"><a name="l06411"></a><span class="lineno"> 6411</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l06412"></a><span class="lineno"> 6412</span>&#160; }</div><div class="line"><a name="l06413"></a><span class="lineno"> 6413</span>&#160;</div><div class="line"><a name="l06414"></a><span class="lineno"> 6414</span>&#160; <span class="keywordflow">case</span> value_t::array:</div><div class="line"><a name="l06415"></a><span class="lineno"> 6415</span>&#160; {</div><div class="line"><a name="l06416"></a><span class="lineno"> 6416</span>&#160; <span class="keywordflow">if</span> (m_value.array-&gt;empty())</div><div class="line"><a name="l06417"></a><span class="lineno"> 6417</span>&#160; {</div><div class="line"><a name="l06418"></a><span class="lineno"> 6418</span>&#160; o &lt;&lt; <span class="stringliteral">&quot;[]&quot;</span>;</div><div class="line"><a name="l06419"></a><span class="lineno"> 6419</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l06420"></a><span class="lineno"> 6420</span>&#160; }</div><div class="line"><a name="l06421"></a><span class="lineno"> 6421</span>&#160;</div><div class="line"><a name="l06422"></a><span class="lineno"> 6422</span>&#160; o &lt;&lt; <span class="stringliteral">&quot;[&quot;</span>;</div><div class="line"><a name="l06423"></a><span class="lineno"> 6423</span>&#160;</div><div class="line"><a name="l06424"></a><span class="lineno"> 6424</span>&#160; <span class="comment">// increase indentation</span></div><div class="line"><a name="l06425"></a><span class="lineno"> 6425</span>&#160; <span class="keywordflow">if</span> (pretty_print)</div><div class="line"><a name="l06426"></a><span class="lineno"> 6426</span>&#160; {</div><div class="line"><a name="l06427"></a><span class="lineno"> 6427</span>&#160; new_indent += indent_step;</div><div class="line"><a name="l06428"></a><span class="lineno"> 6428</span>&#160; o &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l06429"></a><span class="lineno"> 6429</span>&#160; }</div><div class="line"><a name="l06430"></a><span class="lineno"> 6430</span>&#160;</div><div class="line"><a name="l06431"></a><span class="lineno"> 6431</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> i = m_value.array-&gt;cbegin(); i != m_value.array-&gt;cend(); ++i)</div><div class="line"><a name="l06432"></a><span class="lineno"> 6432</span>&#160; {</div><div class="line"><a name="l06433"></a><span class="lineno"> 6433</span>&#160; <span class="keywordflow">if</span> (i != m_value.array-&gt;cbegin())</div><div class="line"><a name="l06434"></a><span class="lineno"> 6434</span>&#160; {</div><div class="line"><a name="l06435"></a><span class="lineno"> 6435</span>&#160; o &lt;&lt; (pretty_print ? <span class="stringliteral">&quot;,\n&quot;</span> : <span class="stringliteral">&quot;,&quot;</span>);</div><div class="line"><a name="l06436"></a><span class="lineno"> 6436</span>&#160; }</div><div class="line"><a name="l06437"></a><span class="lineno"> 6437</span>&#160; o &lt;&lt; <a class="code" href="classnlohmann_1_1basic__json_ab63e618bbb0371042b1bec17f5891f42.html#ab63e618bbb0371042b1bec17f5891f42">string_t</a>(new_indent, <span class="charliteral">&#39; &#39;</span>);</div><div class="line"><a name="l06438"></a><span class="lineno"> 6438</span>&#160; i-&gt;dump(o, pretty_print, indent_step, new_indent);</div><div class="line"><a name="l06439"></a><span class="lineno"> 6439</span>&#160; }</div><div class="line"><a name="l06440"></a><span class="lineno"> 6440</span>&#160;</div><div class="line"><a name="l06441"></a><span class="lineno"> 6441</span>&#160; <span class="comment">// decrease indentation</span></div><div class="line"><a name="l06442"></a><span class="lineno"> 6442</span>&#160; <span class="keywordflow">if</span> (pretty_print)</div><div class="line"><a name="l06443"></a><span class="lineno"> 6443</span>&#160; {</div><div class="line"><a name="l06444"></a><span class="lineno"> 6444</span>&#160; new_indent -= indent_step;</div><div class="line"><a name="l06445"></a><span class="lineno"> 6445</span>&#160; o &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l06446"></a><span class="lineno"> 6446</span>&#160; }</div><div class="line"><a name="l06447"></a><span class="lineno"> 6447</span>&#160;</div><div class="line"><a name="l06448"></a><span class="lineno"> 6448</span>&#160; o &lt;&lt; <a class="code" href="classnlohmann_1_1basic__json_ab63e618bbb0371042b1bec17f5891f42.html#ab63e618bbb0371042b1bec17f5891f42">string_t</a>(new_indent, <span class="charliteral">&#39; &#39;</span>) &lt;&lt; <span class="stringliteral">&quot;]&quot;</span>;</div><div class="line"><a name="l06449"></a><span class="lineno"> 6449</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l06450"></a><span class="lineno"> 6450</span>&#160; }</div><div class="line"><a name="l06451"></a><span class="lineno"> 6451</span>&#160;</div><div class="line"><a name="l06452"></a><span class="lineno"> 6452</span>&#160; <span class="keywordflow">case</span> value_t::string:</div><div class="line"><a name="l06453"></a><span class="lineno"> 6453</span>&#160; {</div><div class="line"><a name="l06454"></a><span class="lineno"> 6454</span>&#160; o &lt;&lt; <a class="code" href="classnlohmann_1_1basic__json_ab63e618bbb0371042b1bec17f5891f42.html#ab63e618bbb0371042b1bec17f5891f42">string_t</a>(<span class="stringliteral">&quot;\&quot;&quot;</span>) &lt;&lt; escape_string(*m_value.string) &lt;&lt; <span class="stringliteral">&quot;\&quot;&quot;</span>;</div><div class="line"><a name="l06455"></a><span class="lineno"> 6455</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l06456"></a><span class="lineno"> 6456</span>&#160; }</div><div class="line"><a name="l06457"></a><span class="lineno"> 6457</span>&#160;</div><div class="line"><a name="l06458"></a><span class="lineno"> 6458</span>&#160; <span class="keywordflow">case</span> value_t::boolean:</div><div class="line"><a name="l06459"></a><span class="lineno"> 6459</span>&#160; {</div><div class="line"><a name="l06460"></a><span class="lineno"> 6460</span>&#160; o &lt;&lt; (m_value.boolean ? <span class="stringliteral">&quot;true&quot;</span> : <span class="stringliteral">&quot;false&quot;</span>);</div><div class="line"><a name="l06461"></a><span class="lineno"> 6461</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l06462"></a><span class="lineno"> 6462</span>&#160; }</div><div class="line"><a name="l06463"></a><span class="lineno"> 6463</span>&#160;</div><div class="line"><a name="l06464"></a><span class="lineno"> 6464</span>&#160; <span class="keywordflow">case</span> value_t::number_integer:</div><div class="line"><a name="l06465"></a><span class="lineno"> 6465</span>&#160; {</div><div class="line"><a name="l06466"></a><span class="lineno"> 6466</span>&#160; o &lt;&lt; m_value.number_integer;</div><div class="line"><a name="l06467"></a><span class="lineno"> 6467</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l06468"></a><span class="lineno"> 6468</span>&#160; }</div><div class="line"><a name="l06469"></a><span class="lineno"> 6469</span>&#160;</div><div class="line"><a name="l06470"></a><span class="lineno"> 6470</span>&#160; <span class="keywordflow">case</span> value_t::number_unsigned:</div><div class="line"><a name="l06471"></a><span class="lineno"> 6471</span>&#160; {</div><div class="line"><a name="l06472"></a><span class="lineno"> 6472</span>&#160; o &lt;&lt; m_value.number_unsigned;</div><div class="line"><a name="l06473"></a><span class="lineno"> 6473</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l06474"></a><span class="lineno"> 6474</span>&#160; }</div><div class="line"><a name="l06475"></a><span class="lineno"> 6475</span>&#160;</div><div class="line"><a name="l06476"></a><span class="lineno"> 6476</span>&#160; <span class="keywordflow">case</span> value_t::number_float:</div><div class="line"><a name="l06477"></a><span class="lineno"> 6477</span>&#160; {</div><div class="line"><a name="l06478"></a><span class="lineno"> 6478</span>&#160; <span class="keywordflow">if</span> (m_value.number_float == 0)</div><div class="line"><a name="l06479"></a><span class="lineno"> 6479</span>&#160; {</div><div class="line"><a name="l06480"></a><span class="lineno"> 6480</span>&#160; <span class="comment">// special case for zero to get &quot;0.0&quot;/&quot;-0.0&quot;</span></div><div class="line"><a name="l06481"></a><span class="lineno"> 6481</span>&#160; o &lt;&lt; (std::signbit(m_value.number_float) ? <span class="stringliteral">&quot;-0.0&quot;</span> : <span class="stringliteral">&quot;0.0&quot;</span>);</div><div class="line"><a name="l06482"></a><span class="lineno"> 6482</span>&#160; }</div><div class="line"><a name="l06483"></a><span class="lineno"> 6483</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l06484"></a><span class="lineno"> 6484</span>&#160; {</div><div class="line"><a name="l06485"></a><span class="lineno"> 6485</span>&#160; o &lt;&lt; m_value.number_float;</div><div class="line"><a name="l06486"></a><span class="lineno"> 6486</span>&#160; }</div><div class="line"><a name="l06487"></a><span class="lineno"> 6487</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l06488"></a><span class="lineno"> 6488</span>&#160; }</div><div class="line"><a name="l06489"></a><span class="lineno"> 6489</span>&#160;</div><div class="line"><a name="l06490"></a><span class="lineno"> 6490</span>&#160; <span class="keywordflow">case</span> value_t::discarded:</div><div class="line"><a name="l06491"></a><span class="lineno"> 6491</span>&#160; {</div><div class="line"><a name="l06492"></a><span class="lineno"> 6492</span>&#160; o &lt;&lt; <span class="stringliteral">&quot;&lt;discarded&gt;&quot;</span>;</div><div class="line"><a name="l06493"></a><span class="lineno"> 6493</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l06494"></a><span class="lineno"> 6494</span>&#160; }</div><div class="line"><a name="l06495"></a><span class="lineno"> 6495</span>&#160;</div><div class="line"><a name="l06496"></a><span class="lineno"> 6496</span>&#160; <span class="keywordflow">case</span> value_t::null:</div><div class="line"><a name="l06497"></a><span class="lineno"> 6497</span>&#160; {</div><div class="line"><a name="l06498"></a><span class="lineno"> 6498</span>&#160; o &lt;&lt; <span class="stringliteral">&quot;null&quot;</span>;</div><div class="line"><a name="l06499"></a><span class="lineno"> 6499</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l06500"></a><span class="lineno"> 6500</span>&#160; }</div><div class="line"><a name="l06501"></a><span class="lineno"> 6501</span>&#160; }</div><div class="line"><a name="l06502"></a><span class="lineno"> 6502</span>&#160; }</div><div class="line"><a name="l06503"></a><span class="lineno"> 6503</span>&#160;</div><div class="line"><a name="l06504"></a><span class="lineno"> 6504</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l06506"></a><span class="lineno"> 6506</span>&#160; <span class="comment">// member variables //</span></div><div class="line"><a name="l06508"></a><span class="lineno"> 6508</span>&#160;<span class="comment"></span></div><div class="line"><a name="l06510"></a><span class="lineno"> 6510</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_a231b02148577b69a154b2ce2c87a5522.html#a231b02148577b69a154b2ce2c87a5522">value_t</a> m_type = value_t::null;</div><div class="line"><a name="l06511"></a><span class="lineno"> 6511</span>&#160;</div><div class="line"><a name="l06513"></a><span class="lineno"> 6513</span>&#160; json_value m_value = {};</div><div class="line"><a name="l06514"></a><span class="lineno"> 6514</span>&#160;</div><div class="line"><a name="l06515"></a><span class="lineno"> 6515</span>&#160;</div><div class="line"><a name="l06516"></a><span class="lineno"> 6516</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l06518"></a><span class="lineno"> 6518</span>&#160; <span class="comment">// iterators //</span></div><div class="line"><a name="l06520"></a><span class="lineno"> 6520</span>&#160;<span class="comment"></span></div><div class="line"><a name="l06530"></a><span class="lineno"> 6530</span>&#160; <span class="keyword">class </span>primitive_iterator_t</div><div class="line"><a name="l06531"></a><span class="lineno"> 6531</span>&#160; {</div><div class="line"><a name="l06532"></a><span class="lineno"> 6532</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l06534"></a><span class="lineno"> 6534</span>&#160; <span class="keywordtype">void</span> set_begin() noexcept</div><div class="line"><a name="l06535"></a><span class="lineno"> 6535</span>&#160; {</div><div class="line"><a name="l06536"></a><span class="lineno"> 6536</span>&#160; m_it = begin_value;</div><div class="line"><a name="l06537"></a><span class="lineno"> 6537</span>&#160; }</div><div class="line"><a name="l06538"></a><span class="lineno"> 6538</span>&#160;</div><div class="line"><a name="l06540"></a><span class="lineno"> 6540</span>&#160; <span class="keywordtype">void</span> set_end() noexcept</div><div class="line"><a name="l06541"></a><span class="lineno"> 6541</span>&#160; {</div><div class="line"><a name="l06542"></a><span class="lineno"> 6542</span>&#160; m_it = end_value;</div><div class="line"><a name="l06543"></a><span class="lineno"> 6543</span>&#160; }</div><div class="line"><a name="l06544"></a><span class="lineno"> 6544</span>&#160;</div><div class="line"><a name="l06546"></a><span class="lineno"> 6546</span>&#160; constexpr <span class="keywordtype">bool</span> is_begin() <span class="keyword">const</span> noexcept</div><div class="line"><a name="l06547"></a><span class="lineno"> 6547</span>&#160; {</div><div class="line"><a name="l06548"></a><span class="lineno"> 6548</span>&#160; <span class="keywordflow">return</span> (m_it == begin_value);</div><div class="line"><a name="l06549"></a><span class="lineno"> 6549</span>&#160; }</div><div class="line"><a name="l06550"></a><span class="lineno"> 6550</span>&#160;</div><div class="line"><a name="l06552"></a><span class="lineno"> 6552</span>&#160; constexpr <span class="keywordtype">bool</span> is_end() <span class="keyword">const</span> noexcept</div><div class="line"><a name="l06553"></a><span class="lineno"> 6553</span>&#160; {</div><div class="line"><a name="l06554"></a><span class="lineno"> 6554</span>&#160; <span class="keywordflow">return</span> (m_it == end_value);</div><div class="line"><a name="l06555"></a><span class="lineno"> 6555</span>&#160; }</div><div class="line"><a name="l06556"></a><span class="lineno"> 6556</span>&#160;</div><div class="line"><a name="l06558"></a><span class="lineno"> 6558</span>&#160; <span class="keyword">operator</span> <a class="code" href="classnlohmann_1_1basic__json_aec316934a555dd1acdd3600e5d4a4cdf.html#aec316934a555dd1acdd3600e5d4a4cdf">difference_type</a>&amp; () noexcept</div><div class="line"><a name="l06559"></a><span class="lineno"> 6559</span>&#160; {</div><div class="line"><a name="l06560"></a><span class="lineno"> 6560</span>&#160; <span class="keywordflow">return</span> m_it;</div><div class="line"><a name="l06561"></a><span class="lineno"> 6561</span>&#160; }</div><div class="line"><a name="l06562"></a><span class="lineno"> 6562</span>&#160;</div><div class="line"><a name="l06564"></a><span class="lineno"> 6564</span>&#160; constexpr <span class="keyword">operator</span> <a class="code" href="classnlohmann_1_1basic__json_aec316934a555dd1acdd3600e5d4a4cdf.html#aec316934a555dd1acdd3600e5d4a4cdf">difference_type</a> () <span class="keyword">const</span> noexcept</div><div class="line"><a name="l06565"></a><span class="lineno"> 6565</span>&#160; {</div><div class="line"><a name="l06566"></a><span class="lineno"> 6566</span>&#160; <span class="keywordflow">return</span> m_it;</div><div class="line"><a name="l06567"></a><span class="lineno"> 6567</span>&#160; }</div><div class="line"><a name="l06568"></a><span class="lineno"> 6568</span>&#160;</div><div class="line"><a name="l06569"></a><span class="lineno"> 6569</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l06570"></a><span class="lineno"> 6570</span>&#160; <span class="keyword">static</span> constexpr <a class="code" href="classnlohmann_1_1basic__json_aec316934a555dd1acdd3600e5d4a4cdf.html#aec316934a555dd1acdd3600e5d4a4cdf">difference_type</a> begin_value = 0;</div><div class="line"><a name="l06571"></a><span class="lineno"> 6571</span>&#160; <span class="keyword">static</span> constexpr <a class="code" href="classnlohmann_1_1basic__json_aec316934a555dd1acdd3600e5d4a4cdf.html#aec316934a555dd1acdd3600e5d4a4cdf">difference_type</a> end_value = begin_value + 1;</div><div class="line"><a name="l06572"></a><span class="lineno"> 6572</span>&#160;</div><div class="line"><a name="l06574"></a><span class="lineno"> 6574</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_aec316934a555dd1acdd3600e5d4a4cdf.html#aec316934a555dd1acdd3600e5d4a4cdf">difference_type</a> m_it = std::numeric_limits&lt;std::ptrdiff_t&gt;::denorm_min();</div><div class="line"><a name="l06575"></a><span class="lineno"> 6575</span>&#160; };</div><div class="line"><a name="l06576"></a><span class="lineno"> 6576</span>&#160;</div><div class="line"><a name="l06584"></a><span class="lineno"> 6584</span>&#160; <span class="keyword">struct </span>internal_iterator</div><div class="line"><a name="l06585"></a><span class="lineno"> 6585</span>&#160; {</div><div class="line"><a name="l06587"></a><span class="lineno"> 6587</span>&#160; <span class="keyword">typename</span> object_t::iterator object_iterator;</div><div class="line"><a name="l06589"></a><span class="lineno"> 6589</span>&#160; <span class="keyword">typename</span> array_t::iterator array_iterator;</div><div class="line"><a name="l06591"></a><span class="lineno"> 6591</span>&#160; primitive_iterator_t primitive_iterator;</div><div class="line"><a name="l06592"></a><span class="lineno"> 6592</span>&#160;</div><div class="line"><a name="l06594"></a><span class="lineno"> 6594</span>&#160; internal_iterator() noexcept</div><div class="line"><a name="l06595"></a><span class="lineno"> 6595</span>&#160; : object_iterator(), array_iterator(), primitive_iterator()</div><div class="line"><a name="l06596"></a><span class="lineno"> 6596</span>&#160; {}</div><div class="line"><a name="l06597"></a><span class="lineno"> 6597</span>&#160; };</div><div class="line"><a name="l06598"></a><span class="lineno"> 6598</span>&#160;</div><div class="line"><a name="l06600"></a><span class="lineno"> 6600</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> IteratorType&gt;</div><div class="line"><a name="l06601"></a><span class="lineno"> 6601</span>&#160; <span class="keyword">class </span>iteration_proxy</div><div class="line"><a name="l06602"></a><span class="lineno"> 6602</span>&#160; {</div><div class="line"><a name="l06603"></a><span class="lineno"> 6603</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l06605"></a><span class="lineno"> 6605</span>&#160; <span class="keyword">class </span>iteration_proxy_internal</div><div class="line"><a name="l06606"></a><span class="lineno"> 6606</span>&#160; {</div><div class="line"><a name="l06607"></a><span class="lineno"> 6607</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l06609"></a><span class="lineno"> 6609</span>&#160; IteratorType anchor;</div><div class="line"><a name="l06611"></a><span class="lineno"> 6611</span>&#160; <span class="keywordtype">size_t</span> array_index = 0;</div><div class="line"><a name="l06612"></a><span class="lineno"> 6612</span>&#160;</div><div class="line"><a name="l06613"></a><span class="lineno"> 6613</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l06614"></a><span class="lineno"> 6614</span>&#160; <span class="keyword">explicit</span> iteration_proxy_internal(IteratorType it) noexcept</div><div class="line"><a name="l06615"></a><span class="lineno"> 6615</span>&#160; : anchor(it)</div><div class="line"><a name="l06616"></a><span class="lineno"> 6616</span>&#160; {}</div><div class="line"><a name="l06617"></a><span class="lineno"> 6617</span>&#160;</div><div class="line"><a name="l06619"></a><span class="lineno"> 6619</span>&#160; iteration_proxy_internal&amp; operator*()</div><div class="line"><a name="l06620"></a><span class="lineno"> 6620</span>&#160; {</div><div class="line"><a name="l06621"></a><span class="lineno"> 6621</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l06622"></a><span class="lineno"> 6622</span>&#160; }</div><div class="line"><a name="l06623"></a><span class="lineno"> 6623</span>&#160;</div><div class="line"><a name="l06625"></a><span class="lineno"> 6625</span>&#160; iteration_proxy_internal&amp; operator++()</div><div class="line"><a name="l06626"></a><span class="lineno"> 6626</span>&#160; {</div><div class="line"><a name="l06627"></a><span class="lineno"> 6627</span>&#160; ++anchor;</div><div class="line"><a name="l06628"></a><span class="lineno"> 6628</span>&#160; ++array_index;</div><div class="line"><a name="l06629"></a><span class="lineno"> 6629</span>&#160;</div><div class="line"><a name="l06630"></a><span class="lineno"> 6630</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l06631"></a><span class="lineno"> 6631</span>&#160; }</div><div class="line"><a name="l06632"></a><span class="lineno"> 6632</span>&#160;</div><div class="line"><a name="l06634"></a><span class="lineno"> 6634</span>&#160; <span class="keywordtype">bool</span> operator!= (<span class="keyword">const</span> iteration_proxy_internal&amp; o)<span class="keyword"> const</span></div><div class="line"><a name="l06635"></a><span class="lineno"> 6635</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l06636"></a><span class="lineno"> 6636</span>&#160; <span class="keywordflow">return</span> anchor != o.anchor;</div><div class="line"><a name="l06637"></a><span class="lineno"> 6637</span>&#160; }</div><div class="line"><a name="l06638"></a><span class="lineno"> 6638</span>&#160;</div><div class="line"><a name="l06640"></a><span class="lineno"> 6640</span>&#160; <span class="keyword">typename</span> <a class="code" href="classnlohmann_1_1basic__json_ab63e618bbb0371042b1bec17f5891f42.html#ab63e618bbb0371042b1bec17f5891f42">basic_json::string_t</a> key()<span class="keyword"> const</span></div><div class="line"><a name="l06641"></a><span class="lineno"> 6641</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l06642"></a><span class="lineno"> 6642</span>&#160; assert(anchor.m_object != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l06643"></a><span class="lineno"> 6643</span>&#160;</div><div class="line"><a name="l06644"></a><span class="lineno"> 6644</span>&#160; <span class="keywordflow">switch</span> (anchor.m_object-&gt;type())</div><div class="line"><a name="l06645"></a><span class="lineno"> 6645</span>&#160; {</div><div class="line"><a name="l06646"></a><span class="lineno"> 6646</span>&#160; <span class="comment">// use integer array index as key</span></div><div class="line"><a name="l06647"></a><span class="lineno"> 6647</span>&#160; <span class="keywordflow">case</span> value_t::array:</div><div class="line"><a name="l06648"></a><span class="lineno"> 6648</span>&#160; {</div><div class="line"><a name="l06649"></a><span class="lineno"> 6649</span>&#160; <span class="keywordflow">return</span> std::to_string(array_index);</div><div class="line"><a name="l06650"></a><span class="lineno"> 6650</span>&#160; }</div><div class="line"><a name="l06651"></a><span class="lineno"> 6651</span>&#160;</div><div class="line"><a name="l06652"></a><span class="lineno"> 6652</span>&#160; <span class="comment">// use key from the object</span></div><div class="line"><a name="l06653"></a><span class="lineno"> 6653</span>&#160; <span class="keywordflow">case</span> value_t::object:</div><div class="line"><a name="l06654"></a><span class="lineno"> 6654</span>&#160; {</div><div class="line"><a name="l06655"></a><span class="lineno"> 6655</span>&#160; <span class="keywordflow">return</span> anchor.key();</div><div class="line"><a name="l06656"></a><span class="lineno"> 6656</span>&#160; }</div><div class="line"><a name="l06657"></a><span class="lineno"> 6657</span>&#160;</div><div class="line"><a name="l06658"></a><span class="lineno"> 6658</span>&#160; <span class="comment">// use an empty key for all primitive types</span></div><div class="line"><a name="l06659"></a><span class="lineno"> 6659</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l06660"></a><span class="lineno"> 6660</span>&#160; {</div><div class="line"><a name="l06661"></a><span class="lineno"> 6661</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;&quot;</span>;</div><div class="line"><a name="l06662"></a><span class="lineno"> 6662</span>&#160; }</div><div class="line"><a name="l06663"></a><span class="lineno"> 6663</span>&#160; }</div><div class="line"><a name="l06664"></a><span class="lineno"> 6664</span>&#160; }</div><div class="line"><a name="l06665"></a><span class="lineno"> 6665</span>&#160;</div><div class="line"><a name="l06667"></a><span class="lineno"> 6667</span>&#160; <span class="keyword">typename</span> IteratorType::reference value()<span class="keyword"> const</span></div><div class="line"><a name="l06668"></a><span class="lineno"> 6668</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l06669"></a><span class="lineno"> 6669</span>&#160; <span class="keywordflow">return</span> anchor.value();</div><div class="line"><a name="l06670"></a><span class="lineno"> 6670</span>&#160; }</div><div class="line"><a name="l06671"></a><span class="lineno"> 6671</span>&#160; };</div><div class="line"><a name="l06672"></a><span class="lineno"> 6672</span>&#160;</div><div class="line"><a name="l06674"></a><span class="lineno"> 6674</span>&#160; <span class="keyword">typename</span> IteratorType::reference container;</div><div class="line"><a name="l06675"></a><span class="lineno"> 6675</span>&#160;</div><div class="line"><a name="l06676"></a><span class="lineno"> 6676</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l06678"></a><span class="lineno"> 6678</span>&#160; <span class="keyword">explicit</span> iteration_proxy(<span class="keyword">typename</span> IteratorType::reference cont)</div><div class="line"><a name="l06679"></a><span class="lineno"> 6679</span>&#160; : container(cont)</div><div class="line"><a name="l06680"></a><span class="lineno"> 6680</span>&#160; {}</div><div class="line"><a name="l06681"></a><span class="lineno"> 6681</span>&#160;</div><div class="line"><a name="l06683"></a><span class="lineno"> 6683</span>&#160; iteration_proxy_internal begin() noexcept</div><div class="line"><a name="l06684"></a><span class="lineno"> 6684</span>&#160; {</div><div class="line"><a name="l06685"></a><span class="lineno"> 6685</span>&#160; <span class="keywordflow">return</span> iteration_proxy_internal(container.begin());</div><div class="line"><a name="l06686"></a><span class="lineno"> 6686</span>&#160; }</div><div class="line"><a name="l06687"></a><span class="lineno"> 6687</span>&#160;</div><div class="line"><a name="l06689"></a><span class="lineno"> 6689</span>&#160; iteration_proxy_internal end() noexcept</div><div class="line"><a name="l06690"></a><span class="lineno"> 6690</span>&#160; {</div><div class="line"><a name="l06691"></a><span class="lineno"> 6691</span>&#160; <span class="keywordflow">return</span> iteration_proxy_internal(container.end());</div><div class="line"><a name="l06692"></a><span class="lineno"> 6692</span>&#160; }</div><div class="line"><a name="l06693"></a><span class="lineno"> 6693</span>&#160; };</div><div class="line"><a name="l06694"></a><span class="lineno"> 6694</span>&#160;</div><div class="line"><a name="l06695"></a><span class="lineno"> 6695</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l06715"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1const__iterator.html"> 6715</a></span>&#160; <span class="keyword">class </span><a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator.html">const_iterator</a> : <span class="keyword">public</span> std::iterator&lt;std::random_access_iterator_tag, const basic_json&gt;</div><div class="line"><a name="l06716"></a><span class="lineno"> 6716</span>&#160; {</div><div class="line"><a name="l06718"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1const__iterator_ada3100cdb8700566051828f1355fa745.html#ada3100cdb8700566051828f1355fa745"> 6718</a></span>&#160; <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator_ada3100cdb8700566051828f1355fa745.html#ada3100cdb8700566051828f1355fa745">basic_json</a>;</div><div class="line"><a name="l06719"></a><span class="lineno"> 6719</span>&#160;</div><div class="line"><a name="l06720"></a><span class="lineno"> 6720</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l06722"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1const__iterator_a9ea0497199b1e96ce9cadd1f202ec343.html#a9ea0497199b1e96ce9cadd1f202ec343"> 6722</a></span>&#160; <span class="keyword">using</span> <a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator_a9ea0497199b1e96ce9cadd1f202ec343.html#a9ea0497199b1e96ce9cadd1f202ec343">value_type</a> = <span class="keyword">typename</span> <a class="code" href="classnlohmann_1_1basic__json_ac8d45b57874b4a6e9c07f7d3b5daa1f9.html#ac8d45b57874b4a6e9c07f7d3b5daa1f9">basic_json::value_type</a>;</div><div class="line"><a name="l06724"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1const__iterator_a49d7c3e9ef3280df03052cce988b792f.html#a49d7c3e9ef3280df03052cce988b792f"> 6724</a></span>&#160; <span class="keyword">using</span> <a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator_a49d7c3e9ef3280df03052cce988b792f.html#a49d7c3e9ef3280df03052cce988b792f">difference_type</a> = <span class="keyword">typename</span> <a class="code" href="classnlohmann_1_1basic__json_aec316934a555dd1acdd3600e5d4a4cdf.html#aec316934a555dd1acdd3600e5d4a4cdf">basic_json::difference_type</a>;</div><div class="line"><a name="l06726"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1const__iterator_a1da96fc3054d547e7706d3a2f073f389.html#a1da96fc3054d547e7706d3a2f073f389"> 6726</a></span>&#160; <span class="keyword">using</span> <a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator_a1da96fc3054d547e7706d3a2f073f389.html#a1da96fc3054d547e7706d3a2f073f389">pointer</a> = <span class="keyword">typename</span> <a class="code" href="classnlohmann_1_1basic__json_a06efb200b69942eacd1ea22d0f6ccebb.html#a06efb200b69942eacd1ea22d0f6ccebb">basic_json::const_pointer</a>;</div><div class="line"><a name="l06728"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1const__iterator_aefd248cac6493eed1e6ff53ba6a63eb2.html#aefd248cac6493eed1e6ff53ba6a63eb2"> 6728</a></span>&#160; <span class="keyword">using</span> <a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator_aefd248cac6493eed1e6ff53ba6a63eb2.html#aefd248cac6493eed1e6ff53ba6a63eb2">reference</a> = <span class="keyword">typename</span> <a class="code" href="classnlohmann_1_1basic__json_af677a29b0e66edc9f66e5167e4667071.html#af677a29b0e66edc9f66e5167e4667071">basic_json::const_reference</a>;</div><div class="line"><a name="l06730"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1const__iterator_a821560d64f50525162097f19b1392e7f.html#a821560d64f50525162097f19b1392e7f"> 6730</a></span>&#160; <span class="keyword">using</span> <a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator_a821560d64f50525162097f19b1392e7f.html#a821560d64f50525162097f19b1392e7f">iterator_category</a> = std::bidirectional_iterator_tag;</div><div class="line"><a name="l06731"></a><span class="lineno"> 6731</span>&#160;</div><div class="line"><a name="l06733"></a><span class="lineno"> 6733</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator.html">const_iterator</a>() = <span class="keywordflow">default</span>;</div><div class="line"><a name="l06734"></a><span class="lineno"> 6734</span>&#160;</div><div class="line"><a name="l06741"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1const__iterator_a23de834b11bd895209aa65c100ab9ceb.html#a23de834b11bd895209aa65c100ab9ceb"> 6741</a></span>&#160; <span class="keyword">explicit</span> <a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator_a23de834b11bd895209aa65c100ab9ceb.html#a23de834b11bd895209aa65c100ab9ceb">const_iterator</a>(<a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator_a1da96fc3054d547e7706d3a2f073f389.html#a1da96fc3054d547e7706d3a2f073f389">pointer</a> <span class="keywordtype">object</span>) noexcept</div><div class="line"><a name="l06742"></a><span class="lineno"> 6742</span>&#160; : m_object(<span class="keywordtype">object</span>)</div><div class="line"><a name="l06743"></a><span class="lineno"> 6743</span>&#160; {</div><div class="line"><a name="l06744"></a><span class="lineno"> 6744</span>&#160; assert(m_object != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l06745"></a><span class="lineno"> 6745</span>&#160;</div><div class="line"><a name="l06746"></a><span class="lineno"> 6746</span>&#160; <span class="keywordflow">switch</span> (m_object-&gt;m_type)</div><div class="line"><a name="l06747"></a><span class="lineno"> 6747</span>&#160; {</div><div class="line"><a name="l06748"></a><span class="lineno"> 6748</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classnlohmann_1_1basic__json_a231b02148577b69a154b2ce2c87a5522.html#a231b02148577b69a154b2ce2c87a5522aa8cfde6331bd59eb2ac96f8911c4b666">basic_json::value_t::object</a>:</div><div class="line"><a name="l06749"></a><span class="lineno"> 6749</span>&#160; {</div><div class="line"><a name="l06750"></a><span class="lineno"> 6750</span>&#160; m_it.object_iterator = <span class="keyword">typename</span> object_t::iterator();</div><div class="line"><a name="l06751"></a><span class="lineno"> 6751</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l06752"></a><span class="lineno"> 6752</span>&#160; }</div><div class="line"><a name="l06753"></a><span class="lineno"> 6753</span>&#160;</div><div class="line"><a name="l06754"></a><span class="lineno"> 6754</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classnlohmann_1_1basic__json_a231b02148577b69a154b2ce2c87a5522.html#a231b02148577b69a154b2ce2c87a5522af1f713c9e000f5d3f280adbd124df4f5">basic_json::value_t::array</a>:</div><div class="line"><a name="l06755"></a><span class="lineno"> 6755</span>&#160; {</div><div class="line"><a name="l06756"></a><span class="lineno"> 6756</span>&#160; m_it.array_iterator = <span class="keyword">typename</span> array_t::iterator();</div><div class="line"><a name="l06757"></a><span class="lineno"> 6757</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l06758"></a><span class="lineno"> 6758</span>&#160; }</div><div class="line"><a name="l06759"></a><span class="lineno"> 6759</span>&#160;</div><div class="line"><a name="l06760"></a><span class="lineno"> 6760</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l06761"></a><span class="lineno"> 6761</span>&#160; {</div><div class="line"><a name="l06762"></a><span class="lineno"> 6762</span>&#160; m_it.primitive_iterator = primitive_iterator_t();</div><div class="line"><a name="l06763"></a><span class="lineno"> 6763</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l06764"></a><span class="lineno"> 6764</span>&#160; }</div><div class="line"><a name="l06765"></a><span class="lineno"> 6765</span>&#160; }</div><div class="line"><a name="l06766"></a><span class="lineno"> 6766</span>&#160; }</div><div class="line"><a name="l06767"></a><span class="lineno"> 6767</span>&#160;</div><div class="line"><a name="l06773"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1const__iterator_a6b950c6bc081ac1ec1540ec05ceb2603.html#a6b950c6bc081ac1ec1540ec05ceb2603"> 6773</a></span>&#160; <span class="keyword">explicit</span> <a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator_a6b950c6bc081ac1ec1540ec05ceb2603.html#a6b950c6bc081ac1ec1540ec05ceb2603">const_iterator</a>(<span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_1_1iterator.html">iterator</a>&amp; other) noexcept</div><div class="line"><a name="l06774"></a><span class="lineno"> 6774</span>&#160; : m_object(other.m_object)</div><div class="line"><a name="l06775"></a><span class="lineno"> 6775</span>&#160; {</div><div class="line"><a name="l06776"></a><span class="lineno"> 6776</span>&#160; <span class="keywordflow">if</span> (m_object != <span class="keyword">nullptr</span>)</div><div class="line"><a name="l06777"></a><span class="lineno"> 6777</span>&#160; {</div><div class="line"><a name="l06778"></a><span class="lineno"> 6778</span>&#160; <span class="keywordflow">switch</span> (m_object-&gt;m_type)</div><div class="line"><a name="l06779"></a><span class="lineno"> 6779</span>&#160; {</div><div class="line"><a name="l06780"></a><span class="lineno"> 6780</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classnlohmann_1_1basic__json_a231b02148577b69a154b2ce2c87a5522.html#a231b02148577b69a154b2ce2c87a5522aa8cfde6331bd59eb2ac96f8911c4b666">basic_json::value_t::object</a>:</div><div class="line"><a name="l06781"></a><span class="lineno"> 6781</span>&#160; {</div><div class="line"><a name="l06782"></a><span class="lineno"> 6782</span>&#160; m_it.object_iterator = other.m_it.object_iterator;</div><div class="line"><a name="l06783"></a><span class="lineno"> 6783</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l06784"></a><span class="lineno"> 6784</span>&#160; }</div><div class="line"><a name="l06785"></a><span class="lineno"> 6785</span>&#160;</div><div class="line"><a name="l06786"></a><span class="lineno"> 6786</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classnlohmann_1_1basic__json_a231b02148577b69a154b2ce2c87a5522.html#a231b02148577b69a154b2ce2c87a5522af1f713c9e000f5d3f280adbd124df4f5">basic_json::value_t::array</a>:</div><div class="line"><a name="l06787"></a><span class="lineno"> 6787</span>&#160; {</div><div class="line"><a name="l06788"></a><span class="lineno"> 6788</span>&#160; m_it.array_iterator = other.m_it.array_iterator;</div><div class="line"><a name="l06789"></a><span class="lineno"> 6789</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l06790"></a><span class="lineno"> 6790</span>&#160; }</div><div class="line"><a name="l06791"></a><span class="lineno"> 6791</span>&#160;</div><div class="line"><a name="l06792"></a><span class="lineno"> 6792</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l06793"></a><span class="lineno"> 6793</span>&#160; {</div><div class="line"><a name="l06794"></a><span class="lineno"> 6794</span>&#160; m_it.primitive_iterator = other.m_it.primitive_iterator;</div><div class="line"><a name="l06795"></a><span class="lineno"> 6795</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l06796"></a><span class="lineno"> 6796</span>&#160; }</div><div class="line"><a name="l06797"></a><span class="lineno"> 6797</span>&#160; }</div><div class="line"><a name="l06798"></a><span class="lineno"> 6798</span>&#160; }</div><div class="line"><a name="l06799"></a><span class="lineno"> 6799</span>&#160; }</div><div class="line"><a name="l06800"></a><span class="lineno"> 6800</span>&#160;</div><div class="line"><a name="l06806"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1const__iterator_a18c35a6735d3da96b4fc026421c05dd8.html#a18c35a6735d3da96b4fc026421c05dd8"> 6806</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator_a18c35a6735d3da96b4fc026421c05dd8.html#a18c35a6735d3da96b4fc026421c05dd8">const_iterator</a>(<span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator.html">const_iterator</a>&amp; other) noexcept</div><div class="line"><a name="l06807"></a><span class="lineno"> 6807</span>&#160; : m_object(other.m_object), m_it(other.m_it)</div><div class="line"><a name="l06808"></a><span class="lineno"> 6808</span>&#160; {}</div><div class="line"><a name="l06809"></a><span class="lineno"> 6809</span>&#160;</div><div class="line"><a name="l06815"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1const__iterator_a2b6561a7b39b9aa3a220aa3b6e2d9589.html#a2b6561a7b39b9aa3a220aa3b6e2d9589"> 6815</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator.html">const_iterator</a>&amp; <a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator_a2b6561a7b39b9aa3a220aa3b6e2d9589.html#a2b6561a7b39b9aa3a220aa3b6e2d9589">operator=</a>(<a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator.html">const_iterator</a> other) noexcept(</div><div class="line"><a name="l06816"></a><span class="lineno"> 6816</span>&#160; std::is_nothrow_move_constructible&lt;pointer&gt;::value and</div><div class="line"><a name="l06817"></a><span class="lineno"> 6817</span>&#160; std::is_nothrow_move_assignable&lt;pointer&gt;::value and</div><div class="line"><a name="l06818"></a><span class="lineno"> 6818</span>&#160; std::is_nothrow_move_constructible&lt;internal_iterator&gt;::value and</div><div class="line"><a name="l06819"></a><span class="lineno"> 6819</span>&#160; std::is_nothrow_move_assignable&lt;internal_iterator&gt;::value</div><div class="line"><a name="l06820"></a><span class="lineno"> 6820</span>&#160; )</div><div class="line"><a name="l06821"></a><span class="lineno"> 6821</span>&#160; {</div><div class="line"><a name="l06822"></a><span class="lineno"> 6822</span>&#160; std::swap(m_object, other.m_object);</div><div class="line"><a name="l06823"></a><span class="lineno"> 6823</span>&#160; std::swap(m_it, other.m_it);</div><div class="line"><a name="l06824"></a><span class="lineno"> 6824</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l06825"></a><span class="lineno"> 6825</span>&#160; }</div><div class="line"><a name="l06826"></a><span class="lineno"> 6826</span>&#160;</div><div class="line"><a name="l06827"></a><span class="lineno"> 6827</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l06832"></a><span class="lineno"> 6832</span>&#160; <span class="keywordtype">void</span> set_begin() noexcept</div><div class="line"><a name="l06833"></a><span class="lineno"> 6833</span>&#160; {</div><div class="line"><a name="l06834"></a><span class="lineno"> 6834</span>&#160; assert(m_object != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l06835"></a><span class="lineno"> 6835</span>&#160;</div><div class="line"><a name="l06836"></a><span class="lineno"> 6836</span>&#160; <span class="keywordflow">switch</span> (m_object-&gt;m_type)</div><div class="line"><a name="l06837"></a><span class="lineno"> 6837</span>&#160; {</div><div class="line"><a name="l06838"></a><span class="lineno"> 6838</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classnlohmann_1_1basic__json_a231b02148577b69a154b2ce2c87a5522.html#a231b02148577b69a154b2ce2c87a5522aa8cfde6331bd59eb2ac96f8911c4b666">basic_json::value_t::object</a>:</div><div class="line"><a name="l06839"></a><span class="lineno"> 6839</span>&#160; {</div><div class="line"><a name="l06840"></a><span class="lineno"> 6840</span>&#160; m_it.object_iterator = m_object-&gt;m_value.object-&gt;begin();</div><div class="line"><a name="l06841"></a><span class="lineno"> 6841</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l06842"></a><span class="lineno"> 6842</span>&#160; }</div><div class="line"><a name="l06843"></a><span class="lineno"> 6843</span>&#160;</div><div class="line"><a name="l06844"></a><span class="lineno"> 6844</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classnlohmann_1_1basic__json_a231b02148577b69a154b2ce2c87a5522.html#a231b02148577b69a154b2ce2c87a5522af1f713c9e000f5d3f280adbd124df4f5">basic_json::value_t::array</a>:</div><div class="line"><a name="l06845"></a><span class="lineno"> 6845</span>&#160; {</div><div class="line"><a name="l06846"></a><span class="lineno"> 6846</span>&#160; m_it.array_iterator = m_object-&gt;m_value.array-&gt;begin();</div><div class="line"><a name="l06847"></a><span class="lineno"> 6847</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l06848"></a><span class="lineno"> 6848</span>&#160; }</div><div class="line"><a name="l06849"></a><span class="lineno"> 6849</span>&#160;</div><div class="line"><a name="l06850"></a><span class="lineno"> 6850</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classnlohmann_1_1basic__json_a231b02148577b69a154b2ce2c87a5522.html#a231b02148577b69a154b2ce2c87a5522a37a6259cc0c1dae299a7866489dff0bd">basic_json::value_t::null</a>:</div><div class="line"><a name="l06851"></a><span class="lineno"> 6851</span>&#160; {</div><div class="line"><a name="l06852"></a><span class="lineno"> 6852</span>&#160; <span class="comment">// set to end so begin()==end() is true: null is empty</span></div><div class="line"><a name="l06853"></a><span class="lineno"> 6853</span>&#160; m_it.primitive_iterator.set_end();</div><div class="line"><a name="l06854"></a><span class="lineno"> 6854</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l06855"></a><span class="lineno"> 6855</span>&#160; }</div><div class="line"><a name="l06856"></a><span class="lineno"> 6856</span>&#160;</div><div class="line"><a name="l06857"></a><span class="lineno"> 6857</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l06858"></a><span class="lineno"> 6858</span>&#160; {</div><div class="line"><a name="l06859"></a><span class="lineno"> 6859</span>&#160; m_it.primitive_iterator.set_begin();</div><div class="line"><a name="l06860"></a><span class="lineno"> 6860</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l06861"></a><span class="lineno"> 6861</span>&#160; }</div><div class="line"><a name="l06862"></a><span class="lineno"> 6862</span>&#160; }</div><div class="line"><a name="l06863"></a><span class="lineno"> 6863</span>&#160; }</div><div class="line"><a name="l06864"></a><span class="lineno"> 6864</span>&#160;</div><div class="line"><a name="l06869"></a><span class="lineno"> 6869</span>&#160; <span class="keywordtype">void</span> set_end() noexcept</div><div class="line"><a name="l06870"></a><span class="lineno"> 6870</span>&#160; {</div><div class="line"><a name="l06871"></a><span class="lineno"> 6871</span>&#160; assert(m_object != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l06872"></a><span class="lineno"> 6872</span>&#160;</div><div class="line"><a name="l06873"></a><span class="lineno"> 6873</span>&#160; <span class="keywordflow">switch</span> (m_object-&gt;m_type)</div><div class="line"><a name="l06874"></a><span class="lineno"> 6874</span>&#160; {</div><div class="line"><a name="l06875"></a><span class="lineno"> 6875</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classnlohmann_1_1basic__json_a231b02148577b69a154b2ce2c87a5522.html#a231b02148577b69a154b2ce2c87a5522aa8cfde6331bd59eb2ac96f8911c4b666">basic_json::value_t::object</a>:</div><div class="line"><a name="l06876"></a><span class="lineno"> 6876</span>&#160; {</div><div class="line"><a name="l06877"></a><span class="lineno"> 6877</span>&#160; m_it.object_iterator = m_object-&gt;m_value.object-&gt;end();</div><div class="line"><a name="l06878"></a><span class="lineno"> 6878</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l06879"></a><span class="lineno"> 6879</span>&#160; }</div><div class="line"><a name="l06880"></a><span class="lineno"> 6880</span>&#160;</div><div class="line"><a name="l06881"></a><span class="lineno"> 6881</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classnlohmann_1_1basic__json_a231b02148577b69a154b2ce2c87a5522.html#a231b02148577b69a154b2ce2c87a5522af1f713c9e000f5d3f280adbd124df4f5">basic_json::value_t::array</a>:</div><div class="line"><a name="l06882"></a><span class="lineno"> 6882</span>&#160; {</div><div class="line"><a name="l06883"></a><span class="lineno"> 6883</span>&#160; m_it.array_iterator = m_object-&gt;m_value.array-&gt;end();</div><div class="line"><a name="l06884"></a><span class="lineno"> 6884</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l06885"></a><span class="lineno"> 6885</span>&#160; }</div><div class="line"><a name="l06886"></a><span class="lineno"> 6886</span>&#160;</div><div class="line"><a name="l06887"></a><span class="lineno"> 6887</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l06888"></a><span class="lineno"> 6888</span>&#160; {</div><div class="line"><a name="l06889"></a><span class="lineno"> 6889</span>&#160; m_it.primitive_iterator.set_end();</div><div class="line"><a name="l06890"></a><span class="lineno"> 6890</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l06891"></a><span class="lineno"> 6891</span>&#160; }</div><div class="line"><a name="l06892"></a><span class="lineno"> 6892</span>&#160; }</div><div class="line"><a name="l06893"></a><span class="lineno"> 6893</span>&#160; }</div><div class="line"><a name="l06894"></a><span class="lineno"> 6894</span>&#160;</div><div class="line"><a name="l06895"></a><span class="lineno"> 6895</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l06900"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1const__iterator_acfc918b6350449111ca58af5eb3da999.html#acfc918b6350449111ca58af5eb3da999"> 6900</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator_aefd248cac6493eed1e6ff53ba6a63eb2.html#aefd248cac6493eed1e6ff53ba6a63eb2">reference</a> <a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator_acfc918b6350449111ca58af5eb3da999.html#acfc918b6350449111ca58af5eb3da999">operator*</a>()<span class="keyword"> const</span></div><div class="line"><a name="l06901"></a><span class="lineno"> 6901</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l06902"></a><span class="lineno"> 6902</span>&#160; assert(m_object != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l06903"></a><span class="lineno"> 6903</span>&#160;</div><div class="line"><a name="l06904"></a><span class="lineno"> 6904</span>&#160; <span class="keywordflow">switch</span> (m_object-&gt;m_type)</div><div class="line"><a name="l06905"></a><span class="lineno"> 6905</span>&#160; {</div><div class="line"><a name="l06906"></a><span class="lineno"> 6906</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classnlohmann_1_1basic__json_a231b02148577b69a154b2ce2c87a5522.html#a231b02148577b69a154b2ce2c87a5522aa8cfde6331bd59eb2ac96f8911c4b666">basic_json::value_t::object</a>:</div><div class="line"><a name="l06907"></a><span class="lineno"> 6907</span>&#160; {</div><div class="line"><a name="l06908"></a><span class="lineno"> 6908</span>&#160; assert(m_it.object_iterator != m_object-&gt;m_value.object-&gt;end());</div><div class="line"><a name="l06909"></a><span class="lineno"> 6909</span>&#160; <span class="keywordflow">return</span> m_it.object_iterator-&gt;second;</div><div class="line"><a name="l06910"></a><span class="lineno"> 6910</span>&#160; }</div><div class="line"><a name="l06911"></a><span class="lineno"> 6911</span>&#160;</div><div class="line"><a name="l06912"></a><span class="lineno"> 6912</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classnlohmann_1_1basic__json_a231b02148577b69a154b2ce2c87a5522.html#a231b02148577b69a154b2ce2c87a5522af1f713c9e000f5d3f280adbd124df4f5">basic_json::value_t::array</a>:</div><div class="line"><a name="l06913"></a><span class="lineno"> 6913</span>&#160; {</div><div class="line"><a name="l06914"></a><span class="lineno"> 6914</span>&#160; assert(m_it.array_iterator != m_object-&gt;m_value.array-&gt;end());</div><div class="line"><a name="l06915"></a><span class="lineno"> 6915</span>&#160; <span class="keywordflow">return</span> *m_it.array_iterator;</div><div class="line"><a name="l06916"></a><span class="lineno"> 6916</span>&#160; }</div><div class="line"><a name="l06917"></a><span class="lineno"> 6917</span>&#160;</div><div class="line"><a name="l06918"></a><span class="lineno"> 6918</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classnlohmann_1_1basic__json_a231b02148577b69a154b2ce2c87a5522.html#a231b02148577b69a154b2ce2c87a5522a37a6259cc0c1dae299a7866489dff0bd">basic_json::value_t::null</a>:</div><div class="line"><a name="l06919"></a><span class="lineno"> 6919</span>&#160; {</div><div class="line"><a name="l06920"></a><span class="lineno"> 6920</span>&#160; <span class="keywordflow">throw</span> std::out_of_range(<span class="stringliteral">&quot;cannot get value&quot;</span>);</div><div class="line"><a name="l06921"></a><span class="lineno"> 6921</span>&#160; }</div><div class="line"><a name="l06922"></a><span class="lineno"> 6922</span>&#160;</div><div class="line"><a name="l06923"></a><span class="lineno"> 6923</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l06924"></a><span class="lineno"> 6924</span>&#160; {</div><div class="line"><a name="l06925"></a><span class="lineno"> 6925</span>&#160; <span class="keywordflow">if</span> (m_it.primitive_iterator.is_begin())</div><div class="line"><a name="l06926"></a><span class="lineno"> 6926</span>&#160; {</div><div class="line"><a name="l06927"></a><span class="lineno"> 6927</span>&#160; <span class="keywordflow">return</span> *m_object;</div><div class="line"><a name="l06928"></a><span class="lineno"> 6928</span>&#160; }</div><div class="line"><a name="l06929"></a><span class="lineno"> 6929</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l06930"></a><span class="lineno"> 6930</span>&#160; {</div><div class="line"><a name="l06931"></a><span class="lineno"> 6931</span>&#160; <span class="keywordflow">throw</span> std::out_of_range(<span class="stringliteral">&quot;cannot get value&quot;</span>);</div><div class="line"><a name="l06932"></a><span class="lineno"> 6932</span>&#160; }</div><div class="line"><a name="l06933"></a><span class="lineno"> 6933</span>&#160; }</div><div class="line"><a name="l06934"></a><span class="lineno"> 6934</span>&#160; }</div><div class="line"><a name="l06935"></a><span class="lineno"> 6935</span>&#160; }</div><div class="line"><a name="l06936"></a><span class="lineno"> 6936</span>&#160;</div><div class="line"><a name="l06941"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1const__iterator_abae808b09a822cc3da4cef0efb89115d.html#abae808b09a822cc3da4cef0efb89115d"> 6941</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator_a1da96fc3054d547e7706d3a2f073f389.html#a1da96fc3054d547e7706d3a2f073f389">pointer</a> <a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator_abae808b09a822cc3da4cef0efb89115d.html#abae808b09a822cc3da4cef0efb89115d">operator-&gt;</a>()<span class="keyword"> const</span></div><div class="line"><a name="l06942"></a><span class="lineno"> 6942</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l06943"></a><span class="lineno"> 6943</span>&#160; assert(m_object != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l06944"></a><span class="lineno"> 6944</span>&#160;</div><div class="line"><a name="l06945"></a><span class="lineno"> 6945</span>&#160; <span class="keywordflow">switch</span> (m_object-&gt;m_type)</div><div class="line"><a name="l06946"></a><span class="lineno"> 6946</span>&#160; {</div><div class="line"><a name="l06947"></a><span class="lineno"> 6947</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classnlohmann_1_1basic__json_a231b02148577b69a154b2ce2c87a5522.html#a231b02148577b69a154b2ce2c87a5522aa8cfde6331bd59eb2ac96f8911c4b666">basic_json::value_t::object</a>:</div><div class="line"><a name="l06948"></a><span class="lineno"> 6948</span>&#160; {</div><div class="line"><a name="l06949"></a><span class="lineno"> 6949</span>&#160; assert(m_it.object_iterator != m_object-&gt;m_value.object-&gt;end());</div><div class="line"><a name="l06950"></a><span class="lineno"> 6950</span>&#160; <span class="keywordflow">return</span> &amp;(m_it.object_iterator-&gt;second);</div><div class="line"><a name="l06951"></a><span class="lineno"> 6951</span>&#160; }</div><div class="line"><a name="l06952"></a><span class="lineno"> 6952</span>&#160;</div><div class="line"><a name="l06953"></a><span class="lineno"> 6953</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classnlohmann_1_1basic__json_a231b02148577b69a154b2ce2c87a5522.html#a231b02148577b69a154b2ce2c87a5522af1f713c9e000f5d3f280adbd124df4f5">basic_json::value_t::array</a>:</div><div class="line"><a name="l06954"></a><span class="lineno"> 6954</span>&#160; {</div><div class="line"><a name="l06955"></a><span class="lineno"> 6955</span>&#160; assert(m_it.array_iterator != m_object-&gt;m_value.array-&gt;end());</div><div class="line"><a name="l06956"></a><span class="lineno"> 6956</span>&#160; <span class="keywordflow">return</span> &amp;*m_it.array_iterator;</div><div class="line"><a name="l06957"></a><span class="lineno"> 6957</span>&#160; }</div><div class="line"><a name="l06958"></a><span class="lineno"> 6958</span>&#160;</div><div class="line"><a name="l06959"></a><span class="lineno"> 6959</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l06960"></a><span class="lineno"> 6960</span>&#160; {</div><div class="line"><a name="l06961"></a><span class="lineno"> 6961</span>&#160; <span class="keywordflow">if</span> (m_it.primitive_iterator.is_begin())</div><div class="line"><a name="l06962"></a><span class="lineno"> 6962</span>&#160; {</div><div class="line"><a name="l06963"></a><span class="lineno"> 6963</span>&#160; <span class="keywordflow">return</span> m_object;</div><div class="line"><a name="l06964"></a><span class="lineno"> 6964</span>&#160; }</div><div class="line"><a name="l06965"></a><span class="lineno"> 6965</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l06966"></a><span class="lineno"> 6966</span>&#160; {</div><div class="line"><a name="l06967"></a><span class="lineno"> 6967</span>&#160; <span class="keywordflow">throw</span> std::out_of_range(<span class="stringliteral">&quot;cannot get value&quot;</span>);</div><div class="line"><a name="l06968"></a><span class="lineno"> 6968</span>&#160; }</div><div class="line"><a name="l06969"></a><span class="lineno"> 6969</span>&#160; }</div><div class="line"><a name="l06970"></a><span class="lineno"> 6970</span>&#160; }</div><div class="line"><a name="l06971"></a><span class="lineno"> 6971</span>&#160; }</div><div class="line"><a name="l06972"></a><span class="lineno"> 6972</span>&#160;</div><div class="line"><a name="l06977"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1const__iterator_a8dbaec5bf8ccba3225520356629061cb.html#a8dbaec5bf8ccba3225520356629061cb"> 6977</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator.html">const_iterator</a> <a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator_a8dbaec5bf8ccba3225520356629061cb.html#a8dbaec5bf8ccba3225520356629061cb">operator++</a>(<span class="keywordtype">int</span>)</div><div class="line"><a name="l06978"></a><span class="lineno"> 6978</span>&#160; {</div><div class="line"><a name="l06979"></a><span class="lineno"> 6979</span>&#160; <span class="keyword">auto</span> result = *<span class="keyword">this</span>;</div><div class="line"><a name="l06980"></a><span class="lineno"> 6980</span>&#160; ++(*this);</div><div class="line"><a name="l06981"></a><span class="lineno"> 6981</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l06982"></a><span class="lineno"> 6982</span>&#160; }</div><div class="line"><a name="l06983"></a><span class="lineno"> 6983</span>&#160;</div><div class="line"><a name="l06988"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1const__iterator_a8fbb15efd97599209a7def77af8e748e.html#a8fbb15efd97599209a7def77af8e748e"> 6988</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator.html">const_iterator</a>&amp; <a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator_a8fbb15efd97599209a7def77af8e748e.html#a8fbb15efd97599209a7def77af8e748e">operator++</a>()</div><div class="line"><a name="l06989"></a><span class="lineno"> 6989</span>&#160; {</div><div class="line"><a name="l06990"></a><span class="lineno"> 6990</span>&#160; assert(m_object != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l06991"></a><span class="lineno"> 6991</span>&#160;</div><div class="line"><a name="l06992"></a><span class="lineno"> 6992</span>&#160; <span class="keywordflow">switch</span> (m_object-&gt;m_type)</div><div class="line"><a name="l06993"></a><span class="lineno"> 6993</span>&#160; {</div><div class="line"><a name="l06994"></a><span class="lineno"> 6994</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classnlohmann_1_1basic__json_a231b02148577b69a154b2ce2c87a5522.html#a231b02148577b69a154b2ce2c87a5522aa8cfde6331bd59eb2ac96f8911c4b666">basic_json::value_t::object</a>:</div><div class="line"><a name="l06995"></a><span class="lineno"> 6995</span>&#160; {</div><div class="line"><a name="l06996"></a><span class="lineno"> 6996</span>&#160; std::advance(m_it.object_iterator, 1);</div><div class="line"><a name="l06997"></a><span class="lineno"> 6997</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l06998"></a><span class="lineno"> 6998</span>&#160; }</div><div class="line"><a name="l06999"></a><span class="lineno"> 6999</span>&#160;</div><div class="line"><a name="l07000"></a><span class="lineno"> 7000</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classnlohmann_1_1basic__json_a231b02148577b69a154b2ce2c87a5522.html#a231b02148577b69a154b2ce2c87a5522af1f713c9e000f5d3f280adbd124df4f5">basic_json::value_t::array</a>:</div><div class="line"><a name="l07001"></a><span class="lineno"> 7001</span>&#160; {</div><div class="line"><a name="l07002"></a><span class="lineno"> 7002</span>&#160; std::advance(m_it.array_iterator, 1);</div><div class="line"><a name="l07003"></a><span class="lineno"> 7003</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l07004"></a><span class="lineno"> 7004</span>&#160; }</div><div class="line"><a name="l07005"></a><span class="lineno"> 7005</span>&#160;</div><div class="line"><a name="l07006"></a><span class="lineno"> 7006</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l07007"></a><span class="lineno"> 7007</span>&#160; {</div><div class="line"><a name="l07008"></a><span class="lineno"> 7008</span>&#160; ++m_it.primitive_iterator;</div><div class="line"><a name="l07009"></a><span class="lineno"> 7009</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l07010"></a><span class="lineno"> 7010</span>&#160; }</div><div class="line"><a name="l07011"></a><span class="lineno"> 7011</span>&#160; }</div><div class="line"><a name="l07012"></a><span class="lineno"> 7012</span>&#160;</div><div class="line"><a name="l07013"></a><span class="lineno"> 7013</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l07014"></a><span class="lineno"> 7014</span>&#160; }</div><div class="line"><a name="l07015"></a><span class="lineno"> 7015</span>&#160;</div><div class="line"><a name="l07020"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1const__iterator_a6cab1c2ed7e2a014980e2a5717f43a64.html#a6cab1c2ed7e2a014980e2a5717f43a64"> 7020</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator.html">const_iterator</a> <a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator_a6cab1c2ed7e2a014980e2a5717f43a64.html#a6cab1c2ed7e2a014980e2a5717f43a64">operator--</a>(<span class="keywordtype">int</span>)</div><div class="line"><a name="l07021"></a><span class="lineno"> 7021</span>&#160; {</div><div class="line"><a name="l07022"></a><span class="lineno"> 7022</span>&#160; <span class="keyword">auto</span> result = *<span class="keyword">this</span>;</div><div class="line"><a name="l07023"></a><span class="lineno"> 7023</span>&#160; --(*this);</div><div class="line"><a name="l07024"></a><span class="lineno"> 7024</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l07025"></a><span class="lineno"> 7025</span>&#160; }</div><div class="line"><a name="l07026"></a><span class="lineno"> 7026</span>&#160;</div><div class="line"><a name="l07031"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1const__iterator_adeb2ff3fdf3cc301b72db109934c9199.html#adeb2ff3fdf3cc301b72db109934c9199"> 7031</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator.html">const_iterator</a>&amp; <a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator_adeb2ff3fdf3cc301b72db109934c9199.html#adeb2ff3fdf3cc301b72db109934c9199">operator--</a>()</div><div class="line"><a name="l07032"></a><span class="lineno"> 7032</span>&#160; {</div><div class="line"><a name="l07033"></a><span class="lineno"> 7033</span>&#160; assert(m_object != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l07034"></a><span class="lineno"> 7034</span>&#160;</div><div class="line"><a name="l07035"></a><span class="lineno"> 7035</span>&#160; <span class="keywordflow">switch</span> (m_object-&gt;m_type)</div><div class="line"><a name="l07036"></a><span class="lineno"> 7036</span>&#160; {</div><div class="line"><a name="l07037"></a><span class="lineno"> 7037</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classnlohmann_1_1basic__json_a231b02148577b69a154b2ce2c87a5522.html#a231b02148577b69a154b2ce2c87a5522aa8cfde6331bd59eb2ac96f8911c4b666">basic_json::value_t::object</a>:</div><div class="line"><a name="l07038"></a><span class="lineno"> 7038</span>&#160; {</div><div class="line"><a name="l07039"></a><span class="lineno"> 7039</span>&#160; std::advance(m_it.object_iterator, -1);</div><div class="line"><a name="l07040"></a><span class="lineno"> 7040</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l07041"></a><span class="lineno"> 7041</span>&#160; }</div><div class="line"><a name="l07042"></a><span class="lineno"> 7042</span>&#160;</div><div class="line"><a name="l07043"></a><span class="lineno"> 7043</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classnlohmann_1_1basic__json_a231b02148577b69a154b2ce2c87a5522.html#a231b02148577b69a154b2ce2c87a5522af1f713c9e000f5d3f280adbd124df4f5">basic_json::value_t::array</a>:</div><div class="line"><a name="l07044"></a><span class="lineno"> 7044</span>&#160; {</div><div class="line"><a name="l07045"></a><span class="lineno"> 7045</span>&#160; std::advance(m_it.array_iterator, -1);</div><div class="line"><a name="l07046"></a><span class="lineno"> 7046</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l07047"></a><span class="lineno"> 7047</span>&#160; }</div><div class="line"><a name="l07048"></a><span class="lineno"> 7048</span>&#160;</div><div class="line"><a name="l07049"></a><span class="lineno"> 7049</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l07050"></a><span class="lineno"> 7050</span>&#160; {</div><div class="line"><a name="l07051"></a><span class="lineno"> 7051</span>&#160; --m_it.primitive_iterator;</div><div class="line"><a name="l07052"></a><span class="lineno"> 7052</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l07053"></a><span class="lineno"> 7053</span>&#160; }</div><div class="line"><a name="l07054"></a><span class="lineno"> 7054</span>&#160; }</div><div class="line"><a name="l07055"></a><span class="lineno"> 7055</span>&#160;</div><div class="line"><a name="l07056"></a><span class="lineno"> 7056</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l07057"></a><span class="lineno"> 7057</span>&#160; }</div><div class="line"><a name="l07058"></a><span class="lineno"> 7058</span>&#160;</div><div class="line"><a name="l07063"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1const__iterator_acf1fcb73ff770117446670cefc927dd2.html#acf1fcb73ff770117446670cefc927dd2"> 7063</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator_acf1fcb73ff770117446670cefc927dd2.html#acf1fcb73ff770117446670cefc927dd2">operator==</a>(<span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator.html">const_iterator</a>&amp; other)<span class="keyword"> const</span></div><div class="line"><a name="l07064"></a><span class="lineno"> 7064</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l07065"></a><span class="lineno"> 7065</span>&#160; <span class="comment">// if objects are not the same, the comparison is undefined</span></div><div class="line"><a name="l07066"></a><span class="lineno"> 7066</span>&#160; <span class="keywordflow">if</span> (m_object != other.m_object)</div><div class="line"><a name="l07067"></a><span class="lineno"> 7067</span>&#160; {</div><div class="line"><a name="l07068"></a><span class="lineno"> 7068</span>&#160; <span class="keywordflow">throw</span> std::domain_error(<span class="stringliteral">&quot;cannot compare iterators of different containers&quot;</span>);</div><div class="line"><a name="l07069"></a><span class="lineno"> 7069</span>&#160; }</div><div class="line"><a name="l07070"></a><span class="lineno"> 7070</span>&#160;</div><div class="line"><a name="l07071"></a><span class="lineno"> 7071</span>&#160; assert(m_object != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l07072"></a><span class="lineno"> 7072</span>&#160;</div><div class="line"><a name="l07073"></a><span class="lineno"> 7073</span>&#160; <span class="keywordflow">switch</span> (m_object-&gt;m_type)</div><div class="line"><a name="l07074"></a><span class="lineno"> 7074</span>&#160; {</div><div class="line"><a name="l07075"></a><span class="lineno"> 7075</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classnlohmann_1_1basic__json_a231b02148577b69a154b2ce2c87a5522.html#a231b02148577b69a154b2ce2c87a5522aa8cfde6331bd59eb2ac96f8911c4b666">basic_json::value_t::object</a>:</div><div class="line"><a name="l07076"></a><span class="lineno"> 7076</span>&#160; {</div><div class="line"><a name="l07077"></a><span class="lineno"> 7077</span>&#160; <span class="keywordflow">return</span> (m_it.object_iterator == other.m_it.object_iterator);</div><div class="line"><a name="l07078"></a><span class="lineno"> 7078</span>&#160; }</div><div class="line"><a name="l07079"></a><span class="lineno"> 7079</span>&#160;</div><div class="line"><a name="l07080"></a><span class="lineno"> 7080</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classnlohmann_1_1basic__json_a231b02148577b69a154b2ce2c87a5522.html#a231b02148577b69a154b2ce2c87a5522af1f713c9e000f5d3f280adbd124df4f5">basic_json::value_t::array</a>:</div><div class="line"><a name="l07081"></a><span class="lineno"> 7081</span>&#160; {</div><div class="line"><a name="l07082"></a><span class="lineno"> 7082</span>&#160; <span class="keywordflow">return</span> (m_it.array_iterator == other.m_it.array_iterator);</div><div class="line"><a name="l07083"></a><span class="lineno"> 7083</span>&#160; }</div><div class="line"><a name="l07084"></a><span class="lineno"> 7084</span>&#160;</div><div class="line"><a name="l07085"></a><span class="lineno"> 7085</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l07086"></a><span class="lineno"> 7086</span>&#160; {</div><div class="line"><a name="l07087"></a><span class="lineno"> 7087</span>&#160; <span class="keywordflow">return</span> (m_it.primitive_iterator == other.m_it.primitive_iterator);</div><div class="line"><a name="l07088"></a><span class="lineno"> 7088</span>&#160; }</div><div class="line"><a name="l07089"></a><span class="lineno"> 7089</span>&#160; }</div><div class="line"><a name="l07090"></a><span class="lineno"> 7090</span>&#160; }</div><div class="line"><a name="l07091"></a><span class="lineno"> 7091</span>&#160;</div><div class="line"><a name="l07096"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1const__iterator_a2defc155f17e8325747d2f884bb60eab.html#a2defc155f17e8325747d2f884bb60eab"> 7096</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator_a2defc155f17e8325747d2f884bb60eab.html#a2defc155f17e8325747d2f884bb60eab">operator!=</a>(<span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator.html">const_iterator</a>&amp; other)<span class="keyword"> const</span></div><div class="line"><a name="l07097"></a><span class="lineno"> 7097</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l07098"></a><span class="lineno"> 7098</span>&#160; <span class="keywordflow">return</span> not operator==(other);</div><div class="line"><a name="l07099"></a><span class="lineno"> 7099</span>&#160; }</div><div class="line"><a name="l07100"></a><span class="lineno"> 7100</span>&#160;</div><div class="line"><a name="l07105"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1const__iterator_ae0f996eef6a970b2e654c4f6d33d6f9a.html#ae0f996eef6a970b2e654c4f6d33d6f9a"> 7105</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator_ae0f996eef6a970b2e654c4f6d33d6f9a.html#ae0f996eef6a970b2e654c4f6d33d6f9a">operator&lt;</a>(<span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator.html">const_iterator</a>&amp; other)<span class="keyword"> const</span></div><div class="line"><a name="l07106"></a><span class="lineno"> 7106</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l07107"></a><span class="lineno"> 7107</span>&#160; <span class="comment">// if objects are not the same, the comparison is undefined</span></div><div class="line"><a name="l07108"></a><span class="lineno"> 7108</span>&#160; <span class="keywordflow">if</span> (m_object != other.m_object)</div><div class="line"><a name="l07109"></a><span class="lineno"> 7109</span>&#160; {</div><div class="line"><a name="l07110"></a><span class="lineno"> 7110</span>&#160; <span class="keywordflow">throw</span> std::domain_error(<span class="stringliteral">&quot;cannot compare iterators of different containers&quot;</span>);</div><div class="line"><a name="l07111"></a><span class="lineno"> 7111</span>&#160; }</div><div class="line"><a name="l07112"></a><span class="lineno"> 7112</span>&#160;</div><div class="line"><a name="l07113"></a><span class="lineno"> 7113</span>&#160; assert(m_object != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l07114"></a><span class="lineno"> 7114</span>&#160;</div><div class="line"><a name="l07115"></a><span class="lineno"> 7115</span>&#160; <span class="keywordflow">switch</span> (m_object-&gt;m_type)</div><div class="line"><a name="l07116"></a><span class="lineno"> 7116</span>&#160; {</div><div class="line"><a name="l07117"></a><span class="lineno"> 7117</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classnlohmann_1_1basic__json_a231b02148577b69a154b2ce2c87a5522.html#a231b02148577b69a154b2ce2c87a5522aa8cfde6331bd59eb2ac96f8911c4b666">basic_json::value_t::object</a>:</div><div class="line"><a name="l07118"></a><span class="lineno"> 7118</span>&#160; {</div><div class="line"><a name="l07119"></a><span class="lineno"> 7119</span>&#160; <span class="keywordflow">throw</span> std::domain_error(<span class="stringliteral">&quot;cannot compare order of object iterators&quot;</span>);</div><div class="line"><a name="l07120"></a><span class="lineno"> 7120</span>&#160; }</div><div class="line"><a name="l07121"></a><span class="lineno"> 7121</span>&#160;</div><div class="line"><a name="l07122"></a><span class="lineno"> 7122</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classnlohmann_1_1basic__json_a231b02148577b69a154b2ce2c87a5522.html#a231b02148577b69a154b2ce2c87a5522af1f713c9e000f5d3f280adbd124df4f5">basic_json::value_t::array</a>:</div><div class="line"><a name="l07123"></a><span class="lineno"> 7123</span>&#160; {</div><div class="line"><a name="l07124"></a><span class="lineno"> 7124</span>&#160; <span class="keywordflow">return</span> (m_it.array_iterator &lt; other.m_it.array_iterator);</div><div class="line"><a name="l07125"></a><span class="lineno"> 7125</span>&#160; }</div><div class="line"><a name="l07126"></a><span class="lineno"> 7126</span>&#160;</div><div class="line"><a name="l07127"></a><span class="lineno"> 7127</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l07128"></a><span class="lineno"> 7128</span>&#160; {</div><div class="line"><a name="l07129"></a><span class="lineno"> 7129</span>&#160; <span class="keywordflow">return</span> (m_it.primitive_iterator &lt; other.m_it.primitive_iterator);</div><div class="line"><a name="l07130"></a><span class="lineno"> 7130</span>&#160; }</div><div class="line"><a name="l07131"></a><span class="lineno"> 7131</span>&#160; }</div><div class="line"><a name="l07132"></a><span class="lineno"> 7132</span>&#160; }</div><div class="line"><a name="l07133"></a><span class="lineno"> 7133</span>&#160;</div><div class="line"><a name="l07138"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1const__iterator_ab31ede5b25ad5e8a3bb06f6eadb50923.html#ab31ede5b25ad5e8a3bb06f6eadb50923"> 7138</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator_ab31ede5b25ad5e8a3bb06f6eadb50923.html#ab31ede5b25ad5e8a3bb06f6eadb50923">operator&lt;=</a>(<span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator.html">const_iterator</a>&amp; other)<span class="keyword"> const</span></div><div class="line"><a name="l07139"></a><span class="lineno"> 7139</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l07140"></a><span class="lineno"> 7140</span>&#160; <span class="keywordflow">return</span> not other.operator &lt; (*this);</div><div class="line"><a name="l07141"></a><span class="lineno"> 7141</span>&#160; }</div><div class="line"><a name="l07142"></a><span class="lineno"> 7142</span>&#160;</div><div class="line"><a name="l07147"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1const__iterator_a3a7ed729e72bc7c1d0b75ed8cc2bd830.html#a3a7ed729e72bc7c1d0b75ed8cc2bd830"> 7147</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator_a3a7ed729e72bc7c1d0b75ed8cc2bd830.html#a3a7ed729e72bc7c1d0b75ed8cc2bd830">operator&gt;</a>(<span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator.html">const_iterator</a>&amp; other)<span class="keyword"> const</span></div><div class="line"><a name="l07148"></a><span class="lineno"> 7148</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l07149"></a><span class="lineno"> 7149</span>&#160; <span class="keywordflow">return</span> not operator&lt;=(other);</div><div class="line"><a name="l07150"></a><span class="lineno"> 7150</span>&#160; }</div><div class="line"><a name="l07151"></a><span class="lineno"> 7151</span>&#160;</div><div class="line"><a name="l07156"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1const__iterator_a1ed92c14d88b802345bd15417a417a5d.html#a1ed92c14d88b802345bd15417a417a5d"> 7156</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator_a1ed92c14d88b802345bd15417a417a5d.html#a1ed92c14d88b802345bd15417a417a5d">operator&gt;=</a>(<span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator.html">const_iterator</a>&amp; other)<span class="keyword"> const</span></div><div class="line"><a name="l07157"></a><span class="lineno"> 7157</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l07158"></a><span class="lineno"> 7158</span>&#160; <span class="keywordflow">return</span> not operator&lt;(other);</div><div class="line"><a name="l07159"></a><span class="lineno"> 7159</span>&#160; }</div><div class="line"><a name="l07160"></a><span class="lineno"> 7160</span>&#160;</div><div class="line"><a name="l07165"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1const__iterator_a0d5820d1dda9dea3bbeb029cacf68522.html#a0d5820d1dda9dea3bbeb029cacf68522"> 7165</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator.html">const_iterator</a>&amp; <a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator_a0d5820d1dda9dea3bbeb029cacf68522.html#a0d5820d1dda9dea3bbeb029cacf68522">operator+=</a>(<a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator_a49d7c3e9ef3280df03052cce988b792f.html#a49d7c3e9ef3280df03052cce988b792f">difference_type</a> i)</div><div class="line"><a name="l07166"></a><span class="lineno"> 7166</span>&#160; {</div><div class="line"><a name="l07167"></a><span class="lineno"> 7167</span>&#160; assert(m_object != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l07168"></a><span class="lineno"> 7168</span>&#160;</div><div class="line"><a name="l07169"></a><span class="lineno"> 7169</span>&#160; <span class="keywordflow">switch</span> (m_object-&gt;m_type)</div><div class="line"><a name="l07170"></a><span class="lineno"> 7170</span>&#160; {</div><div class="line"><a name="l07171"></a><span class="lineno"> 7171</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classnlohmann_1_1basic__json_a231b02148577b69a154b2ce2c87a5522.html#a231b02148577b69a154b2ce2c87a5522aa8cfde6331bd59eb2ac96f8911c4b666">basic_json::value_t::object</a>:</div><div class="line"><a name="l07172"></a><span class="lineno"> 7172</span>&#160; {</div><div class="line"><a name="l07173"></a><span class="lineno"> 7173</span>&#160; <span class="keywordflow">throw</span> std::domain_error(<span class="stringliteral">&quot;cannot use offsets with object iterators&quot;</span>);</div><div class="line"><a name="l07174"></a><span class="lineno"> 7174</span>&#160; }</div><div class="line"><a name="l07175"></a><span class="lineno"> 7175</span>&#160;</div><div class="line"><a name="l07176"></a><span class="lineno"> 7176</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classnlohmann_1_1basic__json_a231b02148577b69a154b2ce2c87a5522.html#a231b02148577b69a154b2ce2c87a5522af1f713c9e000f5d3f280adbd124df4f5">basic_json::value_t::array</a>:</div><div class="line"><a name="l07177"></a><span class="lineno"> 7177</span>&#160; {</div><div class="line"><a name="l07178"></a><span class="lineno"> 7178</span>&#160; std::advance(m_it.array_iterator, i);</div><div class="line"><a name="l07179"></a><span class="lineno"> 7179</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l07180"></a><span class="lineno"> 7180</span>&#160; }</div><div class="line"><a name="l07181"></a><span class="lineno"> 7181</span>&#160;</div><div class="line"><a name="l07182"></a><span class="lineno"> 7182</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l07183"></a><span class="lineno"> 7183</span>&#160; {</div><div class="line"><a name="l07184"></a><span class="lineno"> 7184</span>&#160; m_it.primitive_iterator += i;</div><div class="line"><a name="l07185"></a><span class="lineno"> 7185</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l07186"></a><span class="lineno"> 7186</span>&#160; }</div><div class="line"><a name="l07187"></a><span class="lineno"> 7187</span>&#160; }</div><div class="line"><a name="l07188"></a><span class="lineno"> 7188</span>&#160;</div><div class="line"><a name="l07189"></a><span class="lineno"> 7189</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l07190"></a><span class="lineno"> 7190</span>&#160; }</div><div class="line"><a name="l07191"></a><span class="lineno"> 7191</span>&#160;</div><div class="line"><a name="l07196"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1const__iterator_aefac8f3e390ac917f021761f4a8f8e71.html#aefac8f3e390ac917f021761f4a8f8e71"> 7196</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator.html">const_iterator</a>&amp; <a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator_aefac8f3e390ac917f021761f4a8f8e71.html#aefac8f3e390ac917f021761f4a8f8e71">operator-=</a>(<a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator_a49d7c3e9ef3280df03052cce988b792f.html#a49d7c3e9ef3280df03052cce988b792f">difference_type</a> i)</div><div class="line"><a name="l07197"></a><span class="lineno"> 7197</span>&#160; {</div><div class="line"><a name="l07198"></a><span class="lineno"> 7198</span>&#160; <span class="keywordflow">return</span> operator+=(-i);</div><div class="line"><a name="l07199"></a><span class="lineno"> 7199</span>&#160; }</div><div class="line"><a name="l07200"></a><span class="lineno"> 7200</span>&#160;</div><div class="line"><a name="l07205"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1const__iterator_a7a80257f2303210b0a5d056fc0b30b40.html#a7a80257f2303210b0a5d056fc0b30b40"> 7205</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator.html">const_iterator</a> <a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator_a7a80257f2303210b0a5d056fc0b30b40.html#a7a80257f2303210b0a5d056fc0b30b40">operator+</a>(<a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator_a49d7c3e9ef3280df03052cce988b792f.html#a49d7c3e9ef3280df03052cce988b792f">difference_type</a> i)</div><div class="line"><a name="l07206"></a><span class="lineno"> 7206</span>&#160; {</div><div class="line"><a name="l07207"></a><span class="lineno"> 7207</span>&#160; <span class="keyword">auto</span> result = *<span class="keyword">this</span>;</div><div class="line"><a name="l07208"></a><span class="lineno"> 7208</span>&#160; result += i;</div><div class="line"><a name="l07209"></a><span class="lineno"> 7209</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l07210"></a><span class="lineno"> 7210</span>&#160; }</div><div class="line"><a name="l07211"></a><span class="lineno"> 7211</span>&#160;</div><div class="line"><a name="l07216"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1const__iterator_abc4552ba2fe39e7901a83dd6d4dec151.html#abc4552ba2fe39e7901a83dd6d4dec151"> 7216</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator.html">const_iterator</a> <a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator_abc4552ba2fe39e7901a83dd6d4dec151.html#abc4552ba2fe39e7901a83dd6d4dec151">operator-</a>(<a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator_a49d7c3e9ef3280df03052cce988b792f.html#a49d7c3e9ef3280df03052cce988b792f">difference_type</a> i)</div><div class="line"><a name="l07217"></a><span class="lineno"> 7217</span>&#160; {</div><div class="line"><a name="l07218"></a><span class="lineno"> 7218</span>&#160; <span class="keyword">auto</span> result = *<span class="keyword">this</span>;</div><div class="line"><a name="l07219"></a><span class="lineno"> 7219</span>&#160; result -= i;</div><div class="line"><a name="l07220"></a><span class="lineno"> 7220</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l07221"></a><span class="lineno"> 7221</span>&#160; }</div><div class="line"><a name="l07222"></a><span class="lineno"> 7222</span>&#160;</div><div class="line"><a name="l07227"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1const__iterator_af3ef241a9e26398ea0cf45026287c2ed.html#af3ef241a9e26398ea0cf45026287c2ed"> 7227</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator_a49d7c3e9ef3280df03052cce988b792f.html#a49d7c3e9ef3280df03052cce988b792f">difference_type</a> <a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator_af3ef241a9e26398ea0cf45026287c2ed.html#af3ef241a9e26398ea0cf45026287c2ed">operator-</a>(<span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator.html">const_iterator</a>&amp; other)<span class="keyword"> const</span></div><div class="line"><a name="l07228"></a><span class="lineno"> 7228</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l07229"></a><span class="lineno"> 7229</span>&#160; assert(m_object != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l07230"></a><span class="lineno"> 7230</span>&#160;</div><div class="line"><a name="l07231"></a><span class="lineno"> 7231</span>&#160; <span class="keywordflow">switch</span> (m_object-&gt;m_type)</div><div class="line"><a name="l07232"></a><span class="lineno"> 7232</span>&#160; {</div><div class="line"><a name="l07233"></a><span class="lineno"> 7233</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classnlohmann_1_1basic__json_a231b02148577b69a154b2ce2c87a5522.html#a231b02148577b69a154b2ce2c87a5522aa8cfde6331bd59eb2ac96f8911c4b666">basic_json::value_t::object</a>:</div><div class="line"><a name="l07234"></a><span class="lineno"> 7234</span>&#160; {</div><div class="line"><a name="l07235"></a><span class="lineno"> 7235</span>&#160; <span class="keywordflow">throw</span> std::domain_error(<span class="stringliteral">&quot;cannot use offsets with object iterators&quot;</span>);</div><div class="line"><a name="l07236"></a><span class="lineno"> 7236</span>&#160; }</div><div class="line"><a name="l07237"></a><span class="lineno"> 7237</span>&#160;</div><div class="line"><a name="l07238"></a><span class="lineno"> 7238</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classnlohmann_1_1basic__json_a231b02148577b69a154b2ce2c87a5522.html#a231b02148577b69a154b2ce2c87a5522af1f713c9e000f5d3f280adbd124df4f5">basic_json::value_t::array</a>:</div><div class="line"><a name="l07239"></a><span class="lineno"> 7239</span>&#160; {</div><div class="line"><a name="l07240"></a><span class="lineno"> 7240</span>&#160; <span class="keywordflow">return</span> m_it.array_iterator - other.m_it.array_iterator;</div><div class="line"><a name="l07241"></a><span class="lineno"> 7241</span>&#160; }</div><div class="line"><a name="l07242"></a><span class="lineno"> 7242</span>&#160;</div><div class="line"><a name="l07243"></a><span class="lineno"> 7243</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l07244"></a><span class="lineno"> 7244</span>&#160; {</div><div class="line"><a name="l07245"></a><span class="lineno"> 7245</span>&#160; <span class="keywordflow">return</span> m_it.primitive_iterator - other.m_it.primitive_iterator;</div><div class="line"><a name="l07246"></a><span class="lineno"> 7246</span>&#160; }</div><div class="line"><a name="l07247"></a><span class="lineno"> 7247</span>&#160; }</div><div class="line"><a name="l07248"></a><span class="lineno"> 7248</span>&#160; }</div><div class="line"><a name="l07249"></a><span class="lineno"> 7249</span>&#160;</div><div class="line"><a name="l07254"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1const__iterator_a70caca372e345c9c700ab849c3d9463b.html#a70caca372e345c9c700ab849c3d9463b"> 7254</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator_aefd248cac6493eed1e6ff53ba6a63eb2.html#aefd248cac6493eed1e6ff53ba6a63eb2">reference</a> <a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator_a70caca372e345c9c700ab849c3d9463b.html#a70caca372e345c9c700ab849c3d9463b">operator[]</a>(<a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator_a49d7c3e9ef3280df03052cce988b792f.html#a49d7c3e9ef3280df03052cce988b792f">difference_type</a> n)<span class="keyword"> const</span></div><div class="line"><a name="l07255"></a><span class="lineno"> 7255</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l07256"></a><span class="lineno"> 7256</span>&#160; assert(m_object != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l07257"></a><span class="lineno"> 7257</span>&#160;</div><div class="line"><a name="l07258"></a><span class="lineno"> 7258</span>&#160; <span class="keywordflow">switch</span> (m_object-&gt;m_type)</div><div class="line"><a name="l07259"></a><span class="lineno"> 7259</span>&#160; {</div><div class="line"><a name="l07260"></a><span class="lineno"> 7260</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classnlohmann_1_1basic__json_a231b02148577b69a154b2ce2c87a5522.html#a231b02148577b69a154b2ce2c87a5522aa8cfde6331bd59eb2ac96f8911c4b666">basic_json::value_t::object</a>:</div><div class="line"><a name="l07261"></a><span class="lineno"> 7261</span>&#160; {</div><div class="line"><a name="l07262"></a><span class="lineno"> 7262</span>&#160; <span class="keywordflow">throw</span> std::domain_error(<span class="stringliteral">&quot;cannot use operator[] for object iterators&quot;</span>);</div><div class="line"><a name="l07263"></a><span class="lineno"> 7263</span>&#160; }</div><div class="line"><a name="l07264"></a><span class="lineno"> 7264</span>&#160;</div><div class="line"><a name="l07265"></a><span class="lineno"> 7265</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classnlohmann_1_1basic__json_a231b02148577b69a154b2ce2c87a5522.html#a231b02148577b69a154b2ce2c87a5522af1f713c9e000f5d3f280adbd124df4f5">basic_json::value_t::array</a>:</div><div class="line"><a name="l07266"></a><span class="lineno"> 7266</span>&#160; {</div><div class="line"><a name="l07267"></a><span class="lineno"> 7267</span>&#160; <span class="keywordflow">return</span> *std::next(m_it.array_iterator, n);</div><div class="line"><a name="l07268"></a><span class="lineno"> 7268</span>&#160; }</div><div class="line"><a name="l07269"></a><span class="lineno"> 7269</span>&#160;</div><div class="line"><a name="l07270"></a><span class="lineno"> 7270</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classnlohmann_1_1basic__json_a231b02148577b69a154b2ce2c87a5522.html#a231b02148577b69a154b2ce2c87a5522a37a6259cc0c1dae299a7866489dff0bd">basic_json::value_t::null</a>:</div><div class="line"><a name="l07271"></a><span class="lineno"> 7271</span>&#160; {</div><div class="line"><a name="l07272"></a><span class="lineno"> 7272</span>&#160; <span class="keywordflow">throw</span> std::out_of_range(<span class="stringliteral">&quot;cannot get value&quot;</span>);</div><div class="line"><a name="l07273"></a><span class="lineno"> 7273</span>&#160; }</div><div class="line"><a name="l07274"></a><span class="lineno"> 7274</span>&#160;</div><div class="line"><a name="l07275"></a><span class="lineno"> 7275</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l07276"></a><span class="lineno"> 7276</span>&#160; {</div><div class="line"><a name="l07277"></a><span class="lineno"> 7277</span>&#160; <span class="keywordflow">if</span> (m_it.primitive_iterator == -n)</div><div class="line"><a name="l07278"></a><span class="lineno"> 7278</span>&#160; {</div><div class="line"><a name="l07279"></a><span class="lineno"> 7279</span>&#160; <span class="keywordflow">return</span> *m_object;</div><div class="line"><a name="l07280"></a><span class="lineno"> 7280</span>&#160; }</div><div class="line"><a name="l07281"></a><span class="lineno"> 7281</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l07282"></a><span class="lineno"> 7282</span>&#160; {</div><div class="line"><a name="l07283"></a><span class="lineno"> 7283</span>&#160; <span class="keywordflow">throw</span> std::out_of_range(<span class="stringliteral">&quot;cannot get value&quot;</span>);</div><div class="line"><a name="l07284"></a><span class="lineno"> 7284</span>&#160; }</div><div class="line"><a name="l07285"></a><span class="lineno"> 7285</span>&#160; }</div><div class="line"><a name="l07286"></a><span class="lineno"> 7286</span>&#160; }</div><div class="line"><a name="l07287"></a><span class="lineno"> 7287</span>&#160; }</div><div class="line"><a name="l07288"></a><span class="lineno"> 7288</span>&#160;</div><div class="line"><a name="l07293"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1const__iterator_a0e717ab658d27f646a3c8602cac91d83.html#a0e717ab658d27f646a3c8602cac91d83"> 7293</a></span>&#160; <span class="keyword">typename</span> object_t::key_type <a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator_a0e717ab658d27f646a3c8602cac91d83.html#a0e717ab658d27f646a3c8602cac91d83">key</a>()<span class="keyword"> const</span></div><div class="line"><a name="l07294"></a><span class="lineno"> 7294</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l07295"></a><span class="lineno"> 7295</span>&#160; assert(m_object != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l07296"></a><span class="lineno"> 7296</span>&#160;</div><div class="line"><a name="l07297"></a><span class="lineno"> 7297</span>&#160; <span class="keywordflow">if</span> (m_object-&gt;is_object())</div><div class="line"><a name="l07298"></a><span class="lineno"> 7298</span>&#160; {</div><div class="line"><a name="l07299"></a><span class="lineno"> 7299</span>&#160; <span class="keywordflow">return</span> m_it.object_iterator-&gt;first;</div><div class="line"><a name="l07300"></a><span class="lineno"> 7300</span>&#160; }</div><div class="line"><a name="l07301"></a><span class="lineno"> 7301</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l07302"></a><span class="lineno"> 7302</span>&#160; {</div><div class="line"><a name="l07303"></a><span class="lineno"> 7303</span>&#160; <span class="keywordflow">throw</span> std::domain_error(<span class="stringliteral">&quot;cannot use key() for non-object iterators&quot;</span>);</div><div class="line"><a name="l07304"></a><span class="lineno"> 7304</span>&#160; }</div><div class="line"><a name="l07305"></a><span class="lineno"> 7305</span>&#160; }</div><div class="line"><a name="l07306"></a><span class="lineno"> 7306</span>&#160;</div><div class="line"><a name="l07311"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1const__iterator_a0f42e99f14ac0a46456cf96fb384f290.html#a0f42e99f14ac0a46456cf96fb384f290"> 7311</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator_aefd248cac6493eed1e6ff53ba6a63eb2.html#aefd248cac6493eed1e6ff53ba6a63eb2">reference</a> <a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator_a0f42e99f14ac0a46456cf96fb384f290.html#a0f42e99f14ac0a46456cf96fb384f290">value</a>()<span class="keyword"> const</span></div><div class="line"><a name="l07312"></a><span class="lineno"> 7312</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l07313"></a><span class="lineno"> 7313</span>&#160; <span class="keywordflow">return</span> operator*();</div><div class="line"><a name="l07314"></a><span class="lineno"> 7314</span>&#160; }</div><div class="line"><a name="l07315"></a><span class="lineno"> 7315</span>&#160;</div><div class="line"><a name="l07316"></a><span class="lineno"> 7316</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l07318"></a><span class="lineno"> 7318</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator_a1da96fc3054d547e7706d3a2f073f389.html#a1da96fc3054d547e7706d3a2f073f389">pointer</a> m_object = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l07320"></a><span class="lineno"> 7320</span>&#160; internal_iterator m_it = internal_iterator();</div><div class="line"><a name="l07321"></a><span class="lineno"> 7321</span>&#160; };</div><div class="line"><a name="l07322"></a><span class="lineno"> 7322</span>&#160;</div><div class="line"><a name="l07335"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1iterator.html"> 7335</a></span>&#160; <span class="keyword">class </span><a class="code" href="classnlohmann_1_1basic__json_1_1iterator.html">iterator</a> : <span class="keyword">public</span> <a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator.html">const_iterator</a></div><div class="line"><a name="l07336"></a><span class="lineno"> 7336</span>&#160; {</div><div class="line"><a name="l07337"></a><span class="lineno"> 7337</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l07338"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1iterator_ac48754e4dc48d65d95294bd170dcd857.html#ac48754e4dc48d65d95294bd170dcd857"> 7338</a></span>&#160; <span class="keyword">using</span> <a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator.html">base_iterator</a> = <a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator.html">const_iterator</a>;</div><div class="line"><a name="l07339"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1iterator_a3aae1df93a78b201d98e178c1c7d02a7.html#a3aae1df93a78b201d98e178c1c7d02a7"> 7339</a></span>&#160; <span class="keyword">using</span> <a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator_a1da96fc3054d547e7706d3a2f073f389.html#a1da96fc3054d547e7706d3a2f073f389">pointer</a> = <span class="keyword">typename</span> <a class="code" href="classnlohmann_1_1basic__json_a9d1b58099dc64695fcf2847ab0b2a7c7.html#a9d1b58099dc64695fcf2847ab0b2a7c7">basic_json::pointer</a>;</div><div class="line"><a name="l07340"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1iterator_a97aff5d71246774267a81066460dd1cf.html#a97aff5d71246774267a81066460dd1cf"> 7340</a></span>&#160; <span class="keyword">using</span> <a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator_aefd248cac6493eed1e6ff53ba6a63eb2.html#aefd248cac6493eed1e6ff53ba6a63eb2">reference</a> = <span class="keyword">typename</span> <a class="code" href="classnlohmann_1_1basic__json_a3ec8e17be8732fe436e9d6733f52b7a3.html#a3ec8e17be8732fe436e9d6733f52b7a3">basic_json::reference</a>;</div><div class="line"><a name="l07341"></a><span class="lineno"> 7341</span>&#160;</div><div class="line"><a name="l07343"></a><span class="lineno"> 7343</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1iterator.html">iterator</a>() = <span class="keywordflow">default</span>;</div><div class="line"><a name="l07344"></a><span class="lineno"> 7344</span>&#160;</div><div class="line"><a name="l07346"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1iterator_a085fe0d8cf459b5b1ae7b518b933ae7d.html#a085fe0d8cf459b5b1ae7b518b933ae7d"> 7346</a></span>&#160; <span class="keyword">explicit</span> <a class="code" href="classnlohmann_1_1basic__json_1_1iterator_a085fe0d8cf459b5b1ae7b518b933ae7d.html#a085fe0d8cf459b5b1ae7b518b933ae7d">iterator</a>(<a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator_a1da96fc3054d547e7706d3a2f073f389.html#a1da96fc3054d547e7706d3a2f073f389">pointer</a> <span class="keywordtype">object</span>) noexcept</div><div class="line"><a name="l07347"></a><span class="lineno"> 7347</span>&#160; : <a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator.html">base_iterator</a>(<span class="keywordtype">object</span>)</div><div class="line"><a name="l07348"></a><span class="lineno"> 7348</span>&#160; {}</div><div class="line"><a name="l07349"></a><span class="lineno"> 7349</span>&#160;</div><div class="line"><a name="l07351"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1iterator_a1de0975e812c83e74d118b3e1063f335.html#a1de0975e812c83e74d118b3e1063f335"> 7351</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1iterator_a1de0975e812c83e74d118b3e1063f335.html#a1de0975e812c83e74d118b3e1063f335">iterator</a>(<span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_1_1iterator.html">iterator</a>&amp; other) noexcept</div><div class="line"><a name="l07352"></a><span class="lineno"> 7352</span>&#160; : <a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator.html">base_iterator</a>(other)</div><div class="line"><a name="l07353"></a><span class="lineno"> 7353</span>&#160; {}</div><div class="line"><a name="l07354"></a><span class="lineno"> 7354</span>&#160;</div><div class="line"><a name="l07356"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1iterator_a51b0ed345317cfd1b2386f481d774477.html#a51b0ed345317cfd1b2386f481d774477"> 7356</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1iterator.html">iterator</a>&amp; <a class="code" href="classnlohmann_1_1basic__json_1_1iterator_a51b0ed345317cfd1b2386f481d774477.html#a51b0ed345317cfd1b2386f481d774477">operator=</a>(<a class="code" href="classnlohmann_1_1basic__json_1_1iterator.html">iterator</a> other) noexcept(</div><div class="line"><a name="l07357"></a><span class="lineno"> 7357</span>&#160; std::is_nothrow_move_constructible&lt;pointer&gt;::value and</div><div class="line"><a name="l07358"></a><span class="lineno"> 7358</span>&#160; std::is_nothrow_move_assignable&lt;pointer&gt;::value and</div><div class="line"><a name="l07359"></a><span class="lineno"> 7359</span>&#160; std::is_nothrow_move_constructible&lt;internal_iterator&gt;::value and</div><div class="line"><a name="l07360"></a><span class="lineno"> 7360</span>&#160; std::is_nothrow_move_assignable&lt;internal_iterator&gt;::value</div><div class="line"><a name="l07361"></a><span class="lineno"> 7361</span>&#160; )</div><div class="line"><a name="l07362"></a><span class="lineno"> 7362</span>&#160; {</div><div class="line"><a name="l07363"></a><span class="lineno"> 7363</span>&#160; base_iterator::operator=(other);</div><div class="line"><a name="l07364"></a><span class="lineno"> 7364</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l07365"></a><span class="lineno"> 7365</span>&#160; }</div><div class="line"><a name="l07366"></a><span class="lineno"> 7366</span>&#160;</div><div class="line"><a name="l07368"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1iterator_a1af28ba60302eb48edf4fdbc88e75903.html#a1af28ba60302eb48edf4fdbc88e75903"> 7368</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator_aefd248cac6493eed1e6ff53ba6a63eb2.html#aefd248cac6493eed1e6ff53ba6a63eb2">reference</a> <a class="code" href="classnlohmann_1_1basic__json_1_1iterator_a1af28ba60302eb48edf4fdbc88e75903.html#a1af28ba60302eb48edf4fdbc88e75903">operator*</a>()<span class="keyword"> const</span></div><div class="line"><a name="l07369"></a><span class="lineno"> 7369</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l07370"></a><span class="lineno"> 7370</span>&#160; <span class="keywordflow">return</span> <span class="keyword">const_cast&lt;</span><a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator_aefd248cac6493eed1e6ff53ba6a63eb2.html#aefd248cac6493eed1e6ff53ba6a63eb2">reference</a><span class="keyword">&gt;</span>(base_iterator::operator*());</div><div class="line"><a name="l07371"></a><span class="lineno"> 7371</span>&#160; }</div><div class="line"><a name="l07372"></a><span class="lineno"> 7372</span>&#160;</div><div class="line"><a name="l07374"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1iterator_a12c7f8236ffa08a5dd27cbd9888b74be.html#a12c7f8236ffa08a5dd27cbd9888b74be"> 7374</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator_a1da96fc3054d547e7706d3a2f073f389.html#a1da96fc3054d547e7706d3a2f073f389">pointer</a> <a class="code" href="classnlohmann_1_1basic__json_1_1iterator_a12c7f8236ffa08a5dd27cbd9888b74be.html#a12c7f8236ffa08a5dd27cbd9888b74be">operator-&gt;</a>()<span class="keyword"> const</span></div><div class="line"><a name="l07375"></a><span class="lineno"> 7375</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l07376"></a><span class="lineno"> 7376</span>&#160; <span class="keywordflow">return</span> <span class="keyword">const_cast&lt;</span><a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator_a1da96fc3054d547e7706d3a2f073f389.html#a1da96fc3054d547e7706d3a2f073f389">pointer</a><span class="keyword">&gt;</span>(base_iterator::operator-&gt;());</div><div class="line"><a name="l07377"></a><span class="lineno"> 7377</span>&#160; }</div><div class="line"><a name="l07378"></a><span class="lineno"> 7378</span>&#160;</div><div class="line"><a name="l07380"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1iterator_a2943e49b3d88e6ee5793c5923ab2ede9.html#a2943e49b3d88e6ee5793c5923ab2ede9"> 7380</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1iterator.html">iterator</a> <a class="code" href="classnlohmann_1_1basic__json_1_1iterator_a2943e49b3d88e6ee5793c5923ab2ede9.html#a2943e49b3d88e6ee5793c5923ab2ede9">operator++</a>(<span class="keywordtype">int</span>)</div><div class="line"><a name="l07381"></a><span class="lineno"> 7381</span>&#160; {</div><div class="line"><a name="l07382"></a><span class="lineno"> 7382</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1iterator.html">iterator</a> result = *<span class="keyword">this</span>;</div><div class="line"><a name="l07383"></a><span class="lineno"> 7383</span>&#160; base_iterator::operator++();</div><div class="line"><a name="l07384"></a><span class="lineno"> 7384</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l07385"></a><span class="lineno"> 7385</span>&#160; }</div><div class="line"><a name="l07386"></a><span class="lineno"> 7386</span>&#160;</div><div class="line"><a name="l07388"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1iterator_a050b7fa21051ea57e5b0cc03668b5d4a.html#a050b7fa21051ea57e5b0cc03668b5d4a"> 7388</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1iterator.html">iterator</a>&amp; <a class="code" href="classnlohmann_1_1basic__json_1_1iterator_a050b7fa21051ea57e5b0cc03668b5d4a.html#a050b7fa21051ea57e5b0cc03668b5d4a">operator++</a>()</div><div class="line"><a name="l07389"></a><span class="lineno"> 7389</span>&#160; {</div><div class="line"><a name="l07390"></a><span class="lineno"> 7390</span>&#160; base_iterator::operator++();</div><div class="line"><a name="l07391"></a><span class="lineno"> 7391</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l07392"></a><span class="lineno"> 7392</span>&#160; }</div><div class="line"><a name="l07393"></a><span class="lineno"> 7393</span>&#160;</div><div class="line"><a name="l07395"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1iterator_ab4f238aa5fcf452b1884b748b0395b1f.html#ab4f238aa5fcf452b1884b748b0395b1f"> 7395</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1iterator.html">iterator</a> <a class="code" href="classnlohmann_1_1basic__json_1_1iterator_ab4f238aa5fcf452b1884b748b0395b1f.html#ab4f238aa5fcf452b1884b748b0395b1f">operator--</a>(<span class="keywordtype">int</span>)</div><div class="line"><a name="l07396"></a><span class="lineno"> 7396</span>&#160; {</div><div class="line"><a name="l07397"></a><span class="lineno"> 7397</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1iterator.html">iterator</a> result = *<span class="keyword">this</span>;</div><div class="line"><a name="l07398"></a><span class="lineno"> 7398</span>&#160; base_iterator::operator--();</div><div class="line"><a name="l07399"></a><span class="lineno"> 7399</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l07400"></a><span class="lineno"> 7400</span>&#160; }</div><div class="line"><a name="l07401"></a><span class="lineno"> 7401</span>&#160;</div><div class="line"><a name="l07403"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1iterator_ab3679dc63b3a59edb98b1c2b96d8683c.html#ab3679dc63b3a59edb98b1c2b96d8683c"> 7403</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1iterator.html">iterator</a>&amp; <a class="code" href="classnlohmann_1_1basic__json_1_1iterator_ab3679dc63b3a59edb98b1c2b96d8683c.html#ab3679dc63b3a59edb98b1c2b96d8683c">operator--</a>()</div><div class="line"><a name="l07404"></a><span class="lineno"> 7404</span>&#160; {</div><div class="line"><a name="l07405"></a><span class="lineno"> 7405</span>&#160; base_iterator::operator--();</div><div class="line"><a name="l07406"></a><span class="lineno"> 7406</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l07407"></a><span class="lineno"> 7407</span>&#160; }</div><div class="line"><a name="l07408"></a><span class="lineno"> 7408</span>&#160;</div><div class="line"><a name="l07410"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1iterator_ae0c848dbc0af1cde15771d45d775b27c.html#ae0c848dbc0af1cde15771d45d775b27c"> 7410</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1iterator.html">iterator</a>&amp; <a class="code" href="classnlohmann_1_1basic__json_1_1iterator_ae0c848dbc0af1cde15771d45d775b27c.html#ae0c848dbc0af1cde15771d45d775b27c">operator+=</a>(<a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator_a49d7c3e9ef3280df03052cce988b792f.html#a49d7c3e9ef3280df03052cce988b792f">difference_type</a> i)</div><div class="line"><a name="l07411"></a><span class="lineno"> 7411</span>&#160; {</div><div class="line"><a name="l07412"></a><span class="lineno"> 7412</span>&#160; base_iterator::operator+=(i);</div><div class="line"><a name="l07413"></a><span class="lineno"> 7413</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l07414"></a><span class="lineno"> 7414</span>&#160; }</div><div class="line"><a name="l07415"></a><span class="lineno"> 7415</span>&#160;</div><div class="line"><a name="l07417"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1iterator_afe86d48d3e4e5ebdaaec162b3cf0e95c.html#afe86d48d3e4e5ebdaaec162b3cf0e95c"> 7417</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1iterator.html">iterator</a>&amp; <a class="code" href="classnlohmann_1_1basic__json_1_1iterator_afe86d48d3e4e5ebdaaec162b3cf0e95c.html#afe86d48d3e4e5ebdaaec162b3cf0e95c">operator-=</a>(<a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator_a49d7c3e9ef3280df03052cce988b792f.html#a49d7c3e9ef3280df03052cce988b792f">difference_type</a> i)</div><div class="line"><a name="l07418"></a><span class="lineno"> 7418</span>&#160; {</div><div class="line"><a name="l07419"></a><span class="lineno"> 7419</span>&#160; base_iterator::operator-=(i);</div><div class="line"><a name="l07420"></a><span class="lineno"> 7420</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l07421"></a><span class="lineno"> 7421</span>&#160; }</div><div class="line"><a name="l07422"></a><span class="lineno"> 7422</span>&#160;</div><div class="line"><a name="l07424"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1iterator_a56952f8d5702541f0d88e6a764d2ae36.html#a56952f8d5702541f0d88e6a764d2ae36"> 7424</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1iterator.html">iterator</a> <a class="code" href="classnlohmann_1_1basic__json_1_1iterator_a56952f8d5702541f0d88e6a764d2ae36.html#a56952f8d5702541f0d88e6a764d2ae36">operator+</a>(<a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator_a49d7c3e9ef3280df03052cce988b792f.html#a49d7c3e9ef3280df03052cce988b792f">difference_type</a> i)</div><div class="line"><a name="l07425"></a><span class="lineno"> 7425</span>&#160; {</div><div class="line"><a name="l07426"></a><span class="lineno"> 7426</span>&#160; <span class="keyword">auto</span> result = *<span class="keyword">this</span>;</div><div class="line"><a name="l07427"></a><span class="lineno"> 7427</span>&#160; result += i;</div><div class="line"><a name="l07428"></a><span class="lineno"> 7428</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l07429"></a><span class="lineno"> 7429</span>&#160; }</div><div class="line"><a name="l07430"></a><span class="lineno"> 7430</span>&#160;</div><div class="line"><a name="l07432"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1iterator_a790f550ff168095c83c2e459c575916c.html#a790f550ff168095c83c2e459c575916c"> 7432</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1iterator.html">iterator</a> <a class="code" href="classnlohmann_1_1basic__json_1_1iterator_a790f550ff168095c83c2e459c575916c.html#a790f550ff168095c83c2e459c575916c">operator-</a>(<a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator_a49d7c3e9ef3280df03052cce988b792f.html#a49d7c3e9ef3280df03052cce988b792f">difference_type</a> i)</div><div class="line"><a name="l07433"></a><span class="lineno"> 7433</span>&#160; {</div><div class="line"><a name="l07434"></a><span class="lineno"> 7434</span>&#160; <span class="keyword">auto</span> result = *<span class="keyword">this</span>;</div><div class="line"><a name="l07435"></a><span class="lineno"> 7435</span>&#160; result -= i;</div><div class="line"><a name="l07436"></a><span class="lineno"> 7436</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l07437"></a><span class="lineno"> 7437</span>&#160; }</div><div class="line"><a name="l07438"></a><span class="lineno"> 7438</span>&#160;</div><div class="line"><a name="l07440"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1iterator_a381124603cecc478e8746dcf4e11728c.html#a381124603cecc478e8746dcf4e11728c"> 7440</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator_a49d7c3e9ef3280df03052cce988b792f.html#a49d7c3e9ef3280df03052cce988b792f">difference_type</a> <a class="code" href="classnlohmann_1_1basic__json_1_1iterator_a381124603cecc478e8746dcf4e11728c.html#a381124603cecc478e8746dcf4e11728c">operator-</a>(<span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_1_1iterator.html">iterator</a>&amp; other)<span class="keyword"> const</span></div><div class="line"><a name="l07441"></a><span class="lineno"> 7441</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l07442"></a><span class="lineno"> 7442</span>&#160; <span class="keywordflow">return</span> base_iterator::operator-(other);</div><div class="line"><a name="l07443"></a><span class="lineno"> 7443</span>&#160; }</div><div class="line"><a name="l07444"></a><span class="lineno"> 7444</span>&#160;</div><div class="line"><a name="l07446"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1iterator_a72ce0abec8c72610925d83a9b309f3e4.html#a72ce0abec8c72610925d83a9b309f3e4"> 7446</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator_aefd248cac6493eed1e6ff53ba6a63eb2.html#aefd248cac6493eed1e6ff53ba6a63eb2">reference</a> <a class="code" href="classnlohmann_1_1basic__json_1_1iterator_a72ce0abec8c72610925d83a9b309f3e4.html#a72ce0abec8c72610925d83a9b309f3e4">operator[]</a>(<a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator_a49d7c3e9ef3280df03052cce988b792f.html#a49d7c3e9ef3280df03052cce988b792f">difference_type</a> n)<span class="keyword"> const</span></div><div class="line"><a name="l07447"></a><span class="lineno"> 7447</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l07448"></a><span class="lineno"> 7448</span>&#160; <span class="keywordflow">return</span> <span class="keyword">const_cast&lt;</span><a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator_aefd248cac6493eed1e6ff53ba6a63eb2.html#aefd248cac6493eed1e6ff53ba6a63eb2">reference</a><span class="keyword">&gt;</span>(base_iterator::operator[](n));</div><div class="line"><a name="l07449"></a><span class="lineno"> 7449</span>&#160; }</div><div class="line"><a name="l07450"></a><span class="lineno"> 7450</span>&#160;</div><div class="line"><a name="l07452"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1iterator_ac688806417f3b4e17c4eb1b661b522f1.html#ac688806417f3b4e17c4eb1b661b522f1"> 7452</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator_aefd248cac6493eed1e6ff53ba6a63eb2.html#aefd248cac6493eed1e6ff53ba6a63eb2">reference</a> <a class="code" href="classnlohmann_1_1basic__json_1_1iterator_ac688806417f3b4e17c4eb1b661b522f1.html#ac688806417f3b4e17c4eb1b661b522f1">value</a>()<span class="keyword"> const</span></div><div class="line"><a name="l07453"></a><span class="lineno"> 7453</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l07454"></a><span class="lineno"> 7454</span>&#160; <span class="keywordflow">return</span> <span class="keyword">const_cast&lt;</span><a class="code" href="classnlohmann_1_1basic__json_1_1const__iterator_aefd248cac6493eed1e6ff53ba6a63eb2.html#aefd248cac6493eed1e6ff53ba6a63eb2">reference</a><span class="keyword">&gt;</span>(base_iterator::value());</div><div class="line"><a name="l07455"></a><span class="lineno"> 7455</span>&#160; }</div><div class="line"><a name="l07456"></a><span class="lineno"> 7456</span>&#160; };</div><div class="line"><a name="l07457"></a><span class="lineno"> 7457</span>&#160;</div><div class="line"><a name="l07475"></a><span class="lineno"> 7475</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Base&gt;</div><div class="line"><a name="l07476"></a><span class="lineno"> 7476</span>&#160; <span class="keyword">class </span><a class="code" href="classnlohmann_1_1basic__json_1_1json__reverse__iterator.html">json_reverse_iterator</a> : <span class="keyword">public</span> std::reverse_iterator&lt;Base&gt;</div><div class="line"><a name="l07477"></a><span class="lineno"> 7477</span>&#160; {</div><div class="line"><a name="l07478"></a><span class="lineno"> 7478</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l07480"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_a9ebc4c99e6fc90c965af0f39ad2ca70e.html#a9ebc4c99e6fc90c965af0f39ad2ca70e"> 7480</a></span>&#160; <span class="keyword">using</span> <a class="code" href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_a9ebc4c99e6fc90c965af0f39ad2ca70e.html#a9ebc4c99e6fc90c965af0f39ad2ca70e">base_iterator</a> = std::reverse_iterator&lt;Base&gt;;</div><div class="line"><a name="l07482"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_a7265535f39299824f9712a2ca15013c3.html#a7265535f39299824f9712a2ca15013c3"> 7482</a></span>&#160; <span class="keyword">using</span> <a class="code" href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_a7265535f39299824f9712a2ca15013c3.html#a7265535f39299824f9712a2ca15013c3">reference</a> = <span class="keyword">typename</span> Base::reference;</div><div class="line"><a name="l07483"></a><span class="lineno"> 7483</span>&#160;</div><div class="line"><a name="l07485"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_a86c97bbb8ebe19aef4656cf796e30e99.html#a86c97bbb8ebe19aef4656cf796e30e99"> 7485</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_a86c97bbb8ebe19aef4656cf796e30e99.html#a86c97bbb8ebe19aef4656cf796e30e99">json_reverse_iterator</a>(<span class="keyword">const</span> <span class="keyword">typename</span> base_iterator::iterator_type&amp; it) noexcept</div><div class="line"><a name="l07486"></a><span class="lineno"> 7486</span>&#160; : <a class="code" href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_a9ebc4c99e6fc90c965af0f39ad2ca70e.html#a9ebc4c99e6fc90c965af0f39ad2ca70e">base_iterator</a>(it)</div><div class="line"><a name="l07487"></a><span class="lineno"> 7487</span>&#160; {}</div><div class="line"><a name="l07488"></a><span class="lineno"> 7488</span>&#160;</div><div class="line"><a name="l07490"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_a530f042e2ab1c83dddfc344931b0375a.html#a530f042e2ab1c83dddfc344931b0375a"> 7490</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_a530f042e2ab1c83dddfc344931b0375a.html#a530f042e2ab1c83dddfc344931b0375a">json_reverse_iterator</a>(<span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_a9ebc4c99e6fc90c965af0f39ad2ca70e.html#a9ebc4c99e6fc90c965af0f39ad2ca70e">base_iterator</a>&amp; it) noexcept</div><div class="line"><a name="l07491"></a><span class="lineno"> 7491</span>&#160; : <a class="code" href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_a9ebc4c99e6fc90c965af0f39ad2ca70e.html#a9ebc4c99e6fc90c965af0f39ad2ca70e">base_iterator</a>(it)</div><div class="line"><a name="l07492"></a><span class="lineno"> 7492</span>&#160; {}</div><div class="line"><a name="l07493"></a><span class="lineno"> 7493</span>&#160;</div><div class="line"><a name="l07495"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_a545a8204cfd6836eb85abc3113a0bb28.html#a545a8204cfd6836eb85abc3113a0bb28"> 7495</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1json__reverse__iterator.html">json_reverse_iterator</a> <a class="code" href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_a545a8204cfd6836eb85abc3113a0bb28.html#a545a8204cfd6836eb85abc3113a0bb28">operator++</a>(<span class="keywordtype">int</span>)</div><div class="line"><a name="l07496"></a><span class="lineno"> 7496</span>&#160; {</div><div class="line"><a name="l07497"></a><span class="lineno"> 7497</span>&#160; <span class="keywordflow">return</span> base_iterator::operator++(1);</div><div class="line"><a name="l07498"></a><span class="lineno"> 7498</span>&#160; }</div><div class="line"><a name="l07499"></a><span class="lineno"> 7499</span>&#160;</div><div class="line"><a name="l07501"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_a4aede52d6ee253a510897518b59e09c0.html#a4aede52d6ee253a510897518b59e09c0"> 7501</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1json__reverse__iterator.html">json_reverse_iterator</a>&amp; <a class="code" href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_a4aede52d6ee253a510897518b59e09c0.html#a4aede52d6ee253a510897518b59e09c0">operator++</a>()</div><div class="line"><a name="l07502"></a><span class="lineno"> 7502</span>&#160; {</div><div class="line"><a name="l07503"></a><span class="lineno"> 7503</span>&#160; base_iterator::operator++();</div><div class="line"><a name="l07504"></a><span class="lineno"> 7504</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l07505"></a><span class="lineno"> 7505</span>&#160; }</div><div class="line"><a name="l07506"></a><span class="lineno"> 7506</span>&#160;</div><div class="line"><a name="l07508"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_a693439bffe56a9a8cf53bc4a06b911ff.html#a693439bffe56a9a8cf53bc4a06b911ff"> 7508</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1json__reverse__iterator.html">json_reverse_iterator</a> <a class="code" href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_a693439bffe56a9a8cf53bc4a06b911ff.html#a693439bffe56a9a8cf53bc4a06b911ff">operator--</a>(<span class="keywordtype">int</span>)</div><div class="line"><a name="l07509"></a><span class="lineno"> 7509</span>&#160; {</div><div class="line"><a name="l07510"></a><span class="lineno"> 7510</span>&#160; <span class="keywordflow">return</span> base_iterator::operator--(1);</div><div class="line"><a name="l07511"></a><span class="lineno"> 7511</span>&#160; }</div><div class="line"><a name="l07512"></a><span class="lineno"> 7512</span>&#160;</div><div class="line"><a name="l07514"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_a563a7bd281e9919798d18396107fb05c.html#a563a7bd281e9919798d18396107fb05c"> 7514</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1json__reverse__iterator.html">json_reverse_iterator</a>&amp; <a class="code" href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_a563a7bd281e9919798d18396107fb05c.html#a563a7bd281e9919798d18396107fb05c">operator--</a>()</div><div class="line"><a name="l07515"></a><span class="lineno"> 7515</span>&#160; {</div><div class="line"><a name="l07516"></a><span class="lineno"> 7516</span>&#160; base_iterator::operator--();</div><div class="line"><a name="l07517"></a><span class="lineno"> 7517</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l07518"></a><span class="lineno"> 7518</span>&#160; }</div><div class="line"><a name="l07519"></a><span class="lineno"> 7519</span>&#160;</div><div class="line"><a name="l07521"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_a9accc9dd9f9033f50c0ab6bcf337ffe0.html#a9accc9dd9f9033f50c0ab6bcf337ffe0"> 7521</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1json__reverse__iterator.html">json_reverse_iterator</a>&amp; <a class="code" href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_a9accc9dd9f9033f50c0ab6bcf337ffe0.html#a9accc9dd9f9033f50c0ab6bcf337ffe0">operator+=</a>(<a class="code" href="classnlohmann_1_1basic__json_aec316934a555dd1acdd3600e5d4a4cdf.html#aec316934a555dd1acdd3600e5d4a4cdf">difference_type</a> i)</div><div class="line"><a name="l07522"></a><span class="lineno"> 7522</span>&#160; {</div><div class="line"><a name="l07523"></a><span class="lineno"> 7523</span>&#160; base_iterator::operator+=(i);</div><div class="line"><a name="l07524"></a><span class="lineno"> 7524</span>&#160; <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l07525"></a><span class="lineno"> 7525</span>&#160; }</div><div class="line"><a name="l07526"></a><span class="lineno"> 7526</span>&#160;</div><div class="line"><a name="l07528"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_a405fe504aa2a804c9df1c22a1ebd1283.html#a405fe504aa2a804c9df1c22a1ebd1283"> 7528</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1json__reverse__iterator.html">json_reverse_iterator</a> <a class="code" href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_a405fe504aa2a804c9df1c22a1ebd1283.html#a405fe504aa2a804c9df1c22a1ebd1283">operator+</a>(<a class="code" href="classnlohmann_1_1basic__json_aec316934a555dd1acdd3600e5d4a4cdf.html#aec316934a555dd1acdd3600e5d4a4cdf">difference_type</a> i)<span class="keyword"> const</span></div><div class="line"><a name="l07529"></a><span class="lineno"> 7529</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l07530"></a><span class="lineno"> 7530</span>&#160; <span class="keyword">auto</span> result = *<span class="keyword">this</span>;</div><div class="line"><a name="l07531"></a><span class="lineno"> 7531</span>&#160; result += i;</div><div class="line"><a name="l07532"></a><span class="lineno"> 7532</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l07533"></a><span class="lineno"> 7533</span>&#160; }</div><div class="line"><a name="l07534"></a><span class="lineno"> 7534</span>&#160;</div><div class="line"><a name="l07536"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_ad51b38d5428a79fd6ef4fa221b242dcf.html#ad51b38d5428a79fd6ef4fa221b242dcf"> 7536</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1json__reverse__iterator.html">json_reverse_iterator</a> <a class="code" href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_ad51b38d5428a79fd6ef4fa221b242dcf.html#ad51b38d5428a79fd6ef4fa221b242dcf">operator-</a>(<a class="code" href="classnlohmann_1_1basic__json_aec316934a555dd1acdd3600e5d4a4cdf.html#aec316934a555dd1acdd3600e5d4a4cdf">difference_type</a> i)<span class="keyword"> const</span></div><div class="line"><a name="l07537"></a><span class="lineno"> 7537</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l07538"></a><span class="lineno"> 7538</span>&#160; <span class="keyword">auto</span> result = *<span class="keyword">this</span>;</div><div class="line"><a name="l07539"></a><span class="lineno"> 7539</span>&#160; result -= i;</div><div class="line"><a name="l07540"></a><span class="lineno"> 7540</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l07541"></a><span class="lineno"> 7541</span>&#160; }</div><div class="line"><a name="l07542"></a><span class="lineno"> 7542</span>&#160;</div><div class="line"><a name="l07544"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_acdfece338718749f2d0b19f77b867036.html#acdfece338718749f2d0b19f77b867036"> 7544</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_aec316934a555dd1acdd3600e5d4a4cdf.html#aec316934a555dd1acdd3600e5d4a4cdf">difference_type</a> <a class="code" href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_acdfece338718749f2d0b19f77b867036.html#acdfece338718749f2d0b19f77b867036">operator-</a>(<span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_1_1json__reverse__iterator.html">json_reverse_iterator</a>&amp; other)<span class="keyword"> const</span></div><div class="line"><a name="l07545"></a><span class="lineno"> 7545</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l07546"></a><span class="lineno"> 7546</span>&#160; <span class="keywordflow">return</span> this-&gt;base() - other.base();</div><div class="line"><a name="l07547"></a><span class="lineno"> 7547</span>&#160; }</div><div class="line"><a name="l07548"></a><span class="lineno"> 7548</span>&#160;</div><div class="line"><a name="l07550"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_a3697e7d404d29c4ecc142b531e80da1e.html#a3697e7d404d29c4ecc142b531e80da1e"> 7550</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_a7265535f39299824f9712a2ca15013c3.html#a7265535f39299824f9712a2ca15013c3">reference</a> <a class="code" href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_a3697e7d404d29c4ecc142b531e80da1e.html#a3697e7d404d29c4ecc142b531e80da1e">operator[]</a>(<a class="code" href="classnlohmann_1_1basic__json_aec316934a555dd1acdd3600e5d4a4cdf.html#aec316934a555dd1acdd3600e5d4a4cdf">difference_type</a> n)<span class="keyword"> const</span></div><div class="line"><a name="l07551"></a><span class="lineno"> 7551</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l07552"></a><span class="lineno"> 7552</span>&#160; <span class="keywordflow">return</span> *(this-&gt;operator+(n));</div><div class="line"><a name="l07553"></a><span class="lineno"> 7553</span>&#160; }</div><div class="line"><a name="l07554"></a><span class="lineno"> 7554</span>&#160;</div><div class="line"><a name="l07556"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_a2f5d8a81d607f9222d1ade23f24cc093.html#a2f5d8a81d607f9222d1ade23f24cc093"> 7556</a></span>&#160; <span class="keyword">typename</span> object_t::key_type <a class="code" href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_a2f5d8a81d607f9222d1ade23f24cc093.html#a2f5d8a81d607f9222d1ade23f24cc093">key</a>()<span class="keyword"> const</span></div><div class="line"><a name="l07557"></a><span class="lineno"> 7557</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l07558"></a><span class="lineno"> 7558</span>&#160; <span class="keyword">auto</span> it = --this-&gt;base();</div><div class="line"><a name="l07559"></a><span class="lineno"> 7559</span>&#160; <span class="keywordflow">return</span> it.key();</div><div class="line"><a name="l07560"></a><span class="lineno"> 7560</span>&#160; }</div><div class="line"><a name="l07561"></a><span class="lineno"> 7561</span>&#160;</div><div class="line"><a name="l07563"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_af1c8b1f3be60159ae0829938a4e674fa.html#af1c8b1f3be60159ae0829938a4e674fa"> 7563</a></span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_a7265535f39299824f9712a2ca15013c3.html#a7265535f39299824f9712a2ca15013c3">reference</a> <a class="code" href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_af1c8b1f3be60159ae0829938a4e674fa.html#af1c8b1f3be60159ae0829938a4e674fa">value</a>()<span class="keyword"> const</span></div><div class="line"><a name="l07564"></a><span class="lineno"> 7564</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l07565"></a><span class="lineno"> 7565</span>&#160; <span class="keyword">auto</span> it = --this-&gt;base();</div><div class="line"><a name="l07566"></a><span class="lineno"> 7566</span>&#160; <span class="keywordflow">return</span> it.operator * ();</div><div class="line"><a name="l07567"></a><span class="lineno"> 7567</span>&#160; }</div><div class="line"><a name="l07568"></a><span class="lineno"> 7568</span>&#160; };</div><div class="line"><a name="l07569"></a><span class="lineno"> 7569</span>&#160;</div><div class="line"><a name="l07570"></a><span class="lineno"> 7570</span>&#160;</div><div class="line"><a name="l07571"></a><span class="lineno"> 7571</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l07573"></a><span class="lineno"> 7573</span>&#160; <span class="comment">// lexer and parser //</span></div><div class="line"><a name="l07575"></a><span class="lineno"> 7575</span>&#160;<span class="comment"></span></div><div class="line"><a name="l07583"></a><span class="lineno"> 7583</span>&#160; <span class="keyword">class </span>lexer</div><div class="line"><a name="l07584"></a><span class="lineno"> 7584</span>&#160; {</div><div class="line"><a name="l07585"></a><span class="lineno"> 7585</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l07587"></a><span class="lineno"> 7587</span>&#160; <span class="keyword">enum</span> <span class="keyword">class </span>token_type</div><div class="line"><a name="l07588"></a><span class="lineno"> 7588</span>&#160; {</div><div class="line"><a name="l07589"></a><span class="lineno"> 7589</span>&#160; uninitialized, </div><div class="line"><a name="l07590"></a><span class="lineno"> 7590</span>&#160; literal_true, </div><div class="line"><a name="l07591"></a><span class="lineno"> 7591</span>&#160; literal_false, </div><div class="line"><a name="l07592"></a><span class="lineno"> 7592</span>&#160; literal_null, </div><div class="line"><a name="l07593"></a><span class="lineno"> 7593</span>&#160; value_string, </div><div class="line"><a name="l07594"></a><span class="lineno"> 7594</span>&#160; value_number, </div><div class="line"><a name="l07595"></a><span class="lineno"> 7595</span>&#160; begin_array, </div><div class="line"><a name="l07596"></a><span class="lineno"> 7596</span>&#160; begin_object, </div><div class="line"><a name="l07597"></a><span class="lineno"> 7597</span>&#160; end_array, </div><div class="line"><a name="l07598"></a><span class="lineno"> 7598</span>&#160; end_object, </div><div class="line"><a name="l07599"></a><span class="lineno"> 7599</span>&#160; name_separator, </div><div class="line"><a name="l07600"></a><span class="lineno"> 7600</span>&#160; value_separator, </div><div class="line"><a name="l07601"></a><span class="lineno"> 7601</span>&#160; parse_error, </div><div class="line"><a name="l07602"></a><span class="lineno"> 7602</span>&#160; end_of_input </div><div class="line"><a name="l07603"></a><span class="lineno"> 7603</span>&#160; };</div><div class="line"><a name="l07604"></a><span class="lineno"> 7604</span>&#160;</div><div class="line"><a name="l07606"></a><span class="lineno"> 7606</span>&#160; <span class="keyword">using</span> lexer_char_t = <span class="keywordtype">unsigned</span> char;</div><div class="line"><a name="l07607"></a><span class="lineno"> 7607</span>&#160;</div><div class="line"><a name="l07609"></a><span class="lineno"> 7609</span>&#160; lexer(<span class="keyword">const</span> lexer_char_t* buff, <span class="keyword">const</span> <span class="keywordtype">size_t</span> len) noexcept</div><div class="line"><a name="l07610"></a><span class="lineno"> 7610</span>&#160; : m_content(buff)</div><div class="line"><a name="l07611"></a><span class="lineno"> 7611</span>&#160; {</div><div class="line"><a name="l07612"></a><span class="lineno"> 7612</span>&#160; assert(m_content != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l07613"></a><span class="lineno"> 7613</span>&#160; m_start = m_cursor = m_content;</div><div class="line"><a name="l07614"></a><span class="lineno"> 7614</span>&#160; m_limit = m_content + len;</div><div class="line"><a name="l07615"></a><span class="lineno"> 7615</span>&#160; }</div><div class="line"><a name="l07616"></a><span class="lineno"> 7616</span>&#160;</div><div class="line"><a name="l07618"></a><span class="lineno"> 7618</span>&#160; <span class="keyword">explicit</span> lexer(std::istream&amp; s)</div><div class="line"><a name="l07619"></a><span class="lineno"> 7619</span>&#160; : m_stream(&amp;s), m_line_buffer()</div><div class="line"><a name="l07620"></a><span class="lineno"> 7620</span>&#160; {</div><div class="line"><a name="l07621"></a><span class="lineno"> 7621</span>&#160; <span class="comment">// fill buffer</span></div><div class="line"><a name="l07622"></a><span class="lineno"> 7622</span>&#160; fill_line_buffer();</div><div class="line"><a name="l07623"></a><span class="lineno"> 7623</span>&#160; }</div><div class="line"><a name="l07624"></a><span class="lineno"> 7624</span>&#160;</div><div class="line"><a name="l07625"></a><span class="lineno"> 7625</span>&#160; <span class="comment">// switch off unwanted functions (due to pointer members)</span></div><div class="line"><a name="l07626"></a><span class="lineno"> 7626</span>&#160; lexer() = <span class="keyword">delete</span>;</div><div class="line"><a name="l07627"></a><span class="lineno"> 7627</span>&#160; lexer(<span class="keyword">const</span> lexer&amp;) = <span class="keyword">delete</span>;</div><div class="line"><a name="l07628"></a><span class="lineno"> 7628</span>&#160; lexer operator=(<span class="keyword">const</span> lexer&amp;) = <span class="keyword">delete</span>;</div><div class="line"><a name="l07629"></a><span class="lineno"> 7629</span>&#160;</div><div class="line"><a name="l07653"></a><span class="lineno"> 7653</span>&#160; <span class="keyword">static</span> <a class="code" href="classnlohmann_1_1basic__json_ab63e618bbb0371042b1bec17f5891f42.html#ab63e618bbb0371042b1bec17f5891f42">string_t</a> to_unicode(<span class="keyword">const</span> std::size_t codepoint1,</div><div class="line"><a name="l07654"></a><span class="lineno"> 7654</span>&#160; <span class="keyword">const</span> std::size_t codepoint2 = 0)</div><div class="line"><a name="l07655"></a><span class="lineno"> 7655</span>&#160; {</div><div class="line"><a name="l07656"></a><span class="lineno"> 7656</span>&#160; <span class="comment">// calculate the code point from the given code points</span></div><div class="line"><a name="l07657"></a><span class="lineno"> 7657</span>&#160; std::size_t codepoint = codepoint1;</div><div class="line"><a name="l07658"></a><span class="lineno"> 7658</span>&#160;</div><div class="line"><a name="l07659"></a><span class="lineno"> 7659</span>&#160; <span class="comment">// check if codepoint1 is a high surrogate</span></div><div class="line"><a name="l07660"></a><span class="lineno"> 7660</span>&#160; <span class="keywordflow">if</span> (codepoint1 &gt;= 0xD800 and codepoint1 &lt;= 0xDBFF)</div><div class="line"><a name="l07661"></a><span class="lineno"> 7661</span>&#160; {</div><div class="line"><a name="l07662"></a><span class="lineno"> 7662</span>&#160; <span class="comment">// check if codepoint2 is a low surrogate</span></div><div class="line"><a name="l07663"></a><span class="lineno"> 7663</span>&#160; <span class="keywordflow">if</span> (codepoint2 &gt;= 0xDC00 and codepoint2 &lt;= 0xDFFF)</div><div class="line"><a name="l07664"></a><span class="lineno"> 7664</span>&#160; {</div><div class="line"><a name="l07665"></a><span class="lineno"> 7665</span>&#160; codepoint =</div><div class="line"><a name="l07666"></a><span class="lineno"> 7666</span>&#160; <span class="comment">// high surrogate occupies the most significant 22 bits</span></div><div class="line"><a name="l07667"></a><span class="lineno"> 7667</span>&#160; (codepoint1 &lt;&lt; 10)</div><div class="line"><a name="l07668"></a><span class="lineno"> 7668</span>&#160; <span class="comment">// low surrogate occupies the least significant 15 bits</span></div><div class="line"><a name="l07669"></a><span class="lineno"> 7669</span>&#160; + codepoint2</div><div class="line"><a name="l07670"></a><span class="lineno"> 7670</span>&#160; <span class="comment">// there is still the 0xD800, 0xDC00 and 0x10000 noise</span></div><div class="line"><a name="l07671"></a><span class="lineno"> 7671</span>&#160; <span class="comment">// in the result so we have to subtract with:</span></div><div class="line"><a name="l07672"></a><span class="lineno"> 7672</span>&#160; <span class="comment">// (0xD800 &lt;&lt; 10) + DC00 - 0x10000 = 0x35FDC00</span></div><div class="line"><a name="l07673"></a><span class="lineno"> 7673</span>&#160; - 0x35FDC00;</div><div class="line"><a name="l07674"></a><span class="lineno"> 7674</span>&#160; }</div><div class="line"><a name="l07675"></a><span class="lineno"> 7675</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l07676"></a><span class="lineno"> 7676</span>&#160; {</div><div class="line"><a name="l07677"></a><span class="lineno"> 7677</span>&#160; <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;missing or wrong low surrogate&quot;</span>);</div><div class="line"><a name="l07678"></a><span class="lineno"> 7678</span>&#160; }</div><div class="line"><a name="l07679"></a><span class="lineno"> 7679</span>&#160; }</div><div class="line"><a name="l07680"></a><span class="lineno"> 7680</span>&#160;</div><div class="line"><a name="l07681"></a><span class="lineno"> 7681</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_ab63e618bbb0371042b1bec17f5891f42.html#ab63e618bbb0371042b1bec17f5891f42">string_t</a> result;</div><div class="line"><a name="l07682"></a><span class="lineno"> 7682</span>&#160;</div><div class="line"><a name="l07683"></a><span class="lineno"> 7683</span>&#160; <span class="keywordflow">if</span> (codepoint &lt; 0x80)</div><div class="line"><a name="l07684"></a><span class="lineno"> 7684</span>&#160; {</div><div class="line"><a name="l07685"></a><span class="lineno"> 7685</span>&#160; <span class="comment">// 1-byte characters: 0xxxxxxx (ASCII)</span></div><div class="line"><a name="l07686"></a><span class="lineno"> 7686</span>&#160; result.append(1, static_cast&lt;typename string_t::value_type&gt;(codepoint));</div><div class="line"><a name="l07687"></a><span class="lineno"> 7687</span>&#160; }</div><div class="line"><a name="l07688"></a><span class="lineno"> 7688</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (codepoint &lt;= 0x7ff)</div><div class="line"><a name="l07689"></a><span class="lineno"> 7689</span>&#160; {</div><div class="line"><a name="l07690"></a><span class="lineno"> 7690</span>&#160; <span class="comment">// 2-byte characters: 110xxxxx 10xxxxxx</span></div><div class="line"><a name="l07691"></a><span class="lineno"> 7691</span>&#160; result.append(1, static_cast&lt;typename string_t::value_type&gt;(0xC0 | ((codepoint &gt;&gt; 6) &amp; 0x1F)));</div><div class="line"><a name="l07692"></a><span class="lineno"> 7692</span>&#160; result.append(1, static_cast&lt;typename string_t::value_type&gt;(0x80 | (codepoint &amp; 0x3F)));</div><div class="line"><a name="l07693"></a><span class="lineno"> 7693</span>&#160; }</div><div class="line"><a name="l07694"></a><span class="lineno"> 7694</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (codepoint &lt;= 0xffff)</div><div class="line"><a name="l07695"></a><span class="lineno"> 7695</span>&#160; {</div><div class="line"><a name="l07696"></a><span class="lineno"> 7696</span>&#160; <span class="comment">// 3-byte characters: 1110xxxx 10xxxxxx 10xxxxxx</span></div><div class="line"><a name="l07697"></a><span class="lineno"> 7697</span>&#160; result.append(1, static_cast&lt;typename string_t::value_type&gt;(0xE0 | ((codepoint &gt;&gt; 12) &amp; 0x0F)));</div><div class="line"><a name="l07698"></a><span class="lineno"> 7698</span>&#160; result.append(1, static_cast&lt;typename string_t::value_type&gt;(0x80 | ((codepoint &gt;&gt; 6) &amp; 0x3F)));</div><div class="line"><a name="l07699"></a><span class="lineno"> 7699</span>&#160; result.append(1, static_cast&lt;typename string_t::value_type&gt;(0x80 | (codepoint &amp; 0x3F)));</div><div class="line"><a name="l07700"></a><span class="lineno"> 7700</span>&#160; }</div><div class="line"><a name="l07701"></a><span class="lineno"> 7701</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (codepoint &lt;= 0x10ffff)</div><div class="line"><a name="l07702"></a><span class="lineno"> 7702</span>&#160; {</div><div class="line"><a name="l07703"></a><span class="lineno"> 7703</span>&#160; <span class="comment">// 4-byte characters: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx</span></div><div class="line"><a name="l07704"></a><span class="lineno"> 7704</span>&#160; result.append(1, static_cast&lt;typename string_t::value_type&gt;(0xF0 | ((codepoint &gt;&gt; 18) &amp; 0x07)));</div><div class="line"><a name="l07705"></a><span class="lineno"> 7705</span>&#160; result.append(1, static_cast&lt;typename string_t::value_type&gt;(0x80 | ((codepoint &gt;&gt; 12) &amp; 0x3F)));</div><div class="line"><a name="l07706"></a><span class="lineno"> 7706</span>&#160; result.append(1, static_cast&lt;typename string_t::value_type&gt;(0x80 | ((codepoint &gt;&gt; 6) &amp; 0x3F)));</div><div class="line"><a name="l07707"></a><span class="lineno"> 7707</span>&#160; result.append(1, static_cast&lt;typename string_t::value_type&gt;(0x80 | (codepoint &amp; 0x3F)));</div><div class="line"><a name="l07708"></a><span class="lineno"> 7708</span>&#160; }</div><div class="line"><a name="l07709"></a><span class="lineno"> 7709</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l07710"></a><span class="lineno"> 7710</span>&#160; {</div><div class="line"><a name="l07711"></a><span class="lineno"> 7711</span>&#160; <span class="keywordflow">throw</span> std::out_of_range(<span class="stringliteral">&quot;code points above 0x10FFFF are invalid&quot;</span>);</div><div class="line"><a name="l07712"></a><span class="lineno"> 7712</span>&#160; }</div><div class="line"><a name="l07713"></a><span class="lineno"> 7713</span>&#160;</div><div class="line"><a name="l07714"></a><span class="lineno"> 7714</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l07715"></a><span class="lineno"> 7715</span>&#160; }</div><div class="line"><a name="l07716"></a><span class="lineno"> 7716</span>&#160;</div><div class="line"><a name="l07718"></a><span class="lineno"> 7718</span>&#160; <span class="keyword">static</span> std::string token_type_name(<span class="keyword">const</span> token_type t)</div><div class="line"><a name="l07719"></a><span class="lineno"> 7719</span>&#160; {</div><div class="line"><a name="l07720"></a><span class="lineno"> 7720</span>&#160; <span class="keywordflow">switch</span> (t)</div><div class="line"><a name="l07721"></a><span class="lineno"> 7721</span>&#160; {</div><div class="line"><a name="l07722"></a><span class="lineno"> 7722</span>&#160; <span class="keywordflow">case</span> token_type::uninitialized:</div><div class="line"><a name="l07723"></a><span class="lineno"> 7723</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;&lt;uninitialized&gt;&quot;</span>;</div><div class="line"><a name="l07724"></a><span class="lineno"> 7724</span>&#160; <span class="keywordflow">case</span> token_type::literal_true:</div><div class="line"><a name="l07725"></a><span class="lineno"> 7725</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;true literal&quot;</span>;</div><div class="line"><a name="l07726"></a><span class="lineno"> 7726</span>&#160; <span class="keywordflow">case</span> token_type::literal_false:</div><div class="line"><a name="l07727"></a><span class="lineno"> 7727</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;false literal&quot;</span>;</div><div class="line"><a name="l07728"></a><span class="lineno"> 7728</span>&#160; <span class="keywordflow">case</span> token_type::literal_null:</div><div class="line"><a name="l07729"></a><span class="lineno"> 7729</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;null literal&quot;</span>;</div><div class="line"><a name="l07730"></a><span class="lineno"> 7730</span>&#160; <span class="keywordflow">case</span> token_type::value_string:</div><div class="line"><a name="l07731"></a><span class="lineno"> 7731</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;string literal&quot;</span>;</div><div class="line"><a name="l07732"></a><span class="lineno"> 7732</span>&#160; <span class="keywordflow">case</span> token_type::value_number:</div><div class="line"><a name="l07733"></a><span class="lineno"> 7733</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;number literal&quot;</span>;</div><div class="line"><a name="l07734"></a><span class="lineno"> 7734</span>&#160; <span class="keywordflow">case</span> token_type::begin_array:</div><div class="line"><a name="l07735"></a><span class="lineno"> 7735</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;&#39;[&#39;&quot;</span>;</div><div class="line"><a name="l07736"></a><span class="lineno"> 7736</span>&#160; <span class="keywordflow">case</span> token_type::begin_object:</div><div class="line"><a name="l07737"></a><span class="lineno"> 7737</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;&#39;{&#39;&quot;</span>;</div><div class="line"><a name="l07738"></a><span class="lineno"> 7738</span>&#160; <span class="keywordflow">case</span> token_type::end_array:</div><div class="line"><a name="l07739"></a><span class="lineno"> 7739</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;&#39;]&#39;&quot;</span>;</div><div class="line"><a name="l07740"></a><span class="lineno"> 7740</span>&#160; <span class="keywordflow">case</span> token_type::end_object:</div><div class="line"><a name="l07741"></a><span class="lineno"> 7741</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;&#39;}&#39;&quot;</span>;</div><div class="line"><a name="l07742"></a><span class="lineno"> 7742</span>&#160; <span class="keywordflow">case</span> token_type::name_separator:</div><div class="line"><a name="l07743"></a><span class="lineno"> 7743</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;&#39;:&#39;&quot;</span>;</div><div class="line"><a name="l07744"></a><span class="lineno"> 7744</span>&#160; <span class="keywordflow">case</span> token_type::value_separator:</div><div class="line"><a name="l07745"></a><span class="lineno"> 7745</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;&#39;,&#39;&quot;</span>;</div><div class="line"><a name="l07746"></a><span class="lineno"> 7746</span>&#160; <span class="keywordflow">case</span> token_type::parse_error:</div><div class="line"><a name="l07747"></a><span class="lineno"> 7747</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;&lt;parse error&gt;&quot;</span>;</div><div class="line"><a name="l07748"></a><span class="lineno"> 7748</span>&#160; <span class="keywordflow">case</span> token_type::end_of_input:</div><div class="line"><a name="l07749"></a><span class="lineno"> 7749</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;end of input&quot;</span>;</div><div class="line"><a name="l07750"></a><span class="lineno"> 7750</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l07751"></a><span class="lineno"> 7751</span>&#160; {</div><div class="line"><a name="l07752"></a><span class="lineno"> 7752</span>&#160; <span class="comment">// catch non-enum values</span></div><div class="line"><a name="l07753"></a><span class="lineno"> 7753</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;unknown token&quot;</span>; <span class="comment">// LCOV_EXCL_LINE</span></div><div class="line"><a name="l07754"></a><span class="lineno"> 7754</span>&#160; }</div><div class="line"><a name="l07755"></a><span class="lineno"> 7755</span>&#160; }</div><div class="line"><a name="l07756"></a><span class="lineno"> 7756</span>&#160; }</div><div class="line"><a name="l07757"></a><span class="lineno"> 7757</span>&#160;</div><div class="line"><a name="l07779"></a><span class="lineno"> 7779</span>&#160; token_type scan()</div><div class="line"><a name="l07780"></a><span class="lineno"> 7780</span>&#160; {</div><div class="line"><a name="l07781"></a><span class="lineno"> 7781</span>&#160; <span class="keywordflow">while</span> (<span class="keyword">true</span>)</div><div class="line"><a name="l07782"></a><span class="lineno"> 7782</span>&#160; {</div><div class="line"><a name="l07783"></a><span class="lineno"> 7783</span>&#160; <span class="comment">// pointer for backtracking information</span></div><div class="line"><a name="l07784"></a><span class="lineno"> 7784</span>&#160; m_marker = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l07785"></a><span class="lineno"> 7785</span>&#160;</div><div class="line"><a name="l07786"></a><span class="lineno"> 7786</span>&#160; <span class="comment">// remember the begin of the token</span></div><div class="line"><a name="l07787"></a><span class="lineno"> 7787</span>&#160; m_start = m_cursor;</div><div class="line"><a name="l07788"></a><span class="lineno"> 7788</span>&#160; assert(m_start != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l07789"></a><span class="lineno"> 7789</span>&#160;</div><div class="line"><a name="l07790"></a><span class="lineno"> 7790</span>&#160;</div><div class="line"><a name="l07791"></a><span class="lineno"> 7791</span>&#160; {</div><div class="line"><a name="l07792"></a><span class="lineno"> 7792</span>&#160; lexer_char_t yych;</div><div class="line"><a name="l07793"></a><span class="lineno"> 7793</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> yyaccept = 0;</div><div class="line"><a name="l07794"></a><span class="lineno"> 7794</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> yybm[] =</div><div class="line"><a name="l07795"></a><span class="lineno"> 7795</span>&#160; {</div><div class="line"><a name="l07796"></a><span class="lineno"> 7796</span>&#160; 0, 0, 0, 0, 0, 0, 0, 0,</div><div class="line"><a name="l07797"></a><span class="lineno"> 7797</span>&#160; 0, 32, 32, 0, 0, 32, 0, 0,</div><div class="line"><a name="l07798"></a><span class="lineno"> 7798</span>&#160; 0, 0, 0, 0, 0, 0, 0, 0,</div><div class="line"><a name="l07799"></a><span class="lineno"> 7799</span>&#160; 0, 0, 0, 0, 0, 0, 0, 0,</div><div class="line"><a name="l07800"></a><span class="lineno"> 7800</span>&#160; 160, 128, 0, 128, 128, 128, 128, 128,</div><div class="line"><a name="l07801"></a><span class="lineno"> 7801</span>&#160; 128, 128, 128, 128, 128, 128, 128, 128,</div><div class="line"><a name="l07802"></a><span class="lineno"> 7802</span>&#160; 192, 192, 192, 192, 192, 192, 192, 192,</div><div class="line"><a name="l07803"></a><span class="lineno"> 7803</span>&#160; 192, 192, 128, 128, 128, 128, 128, 128,</div><div class="line"><a name="l07804"></a><span class="lineno"> 7804</span>&#160; 128, 128, 128, 128, 128, 128, 128, 128,</div><div class="line"><a name="l07805"></a><span class="lineno"> 7805</span>&#160; 128, 128, 128, 128, 128, 128, 128, 128,</div><div class="line"><a name="l07806"></a><span class="lineno"> 7806</span>&#160; 128, 128, 128, 128, 128, 128, 128, 128,</div><div class="line"><a name="l07807"></a><span class="lineno"> 7807</span>&#160; 128, 128, 128, 128, 0, 128, 128, 128,</div><div class="line"><a name="l07808"></a><span class="lineno"> 7808</span>&#160; 128, 128, 128, 128, 128, 128, 128, 128,</div><div class="line"><a name="l07809"></a><span class="lineno"> 7809</span>&#160; 128, 128, 128, 128, 128, 128, 128, 128,</div><div class="line"><a name="l07810"></a><span class="lineno"> 7810</span>&#160; 128, 128, 128, 128, 128, 128, 128, 128,</div><div class="line"><a name="l07811"></a><span class="lineno"> 7811</span>&#160; 128, 128, 128, 128, 128, 128, 128, 128,</div><div class="line"><a name="l07812"></a><span class="lineno"> 7812</span>&#160; 128, 128, 128, 128, 128, 128, 128, 128,</div><div class="line"><a name="l07813"></a><span class="lineno"> 7813</span>&#160; 128, 128, 128, 128, 128, 128, 128, 128,</div><div class="line"><a name="l07814"></a><span class="lineno"> 7814</span>&#160; 128, 128, 128, 128, 128, 128, 128, 128,</div><div class="line"><a name="l07815"></a><span class="lineno"> 7815</span>&#160; 128, 128, 128, 128, 128, 128, 128, 128,</div><div class="line"><a name="l07816"></a><span class="lineno"> 7816</span>&#160; 128, 128, 128, 128, 128, 128, 128, 128,</div><div class="line"><a name="l07817"></a><span class="lineno"> 7817</span>&#160; 128, 128, 128, 128, 128, 128, 128, 128,</div><div class="line"><a name="l07818"></a><span class="lineno"> 7818</span>&#160; 128, 128, 128, 128, 128, 128, 128, 128,</div><div class="line"><a name="l07819"></a><span class="lineno"> 7819</span>&#160; 128, 128, 128, 128, 128, 128, 128, 128,</div><div class="line"><a name="l07820"></a><span class="lineno"> 7820</span>&#160; 128, 128, 128, 128, 128, 128, 128, 128,</div><div class="line"><a name="l07821"></a><span class="lineno"> 7821</span>&#160; 128, 128, 128, 128, 128, 128, 128, 128,</div><div class="line"><a name="l07822"></a><span class="lineno"> 7822</span>&#160; 128, 128, 128, 128, 128, 128, 128, 128,</div><div class="line"><a name="l07823"></a><span class="lineno"> 7823</span>&#160; 128, 128, 128, 128, 128, 128, 128, 128,</div><div class="line"><a name="l07824"></a><span class="lineno"> 7824</span>&#160; 128, 128, 128, 128, 128, 128, 128, 128,</div><div class="line"><a name="l07825"></a><span class="lineno"> 7825</span>&#160; 128, 128, 128, 128, 128, 128, 128, 128,</div><div class="line"><a name="l07826"></a><span class="lineno"> 7826</span>&#160; 128, 128, 128, 128, 128, 128, 128, 128,</div><div class="line"><a name="l07827"></a><span class="lineno"> 7827</span>&#160; 128, 128, 128, 128, 128, 128, 128, 128,</div><div class="line"><a name="l07828"></a><span class="lineno"> 7828</span>&#160; };</div><div class="line"><a name="l07829"></a><span class="lineno"> 7829</span>&#160; <span class="keywordflow">if</span> ((m_limit - m_cursor) &lt; 5)</div><div class="line"><a name="l07830"></a><span class="lineno"> 7830</span>&#160; {</div><div class="line"><a name="l07831"></a><span class="lineno"> 7831</span>&#160; fill_line_buffer();</div><div class="line"><a name="l07832"></a><span class="lineno"> 7832</span>&#160; }</div><div class="line"><a name="l07833"></a><span class="lineno"> 7833</span>&#160; yych = *m_cursor;</div><div class="line"><a name="l07834"></a><span class="lineno"> 7834</span>&#160; <span class="keywordflow">if</span> (yybm[0 + yych] &amp; 32)</div><div class="line"><a name="l07835"></a><span class="lineno"> 7835</span>&#160; {</div><div class="line"><a name="l07836"></a><span class="lineno"> 7836</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_6;</div><div class="line"><a name="l07837"></a><span class="lineno"> 7837</span>&#160; }</div><div class="line"><a name="l07838"></a><span class="lineno"> 7838</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;\\&#39;</span>)</div><div class="line"><a name="l07839"></a><span class="lineno"> 7839</span>&#160; {</div><div class="line"><a name="l07840"></a><span class="lineno"> 7840</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;-&#39;</span>)</div><div class="line"><a name="l07841"></a><span class="lineno"> 7841</span>&#160; {</div><div class="line"><a name="l07842"></a><span class="lineno"> 7842</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;&quot;&#39;</span>)</div><div class="line"><a name="l07843"></a><span class="lineno"> 7843</span>&#160; {</div><div class="line"><a name="l07844"></a><span class="lineno"> 7844</span>&#160; <span class="keywordflow">if</span> (yych &lt;= 0x00)</div><div class="line"><a name="l07845"></a><span class="lineno"> 7845</span>&#160; {</div><div class="line"><a name="l07846"></a><span class="lineno"> 7846</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_2;</div><div class="line"><a name="l07847"></a><span class="lineno"> 7847</span>&#160; }</div><div class="line"><a name="l07848"></a><span class="lineno"> 7848</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;!&#39;</span>)</div><div class="line"><a name="l07849"></a><span class="lineno"> 7849</span>&#160; {</div><div class="line"><a name="l07850"></a><span class="lineno"> 7850</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_4;</div><div class="line"><a name="l07851"></a><span class="lineno"> 7851</span>&#160; }</div><div class="line"><a name="l07852"></a><span class="lineno"> 7852</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_9;</div><div class="line"><a name="l07853"></a><span class="lineno"> 7853</span>&#160; }</div><div class="line"><a name="l07854"></a><span class="lineno"> 7854</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l07855"></a><span class="lineno"> 7855</span>&#160; {</div><div class="line"><a name="l07856"></a><span class="lineno"> 7856</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;+&#39;</span>)</div><div class="line"><a name="l07857"></a><span class="lineno"> 7857</span>&#160; {</div><div class="line"><a name="l07858"></a><span class="lineno"> 7858</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_4;</div><div class="line"><a name="l07859"></a><span class="lineno"> 7859</span>&#160; }</div><div class="line"><a name="l07860"></a><span class="lineno"> 7860</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;,&#39;</span>)</div><div class="line"><a name="l07861"></a><span class="lineno"> 7861</span>&#160; {</div><div class="line"><a name="l07862"></a><span class="lineno"> 7862</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_10;</div><div class="line"><a name="l07863"></a><span class="lineno"> 7863</span>&#160; }</div><div class="line"><a name="l07864"></a><span class="lineno"> 7864</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_12;</div><div class="line"><a name="l07865"></a><span class="lineno"> 7865</span>&#160; }</div><div class="line"><a name="l07866"></a><span class="lineno"> 7866</span>&#160; }</div><div class="line"><a name="l07867"></a><span class="lineno"> 7867</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l07868"></a><span class="lineno"> 7868</span>&#160; {</div><div class="line"><a name="l07869"></a><span class="lineno"> 7869</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;9&#39;</span>)</div><div class="line"><a name="l07870"></a><span class="lineno"> 7870</span>&#160; {</div><div class="line"><a name="l07871"></a><span class="lineno"> 7871</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;/&#39;</span>)</div><div class="line"><a name="l07872"></a><span class="lineno"> 7872</span>&#160; {</div><div class="line"><a name="l07873"></a><span class="lineno"> 7873</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_4;</div><div class="line"><a name="l07874"></a><span class="lineno"> 7874</span>&#160; }</div><div class="line"><a name="l07875"></a><span class="lineno"> 7875</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;0&#39;</span>)</div><div class="line"><a name="l07876"></a><span class="lineno"> 7876</span>&#160; {</div><div class="line"><a name="l07877"></a><span class="lineno"> 7877</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_13;</div><div class="line"><a name="l07878"></a><span class="lineno"> 7878</span>&#160; }</div><div class="line"><a name="l07879"></a><span class="lineno"> 7879</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_15;</div><div class="line"><a name="l07880"></a><span class="lineno"> 7880</span>&#160; }</div><div class="line"><a name="l07881"></a><span class="lineno"> 7881</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l07882"></a><span class="lineno"> 7882</span>&#160; {</div><div class="line"><a name="l07883"></a><span class="lineno"> 7883</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;:&#39;</span>)</div><div class="line"><a name="l07884"></a><span class="lineno"> 7884</span>&#160; {</div><div class="line"><a name="l07885"></a><span class="lineno"> 7885</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_17;</div><div class="line"><a name="l07886"></a><span class="lineno"> 7886</span>&#160; }</div><div class="line"><a name="l07887"></a><span class="lineno"> 7887</span>&#160; <span class="keywordflow">if</span> (yych == <span class="charliteral">&#39;[&#39;</span>)</div><div class="line"><a name="l07888"></a><span class="lineno"> 7888</span>&#160; {</div><div class="line"><a name="l07889"></a><span class="lineno"> 7889</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_19;</div><div class="line"><a name="l07890"></a><span class="lineno"> 7890</span>&#160; }</div><div class="line"><a name="l07891"></a><span class="lineno"> 7891</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_4;</div><div class="line"><a name="l07892"></a><span class="lineno"> 7892</span>&#160; }</div><div class="line"><a name="l07893"></a><span class="lineno"> 7893</span>&#160; }</div><div class="line"><a name="l07894"></a><span class="lineno"> 7894</span>&#160; }</div><div class="line"><a name="l07895"></a><span class="lineno"> 7895</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l07896"></a><span class="lineno"> 7896</span>&#160; {</div><div class="line"><a name="l07897"></a><span class="lineno"> 7897</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;t&#39;</span>)</div><div class="line"><a name="l07898"></a><span class="lineno"> 7898</span>&#160; {</div><div class="line"><a name="l07899"></a><span class="lineno"> 7899</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;f&#39;</span>)</div><div class="line"><a name="l07900"></a><span class="lineno"> 7900</span>&#160; {</div><div class="line"><a name="l07901"></a><span class="lineno"> 7901</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;]&#39;</span>)</div><div class="line"><a name="l07902"></a><span class="lineno"> 7902</span>&#160; {</div><div class="line"><a name="l07903"></a><span class="lineno"> 7903</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_21;</div><div class="line"><a name="l07904"></a><span class="lineno"> 7904</span>&#160; }</div><div class="line"><a name="l07905"></a><span class="lineno"> 7905</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;e&#39;</span>)</div><div class="line"><a name="l07906"></a><span class="lineno"> 7906</span>&#160; {</div><div class="line"><a name="l07907"></a><span class="lineno"> 7907</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_4;</div><div class="line"><a name="l07908"></a><span class="lineno"> 7908</span>&#160; }</div><div class="line"><a name="l07909"></a><span class="lineno"> 7909</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_23;</div><div class="line"><a name="l07910"></a><span class="lineno"> 7910</span>&#160; }</div><div class="line"><a name="l07911"></a><span class="lineno"> 7911</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l07912"></a><span class="lineno"> 7912</span>&#160; {</div><div class="line"><a name="l07913"></a><span class="lineno"> 7913</span>&#160; <span class="keywordflow">if</span> (yych == <span class="charliteral">&#39;n&#39;</span>)</div><div class="line"><a name="l07914"></a><span class="lineno"> 7914</span>&#160; {</div><div class="line"><a name="l07915"></a><span class="lineno"> 7915</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_24;</div><div class="line"><a name="l07916"></a><span class="lineno"> 7916</span>&#160; }</div><div class="line"><a name="l07917"></a><span class="lineno"> 7917</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;s&#39;</span>)</div><div class="line"><a name="l07918"></a><span class="lineno"> 7918</span>&#160; {</div><div class="line"><a name="l07919"></a><span class="lineno"> 7919</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_4;</div><div class="line"><a name="l07920"></a><span class="lineno"> 7920</span>&#160; }</div><div class="line"><a name="l07921"></a><span class="lineno"> 7921</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_25;</div><div class="line"><a name="l07922"></a><span class="lineno"> 7922</span>&#160; }</div><div class="line"><a name="l07923"></a><span class="lineno"> 7923</span>&#160; }</div><div class="line"><a name="l07924"></a><span class="lineno"> 7924</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l07925"></a><span class="lineno"> 7925</span>&#160; {</div><div class="line"><a name="l07926"></a><span class="lineno"> 7926</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;|&#39;</span>)</div><div class="line"><a name="l07927"></a><span class="lineno"> 7927</span>&#160; {</div><div class="line"><a name="l07928"></a><span class="lineno"> 7928</span>&#160; <span class="keywordflow">if</span> (yych == <span class="charliteral">&#39;{&#39;</span>)</div><div class="line"><a name="l07929"></a><span class="lineno"> 7929</span>&#160; {</div><div class="line"><a name="l07930"></a><span class="lineno"> 7930</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_26;</div><div class="line"><a name="l07931"></a><span class="lineno"> 7931</span>&#160; }</div><div class="line"><a name="l07932"></a><span class="lineno"> 7932</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_4;</div><div class="line"><a name="l07933"></a><span class="lineno"> 7933</span>&#160; }</div><div class="line"><a name="l07934"></a><span class="lineno"> 7934</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l07935"></a><span class="lineno"> 7935</span>&#160; {</div><div class="line"><a name="l07936"></a><span class="lineno"> 7936</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;}&#39;</span>)</div><div class="line"><a name="l07937"></a><span class="lineno"> 7937</span>&#160; {</div><div class="line"><a name="l07938"></a><span class="lineno"> 7938</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_28;</div><div class="line"><a name="l07939"></a><span class="lineno"> 7939</span>&#160; }</div><div class="line"><a name="l07940"></a><span class="lineno"> 7940</span>&#160; <span class="keywordflow">if</span> (yych == 0xEF)</div><div class="line"><a name="l07941"></a><span class="lineno"> 7941</span>&#160; {</div><div class="line"><a name="l07942"></a><span class="lineno"> 7942</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_30;</div><div class="line"><a name="l07943"></a><span class="lineno"> 7943</span>&#160; }</div><div class="line"><a name="l07944"></a><span class="lineno"> 7944</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_4;</div><div class="line"><a name="l07945"></a><span class="lineno"> 7945</span>&#160; }</div><div class="line"><a name="l07946"></a><span class="lineno"> 7946</span>&#160; }</div><div class="line"><a name="l07947"></a><span class="lineno"> 7947</span>&#160; }</div><div class="line"><a name="l07948"></a><span class="lineno"> 7948</span>&#160;basic_json_parser_2:</div><div class="line"><a name="l07949"></a><span class="lineno"> 7949</span>&#160; ++m_cursor;</div><div class="line"><a name="l07950"></a><span class="lineno"> 7950</span>&#160; {</div><div class="line"><a name="l07951"></a><span class="lineno"> 7951</span>&#160; last_token_type = token_type::end_of_input;</div><div class="line"><a name="l07952"></a><span class="lineno"> 7952</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l07953"></a><span class="lineno"> 7953</span>&#160; }</div><div class="line"><a name="l07954"></a><span class="lineno"> 7954</span>&#160;basic_json_parser_4:</div><div class="line"><a name="l07955"></a><span class="lineno"> 7955</span>&#160; ++m_cursor;</div><div class="line"><a name="l07956"></a><span class="lineno"> 7956</span>&#160;basic_json_parser_5:</div><div class="line"><a name="l07957"></a><span class="lineno"> 7957</span>&#160; {</div><div class="line"><a name="l07958"></a><span class="lineno"> 7958</span>&#160; last_token_type = token_type::parse_error;</div><div class="line"><a name="l07959"></a><span class="lineno"> 7959</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l07960"></a><span class="lineno"> 7960</span>&#160; }</div><div class="line"><a name="l07961"></a><span class="lineno"> 7961</span>&#160;basic_json_parser_6:</div><div class="line"><a name="l07962"></a><span class="lineno"> 7962</span>&#160; ++m_cursor;</div><div class="line"><a name="l07963"></a><span class="lineno"> 7963</span>&#160; <span class="keywordflow">if</span> (m_limit &lt;= m_cursor)</div><div class="line"><a name="l07964"></a><span class="lineno"> 7964</span>&#160; {</div><div class="line"><a name="l07965"></a><span class="lineno"> 7965</span>&#160; fill_line_buffer();</div><div class="line"><a name="l07966"></a><span class="lineno"> 7966</span>&#160; }</div><div class="line"><a name="l07967"></a><span class="lineno"> 7967</span>&#160; yych = *m_cursor;</div><div class="line"><a name="l07968"></a><span class="lineno"> 7968</span>&#160; <span class="keywordflow">if</span> (yybm[0 + yych] &amp; 32)</div><div class="line"><a name="l07969"></a><span class="lineno"> 7969</span>&#160; {</div><div class="line"><a name="l07970"></a><span class="lineno"> 7970</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_6;</div><div class="line"><a name="l07971"></a><span class="lineno"> 7971</span>&#160; }</div><div class="line"><a name="l07972"></a><span class="lineno"> 7972</span>&#160; {</div><div class="line"><a name="l07973"></a><span class="lineno"> 7973</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l07974"></a><span class="lineno"> 7974</span>&#160; }</div><div class="line"><a name="l07975"></a><span class="lineno"> 7975</span>&#160;basic_json_parser_9:</div><div class="line"><a name="l07976"></a><span class="lineno"> 7976</span>&#160; yyaccept = 0;</div><div class="line"><a name="l07977"></a><span class="lineno"> 7977</span>&#160; yych = *(m_marker = ++m_cursor);</div><div class="line"><a name="l07978"></a><span class="lineno"> 7978</span>&#160; <span class="keywordflow">if</span> (yych &lt;= 0x1F)</div><div class="line"><a name="l07979"></a><span class="lineno"> 7979</span>&#160; {</div><div class="line"><a name="l07980"></a><span class="lineno"> 7980</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_5;</div><div class="line"><a name="l07981"></a><span class="lineno"> 7981</span>&#160; }</div><div class="line"><a name="l07982"></a><span class="lineno"> 7982</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_32;</div><div class="line"><a name="l07983"></a><span class="lineno"> 7983</span>&#160;basic_json_parser_10:</div><div class="line"><a name="l07984"></a><span class="lineno"> 7984</span>&#160; ++m_cursor;</div><div class="line"><a name="l07985"></a><span class="lineno"> 7985</span>&#160; {</div><div class="line"><a name="l07986"></a><span class="lineno"> 7986</span>&#160; last_token_type = token_type::value_separator;</div><div class="line"><a name="l07987"></a><span class="lineno"> 7987</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l07988"></a><span class="lineno"> 7988</span>&#160; }</div><div class="line"><a name="l07989"></a><span class="lineno"> 7989</span>&#160;basic_json_parser_12:</div><div class="line"><a name="l07990"></a><span class="lineno"> 7990</span>&#160; yych = *++m_cursor;</div><div class="line"><a name="l07991"></a><span class="lineno"> 7991</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;/&#39;</span>)</div><div class="line"><a name="l07992"></a><span class="lineno"> 7992</span>&#160; {</div><div class="line"><a name="l07993"></a><span class="lineno"> 7993</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_5;</div><div class="line"><a name="l07994"></a><span class="lineno"> 7994</span>&#160; }</div><div class="line"><a name="l07995"></a><span class="lineno"> 7995</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;0&#39;</span>)</div><div class="line"><a name="l07996"></a><span class="lineno"> 7996</span>&#160; {</div><div class="line"><a name="l07997"></a><span class="lineno"> 7997</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_13;</div><div class="line"><a name="l07998"></a><span class="lineno"> 7998</span>&#160; }</div><div class="line"><a name="l07999"></a><span class="lineno"> 7999</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;9&#39;</span>)</div><div class="line"><a name="l08000"></a><span class="lineno"> 8000</span>&#160; {</div><div class="line"><a name="l08001"></a><span class="lineno"> 8001</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_15;</div><div class="line"><a name="l08002"></a><span class="lineno"> 8002</span>&#160; }</div><div class="line"><a name="l08003"></a><span class="lineno"> 8003</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_5;</div><div class="line"><a name="l08004"></a><span class="lineno"> 8004</span>&#160;basic_json_parser_13:</div><div class="line"><a name="l08005"></a><span class="lineno"> 8005</span>&#160; yyaccept = 1;</div><div class="line"><a name="l08006"></a><span class="lineno"> 8006</span>&#160; yych = *(m_marker = ++m_cursor);</div><div class="line"><a name="l08007"></a><span class="lineno"> 8007</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;D&#39;</span>)</div><div class="line"><a name="l08008"></a><span class="lineno"> 8008</span>&#160; {</div><div class="line"><a name="l08009"></a><span class="lineno"> 8009</span>&#160; <span class="keywordflow">if</span> (yych == <span class="charliteral">&#39;.&#39;</span>)</div><div class="line"><a name="l08010"></a><span class="lineno"> 8010</span>&#160; {</div><div class="line"><a name="l08011"></a><span class="lineno"> 8011</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_37;</div><div class="line"><a name="l08012"></a><span class="lineno"> 8012</span>&#160; }</div><div class="line"><a name="l08013"></a><span class="lineno"> 8013</span>&#160; }</div><div class="line"><a name="l08014"></a><span class="lineno"> 8014</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l08015"></a><span class="lineno"> 8015</span>&#160; {</div><div class="line"><a name="l08016"></a><span class="lineno"> 8016</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;E&#39;</span>)</div><div class="line"><a name="l08017"></a><span class="lineno"> 8017</span>&#160; {</div><div class="line"><a name="l08018"></a><span class="lineno"> 8018</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_38;</div><div class="line"><a name="l08019"></a><span class="lineno"> 8019</span>&#160; }</div><div class="line"><a name="l08020"></a><span class="lineno"> 8020</span>&#160; <span class="keywordflow">if</span> (yych == <span class="charliteral">&#39;e&#39;</span>)</div><div class="line"><a name="l08021"></a><span class="lineno"> 8021</span>&#160; {</div><div class="line"><a name="l08022"></a><span class="lineno"> 8022</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_38;</div><div class="line"><a name="l08023"></a><span class="lineno"> 8023</span>&#160; }</div><div class="line"><a name="l08024"></a><span class="lineno"> 8024</span>&#160; }</div><div class="line"><a name="l08025"></a><span class="lineno"> 8025</span>&#160;basic_json_parser_14:</div><div class="line"><a name="l08026"></a><span class="lineno"> 8026</span>&#160; {</div><div class="line"><a name="l08027"></a><span class="lineno"> 8027</span>&#160; last_token_type = token_type::value_number;</div><div class="line"><a name="l08028"></a><span class="lineno"> 8028</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l08029"></a><span class="lineno"> 8029</span>&#160; }</div><div class="line"><a name="l08030"></a><span class="lineno"> 8030</span>&#160;basic_json_parser_15:</div><div class="line"><a name="l08031"></a><span class="lineno"> 8031</span>&#160; yyaccept = 1;</div><div class="line"><a name="l08032"></a><span class="lineno"> 8032</span>&#160; m_marker = ++m_cursor;</div><div class="line"><a name="l08033"></a><span class="lineno"> 8033</span>&#160; <span class="keywordflow">if</span> ((m_limit - m_cursor) &lt; 3)</div><div class="line"><a name="l08034"></a><span class="lineno"> 8034</span>&#160; {</div><div class="line"><a name="l08035"></a><span class="lineno"> 8035</span>&#160; fill_line_buffer();</div><div class="line"><a name="l08036"></a><span class="lineno"> 8036</span>&#160; }</div><div class="line"><a name="l08037"></a><span class="lineno"> 8037</span>&#160; yych = *m_cursor;</div><div class="line"><a name="l08038"></a><span class="lineno"> 8038</span>&#160; <span class="keywordflow">if</span> (yybm[0 + yych] &amp; 64)</div><div class="line"><a name="l08039"></a><span class="lineno"> 8039</span>&#160; {</div><div class="line"><a name="l08040"></a><span class="lineno"> 8040</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_15;</div><div class="line"><a name="l08041"></a><span class="lineno"> 8041</span>&#160; }</div><div class="line"><a name="l08042"></a><span class="lineno"> 8042</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;D&#39;</span>)</div><div class="line"><a name="l08043"></a><span class="lineno"> 8043</span>&#160; {</div><div class="line"><a name="l08044"></a><span class="lineno"> 8044</span>&#160; <span class="keywordflow">if</span> (yych == <span class="charliteral">&#39;.&#39;</span>)</div><div class="line"><a name="l08045"></a><span class="lineno"> 8045</span>&#160; {</div><div class="line"><a name="l08046"></a><span class="lineno"> 8046</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_37;</div><div class="line"><a name="l08047"></a><span class="lineno"> 8047</span>&#160; }</div><div class="line"><a name="l08048"></a><span class="lineno"> 8048</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_14;</div><div class="line"><a name="l08049"></a><span class="lineno"> 8049</span>&#160; }</div><div class="line"><a name="l08050"></a><span class="lineno"> 8050</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l08051"></a><span class="lineno"> 8051</span>&#160; {</div><div class="line"><a name="l08052"></a><span class="lineno"> 8052</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;E&#39;</span>)</div><div class="line"><a name="l08053"></a><span class="lineno"> 8053</span>&#160; {</div><div class="line"><a name="l08054"></a><span class="lineno"> 8054</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_38;</div><div class="line"><a name="l08055"></a><span class="lineno"> 8055</span>&#160; }</div><div class="line"><a name="l08056"></a><span class="lineno"> 8056</span>&#160; <span class="keywordflow">if</span> (yych == <span class="charliteral">&#39;e&#39;</span>)</div><div class="line"><a name="l08057"></a><span class="lineno"> 8057</span>&#160; {</div><div class="line"><a name="l08058"></a><span class="lineno"> 8058</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_38;</div><div class="line"><a name="l08059"></a><span class="lineno"> 8059</span>&#160; }</div><div class="line"><a name="l08060"></a><span class="lineno"> 8060</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_14;</div><div class="line"><a name="l08061"></a><span class="lineno"> 8061</span>&#160; }</div><div class="line"><a name="l08062"></a><span class="lineno"> 8062</span>&#160;basic_json_parser_17:</div><div class="line"><a name="l08063"></a><span class="lineno"> 8063</span>&#160; ++m_cursor;</div><div class="line"><a name="l08064"></a><span class="lineno"> 8064</span>&#160; {</div><div class="line"><a name="l08065"></a><span class="lineno"> 8065</span>&#160; last_token_type = token_type::name_separator;</div><div class="line"><a name="l08066"></a><span class="lineno"> 8066</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l08067"></a><span class="lineno"> 8067</span>&#160; }</div><div class="line"><a name="l08068"></a><span class="lineno"> 8068</span>&#160;basic_json_parser_19:</div><div class="line"><a name="l08069"></a><span class="lineno"> 8069</span>&#160; ++m_cursor;</div><div class="line"><a name="l08070"></a><span class="lineno"> 8070</span>&#160; {</div><div class="line"><a name="l08071"></a><span class="lineno"> 8071</span>&#160; last_token_type = token_type::begin_array;</div><div class="line"><a name="l08072"></a><span class="lineno"> 8072</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l08073"></a><span class="lineno"> 8073</span>&#160; }</div><div class="line"><a name="l08074"></a><span class="lineno"> 8074</span>&#160;basic_json_parser_21:</div><div class="line"><a name="l08075"></a><span class="lineno"> 8075</span>&#160; ++m_cursor;</div><div class="line"><a name="l08076"></a><span class="lineno"> 8076</span>&#160; {</div><div class="line"><a name="l08077"></a><span class="lineno"> 8077</span>&#160; last_token_type = token_type::end_array;</div><div class="line"><a name="l08078"></a><span class="lineno"> 8078</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l08079"></a><span class="lineno"> 8079</span>&#160; }</div><div class="line"><a name="l08080"></a><span class="lineno"> 8080</span>&#160;basic_json_parser_23:</div><div class="line"><a name="l08081"></a><span class="lineno"> 8081</span>&#160; yyaccept = 0;</div><div class="line"><a name="l08082"></a><span class="lineno"> 8082</span>&#160; yych = *(m_marker = ++m_cursor);</div><div class="line"><a name="l08083"></a><span class="lineno"> 8083</span>&#160; <span class="keywordflow">if</span> (yych == <span class="charliteral">&#39;a&#39;</span>)</div><div class="line"><a name="l08084"></a><span class="lineno"> 8084</span>&#160; {</div><div class="line"><a name="l08085"></a><span class="lineno"> 8085</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_39;</div><div class="line"><a name="l08086"></a><span class="lineno"> 8086</span>&#160; }</div><div class="line"><a name="l08087"></a><span class="lineno"> 8087</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_5;</div><div class="line"><a name="l08088"></a><span class="lineno"> 8088</span>&#160;basic_json_parser_24:</div><div class="line"><a name="l08089"></a><span class="lineno"> 8089</span>&#160; yyaccept = 0;</div><div class="line"><a name="l08090"></a><span class="lineno"> 8090</span>&#160; yych = *(m_marker = ++m_cursor);</div><div class="line"><a name="l08091"></a><span class="lineno"> 8091</span>&#160; <span class="keywordflow">if</span> (yych == <span class="charliteral">&#39;u&#39;</span>)</div><div class="line"><a name="l08092"></a><span class="lineno"> 8092</span>&#160; {</div><div class="line"><a name="l08093"></a><span class="lineno"> 8093</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_40;</div><div class="line"><a name="l08094"></a><span class="lineno"> 8094</span>&#160; }</div><div class="line"><a name="l08095"></a><span class="lineno"> 8095</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_5;</div><div class="line"><a name="l08096"></a><span class="lineno"> 8096</span>&#160;basic_json_parser_25:</div><div class="line"><a name="l08097"></a><span class="lineno"> 8097</span>&#160; yyaccept = 0;</div><div class="line"><a name="l08098"></a><span class="lineno"> 8098</span>&#160; yych = *(m_marker = ++m_cursor);</div><div class="line"><a name="l08099"></a><span class="lineno"> 8099</span>&#160; <span class="keywordflow">if</span> (yych == <span class="charliteral">&#39;r&#39;</span>)</div><div class="line"><a name="l08100"></a><span class="lineno"> 8100</span>&#160; {</div><div class="line"><a name="l08101"></a><span class="lineno"> 8101</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_41;</div><div class="line"><a name="l08102"></a><span class="lineno"> 8102</span>&#160; }</div><div class="line"><a name="l08103"></a><span class="lineno"> 8103</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_5;</div><div class="line"><a name="l08104"></a><span class="lineno"> 8104</span>&#160;basic_json_parser_26:</div><div class="line"><a name="l08105"></a><span class="lineno"> 8105</span>&#160; ++m_cursor;</div><div class="line"><a name="l08106"></a><span class="lineno"> 8106</span>&#160; {</div><div class="line"><a name="l08107"></a><span class="lineno"> 8107</span>&#160; last_token_type = token_type::begin_object;</div><div class="line"><a name="l08108"></a><span class="lineno"> 8108</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l08109"></a><span class="lineno"> 8109</span>&#160; }</div><div class="line"><a name="l08110"></a><span class="lineno"> 8110</span>&#160;basic_json_parser_28:</div><div class="line"><a name="l08111"></a><span class="lineno"> 8111</span>&#160; ++m_cursor;</div><div class="line"><a name="l08112"></a><span class="lineno"> 8112</span>&#160; {</div><div class="line"><a name="l08113"></a><span class="lineno"> 8113</span>&#160; last_token_type = token_type::end_object;</div><div class="line"><a name="l08114"></a><span class="lineno"> 8114</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l08115"></a><span class="lineno"> 8115</span>&#160; }</div><div class="line"><a name="l08116"></a><span class="lineno"> 8116</span>&#160;basic_json_parser_30:</div><div class="line"><a name="l08117"></a><span class="lineno"> 8117</span>&#160; yyaccept = 0;</div><div class="line"><a name="l08118"></a><span class="lineno"> 8118</span>&#160; yych = *(m_marker = ++m_cursor);</div><div class="line"><a name="l08119"></a><span class="lineno"> 8119</span>&#160; <span class="keywordflow">if</span> (yych == 0xBB)</div><div class="line"><a name="l08120"></a><span class="lineno"> 8120</span>&#160; {</div><div class="line"><a name="l08121"></a><span class="lineno"> 8121</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_42;</div><div class="line"><a name="l08122"></a><span class="lineno"> 8122</span>&#160; }</div><div class="line"><a name="l08123"></a><span class="lineno"> 8123</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_5;</div><div class="line"><a name="l08124"></a><span class="lineno"> 8124</span>&#160;basic_json_parser_31:</div><div class="line"><a name="l08125"></a><span class="lineno"> 8125</span>&#160; ++m_cursor;</div><div class="line"><a name="l08126"></a><span class="lineno"> 8126</span>&#160; <span class="keywordflow">if</span> (m_limit &lt;= m_cursor)</div><div class="line"><a name="l08127"></a><span class="lineno"> 8127</span>&#160; {</div><div class="line"><a name="l08128"></a><span class="lineno"> 8128</span>&#160; fill_line_buffer();</div><div class="line"><a name="l08129"></a><span class="lineno"> 8129</span>&#160; }</div><div class="line"><a name="l08130"></a><span class="lineno"> 8130</span>&#160; yych = *m_cursor;</div><div class="line"><a name="l08131"></a><span class="lineno"> 8131</span>&#160;basic_json_parser_32:</div><div class="line"><a name="l08132"></a><span class="lineno"> 8132</span>&#160; <span class="keywordflow">if</span> (yybm[0 + yych] &amp; 128)</div><div class="line"><a name="l08133"></a><span class="lineno"> 8133</span>&#160; {</div><div class="line"><a name="l08134"></a><span class="lineno"> 8134</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_31;</div><div class="line"><a name="l08135"></a><span class="lineno"> 8135</span>&#160; }</div><div class="line"><a name="l08136"></a><span class="lineno"> 8136</span>&#160; <span class="keywordflow">if</span> (yych &lt;= 0x1F)</div><div class="line"><a name="l08137"></a><span class="lineno"> 8137</span>&#160; {</div><div class="line"><a name="l08138"></a><span class="lineno"> 8138</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_33;</div><div class="line"><a name="l08139"></a><span class="lineno"> 8139</span>&#160; }</div><div class="line"><a name="l08140"></a><span class="lineno"> 8140</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;&quot;&#39;</span>)</div><div class="line"><a name="l08141"></a><span class="lineno"> 8141</span>&#160; {</div><div class="line"><a name="l08142"></a><span class="lineno"> 8142</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_34;</div><div class="line"><a name="l08143"></a><span class="lineno"> 8143</span>&#160; }</div><div class="line"><a name="l08144"></a><span class="lineno"> 8144</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_36;</div><div class="line"><a name="l08145"></a><span class="lineno"> 8145</span>&#160;basic_json_parser_33:</div><div class="line"><a name="l08146"></a><span class="lineno"> 8146</span>&#160; m_cursor = m_marker;</div><div class="line"><a name="l08147"></a><span class="lineno"> 8147</span>&#160; <span class="keywordflow">if</span> (yyaccept == 0)</div><div class="line"><a name="l08148"></a><span class="lineno"> 8148</span>&#160; {</div><div class="line"><a name="l08149"></a><span class="lineno"> 8149</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_5;</div><div class="line"><a name="l08150"></a><span class="lineno"> 8150</span>&#160; }</div><div class="line"><a name="l08151"></a><span class="lineno"> 8151</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l08152"></a><span class="lineno"> 8152</span>&#160; {</div><div class="line"><a name="l08153"></a><span class="lineno"> 8153</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_14;</div><div class="line"><a name="l08154"></a><span class="lineno"> 8154</span>&#160; }</div><div class="line"><a name="l08155"></a><span class="lineno"> 8155</span>&#160;basic_json_parser_34:</div><div class="line"><a name="l08156"></a><span class="lineno"> 8156</span>&#160; ++m_cursor;</div><div class="line"><a name="l08157"></a><span class="lineno"> 8157</span>&#160; {</div><div class="line"><a name="l08158"></a><span class="lineno"> 8158</span>&#160; last_token_type = token_type::value_string;</div><div class="line"><a name="l08159"></a><span class="lineno"> 8159</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l08160"></a><span class="lineno"> 8160</span>&#160; }</div><div class="line"><a name="l08161"></a><span class="lineno"> 8161</span>&#160;basic_json_parser_36:</div><div class="line"><a name="l08162"></a><span class="lineno"> 8162</span>&#160; ++m_cursor;</div><div class="line"><a name="l08163"></a><span class="lineno"> 8163</span>&#160; <span class="keywordflow">if</span> (m_limit &lt;= m_cursor)</div><div class="line"><a name="l08164"></a><span class="lineno"> 8164</span>&#160; {</div><div class="line"><a name="l08165"></a><span class="lineno"> 8165</span>&#160; fill_line_buffer();</div><div class="line"><a name="l08166"></a><span class="lineno"> 8166</span>&#160; }</div><div class="line"><a name="l08167"></a><span class="lineno"> 8167</span>&#160; yych = *m_cursor;</div><div class="line"><a name="l08168"></a><span class="lineno"> 8168</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;e&#39;</span>)</div><div class="line"><a name="l08169"></a><span class="lineno"> 8169</span>&#160; {</div><div class="line"><a name="l08170"></a><span class="lineno"> 8170</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;/&#39;</span>)</div><div class="line"><a name="l08171"></a><span class="lineno"> 8171</span>&#160; {</div><div class="line"><a name="l08172"></a><span class="lineno"> 8172</span>&#160; <span class="keywordflow">if</span> (yych == <span class="charliteral">&#39;&quot;&#39;</span>)</div><div class="line"><a name="l08173"></a><span class="lineno"> 8173</span>&#160; {</div><div class="line"><a name="l08174"></a><span class="lineno"> 8174</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_31;</div><div class="line"><a name="l08175"></a><span class="lineno"> 8175</span>&#160; }</div><div class="line"><a name="l08176"></a><span class="lineno"> 8176</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;.&#39;</span>)</div><div class="line"><a name="l08177"></a><span class="lineno"> 8177</span>&#160; {</div><div class="line"><a name="l08178"></a><span class="lineno"> 8178</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_33;</div><div class="line"><a name="l08179"></a><span class="lineno"> 8179</span>&#160; }</div><div class="line"><a name="l08180"></a><span class="lineno"> 8180</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_31;</div><div class="line"><a name="l08181"></a><span class="lineno"> 8181</span>&#160; }</div><div class="line"><a name="l08182"></a><span class="lineno"> 8182</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l08183"></a><span class="lineno"> 8183</span>&#160; {</div><div class="line"><a name="l08184"></a><span class="lineno"> 8184</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;\\&#39;</span>)</div><div class="line"><a name="l08185"></a><span class="lineno"> 8185</span>&#160; {</div><div class="line"><a name="l08186"></a><span class="lineno"> 8186</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;[&#39;</span>)</div><div class="line"><a name="l08187"></a><span class="lineno"> 8187</span>&#160; {</div><div class="line"><a name="l08188"></a><span class="lineno"> 8188</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_33;</div><div class="line"><a name="l08189"></a><span class="lineno"> 8189</span>&#160; }</div><div class="line"><a name="l08190"></a><span class="lineno"> 8190</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_31;</div><div class="line"><a name="l08191"></a><span class="lineno"> 8191</span>&#160; }</div><div class="line"><a name="l08192"></a><span class="lineno"> 8192</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l08193"></a><span class="lineno"> 8193</span>&#160; {</div><div class="line"><a name="l08194"></a><span class="lineno"> 8194</span>&#160; <span class="keywordflow">if</span> (yych == <span class="charliteral">&#39;b&#39;</span>)</div><div class="line"><a name="l08195"></a><span class="lineno"> 8195</span>&#160; {</div><div class="line"><a name="l08196"></a><span class="lineno"> 8196</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_31;</div><div class="line"><a name="l08197"></a><span class="lineno"> 8197</span>&#160; }</div><div class="line"><a name="l08198"></a><span class="lineno"> 8198</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_33;</div><div class="line"><a name="l08199"></a><span class="lineno"> 8199</span>&#160; }</div><div class="line"><a name="l08200"></a><span class="lineno"> 8200</span>&#160; }</div><div class="line"><a name="l08201"></a><span class="lineno"> 8201</span>&#160; }</div><div class="line"><a name="l08202"></a><span class="lineno"> 8202</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l08203"></a><span class="lineno"> 8203</span>&#160; {</div><div class="line"><a name="l08204"></a><span class="lineno"> 8204</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;q&#39;</span>)</div><div class="line"><a name="l08205"></a><span class="lineno"> 8205</span>&#160; {</div><div class="line"><a name="l08206"></a><span class="lineno"> 8206</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;f&#39;</span>)</div><div class="line"><a name="l08207"></a><span class="lineno"> 8207</span>&#160; {</div><div class="line"><a name="l08208"></a><span class="lineno"> 8208</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_31;</div><div class="line"><a name="l08209"></a><span class="lineno"> 8209</span>&#160; }</div><div class="line"><a name="l08210"></a><span class="lineno"> 8210</span>&#160; <span class="keywordflow">if</span> (yych == <span class="charliteral">&#39;n&#39;</span>)</div><div class="line"><a name="l08211"></a><span class="lineno"> 8211</span>&#160; {</div><div class="line"><a name="l08212"></a><span class="lineno"> 8212</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_31;</div><div class="line"><a name="l08213"></a><span class="lineno"> 8213</span>&#160; }</div><div class="line"><a name="l08214"></a><span class="lineno"> 8214</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_33;</div><div class="line"><a name="l08215"></a><span class="lineno"> 8215</span>&#160; }</div><div class="line"><a name="l08216"></a><span class="lineno"> 8216</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l08217"></a><span class="lineno"> 8217</span>&#160; {</div><div class="line"><a name="l08218"></a><span class="lineno"> 8218</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;s&#39;</span>)</div><div class="line"><a name="l08219"></a><span class="lineno"> 8219</span>&#160; {</div><div class="line"><a name="l08220"></a><span class="lineno"> 8220</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;r&#39;</span>)</div><div class="line"><a name="l08221"></a><span class="lineno"> 8221</span>&#160; {</div><div class="line"><a name="l08222"></a><span class="lineno"> 8222</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_31;</div><div class="line"><a name="l08223"></a><span class="lineno"> 8223</span>&#160; }</div><div class="line"><a name="l08224"></a><span class="lineno"> 8224</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_33;</div><div class="line"><a name="l08225"></a><span class="lineno"> 8225</span>&#160; }</div><div class="line"><a name="l08226"></a><span class="lineno"> 8226</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l08227"></a><span class="lineno"> 8227</span>&#160; {</div><div class="line"><a name="l08228"></a><span class="lineno"> 8228</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;t&#39;</span>)</div><div class="line"><a name="l08229"></a><span class="lineno"> 8229</span>&#160; {</div><div class="line"><a name="l08230"></a><span class="lineno"> 8230</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_31;</div><div class="line"><a name="l08231"></a><span class="lineno"> 8231</span>&#160; }</div><div class="line"><a name="l08232"></a><span class="lineno"> 8232</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;u&#39;</span>)</div><div class="line"><a name="l08233"></a><span class="lineno"> 8233</span>&#160; {</div><div class="line"><a name="l08234"></a><span class="lineno"> 8234</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_43;</div><div class="line"><a name="l08235"></a><span class="lineno"> 8235</span>&#160; }</div><div class="line"><a name="l08236"></a><span class="lineno"> 8236</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_33;</div><div class="line"><a name="l08237"></a><span class="lineno"> 8237</span>&#160; }</div><div class="line"><a name="l08238"></a><span class="lineno"> 8238</span>&#160; }</div><div class="line"><a name="l08239"></a><span class="lineno"> 8239</span>&#160; }</div><div class="line"><a name="l08240"></a><span class="lineno"> 8240</span>&#160;basic_json_parser_37:</div><div class="line"><a name="l08241"></a><span class="lineno"> 8241</span>&#160; yych = *++m_cursor;</div><div class="line"><a name="l08242"></a><span class="lineno"> 8242</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;/&#39;</span>)</div><div class="line"><a name="l08243"></a><span class="lineno"> 8243</span>&#160; {</div><div class="line"><a name="l08244"></a><span class="lineno"> 8244</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_33;</div><div class="line"><a name="l08245"></a><span class="lineno"> 8245</span>&#160; }</div><div class="line"><a name="l08246"></a><span class="lineno"> 8246</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;9&#39;</span>)</div><div class="line"><a name="l08247"></a><span class="lineno"> 8247</span>&#160; {</div><div class="line"><a name="l08248"></a><span class="lineno"> 8248</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_44;</div><div class="line"><a name="l08249"></a><span class="lineno"> 8249</span>&#160; }</div><div class="line"><a name="l08250"></a><span class="lineno"> 8250</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_33;</div><div class="line"><a name="l08251"></a><span class="lineno"> 8251</span>&#160;basic_json_parser_38:</div><div class="line"><a name="l08252"></a><span class="lineno"> 8252</span>&#160; yych = *++m_cursor;</div><div class="line"><a name="l08253"></a><span class="lineno"> 8253</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;,&#39;</span>)</div><div class="line"><a name="l08254"></a><span class="lineno"> 8254</span>&#160; {</div><div class="line"><a name="l08255"></a><span class="lineno"> 8255</span>&#160; <span class="keywordflow">if</span> (yych == <span class="charliteral">&#39;+&#39;</span>)</div><div class="line"><a name="l08256"></a><span class="lineno"> 8256</span>&#160; {</div><div class="line"><a name="l08257"></a><span class="lineno"> 8257</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_46;</div><div class="line"><a name="l08258"></a><span class="lineno"> 8258</span>&#160; }</div><div class="line"><a name="l08259"></a><span class="lineno"> 8259</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_33;</div><div class="line"><a name="l08260"></a><span class="lineno"> 8260</span>&#160; }</div><div class="line"><a name="l08261"></a><span class="lineno"> 8261</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l08262"></a><span class="lineno"> 8262</span>&#160; {</div><div class="line"><a name="l08263"></a><span class="lineno"> 8263</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;-&#39;</span>)</div><div class="line"><a name="l08264"></a><span class="lineno"> 8264</span>&#160; {</div><div class="line"><a name="l08265"></a><span class="lineno"> 8265</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_46;</div><div class="line"><a name="l08266"></a><span class="lineno"> 8266</span>&#160; }</div><div class="line"><a name="l08267"></a><span class="lineno"> 8267</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;/&#39;</span>)</div><div class="line"><a name="l08268"></a><span class="lineno"> 8268</span>&#160; {</div><div class="line"><a name="l08269"></a><span class="lineno"> 8269</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_33;</div><div class="line"><a name="l08270"></a><span class="lineno"> 8270</span>&#160; }</div><div class="line"><a name="l08271"></a><span class="lineno"> 8271</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;9&#39;</span>)</div><div class="line"><a name="l08272"></a><span class="lineno"> 8272</span>&#160; {</div><div class="line"><a name="l08273"></a><span class="lineno"> 8273</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_47;</div><div class="line"><a name="l08274"></a><span class="lineno"> 8274</span>&#160; }</div><div class="line"><a name="l08275"></a><span class="lineno"> 8275</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_33;</div><div class="line"><a name="l08276"></a><span class="lineno"> 8276</span>&#160; }</div><div class="line"><a name="l08277"></a><span class="lineno"> 8277</span>&#160;basic_json_parser_39:</div><div class="line"><a name="l08278"></a><span class="lineno"> 8278</span>&#160; yych = *++m_cursor;</div><div class="line"><a name="l08279"></a><span class="lineno"> 8279</span>&#160; <span class="keywordflow">if</span> (yych == <span class="charliteral">&#39;l&#39;</span>)</div><div class="line"><a name="l08280"></a><span class="lineno"> 8280</span>&#160; {</div><div class="line"><a name="l08281"></a><span class="lineno"> 8281</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_49;</div><div class="line"><a name="l08282"></a><span class="lineno"> 8282</span>&#160; }</div><div class="line"><a name="l08283"></a><span class="lineno"> 8283</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_33;</div><div class="line"><a name="l08284"></a><span class="lineno"> 8284</span>&#160;basic_json_parser_40:</div><div class="line"><a name="l08285"></a><span class="lineno"> 8285</span>&#160; yych = *++m_cursor;</div><div class="line"><a name="l08286"></a><span class="lineno"> 8286</span>&#160; <span class="keywordflow">if</span> (yych == <span class="charliteral">&#39;l&#39;</span>)</div><div class="line"><a name="l08287"></a><span class="lineno"> 8287</span>&#160; {</div><div class="line"><a name="l08288"></a><span class="lineno"> 8288</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_50;</div><div class="line"><a name="l08289"></a><span class="lineno"> 8289</span>&#160; }</div><div class="line"><a name="l08290"></a><span class="lineno"> 8290</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_33;</div><div class="line"><a name="l08291"></a><span class="lineno"> 8291</span>&#160;basic_json_parser_41:</div><div class="line"><a name="l08292"></a><span class="lineno"> 8292</span>&#160; yych = *++m_cursor;</div><div class="line"><a name="l08293"></a><span class="lineno"> 8293</span>&#160; <span class="keywordflow">if</span> (yych == <span class="charliteral">&#39;u&#39;</span>)</div><div class="line"><a name="l08294"></a><span class="lineno"> 8294</span>&#160; {</div><div class="line"><a name="l08295"></a><span class="lineno"> 8295</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_51;</div><div class="line"><a name="l08296"></a><span class="lineno"> 8296</span>&#160; }</div><div class="line"><a name="l08297"></a><span class="lineno"> 8297</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_33;</div><div class="line"><a name="l08298"></a><span class="lineno"> 8298</span>&#160;basic_json_parser_42:</div><div class="line"><a name="l08299"></a><span class="lineno"> 8299</span>&#160; yych = *++m_cursor;</div><div class="line"><a name="l08300"></a><span class="lineno"> 8300</span>&#160; <span class="keywordflow">if</span> (yych == 0xBF)</div><div class="line"><a name="l08301"></a><span class="lineno"> 8301</span>&#160; {</div><div class="line"><a name="l08302"></a><span class="lineno"> 8302</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_52;</div><div class="line"><a name="l08303"></a><span class="lineno"> 8303</span>&#160; }</div><div class="line"><a name="l08304"></a><span class="lineno"> 8304</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_33;</div><div class="line"><a name="l08305"></a><span class="lineno"> 8305</span>&#160;basic_json_parser_43:</div><div class="line"><a name="l08306"></a><span class="lineno"> 8306</span>&#160; ++m_cursor;</div><div class="line"><a name="l08307"></a><span class="lineno"> 8307</span>&#160; <span class="keywordflow">if</span> (m_limit &lt;= m_cursor)</div><div class="line"><a name="l08308"></a><span class="lineno"> 8308</span>&#160; {</div><div class="line"><a name="l08309"></a><span class="lineno"> 8309</span>&#160; fill_line_buffer();</div><div class="line"><a name="l08310"></a><span class="lineno"> 8310</span>&#160; }</div><div class="line"><a name="l08311"></a><span class="lineno"> 8311</span>&#160; yych = *m_cursor;</div><div class="line"><a name="l08312"></a><span class="lineno"> 8312</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;@&#39;</span>)</div><div class="line"><a name="l08313"></a><span class="lineno"> 8313</span>&#160; {</div><div class="line"><a name="l08314"></a><span class="lineno"> 8314</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;/&#39;</span>)</div><div class="line"><a name="l08315"></a><span class="lineno"> 8315</span>&#160; {</div><div class="line"><a name="l08316"></a><span class="lineno"> 8316</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_33;</div><div class="line"><a name="l08317"></a><span class="lineno"> 8317</span>&#160; }</div><div class="line"><a name="l08318"></a><span class="lineno"> 8318</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;9&#39;</span>)</div><div class="line"><a name="l08319"></a><span class="lineno"> 8319</span>&#160; {</div><div class="line"><a name="l08320"></a><span class="lineno"> 8320</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_54;</div><div class="line"><a name="l08321"></a><span class="lineno"> 8321</span>&#160; }</div><div class="line"><a name="l08322"></a><span class="lineno"> 8322</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_33;</div><div class="line"><a name="l08323"></a><span class="lineno"> 8323</span>&#160; }</div><div class="line"><a name="l08324"></a><span class="lineno"> 8324</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l08325"></a><span class="lineno"> 8325</span>&#160; {</div><div class="line"><a name="l08326"></a><span class="lineno"> 8326</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;F&#39;</span>)</div><div class="line"><a name="l08327"></a><span class="lineno"> 8327</span>&#160; {</div><div class="line"><a name="l08328"></a><span class="lineno"> 8328</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_54;</div><div class="line"><a name="l08329"></a><span class="lineno"> 8329</span>&#160; }</div><div class="line"><a name="l08330"></a><span class="lineno"> 8330</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;`&#39;</span>)</div><div class="line"><a name="l08331"></a><span class="lineno"> 8331</span>&#160; {</div><div class="line"><a name="l08332"></a><span class="lineno"> 8332</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_33;</div><div class="line"><a name="l08333"></a><span class="lineno"> 8333</span>&#160; }</div><div class="line"><a name="l08334"></a><span class="lineno"> 8334</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;f&#39;</span>)</div><div class="line"><a name="l08335"></a><span class="lineno"> 8335</span>&#160; {</div><div class="line"><a name="l08336"></a><span class="lineno"> 8336</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_54;</div><div class="line"><a name="l08337"></a><span class="lineno"> 8337</span>&#160; }</div><div class="line"><a name="l08338"></a><span class="lineno"> 8338</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_33;</div><div class="line"><a name="l08339"></a><span class="lineno"> 8339</span>&#160; }</div><div class="line"><a name="l08340"></a><span class="lineno"> 8340</span>&#160;basic_json_parser_44:</div><div class="line"><a name="l08341"></a><span class="lineno"> 8341</span>&#160; yyaccept = 1;</div><div class="line"><a name="l08342"></a><span class="lineno"> 8342</span>&#160; m_marker = ++m_cursor;</div><div class="line"><a name="l08343"></a><span class="lineno"> 8343</span>&#160; <span class="keywordflow">if</span> ((m_limit - m_cursor) &lt; 3)</div><div class="line"><a name="l08344"></a><span class="lineno"> 8344</span>&#160; {</div><div class="line"><a name="l08345"></a><span class="lineno"> 8345</span>&#160; fill_line_buffer();</div><div class="line"><a name="l08346"></a><span class="lineno"> 8346</span>&#160; }</div><div class="line"><a name="l08347"></a><span class="lineno"> 8347</span>&#160; yych = *m_cursor;</div><div class="line"><a name="l08348"></a><span class="lineno"> 8348</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;D&#39;</span>)</div><div class="line"><a name="l08349"></a><span class="lineno"> 8349</span>&#160; {</div><div class="line"><a name="l08350"></a><span class="lineno"> 8350</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;/&#39;</span>)</div><div class="line"><a name="l08351"></a><span class="lineno"> 8351</span>&#160; {</div><div class="line"><a name="l08352"></a><span class="lineno"> 8352</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_14;</div><div class="line"><a name="l08353"></a><span class="lineno"> 8353</span>&#160; }</div><div class="line"><a name="l08354"></a><span class="lineno"> 8354</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;9&#39;</span>)</div><div class="line"><a name="l08355"></a><span class="lineno"> 8355</span>&#160; {</div><div class="line"><a name="l08356"></a><span class="lineno"> 8356</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_44;</div><div class="line"><a name="l08357"></a><span class="lineno"> 8357</span>&#160; }</div><div class="line"><a name="l08358"></a><span class="lineno"> 8358</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_14;</div><div class="line"><a name="l08359"></a><span class="lineno"> 8359</span>&#160; }</div><div class="line"><a name="l08360"></a><span class="lineno"> 8360</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l08361"></a><span class="lineno"> 8361</span>&#160; {</div><div class="line"><a name="l08362"></a><span class="lineno"> 8362</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;E&#39;</span>)</div><div class="line"><a name="l08363"></a><span class="lineno"> 8363</span>&#160; {</div><div class="line"><a name="l08364"></a><span class="lineno"> 8364</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_38;</div><div class="line"><a name="l08365"></a><span class="lineno"> 8365</span>&#160; }</div><div class="line"><a name="l08366"></a><span class="lineno"> 8366</span>&#160; <span class="keywordflow">if</span> (yych == <span class="charliteral">&#39;e&#39;</span>)</div><div class="line"><a name="l08367"></a><span class="lineno"> 8367</span>&#160; {</div><div class="line"><a name="l08368"></a><span class="lineno"> 8368</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_38;</div><div class="line"><a name="l08369"></a><span class="lineno"> 8369</span>&#160; }</div><div class="line"><a name="l08370"></a><span class="lineno"> 8370</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_14;</div><div class="line"><a name="l08371"></a><span class="lineno"> 8371</span>&#160; }</div><div class="line"><a name="l08372"></a><span class="lineno"> 8372</span>&#160;basic_json_parser_46:</div><div class="line"><a name="l08373"></a><span class="lineno"> 8373</span>&#160; yych = *++m_cursor;</div><div class="line"><a name="l08374"></a><span class="lineno"> 8374</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;/&#39;</span>)</div><div class="line"><a name="l08375"></a><span class="lineno"> 8375</span>&#160; {</div><div class="line"><a name="l08376"></a><span class="lineno"> 8376</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_33;</div><div class="line"><a name="l08377"></a><span class="lineno"> 8377</span>&#160; }</div><div class="line"><a name="l08378"></a><span class="lineno"> 8378</span>&#160; <span class="keywordflow">if</span> (yych &gt;= <span class="charliteral">&#39;:&#39;</span>)</div><div class="line"><a name="l08379"></a><span class="lineno"> 8379</span>&#160; {</div><div class="line"><a name="l08380"></a><span class="lineno"> 8380</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_33;</div><div class="line"><a name="l08381"></a><span class="lineno"> 8381</span>&#160; }</div><div class="line"><a name="l08382"></a><span class="lineno"> 8382</span>&#160;basic_json_parser_47:</div><div class="line"><a name="l08383"></a><span class="lineno"> 8383</span>&#160; ++m_cursor;</div><div class="line"><a name="l08384"></a><span class="lineno"> 8384</span>&#160; <span class="keywordflow">if</span> (m_limit &lt;= m_cursor)</div><div class="line"><a name="l08385"></a><span class="lineno"> 8385</span>&#160; {</div><div class="line"><a name="l08386"></a><span class="lineno"> 8386</span>&#160; fill_line_buffer();</div><div class="line"><a name="l08387"></a><span class="lineno"> 8387</span>&#160; }</div><div class="line"><a name="l08388"></a><span class="lineno"> 8388</span>&#160; yych = *m_cursor;</div><div class="line"><a name="l08389"></a><span class="lineno"> 8389</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;/&#39;</span>)</div><div class="line"><a name="l08390"></a><span class="lineno"> 8390</span>&#160; {</div><div class="line"><a name="l08391"></a><span class="lineno"> 8391</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_14;</div><div class="line"><a name="l08392"></a><span class="lineno"> 8392</span>&#160; }</div><div class="line"><a name="l08393"></a><span class="lineno"> 8393</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;9&#39;</span>)</div><div class="line"><a name="l08394"></a><span class="lineno"> 8394</span>&#160; {</div><div class="line"><a name="l08395"></a><span class="lineno"> 8395</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_47;</div><div class="line"><a name="l08396"></a><span class="lineno"> 8396</span>&#160; }</div><div class="line"><a name="l08397"></a><span class="lineno"> 8397</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_14;</div><div class="line"><a name="l08398"></a><span class="lineno"> 8398</span>&#160;basic_json_parser_49:</div><div class="line"><a name="l08399"></a><span class="lineno"> 8399</span>&#160; yych = *++m_cursor;</div><div class="line"><a name="l08400"></a><span class="lineno"> 8400</span>&#160; <span class="keywordflow">if</span> (yych == <span class="charliteral">&#39;s&#39;</span>)</div><div class="line"><a name="l08401"></a><span class="lineno"> 8401</span>&#160; {</div><div class="line"><a name="l08402"></a><span class="lineno"> 8402</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_55;</div><div class="line"><a name="l08403"></a><span class="lineno"> 8403</span>&#160; }</div><div class="line"><a name="l08404"></a><span class="lineno"> 8404</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_33;</div><div class="line"><a name="l08405"></a><span class="lineno"> 8405</span>&#160;basic_json_parser_50:</div><div class="line"><a name="l08406"></a><span class="lineno"> 8406</span>&#160; yych = *++m_cursor;</div><div class="line"><a name="l08407"></a><span class="lineno"> 8407</span>&#160; <span class="keywordflow">if</span> (yych == <span class="charliteral">&#39;l&#39;</span>)</div><div class="line"><a name="l08408"></a><span class="lineno"> 8408</span>&#160; {</div><div class="line"><a name="l08409"></a><span class="lineno"> 8409</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_56;</div><div class="line"><a name="l08410"></a><span class="lineno"> 8410</span>&#160; }</div><div class="line"><a name="l08411"></a><span class="lineno"> 8411</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_33;</div><div class="line"><a name="l08412"></a><span class="lineno"> 8412</span>&#160;basic_json_parser_51:</div><div class="line"><a name="l08413"></a><span class="lineno"> 8413</span>&#160; yych = *++m_cursor;</div><div class="line"><a name="l08414"></a><span class="lineno"> 8414</span>&#160; <span class="keywordflow">if</span> (yych == <span class="charliteral">&#39;e&#39;</span>)</div><div class="line"><a name="l08415"></a><span class="lineno"> 8415</span>&#160; {</div><div class="line"><a name="l08416"></a><span class="lineno"> 8416</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_58;</div><div class="line"><a name="l08417"></a><span class="lineno"> 8417</span>&#160; }</div><div class="line"><a name="l08418"></a><span class="lineno"> 8418</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_33;</div><div class="line"><a name="l08419"></a><span class="lineno"> 8419</span>&#160;basic_json_parser_52:</div><div class="line"><a name="l08420"></a><span class="lineno"> 8420</span>&#160; ++m_cursor;</div><div class="line"><a name="l08421"></a><span class="lineno"> 8421</span>&#160; {</div><div class="line"><a name="l08422"></a><span class="lineno"> 8422</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l08423"></a><span class="lineno"> 8423</span>&#160; }</div><div class="line"><a name="l08424"></a><span class="lineno"> 8424</span>&#160;basic_json_parser_54:</div><div class="line"><a name="l08425"></a><span class="lineno"> 8425</span>&#160; ++m_cursor;</div><div class="line"><a name="l08426"></a><span class="lineno"> 8426</span>&#160; <span class="keywordflow">if</span> (m_limit &lt;= m_cursor)</div><div class="line"><a name="l08427"></a><span class="lineno"> 8427</span>&#160; {</div><div class="line"><a name="l08428"></a><span class="lineno"> 8428</span>&#160; fill_line_buffer();</div><div class="line"><a name="l08429"></a><span class="lineno"> 8429</span>&#160; }</div><div class="line"><a name="l08430"></a><span class="lineno"> 8430</span>&#160; yych = *m_cursor;</div><div class="line"><a name="l08431"></a><span class="lineno"> 8431</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;@&#39;</span>)</div><div class="line"><a name="l08432"></a><span class="lineno"> 8432</span>&#160; {</div><div class="line"><a name="l08433"></a><span class="lineno"> 8433</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;/&#39;</span>)</div><div class="line"><a name="l08434"></a><span class="lineno"> 8434</span>&#160; {</div><div class="line"><a name="l08435"></a><span class="lineno"> 8435</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_33;</div><div class="line"><a name="l08436"></a><span class="lineno"> 8436</span>&#160; }</div><div class="line"><a name="l08437"></a><span class="lineno"> 8437</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;9&#39;</span>)</div><div class="line"><a name="l08438"></a><span class="lineno"> 8438</span>&#160; {</div><div class="line"><a name="l08439"></a><span class="lineno"> 8439</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_60;</div><div class="line"><a name="l08440"></a><span class="lineno"> 8440</span>&#160; }</div><div class="line"><a name="l08441"></a><span class="lineno"> 8441</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_33;</div><div class="line"><a name="l08442"></a><span class="lineno"> 8442</span>&#160; }</div><div class="line"><a name="l08443"></a><span class="lineno"> 8443</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l08444"></a><span class="lineno"> 8444</span>&#160; {</div><div class="line"><a name="l08445"></a><span class="lineno"> 8445</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;F&#39;</span>)</div><div class="line"><a name="l08446"></a><span class="lineno"> 8446</span>&#160; {</div><div class="line"><a name="l08447"></a><span class="lineno"> 8447</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_60;</div><div class="line"><a name="l08448"></a><span class="lineno"> 8448</span>&#160; }</div><div class="line"><a name="l08449"></a><span class="lineno"> 8449</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;`&#39;</span>)</div><div class="line"><a name="l08450"></a><span class="lineno"> 8450</span>&#160; {</div><div class="line"><a name="l08451"></a><span class="lineno"> 8451</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_33;</div><div class="line"><a name="l08452"></a><span class="lineno"> 8452</span>&#160; }</div><div class="line"><a name="l08453"></a><span class="lineno"> 8453</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;f&#39;</span>)</div><div class="line"><a name="l08454"></a><span class="lineno"> 8454</span>&#160; {</div><div class="line"><a name="l08455"></a><span class="lineno"> 8455</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_60;</div><div class="line"><a name="l08456"></a><span class="lineno"> 8456</span>&#160; }</div><div class="line"><a name="l08457"></a><span class="lineno"> 8457</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_33;</div><div class="line"><a name="l08458"></a><span class="lineno"> 8458</span>&#160; }</div><div class="line"><a name="l08459"></a><span class="lineno"> 8459</span>&#160;basic_json_parser_55:</div><div class="line"><a name="l08460"></a><span class="lineno"> 8460</span>&#160; yych = *++m_cursor;</div><div class="line"><a name="l08461"></a><span class="lineno"> 8461</span>&#160; <span class="keywordflow">if</span> (yych == <span class="charliteral">&#39;e&#39;</span>)</div><div class="line"><a name="l08462"></a><span class="lineno"> 8462</span>&#160; {</div><div class="line"><a name="l08463"></a><span class="lineno"> 8463</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_61;</div><div class="line"><a name="l08464"></a><span class="lineno"> 8464</span>&#160; }</div><div class="line"><a name="l08465"></a><span class="lineno"> 8465</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_33;</div><div class="line"><a name="l08466"></a><span class="lineno"> 8466</span>&#160;basic_json_parser_56:</div><div class="line"><a name="l08467"></a><span class="lineno"> 8467</span>&#160; ++m_cursor;</div><div class="line"><a name="l08468"></a><span class="lineno"> 8468</span>&#160; {</div><div class="line"><a name="l08469"></a><span class="lineno"> 8469</span>&#160; last_token_type = token_type::literal_null;</div><div class="line"><a name="l08470"></a><span class="lineno"> 8470</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l08471"></a><span class="lineno"> 8471</span>&#160; }</div><div class="line"><a name="l08472"></a><span class="lineno"> 8472</span>&#160;basic_json_parser_58:</div><div class="line"><a name="l08473"></a><span class="lineno"> 8473</span>&#160; ++m_cursor;</div><div class="line"><a name="l08474"></a><span class="lineno"> 8474</span>&#160; {</div><div class="line"><a name="l08475"></a><span class="lineno"> 8475</span>&#160; last_token_type = token_type::literal_true;</div><div class="line"><a name="l08476"></a><span class="lineno"> 8476</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l08477"></a><span class="lineno"> 8477</span>&#160; }</div><div class="line"><a name="l08478"></a><span class="lineno"> 8478</span>&#160;basic_json_parser_60:</div><div class="line"><a name="l08479"></a><span class="lineno"> 8479</span>&#160; ++m_cursor;</div><div class="line"><a name="l08480"></a><span class="lineno"> 8480</span>&#160; <span class="keywordflow">if</span> (m_limit &lt;= m_cursor)</div><div class="line"><a name="l08481"></a><span class="lineno"> 8481</span>&#160; {</div><div class="line"><a name="l08482"></a><span class="lineno"> 8482</span>&#160; fill_line_buffer();</div><div class="line"><a name="l08483"></a><span class="lineno"> 8483</span>&#160; }</div><div class="line"><a name="l08484"></a><span class="lineno"> 8484</span>&#160; yych = *m_cursor;</div><div class="line"><a name="l08485"></a><span class="lineno"> 8485</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;@&#39;</span>)</div><div class="line"><a name="l08486"></a><span class="lineno"> 8486</span>&#160; {</div><div class="line"><a name="l08487"></a><span class="lineno"> 8487</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;/&#39;</span>)</div><div class="line"><a name="l08488"></a><span class="lineno"> 8488</span>&#160; {</div><div class="line"><a name="l08489"></a><span class="lineno"> 8489</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_33;</div><div class="line"><a name="l08490"></a><span class="lineno"> 8490</span>&#160; }</div><div class="line"><a name="l08491"></a><span class="lineno"> 8491</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;9&#39;</span>)</div><div class="line"><a name="l08492"></a><span class="lineno"> 8492</span>&#160; {</div><div class="line"><a name="l08493"></a><span class="lineno"> 8493</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_63;</div><div class="line"><a name="l08494"></a><span class="lineno"> 8494</span>&#160; }</div><div class="line"><a name="l08495"></a><span class="lineno"> 8495</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_33;</div><div class="line"><a name="l08496"></a><span class="lineno"> 8496</span>&#160; }</div><div class="line"><a name="l08497"></a><span class="lineno"> 8497</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l08498"></a><span class="lineno"> 8498</span>&#160; {</div><div class="line"><a name="l08499"></a><span class="lineno"> 8499</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;F&#39;</span>)</div><div class="line"><a name="l08500"></a><span class="lineno"> 8500</span>&#160; {</div><div class="line"><a name="l08501"></a><span class="lineno"> 8501</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_63;</div><div class="line"><a name="l08502"></a><span class="lineno"> 8502</span>&#160; }</div><div class="line"><a name="l08503"></a><span class="lineno"> 8503</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;`&#39;</span>)</div><div class="line"><a name="l08504"></a><span class="lineno"> 8504</span>&#160; {</div><div class="line"><a name="l08505"></a><span class="lineno"> 8505</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_33;</div><div class="line"><a name="l08506"></a><span class="lineno"> 8506</span>&#160; }</div><div class="line"><a name="l08507"></a><span class="lineno"> 8507</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;f&#39;</span>)</div><div class="line"><a name="l08508"></a><span class="lineno"> 8508</span>&#160; {</div><div class="line"><a name="l08509"></a><span class="lineno"> 8509</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_63;</div><div class="line"><a name="l08510"></a><span class="lineno"> 8510</span>&#160; }</div><div class="line"><a name="l08511"></a><span class="lineno"> 8511</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_33;</div><div class="line"><a name="l08512"></a><span class="lineno"> 8512</span>&#160; }</div><div class="line"><a name="l08513"></a><span class="lineno"> 8513</span>&#160;basic_json_parser_61:</div><div class="line"><a name="l08514"></a><span class="lineno"> 8514</span>&#160; ++m_cursor;</div><div class="line"><a name="l08515"></a><span class="lineno"> 8515</span>&#160; {</div><div class="line"><a name="l08516"></a><span class="lineno"> 8516</span>&#160; last_token_type = token_type::literal_false;</div><div class="line"><a name="l08517"></a><span class="lineno"> 8517</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l08518"></a><span class="lineno"> 8518</span>&#160; }</div><div class="line"><a name="l08519"></a><span class="lineno"> 8519</span>&#160;basic_json_parser_63:</div><div class="line"><a name="l08520"></a><span class="lineno"> 8520</span>&#160; ++m_cursor;</div><div class="line"><a name="l08521"></a><span class="lineno"> 8521</span>&#160; <span class="keywordflow">if</span> (m_limit &lt;= m_cursor)</div><div class="line"><a name="l08522"></a><span class="lineno"> 8522</span>&#160; {</div><div class="line"><a name="l08523"></a><span class="lineno"> 8523</span>&#160; fill_line_buffer();</div><div class="line"><a name="l08524"></a><span class="lineno"> 8524</span>&#160; }</div><div class="line"><a name="l08525"></a><span class="lineno"> 8525</span>&#160; yych = *m_cursor;</div><div class="line"><a name="l08526"></a><span class="lineno"> 8526</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;@&#39;</span>)</div><div class="line"><a name="l08527"></a><span class="lineno"> 8527</span>&#160; {</div><div class="line"><a name="l08528"></a><span class="lineno"> 8528</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;/&#39;</span>)</div><div class="line"><a name="l08529"></a><span class="lineno"> 8529</span>&#160; {</div><div class="line"><a name="l08530"></a><span class="lineno"> 8530</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_33;</div><div class="line"><a name="l08531"></a><span class="lineno"> 8531</span>&#160; }</div><div class="line"><a name="l08532"></a><span class="lineno"> 8532</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;9&#39;</span>)</div><div class="line"><a name="l08533"></a><span class="lineno"> 8533</span>&#160; {</div><div class="line"><a name="l08534"></a><span class="lineno"> 8534</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_31;</div><div class="line"><a name="l08535"></a><span class="lineno"> 8535</span>&#160; }</div><div class="line"><a name="l08536"></a><span class="lineno"> 8536</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_33;</div><div class="line"><a name="l08537"></a><span class="lineno"> 8537</span>&#160; }</div><div class="line"><a name="l08538"></a><span class="lineno"> 8538</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l08539"></a><span class="lineno"> 8539</span>&#160; {</div><div class="line"><a name="l08540"></a><span class="lineno"> 8540</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;F&#39;</span>)</div><div class="line"><a name="l08541"></a><span class="lineno"> 8541</span>&#160; {</div><div class="line"><a name="l08542"></a><span class="lineno"> 8542</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_31;</div><div class="line"><a name="l08543"></a><span class="lineno"> 8543</span>&#160; }</div><div class="line"><a name="l08544"></a><span class="lineno"> 8544</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;`&#39;</span>)</div><div class="line"><a name="l08545"></a><span class="lineno"> 8545</span>&#160; {</div><div class="line"><a name="l08546"></a><span class="lineno"> 8546</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_33;</div><div class="line"><a name="l08547"></a><span class="lineno"> 8547</span>&#160; }</div><div class="line"><a name="l08548"></a><span class="lineno"> 8548</span>&#160; <span class="keywordflow">if</span> (yych &lt;= <span class="charliteral">&#39;f&#39;</span>)</div><div class="line"><a name="l08549"></a><span class="lineno"> 8549</span>&#160; {</div><div class="line"><a name="l08550"></a><span class="lineno"> 8550</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_31;</div><div class="line"><a name="l08551"></a><span class="lineno"> 8551</span>&#160; }</div><div class="line"><a name="l08552"></a><span class="lineno"> 8552</span>&#160; <span class="keywordflow">goto</span> basic_json_parser_33;</div><div class="line"><a name="l08553"></a><span class="lineno"> 8553</span>&#160; }</div><div class="line"><a name="l08554"></a><span class="lineno"> 8554</span>&#160; }</div><div class="line"><a name="l08555"></a><span class="lineno"> 8555</span>&#160;</div><div class="line"><a name="l08556"></a><span class="lineno"> 8556</span>&#160; }</div><div class="line"><a name="l08557"></a><span class="lineno"> 8557</span>&#160;</div><div class="line"><a name="l08558"></a><span class="lineno"> 8558</span>&#160; <span class="keywordflow">return</span> last_token_type;</div><div class="line"><a name="l08559"></a><span class="lineno"> 8559</span>&#160; }</div><div class="line"><a name="l08560"></a><span class="lineno"> 8560</span>&#160;</div><div class="line"><a name="l08589"></a><span class="lineno"> 8589</span>&#160; <span class="keywordtype">void</span> fill_line_buffer()</div><div class="line"><a name="l08590"></a><span class="lineno"> 8590</span>&#160; {</div><div class="line"><a name="l08591"></a><span class="lineno"> 8591</span>&#160; <span class="comment">// number of processed characters (p)</span></div><div class="line"><a name="l08592"></a><span class="lineno"> 8592</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> offset_start = m_start - m_content;</div><div class="line"><a name="l08593"></a><span class="lineno"> 8593</span>&#160; <span class="comment">// offset for m_marker wrt. to m_start</span></div><div class="line"><a name="l08594"></a><span class="lineno"> 8594</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> offset_marker = (m_marker == <span class="keyword">nullptr</span>) ? 0 : m_marker - m_start;</div><div class="line"><a name="l08595"></a><span class="lineno"> 8595</span>&#160; <span class="comment">// number of unprocessed characters (u)</span></div><div class="line"><a name="l08596"></a><span class="lineno"> 8596</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> offset_cursor = m_cursor - m_start;</div><div class="line"><a name="l08597"></a><span class="lineno"> 8597</span>&#160;</div><div class="line"><a name="l08598"></a><span class="lineno"> 8598</span>&#160; <span class="comment">// no stream is used or end of file is reached</span></div><div class="line"><a name="l08599"></a><span class="lineno"> 8599</span>&#160; <span class="keywordflow">if</span> (m_stream == <span class="keyword">nullptr</span> or m_stream-&gt;eof())</div><div class="line"><a name="l08600"></a><span class="lineno"> 8600</span>&#160; {</div><div class="line"><a name="l08601"></a><span class="lineno"> 8601</span>&#160; <span class="comment">// copy unprocessed characters to line buffer</span></div><div class="line"><a name="l08602"></a><span class="lineno"> 8602</span>&#160; m_line_buffer.clear();</div><div class="line"><a name="l08603"></a><span class="lineno"> 8603</span>&#160; <span class="keywordflow">for</span> (m_cursor = m_start; m_cursor != m_limit; ++m_cursor)</div><div class="line"><a name="l08604"></a><span class="lineno"> 8604</span>&#160; {</div><div class="line"><a name="l08605"></a><span class="lineno"> 8605</span>&#160; m_line_buffer.append(1, static_cast&lt;const char&gt;(*m_cursor));</div><div class="line"><a name="l08606"></a><span class="lineno"> 8606</span>&#160; }</div><div class="line"><a name="l08607"></a><span class="lineno"> 8607</span>&#160;</div><div class="line"><a name="l08608"></a><span class="lineno"> 8608</span>&#160; <span class="comment">// append 5 characters (size of longest keyword &quot;false&quot;) to</span></div><div class="line"><a name="l08609"></a><span class="lineno"> 8609</span>&#160; <span class="comment">// make sure that there is sufficient space between m_cursor</span></div><div class="line"><a name="l08610"></a><span class="lineno"> 8610</span>&#160; <span class="comment">// and m_limit</span></div><div class="line"><a name="l08611"></a><span class="lineno"> 8611</span>&#160; m_line_buffer.append(5, <span class="charliteral">&#39;\0&#39;</span>);</div><div class="line"><a name="l08612"></a><span class="lineno"> 8612</span>&#160; }</div><div class="line"><a name="l08613"></a><span class="lineno"> 8613</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l08614"></a><span class="lineno"> 8614</span>&#160; {</div><div class="line"><a name="l08615"></a><span class="lineno"> 8615</span>&#160; <span class="comment">// delete processed characters from line buffer</span></div><div class="line"><a name="l08616"></a><span class="lineno"> 8616</span>&#160; m_line_buffer.erase(0, static_cast&lt;size_t&gt;(offset_start));</div><div class="line"><a name="l08617"></a><span class="lineno"> 8617</span>&#160; <span class="comment">// read next line from input stream</span></div><div class="line"><a name="l08618"></a><span class="lineno"> 8618</span>&#160; std::string line;</div><div class="line"><a name="l08619"></a><span class="lineno"> 8619</span>&#160; std::getline(*m_stream, line);</div><div class="line"><a name="l08620"></a><span class="lineno"> 8620</span>&#160; <span class="comment">// add line with newline symbol to the line buffer</span></div><div class="line"><a name="l08621"></a><span class="lineno"> 8621</span>&#160; m_line_buffer += line + <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l08622"></a><span class="lineno"> 8622</span>&#160; }</div><div class="line"><a name="l08623"></a><span class="lineno"> 8623</span>&#160;</div><div class="line"><a name="l08624"></a><span class="lineno"> 8624</span>&#160; <span class="comment">// set pointers</span></div><div class="line"><a name="l08625"></a><span class="lineno"> 8625</span>&#160; m_content = <span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span>lexer_char_t*<span class="keyword">&gt;</span>(m_line_buffer.c_str());</div><div class="line"><a name="l08626"></a><span class="lineno"> 8626</span>&#160; assert(m_content != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l08627"></a><span class="lineno"> 8627</span>&#160; m_start = m_content;</div><div class="line"><a name="l08628"></a><span class="lineno"> 8628</span>&#160; m_marker = m_start + offset_marker;</div><div class="line"><a name="l08629"></a><span class="lineno"> 8629</span>&#160; m_cursor = m_start + offset_cursor;</div><div class="line"><a name="l08630"></a><span class="lineno"> 8630</span>&#160; m_limit = m_start + m_line_buffer.size();</div><div class="line"><a name="l08631"></a><span class="lineno"> 8631</span>&#160; }</div><div class="line"><a name="l08632"></a><span class="lineno"> 8632</span>&#160;</div><div class="line"><a name="l08634"></a><span class="lineno"> 8634</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_ab63e618bbb0371042b1bec17f5891f42.html#ab63e618bbb0371042b1bec17f5891f42">string_t</a> get_token_string()<span class="keyword"> const</span></div><div class="line"><a name="l08635"></a><span class="lineno"> 8635</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l08636"></a><span class="lineno"> 8636</span>&#160; assert(m_start != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l08637"></a><span class="lineno"> 8637</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classnlohmann_1_1basic__json_ab63e618bbb0371042b1bec17f5891f42.html#ab63e618bbb0371042b1bec17f5891f42">string_t</a>(reinterpret_cast&lt;typename string_t::const_pointer&gt;(m_start),</div><div class="line"><a name="l08638"></a><span class="lineno"> 8638</span>&#160; static_cast&lt;size_t&gt;(m_cursor - m_start));</div><div class="line"><a name="l08639"></a><span class="lineno"> 8639</span>&#160; }</div><div class="line"><a name="l08640"></a><span class="lineno"> 8640</span>&#160;</div><div class="line"><a name="l08698"></a><span class="lineno"> 8698</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_ab63e618bbb0371042b1bec17f5891f42.html#ab63e618bbb0371042b1bec17f5891f42">string_t</a> get_string()<span class="keyword"> const</span></div><div class="line"><a name="l08699"></a><span class="lineno"> 8699</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l08700"></a><span class="lineno"> 8700</span>&#160; assert(m_cursor - m_start &gt;= 2);</div><div class="line"><a name="l08701"></a><span class="lineno"> 8701</span>&#160;</div><div class="line"><a name="l08702"></a><span class="lineno"> 8702</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_ab63e618bbb0371042b1bec17f5891f42.html#ab63e618bbb0371042b1bec17f5891f42">string_t</a> result;</div><div class="line"><a name="l08703"></a><span class="lineno"> 8703</span>&#160; result.reserve(static_cast&lt;size_t&gt;(m_cursor - m_start - 2));</div><div class="line"><a name="l08704"></a><span class="lineno"> 8704</span>&#160;</div><div class="line"><a name="l08705"></a><span class="lineno"> 8705</span>&#160; <span class="comment">// iterate the result between the quotes</span></div><div class="line"><a name="l08706"></a><span class="lineno"> 8706</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> lexer_char_t* i = m_start + 1; i &lt; m_cursor - 1; ++i)</div><div class="line"><a name="l08707"></a><span class="lineno"> 8707</span>&#160; {</div><div class="line"><a name="l08708"></a><span class="lineno"> 8708</span>&#160; <span class="comment">// process escaped characters</span></div><div class="line"><a name="l08709"></a><span class="lineno"> 8709</span>&#160; <span class="keywordflow">if</span> (*i == <span class="charliteral">&#39;\\&#39;</span>)</div><div class="line"><a name="l08710"></a><span class="lineno"> 8710</span>&#160; {</div><div class="line"><a name="l08711"></a><span class="lineno"> 8711</span>&#160; <span class="comment">// read next character</span></div><div class="line"><a name="l08712"></a><span class="lineno"> 8712</span>&#160; ++i;</div><div class="line"><a name="l08713"></a><span class="lineno"> 8713</span>&#160;</div><div class="line"><a name="l08714"></a><span class="lineno"> 8714</span>&#160; <span class="keywordflow">switch</span> (*i)</div><div class="line"><a name="l08715"></a><span class="lineno"> 8715</span>&#160; {</div><div class="line"><a name="l08716"></a><span class="lineno"> 8716</span>&#160; <span class="comment">// the default escapes</span></div><div class="line"><a name="l08717"></a><span class="lineno"> 8717</span>&#160; <span class="keywordflow">case</span> <span class="charliteral">&#39;t&#39;</span>:</div><div class="line"><a name="l08718"></a><span class="lineno"> 8718</span>&#160; {</div><div class="line"><a name="l08719"></a><span class="lineno"> 8719</span>&#160; result += <span class="stringliteral">&quot;\t&quot;</span>;</div><div class="line"><a name="l08720"></a><span class="lineno"> 8720</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l08721"></a><span class="lineno"> 8721</span>&#160; }</div><div class="line"><a name="l08722"></a><span class="lineno"> 8722</span>&#160; <span class="keywordflow">case</span> <span class="charliteral">&#39;b&#39;</span>:</div><div class="line"><a name="l08723"></a><span class="lineno"> 8723</span>&#160; {</div><div class="line"><a name="l08724"></a><span class="lineno"> 8724</span>&#160; result += <span class="stringliteral">&quot;\b&quot;</span>;</div><div class="line"><a name="l08725"></a><span class="lineno"> 8725</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l08726"></a><span class="lineno"> 8726</span>&#160; }</div><div class="line"><a name="l08727"></a><span class="lineno"> 8727</span>&#160; <span class="keywordflow">case</span> <span class="charliteral">&#39;f&#39;</span>:</div><div class="line"><a name="l08728"></a><span class="lineno"> 8728</span>&#160; {</div><div class="line"><a name="l08729"></a><span class="lineno"> 8729</span>&#160; result += <span class="stringliteral">&quot;\f&quot;</span>;</div><div class="line"><a name="l08730"></a><span class="lineno"> 8730</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l08731"></a><span class="lineno"> 8731</span>&#160; }</div><div class="line"><a name="l08732"></a><span class="lineno"> 8732</span>&#160; <span class="keywordflow">case</span> <span class="charliteral">&#39;n&#39;</span>:</div><div class="line"><a name="l08733"></a><span class="lineno"> 8733</span>&#160; {</div><div class="line"><a name="l08734"></a><span class="lineno"> 8734</span>&#160; result += <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l08735"></a><span class="lineno"> 8735</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l08736"></a><span class="lineno"> 8736</span>&#160; }</div><div class="line"><a name="l08737"></a><span class="lineno"> 8737</span>&#160; <span class="keywordflow">case</span> <span class="charliteral">&#39;r&#39;</span>:</div><div class="line"><a name="l08738"></a><span class="lineno"> 8738</span>&#160; {</div><div class="line"><a name="l08739"></a><span class="lineno"> 8739</span>&#160; result += <span class="stringliteral">&quot;\r&quot;</span>;</div><div class="line"><a name="l08740"></a><span class="lineno"> 8740</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l08741"></a><span class="lineno"> 8741</span>&#160; }</div><div class="line"><a name="l08742"></a><span class="lineno"> 8742</span>&#160; <span class="keywordflow">case</span> <span class="charliteral">&#39;\\&#39;</span>:</div><div class="line"><a name="l08743"></a><span class="lineno"> 8743</span>&#160; {</div><div class="line"><a name="l08744"></a><span class="lineno"> 8744</span>&#160; result += <span class="stringliteral">&quot;\\&quot;</span>;</div><div class="line"><a name="l08745"></a><span class="lineno"> 8745</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l08746"></a><span class="lineno"> 8746</span>&#160; }</div><div class="line"><a name="l08747"></a><span class="lineno"> 8747</span>&#160; <span class="keywordflow">case</span> <span class="charliteral">&#39;/&#39;</span>:</div><div class="line"><a name="l08748"></a><span class="lineno"> 8748</span>&#160; {</div><div class="line"><a name="l08749"></a><span class="lineno"> 8749</span>&#160; result += <span class="stringliteral">&quot;/&quot;</span>;</div><div class="line"><a name="l08750"></a><span class="lineno"> 8750</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l08751"></a><span class="lineno"> 8751</span>&#160; }</div><div class="line"><a name="l08752"></a><span class="lineno"> 8752</span>&#160; <span class="keywordflow">case</span> <span class="charliteral">&#39;&quot;&#39;</span>:</div><div class="line"><a name="l08753"></a><span class="lineno"> 8753</span>&#160; {</div><div class="line"><a name="l08754"></a><span class="lineno"> 8754</span>&#160; result += <span class="stringliteral">&quot;\&quot;&quot;</span>;</div><div class="line"><a name="l08755"></a><span class="lineno"> 8755</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l08756"></a><span class="lineno"> 8756</span>&#160; }</div><div class="line"><a name="l08757"></a><span class="lineno"> 8757</span>&#160;</div><div class="line"><a name="l08758"></a><span class="lineno"> 8758</span>&#160; <span class="comment">// unicode</span></div><div class="line"><a name="l08759"></a><span class="lineno"> 8759</span>&#160; <span class="keywordflow">case</span> <span class="charliteral">&#39;u&#39;</span>:</div><div class="line"><a name="l08760"></a><span class="lineno"> 8760</span>&#160; {</div><div class="line"><a name="l08761"></a><span class="lineno"> 8761</span>&#160; <span class="comment">// get code xxxx from uxxxx</span></div><div class="line"><a name="l08762"></a><span class="lineno"> 8762</span>&#160; <span class="keyword">auto</span> codepoint = std::strtoul(std::string(reinterpret_cast&lt;typename string_t::const_pointer&gt;(i + 1),</div><div class="line"><a name="l08763"></a><span class="lineno"> 8763</span>&#160; 4).c_str(), <span class="keyword">nullptr</span>, 16);</div><div class="line"><a name="l08764"></a><span class="lineno"> 8764</span>&#160;</div><div class="line"><a name="l08765"></a><span class="lineno"> 8765</span>&#160; <span class="comment">// check if codepoint is a high surrogate</span></div><div class="line"><a name="l08766"></a><span class="lineno"> 8766</span>&#160; <span class="keywordflow">if</span> (codepoint &gt;= 0xD800 and codepoint &lt;= 0xDBFF)</div><div class="line"><a name="l08767"></a><span class="lineno"> 8767</span>&#160; {</div><div class="line"><a name="l08768"></a><span class="lineno"> 8768</span>&#160; <span class="comment">// make sure there is a subsequent unicode</span></div><div class="line"><a name="l08769"></a><span class="lineno"> 8769</span>&#160; <span class="keywordflow">if</span> ((i + 6 &gt;= m_limit) or * (i + 5) != <span class="charliteral">&#39;\\&#39;</span> or * (i + 6) != <span class="charliteral">&#39;u&#39;</span>)</div><div class="line"><a name="l08770"></a><span class="lineno"> 8770</span>&#160; {</div><div class="line"><a name="l08771"></a><span class="lineno"> 8771</span>&#160; <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;missing low surrogate&quot;</span>);</div><div class="line"><a name="l08772"></a><span class="lineno"> 8772</span>&#160; }</div><div class="line"><a name="l08773"></a><span class="lineno"> 8773</span>&#160;</div><div class="line"><a name="l08774"></a><span class="lineno"> 8774</span>&#160; <span class="comment">// get code yyyy from uxxxx\uyyyy</span></div><div class="line"><a name="l08775"></a><span class="lineno"> 8775</span>&#160; <span class="keyword">auto</span> codepoint2 = std::strtoul(std::string(reinterpret_cast&lt;typename string_t::const_pointer&gt;</div><div class="line"><a name="l08776"></a><span class="lineno"> 8776</span>&#160; (i + 7), 4).c_str(), <span class="keyword">nullptr</span>, 16);</div><div class="line"><a name="l08777"></a><span class="lineno"> 8777</span>&#160; result += to_unicode(codepoint, codepoint2);</div><div class="line"><a name="l08778"></a><span class="lineno"> 8778</span>&#160; <span class="comment">// skip the next 10 characters (xxxx\uyyyy)</span></div><div class="line"><a name="l08779"></a><span class="lineno"> 8779</span>&#160; i += 10;</div><div class="line"><a name="l08780"></a><span class="lineno"> 8780</span>&#160; }</div><div class="line"><a name="l08781"></a><span class="lineno"> 8781</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l08782"></a><span class="lineno"> 8782</span>&#160; {</div><div class="line"><a name="l08783"></a><span class="lineno"> 8783</span>&#160; <span class="comment">// add unicode character(s)</span></div><div class="line"><a name="l08784"></a><span class="lineno"> 8784</span>&#160; result += to_unicode(codepoint);</div><div class="line"><a name="l08785"></a><span class="lineno"> 8785</span>&#160; <span class="comment">// skip the next four characters (xxxx)</span></div><div class="line"><a name="l08786"></a><span class="lineno"> 8786</span>&#160; i += 4;</div><div class="line"><a name="l08787"></a><span class="lineno"> 8787</span>&#160; }</div><div class="line"><a name="l08788"></a><span class="lineno"> 8788</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l08789"></a><span class="lineno"> 8789</span>&#160; }</div><div class="line"><a name="l08790"></a><span class="lineno"> 8790</span>&#160; }</div><div class="line"><a name="l08791"></a><span class="lineno"> 8791</span>&#160; }</div><div class="line"><a name="l08792"></a><span class="lineno"> 8792</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l08793"></a><span class="lineno"> 8793</span>&#160; {</div><div class="line"><a name="l08794"></a><span class="lineno"> 8794</span>&#160; <span class="comment">// all other characters are just copied to the end of the</span></div><div class="line"><a name="l08795"></a><span class="lineno"> 8795</span>&#160; <span class="comment">// string</span></div><div class="line"><a name="l08796"></a><span class="lineno"> 8796</span>&#160; result.append(1, static_cast&lt;typename string_t::value_type&gt;(*i));</div><div class="line"><a name="l08797"></a><span class="lineno"> 8797</span>&#160; }</div><div class="line"><a name="l08798"></a><span class="lineno"> 8798</span>&#160; }</div><div class="line"><a name="l08799"></a><span class="lineno"> 8799</span>&#160;</div><div class="line"><a name="l08800"></a><span class="lineno"> 8800</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l08801"></a><span class="lineno"> 8801</span>&#160; }</div><div class="line"><a name="l08802"></a><span class="lineno"> 8802</span>&#160;</div><div class="line"><a name="l08818"></a><span class="lineno"> 8818</span>&#160; <span class="keywordtype">long</span> <span class="keywordtype">double</span> str_to_float_t(<span class="keywordtype">long</span> <span class="keywordtype">double</span>* <span class="comment">/* type */</span>, <span class="keywordtype">char</span>** endptr)<span class="keyword"> const</span></div><div class="line"><a name="l08819"></a><span class="lineno"> 8819</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l08820"></a><span class="lineno"> 8820</span>&#160; <span class="keywordflow">return</span> std::strtold(reinterpret_cast&lt;typename string_t::const_pointer&gt;(m_start), endptr);</div><div class="line"><a name="l08821"></a><span class="lineno"> 8821</span>&#160; }</div><div class="line"><a name="l08822"></a><span class="lineno"> 8822</span>&#160;</div><div class="line"><a name="l08838"></a><span class="lineno"> 8838</span>&#160; <span class="keywordtype">double</span> str_to_float_t(<span class="keywordtype">double</span>* <span class="comment">/* type */</span>, <span class="keywordtype">char</span>** endptr)<span class="keyword"> const</span></div><div class="line"><a name="l08839"></a><span class="lineno"> 8839</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l08840"></a><span class="lineno"> 8840</span>&#160; <span class="keywordflow">return</span> std::strtod(reinterpret_cast&lt;typename string_t::const_pointer&gt;(m_start), endptr);</div><div class="line"><a name="l08841"></a><span class="lineno"> 8841</span>&#160; }</div><div class="line"><a name="l08842"></a><span class="lineno"> 8842</span>&#160;</div><div class="line"><a name="l08858"></a><span class="lineno"> 8858</span>&#160; <span class="keywordtype">float</span> str_to_float_t(<span class="keywordtype">float</span>* <span class="comment">/* type */</span>, <span class="keywordtype">char</span>** endptr)<span class="keyword"> const</span></div><div class="line"><a name="l08859"></a><span class="lineno"> 8859</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l08860"></a><span class="lineno"> 8860</span>&#160; <span class="keywordflow">return</span> std::strtof(reinterpret_cast&lt;typename string_t::const_pointer&gt;(m_start), endptr);</div><div class="line"><a name="l08861"></a><span class="lineno"> 8861</span>&#160; }</div><div class="line"><a name="l08862"></a><span class="lineno"> 8862</span>&#160;</div><div class="line"><a name="l08884"></a><span class="lineno"> 8884</span>&#160; <span class="keywordtype">void</span> get_number(<a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a>&amp; result)<span class="keyword"> const</span></div><div class="line"><a name="l08885"></a><span class="lineno"> 8885</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l08886"></a><span class="lineno"> 8886</span>&#160; assert(m_start != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l08887"></a><span class="lineno"> 8887</span>&#160;</div><div class="line"><a name="l08888"></a><span class="lineno"> 8888</span>&#160; <span class="keyword">const</span> lexer::lexer_char_t* curptr = m_start;</div><div class="line"><a name="l08889"></a><span class="lineno"> 8889</span>&#160;</div><div class="line"><a name="l08890"></a><span class="lineno"> 8890</span>&#160; <span class="comment">// accumulate the integer conversion result (unsigned for now)</span></div><div class="line"><a name="l08891"></a><span class="lineno"> 8891</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_a60a04166c122072ab11eaf9845d9cd1d.html#a60a04166c122072ab11eaf9845d9cd1d">number_unsigned_t</a> value = 0;</div><div class="line"><a name="l08892"></a><span class="lineno"> 8892</span>&#160;</div><div class="line"><a name="l08893"></a><span class="lineno"> 8893</span>&#160; <span class="comment">// maximum absolute value of the relevant integer type</span></div><div class="line"><a name="l08894"></a><span class="lineno"> 8894</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_a60a04166c122072ab11eaf9845d9cd1d.html#a60a04166c122072ab11eaf9845d9cd1d">number_unsigned_t</a> max;</div><div class="line"><a name="l08895"></a><span class="lineno"> 8895</span>&#160;</div><div class="line"><a name="l08896"></a><span class="lineno"> 8896</span>&#160; <span class="comment">// temporarily store the type to avoid unecessary bitfield access</span></div><div class="line"><a name="l08897"></a><span class="lineno"> 8897</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_a231b02148577b69a154b2ce2c87a5522.html#a231b02148577b69a154b2ce2c87a5522">value_t</a> type;</div><div class="line"><a name="l08898"></a><span class="lineno"> 8898</span>&#160;</div><div class="line"><a name="l08899"></a><span class="lineno"> 8899</span>&#160; <span class="comment">// look for sign</span></div><div class="line"><a name="l08900"></a><span class="lineno"> 8900</span>&#160; <span class="keywordflow">if</span> (*curptr == <span class="charliteral">&#39;-&#39;</span>)</div><div class="line"><a name="l08901"></a><span class="lineno"> 8901</span>&#160; {</div><div class="line"><a name="l08902"></a><span class="lineno"> 8902</span>&#160; type = value_t::number_integer;</div><div class="line"><a name="l08903"></a><span class="lineno"> 8903</span>&#160; max = <span class="keyword">static_cast&lt;</span>uint64_t<span class="keyword">&gt;</span>((std::numeric_limits&lt;number_integer_t&gt;::max)()) + 1;</div><div class="line"><a name="l08904"></a><span class="lineno"> 8904</span>&#160; curptr++;</div><div class="line"><a name="l08905"></a><span class="lineno"> 8905</span>&#160; }</div><div class="line"><a name="l08906"></a><span class="lineno"> 8906</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l08907"></a><span class="lineno"> 8907</span>&#160; {</div><div class="line"><a name="l08908"></a><span class="lineno"> 8908</span>&#160; type = value_t::number_unsigned;</div><div class="line"><a name="l08909"></a><span class="lineno"> 8909</span>&#160; max = <span class="keyword">static_cast&lt;</span>uint64_t<span class="keyword">&gt;</span>((std::numeric_limits&lt;number_unsigned_t&gt;::max)());</div><div class="line"><a name="l08910"></a><span class="lineno"> 8910</span>&#160; }</div><div class="line"><a name="l08911"></a><span class="lineno"> 8911</span>&#160;</div><div class="line"><a name="l08912"></a><span class="lineno"> 8912</span>&#160; <span class="comment">// count the significant figures</span></div><div class="line"><a name="l08913"></a><span class="lineno"> 8913</span>&#160; <span class="keywordflow">for</span> (; curptr &lt; m_cursor; curptr++)</div><div class="line"><a name="l08914"></a><span class="lineno"> 8914</span>&#160; {</div><div class="line"><a name="l08915"></a><span class="lineno"> 8915</span>&#160; <span class="comment">// quickly skip tests if a digit</span></div><div class="line"><a name="l08916"></a><span class="lineno"> 8916</span>&#160; <span class="keywordflow">if</span> (*curptr &lt; &#39;0&#39; || *curptr &gt; <span class="charliteral">&#39;9&#39;</span>)</div><div class="line"><a name="l08917"></a><span class="lineno"> 8917</span>&#160; {</div><div class="line"><a name="l08918"></a><span class="lineno"> 8918</span>&#160; <span class="keywordflow">if</span> (*curptr == <span class="charliteral">&#39;.&#39;</span>)</div><div class="line"><a name="l08919"></a><span class="lineno"> 8919</span>&#160; {</div><div class="line"><a name="l08920"></a><span class="lineno"> 8920</span>&#160; <span class="comment">// don&#39;t count &#39;.&#39; but change to float</span></div><div class="line"><a name="l08921"></a><span class="lineno"> 8921</span>&#160; type = value_t::number_float;</div><div class="line"><a name="l08922"></a><span class="lineno"> 8922</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l08923"></a><span class="lineno"> 8923</span>&#160; }</div><div class="line"><a name="l08924"></a><span class="lineno"> 8924</span>&#160; <span class="comment">// assume exponent (if not then will fail parse): change to</span></div><div class="line"><a name="l08925"></a><span class="lineno"> 8925</span>&#160; <span class="comment">// float, stop counting and record exponent details</span></div><div class="line"><a name="l08926"></a><span class="lineno"> 8926</span>&#160; type = value_t::number_float;</div><div class="line"><a name="l08927"></a><span class="lineno"> 8927</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l08928"></a><span class="lineno"> 8928</span>&#160; }</div><div class="line"><a name="l08929"></a><span class="lineno"> 8929</span>&#160;</div><div class="line"><a name="l08930"></a><span class="lineno"> 8930</span>&#160; <span class="comment">// skip if definitely not an integer</span></div><div class="line"><a name="l08931"></a><span class="lineno"> 8931</span>&#160; <span class="keywordflow">if</span> (type != value_t::number_float)</div><div class="line"><a name="l08932"></a><span class="lineno"> 8932</span>&#160; {</div><div class="line"><a name="l08933"></a><span class="lineno"> 8933</span>&#160; <span class="comment">// multiply last value by ten and add the new digit</span></div><div class="line"><a name="l08934"></a><span class="lineno"> 8934</span>&#160; <span class="keyword">auto</span> temp = value * 10 + *curptr - <span class="charliteral">&#39;0&#39;</span>;</div><div class="line"><a name="l08935"></a><span class="lineno"> 8935</span>&#160;</div><div class="line"><a name="l08936"></a><span class="lineno"> 8936</span>&#160; <span class="comment">// test for overflow</span></div><div class="line"><a name="l08937"></a><span class="lineno"> 8937</span>&#160; <span class="keywordflow">if</span> (temp &lt; value || temp &gt; max)</div><div class="line"><a name="l08938"></a><span class="lineno"> 8938</span>&#160; {</div><div class="line"><a name="l08939"></a><span class="lineno"> 8939</span>&#160; <span class="comment">// overflow</span></div><div class="line"><a name="l08940"></a><span class="lineno"> 8940</span>&#160; type = value_t::number_float;</div><div class="line"><a name="l08941"></a><span class="lineno"> 8941</span>&#160; }</div><div class="line"><a name="l08942"></a><span class="lineno"> 8942</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l08943"></a><span class="lineno"> 8943</span>&#160; {</div><div class="line"><a name="l08944"></a><span class="lineno"> 8944</span>&#160; <span class="comment">// no overflow - save it</span></div><div class="line"><a name="l08945"></a><span class="lineno"> 8945</span>&#160; value = temp;</div><div class="line"><a name="l08946"></a><span class="lineno"> 8946</span>&#160; }</div><div class="line"><a name="l08947"></a><span class="lineno"> 8947</span>&#160; }</div><div class="line"><a name="l08948"></a><span class="lineno"> 8948</span>&#160; }</div><div class="line"><a name="l08949"></a><span class="lineno"> 8949</span>&#160;</div><div class="line"><a name="l08950"></a><span class="lineno"> 8950</span>&#160; <span class="comment">// save the value (if not a float)</span></div><div class="line"><a name="l08951"></a><span class="lineno"> 8951</span>&#160; <span class="keywordflow">if</span> (type == value_t::number_unsigned)</div><div class="line"><a name="l08952"></a><span class="lineno"> 8952</span>&#160; {</div><div class="line"><a name="l08953"></a><span class="lineno"> 8953</span>&#160; result.m_value.number_unsigned = value;</div><div class="line"><a name="l08954"></a><span class="lineno"> 8954</span>&#160; }</div><div class="line"><a name="l08955"></a><span class="lineno"> 8955</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (type == value_t::number_integer)</div><div class="line"><a name="l08956"></a><span class="lineno"> 8956</span>&#160; {</div><div class="line"><a name="l08957"></a><span class="lineno"> 8957</span>&#160; result.m_value.number_integer = -<span class="keyword">static_cast&lt;</span><a class="code" href="classnlohmann_1_1basic__json_ac4b10b2364f26ce47bdb9a413ff04a59.html#ac4b10b2364f26ce47bdb9a413ff04a59">number_integer_t</a><span class="keyword">&gt;</span>(value);</div><div class="line"><a name="l08958"></a><span class="lineno"> 8958</span>&#160; }</div><div class="line"><a name="l08959"></a><span class="lineno"> 8959</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l08960"></a><span class="lineno"> 8960</span>&#160; {</div><div class="line"><a name="l08961"></a><span class="lineno"> 8961</span>&#160; <span class="comment">// parse with strtod</span></div><div class="line"><a name="l08962"></a><span class="lineno"> 8962</span>&#160; result.m_value.number_float = str_to_float_t(static_cast&lt;number_float_t*&gt;(<span class="keyword">nullptr</span>), NULL);</div><div class="line"><a name="l08963"></a><span class="lineno"> 8963</span>&#160; }</div><div class="line"><a name="l08964"></a><span class="lineno"> 8964</span>&#160;</div><div class="line"><a name="l08965"></a><span class="lineno"> 8965</span>&#160; <span class="comment">// save the type</span></div><div class="line"><a name="l08966"></a><span class="lineno"> 8966</span>&#160; result.m_type = type;</div><div class="line"><a name="l08967"></a><span class="lineno"> 8967</span>&#160; }</div><div class="line"><a name="l08968"></a><span class="lineno"> 8968</span>&#160;</div><div class="line"><a name="l08969"></a><span class="lineno"> 8969</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l08971"></a><span class="lineno"> 8971</span>&#160; std::istream* m_stream = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l08973"></a><span class="lineno"> 8973</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_ab63e618bbb0371042b1bec17f5891f42.html#ab63e618bbb0371042b1bec17f5891f42">string_t</a> m_line_buffer {};</div><div class="line"><a name="l08975"></a><span class="lineno"> 8975</span>&#160; <span class="keyword">const</span> lexer_char_t* m_content = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l08977"></a><span class="lineno"> 8977</span>&#160; <span class="keyword">const</span> lexer_char_t* m_start = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l08979"></a><span class="lineno"> 8979</span>&#160; <span class="keyword">const</span> lexer_char_t* m_marker = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l08981"></a><span class="lineno"> 8981</span>&#160; <span class="keyword">const</span> lexer_char_t* m_cursor = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l08983"></a><span class="lineno"> 8983</span>&#160; <span class="keyword">const</span> lexer_char_t* m_limit = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l08985"></a><span class="lineno"> 8985</span>&#160; token_type last_token_type = token_type::end_of_input;</div><div class="line"><a name="l08986"></a><span class="lineno"> 8986</span>&#160; };</div><div class="line"><a name="l08987"></a><span class="lineno"> 8987</span>&#160;</div><div class="line"><a name="l08993"></a><span class="lineno"> 8993</span>&#160; <span class="keyword">class </span>parser</div><div class="line"><a name="l08994"></a><span class="lineno"> 8994</span>&#160; {</div><div class="line"><a name="l08995"></a><span class="lineno"> 8995</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l08997"></a><span class="lineno"> 8997</span>&#160; parser(<span class="keyword">const</span> <span class="keywordtype">char</span>* buff, <span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_a9e35475e2027520a78e09f460dbe048a.html#a9e35475e2027520a78e09f460dbe048a">parser_callback_t</a> cb = <span class="keyword">nullptr</span>)</div><div class="line"><a name="l08998"></a><span class="lineno"> 8998</span>&#160; : callback(cb),</div><div class="line"><a name="l08999"></a><span class="lineno"> 8999</span>&#160; m_lexer(reinterpret_cast&lt;const typename lexer::lexer_char_t*&gt;(buff), strlen(buff))</div><div class="line"><a name="l09000"></a><span class="lineno"> 9000</span>&#160; {}</div><div class="line"><a name="l09001"></a><span class="lineno"> 9001</span>&#160;</div><div class="line"><a name="l09003"></a><span class="lineno"> 9003</span>&#160; parser(std::istream&amp; is, <span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_a9e35475e2027520a78e09f460dbe048a.html#a9e35475e2027520a78e09f460dbe048a">parser_callback_t</a> cb = <span class="keyword">nullptr</span>)</div><div class="line"><a name="l09004"></a><span class="lineno"> 9004</span>&#160; : callback(cb), m_lexer(is)</div><div class="line"><a name="l09005"></a><span class="lineno"> 9005</span>&#160; {}</div><div class="line"><a name="l09006"></a><span class="lineno"> 9006</span>&#160;</div><div class="line"><a name="l09008"></a><span class="lineno"> 9008</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">class </span>IteratorType, <span class="keyword">typename</span> std::enable_if&lt;</div><div class="line"><a name="l09009"></a><span class="lineno"> 9009</span>&#160; std::is_same&lt;typename std::iterator_traits&lt;IteratorType&gt;::iterator_category, std::random_access_iterator_tag&gt;::value</div><div class="line"><a name="l09010"></a><span class="lineno"> 9010</span>&#160; , <span class="keywordtype">int</span>&gt;::type</div><div class="line"><a name="l09011"></a><span class="lineno"> 9011</span>&#160; = 0&gt;</div><div class="line"><a name="l09012"></a><span class="lineno"> 9012</span>&#160; parser(IteratorType first, IteratorType last, <span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_a9e35475e2027520a78e09f460dbe048a.html#a9e35475e2027520a78e09f460dbe048a">parser_callback_t</a> cb = <span class="keyword">nullptr</span>)</div><div class="line"><a name="l09013"></a><span class="lineno"> 9013</span>&#160; : callback(cb),</div><div class="line"><a name="l09014"></a><span class="lineno"> 9014</span>&#160; m_lexer(reinterpret_cast&lt;const typename lexer::lexer_char_t*&gt;(&amp;(*first)),</div><div class="line"><a name="l09015"></a><span class="lineno"> 9015</span>&#160; static_cast&lt;size_t&gt;(std::distance(first, last)))</div><div class="line"><a name="l09016"></a><span class="lineno"> 9016</span>&#160; {}</div><div class="line"><a name="l09017"></a><span class="lineno"> 9017</span>&#160;</div><div class="line"><a name="l09019"></a><span class="lineno"> 9019</span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a> parse()</div><div class="line"><a name="l09020"></a><span class="lineno"> 9020</span>&#160; {</div><div class="line"><a name="l09021"></a><span class="lineno"> 9021</span>&#160; <span class="comment">// read first token</span></div><div class="line"><a name="l09022"></a><span class="lineno"> 9022</span>&#160; get_token();</div><div class="line"><a name="l09023"></a><span class="lineno"> 9023</span>&#160;</div><div class="line"><a name="l09024"></a><span class="lineno"> 9024</span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a> result = parse_internal(<span class="keyword">true</span>);</div><div class="line"><a name="l09025"></a><span class="lineno"> 9025</span>&#160; result.assert_invariant();</div><div class="line"><a name="l09026"></a><span class="lineno"> 9026</span>&#160;</div><div class="line"><a name="l09027"></a><span class="lineno"> 9027</span>&#160; expect(lexer::token_type::end_of_input);</div><div class="line"><a name="l09028"></a><span class="lineno"> 9028</span>&#160;</div><div class="line"><a name="l09029"></a><span class="lineno"> 9029</span>&#160; <span class="comment">// return parser result and replace it with null in case the</span></div><div class="line"><a name="l09030"></a><span class="lineno"> 9030</span>&#160; <span class="comment">// top-level value was discarded by the callback function</span></div><div class="line"><a name="l09031"></a><span class="lineno"> 9031</span>&#160; <span class="keywordflow">return</span> result.<a class="code" href="classnlohmann_1_1basic__json_a1002d187e05b5323bda5de124cbe95a8.html#a1002d187e05b5323bda5de124cbe95a8">is_discarded</a>() ? <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a>() : std::move(result);</div><div class="line"><a name="l09032"></a><span class="lineno"> 9032</span>&#160; }</div><div class="line"><a name="l09033"></a><span class="lineno"> 9033</span>&#160;</div><div class="line"><a name="l09034"></a><span class="lineno"> 9034</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l09036"></a><span class="lineno"> 9036</span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a> parse_internal(<span class="keywordtype">bool</span> keep)</div><div class="line"><a name="l09037"></a><span class="lineno"> 9037</span>&#160; {</div><div class="line"><a name="l09038"></a><span class="lineno"> 9038</span>&#160; <span class="keyword">auto</span> result = <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a>(value_t::discarded);</div><div class="line"><a name="l09039"></a><span class="lineno"> 9039</span>&#160;</div><div class="line"><a name="l09040"></a><span class="lineno"> 9040</span>&#160; <span class="keywordflow">switch</span> (last_token)</div><div class="line"><a name="l09041"></a><span class="lineno"> 9041</span>&#160; {</div><div class="line"><a name="l09042"></a><span class="lineno"> 9042</span>&#160; <span class="keywordflow">case</span> lexer::token_type::begin_object:</div><div class="line"><a name="l09043"></a><span class="lineno"> 9043</span>&#160; {</div><div class="line"><a name="l09044"></a><span class="lineno"> 9044</span>&#160; <span class="keywordflow">if</span> (keep and (not callback</div><div class="line"><a name="l09045"></a><span class="lineno"> 9045</span>&#160; or ((keep = callback(depth++, parse_event_t::object_start, result)) != 0)))</div><div class="line"><a name="l09046"></a><span class="lineno"> 9046</span>&#160; {</div><div class="line"><a name="l09047"></a><span class="lineno"> 9047</span>&#160; <span class="comment">// explicitly set result to object to cope with {}</span></div><div class="line"><a name="l09048"></a><span class="lineno"> 9048</span>&#160; result.m_type = value_t::object;</div><div class="line"><a name="l09049"></a><span class="lineno"> 9049</span>&#160; result.m_value = value_t::object;</div><div class="line"><a name="l09050"></a><span class="lineno"> 9050</span>&#160; }</div><div class="line"><a name="l09051"></a><span class="lineno"> 9051</span>&#160;</div><div class="line"><a name="l09052"></a><span class="lineno"> 9052</span>&#160; <span class="comment">// read next token</span></div><div class="line"><a name="l09053"></a><span class="lineno"> 9053</span>&#160; get_token();</div><div class="line"><a name="l09054"></a><span class="lineno"> 9054</span>&#160;</div><div class="line"><a name="l09055"></a><span class="lineno"> 9055</span>&#160; <span class="comment">// closing } -&gt; we are done</span></div><div class="line"><a name="l09056"></a><span class="lineno"> 9056</span>&#160; <span class="keywordflow">if</span> (last_token == lexer::token_type::end_object)</div><div class="line"><a name="l09057"></a><span class="lineno"> 9057</span>&#160; {</div><div class="line"><a name="l09058"></a><span class="lineno"> 9058</span>&#160; get_token();</div><div class="line"><a name="l09059"></a><span class="lineno"> 9059</span>&#160; <span class="keywordflow">if</span> (keep and callback and not callback(--depth, parse_event_t::object_end, result))</div><div class="line"><a name="l09060"></a><span class="lineno"> 9060</span>&#160; {</div><div class="line"><a name="l09061"></a><span class="lineno"> 9061</span>&#160; result = <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a>(value_t::discarded);</div><div class="line"><a name="l09062"></a><span class="lineno"> 9062</span>&#160; }</div><div class="line"><a name="l09063"></a><span class="lineno"> 9063</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l09064"></a><span class="lineno"> 9064</span>&#160; }</div><div class="line"><a name="l09065"></a><span class="lineno"> 9065</span>&#160;</div><div class="line"><a name="l09066"></a><span class="lineno"> 9066</span>&#160; <span class="comment">// no comma is expected here</span></div><div class="line"><a name="l09067"></a><span class="lineno"> 9067</span>&#160; unexpect(lexer::token_type::value_separator);</div><div class="line"><a name="l09068"></a><span class="lineno"> 9068</span>&#160;</div><div class="line"><a name="l09069"></a><span class="lineno"> 9069</span>&#160; <span class="comment">// otherwise: parse key-value pairs</span></div><div class="line"><a name="l09070"></a><span class="lineno"> 9070</span>&#160; <span class="keywordflow">do</span></div><div class="line"><a name="l09071"></a><span class="lineno"> 9071</span>&#160; {</div><div class="line"><a name="l09072"></a><span class="lineno"> 9072</span>&#160; <span class="comment">// ugly, but could be fixed with loop reorganization</span></div><div class="line"><a name="l09073"></a><span class="lineno"> 9073</span>&#160; <span class="keywordflow">if</span> (last_token == lexer::token_type::value_separator)</div><div class="line"><a name="l09074"></a><span class="lineno"> 9074</span>&#160; {</div><div class="line"><a name="l09075"></a><span class="lineno"> 9075</span>&#160; get_token();</div><div class="line"><a name="l09076"></a><span class="lineno"> 9076</span>&#160; }</div><div class="line"><a name="l09077"></a><span class="lineno"> 9077</span>&#160;</div><div class="line"><a name="l09078"></a><span class="lineno"> 9078</span>&#160; <span class="comment">// store key</span></div><div class="line"><a name="l09079"></a><span class="lineno"> 9079</span>&#160; expect(lexer::token_type::value_string);</div><div class="line"><a name="l09080"></a><span class="lineno"> 9080</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> key = m_lexer.get_string();</div><div class="line"><a name="l09081"></a><span class="lineno"> 9081</span>&#160;</div><div class="line"><a name="l09082"></a><span class="lineno"> 9082</span>&#160; <span class="keywordtype">bool</span> keep_tag = <span class="keyword">false</span>;</div><div class="line"><a name="l09083"></a><span class="lineno"> 9083</span>&#160; <span class="keywordflow">if</span> (keep)</div><div class="line"><a name="l09084"></a><span class="lineno"> 9084</span>&#160; {</div><div class="line"><a name="l09085"></a><span class="lineno"> 9085</span>&#160; <span class="keywordflow">if</span> (callback)</div><div class="line"><a name="l09086"></a><span class="lineno"> 9086</span>&#160; {</div><div class="line"><a name="l09087"></a><span class="lineno"> 9087</span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a> k(key);</div><div class="line"><a name="l09088"></a><span class="lineno"> 9088</span>&#160; keep_tag = callback(depth, parse_event_t::key, k);</div><div class="line"><a name="l09089"></a><span class="lineno"> 9089</span>&#160; }</div><div class="line"><a name="l09090"></a><span class="lineno"> 9090</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l09091"></a><span class="lineno"> 9091</span>&#160; {</div><div class="line"><a name="l09092"></a><span class="lineno"> 9092</span>&#160; keep_tag = <span class="keyword">true</span>;</div><div class="line"><a name="l09093"></a><span class="lineno"> 9093</span>&#160; }</div><div class="line"><a name="l09094"></a><span class="lineno"> 9094</span>&#160; }</div><div class="line"><a name="l09095"></a><span class="lineno"> 9095</span>&#160;</div><div class="line"><a name="l09096"></a><span class="lineno"> 9096</span>&#160; <span class="comment">// parse separator (:)</span></div><div class="line"><a name="l09097"></a><span class="lineno"> 9097</span>&#160; get_token();</div><div class="line"><a name="l09098"></a><span class="lineno"> 9098</span>&#160; expect(lexer::token_type::name_separator);</div><div class="line"><a name="l09099"></a><span class="lineno"> 9099</span>&#160;</div><div class="line"><a name="l09100"></a><span class="lineno"> 9100</span>&#160; <span class="comment">// parse and add value</span></div><div class="line"><a name="l09101"></a><span class="lineno"> 9101</span>&#160; get_token();</div><div class="line"><a name="l09102"></a><span class="lineno"> 9102</span>&#160; <span class="keyword">auto</span> value = parse_internal(keep);</div><div class="line"><a name="l09103"></a><span class="lineno"> 9103</span>&#160; <span class="keywordflow">if</span> (keep and keep_tag and not value.is_discarded())</div><div class="line"><a name="l09104"></a><span class="lineno"> 9104</span>&#160; {</div><div class="line"><a name="l09105"></a><span class="lineno"> 9105</span>&#160; result[key] = std::move(value);</div><div class="line"><a name="l09106"></a><span class="lineno"> 9106</span>&#160; }</div><div class="line"><a name="l09107"></a><span class="lineno"> 9107</span>&#160; }</div><div class="line"><a name="l09108"></a><span class="lineno"> 9108</span>&#160; <span class="keywordflow">while</span> (last_token == lexer::token_type::value_separator);</div><div class="line"><a name="l09109"></a><span class="lineno"> 9109</span>&#160;</div><div class="line"><a name="l09110"></a><span class="lineno"> 9110</span>&#160; <span class="comment">// closing }</span></div><div class="line"><a name="l09111"></a><span class="lineno"> 9111</span>&#160; expect(lexer::token_type::end_object);</div><div class="line"><a name="l09112"></a><span class="lineno"> 9112</span>&#160; get_token();</div><div class="line"><a name="l09113"></a><span class="lineno"> 9113</span>&#160; <span class="keywordflow">if</span> (keep and callback and not callback(--depth, parse_event_t::object_end, result))</div><div class="line"><a name="l09114"></a><span class="lineno"> 9114</span>&#160; {</div><div class="line"><a name="l09115"></a><span class="lineno"> 9115</span>&#160; result = <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a>(value_t::discarded);</div><div class="line"><a name="l09116"></a><span class="lineno"> 9116</span>&#160; }</div><div class="line"><a name="l09117"></a><span class="lineno"> 9117</span>&#160;</div><div class="line"><a name="l09118"></a><span class="lineno"> 9118</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l09119"></a><span class="lineno"> 9119</span>&#160; }</div><div class="line"><a name="l09120"></a><span class="lineno"> 9120</span>&#160;</div><div class="line"><a name="l09121"></a><span class="lineno"> 9121</span>&#160; <span class="keywordflow">case</span> lexer::token_type::begin_array:</div><div class="line"><a name="l09122"></a><span class="lineno"> 9122</span>&#160; {</div><div class="line"><a name="l09123"></a><span class="lineno"> 9123</span>&#160; <span class="keywordflow">if</span> (keep and (not callback</div><div class="line"><a name="l09124"></a><span class="lineno"> 9124</span>&#160; or ((keep = callback(depth++, parse_event_t::array_start, result)) != 0)))</div><div class="line"><a name="l09125"></a><span class="lineno"> 9125</span>&#160; {</div><div class="line"><a name="l09126"></a><span class="lineno"> 9126</span>&#160; <span class="comment">// explicitly set result to object to cope with []</span></div><div class="line"><a name="l09127"></a><span class="lineno"> 9127</span>&#160; result.m_type = value_t::array;</div><div class="line"><a name="l09128"></a><span class="lineno"> 9128</span>&#160; result.m_value = value_t::array;</div><div class="line"><a name="l09129"></a><span class="lineno"> 9129</span>&#160; }</div><div class="line"><a name="l09130"></a><span class="lineno"> 9130</span>&#160;</div><div class="line"><a name="l09131"></a><span class="lineno"> 9131</span>&#160; <span class="comment">// read next token</span></div><div class="line"><a name="l09132"></a><span class="lineno"> 9132</span>&#160; get_token();</div><div class="line"><a name="l09133"></a><span class="lineno"> 9133</span>&#160;</div><div class="line"><a name="l09134"></a><span class="lineno"> 9134</span>&#160; <span class="comment">// closing ] -&gt; we are done</span></div><div class="line"><a name="l09135"></a><span class="lineno"> 9135</span>&#160; <span class="keywordflow">if</span> (last_token == lexer::token_type::end_array)</div><div class="line"><a name="l09136"></a><span class="lineno"> 9136</span>&#160; {</div><div class="line"><a name="l09137"></a><span class="lineno"> 9137</span>&#160; get_token();</div><div class="line"><a name="l09138"></a><span class="lineno"> 9138</span>&#160; <span class="keywordflow">if</span> (callback and not callback(--depth, parse_event_t::array_end, result))</div><div class="line"><a name="l09139"></a><span class="lineno"> 9139</span>&#160; {</div><div class="line"><a name="l09140"></a><span class="lineno"> 9140</span>&#160; result = <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a>(value_t::discarded);</div><div class="line"><a name="l09141"></a><span class="lineno"> 9141</span>&#160; }</div><div class="line"><a name="l09142"></a><span class="lineno"> 9142</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l09143"></a><span class="lineno"> 9143</span>&#160; }</div><div class="line"><a name="l09144"></a><span class="lineno"> 9144</span>&#160;</div><div class="line"><a name="l09145"></a><span class="lineno"> 9145</span>&#160; <span class="comment">// no comma is expected here</span></div><div class="line"><a name="l09146"></a><span class="lineno"> 9146</span>&#160; unexpect(lexer::token_type::value_separator);</div><div class="line"><a name="l09147"></a><span class="lineno"> 9147</span>&#160;</div><div class="line"><a name="l09148"></a><span class="lineno"> 9148</span>&#160; <span class="comment">// otherwise: parse values</span></div><div class="line"><a name="l09149"></a><span class="lineno"> 9149</span>&#160; <span class="keywordflow">do</span></div><div class="line"><a name="l09150"></a><span class="lineno"> 9150</span>&#160; {</div><div class="line"><a name="l09151"></a><span class="lineno"> 9151</span>&#160; <span class="comment">// ugly, but could be fixed with loop reorganization</span></div><div class="line"><a name="l09152"></a><span class="lineno"> 9152</span>&#160; <span class="keywordflow">if</span> (last_token == lexer::token_type::value_separator)</div><div class="line"><a name="l09153"></a><span class="lineno"> 9153</span>&#160; {</div><div class="line"><a name="l09154"></a><span class="lineno"> 9154</span>&#160; get_token();</div><div class="line"><a name="l09155"></a><span class="lineno"> 9155</span>&#160; }</div><div class="line"><a name="l09156"></a><span class="lineno"> 9156</span>&#160;</div><div class="line"><a name="l09157"></a><span class="lineno"> 9157</span>&#160; <span class="comment">// parse value</span></div><div class="line"><a name="l09158"></a><span class="lineno"> 9158</span>&#160; <span class="keyword">auto</span> value = parse_internal(keep);</div><div class="line"><a name="l09159"></a><span class="lineno"> 9159</span>&#160; <span class="keywordflow">if</span> (keep and not value.is_discarded())</div><div class="line"><a name="l09160"></a><span class="lineno"> 9160</span>&#160; {</div><div class="line"><a name="l09161"></a><span class="lineno"> 9161</span>&#160; result.push_back(std::move(value));</div><div class="line"><a name="l09162"></a><span class="lineno"> 9162</span>&#160; }</div><div class="line"><a name="l09163"></a><span class="lineno"> 9163</span>&#160; }</div><div class="line"><a name="l09164"></a><span class="lineno"> 9164</span>&#160; <span class="keywordflow">while</span> (last_token == lexer::token_type::value_separator);</div><div class="line"><a name="l09165"></a><span class="lineno"> 9165</span>&#160;</div><div class="line"><a name="l09166"></a><span class="lineno"> 9166</span>&#160; <span class="comment">// closing ]</span></div><div class="line"><a name="l09167"></a><span class="lineno"> 9167</span>&#160; expect(lexer::token_type::end_array);</div><div class="line"><a name="l09168"></a><span class="lineno"> 9168</span>&#160; get_token();</div><div class="line"><a name="l09169"></a><span class="lineno"> 9169</span>&#160; <span class="keywordflow">if</span> (keep and callback and not callback(--depth, parse_event_t::array_end, result))</div><div class="line"><a name="l09170"></a><span class="lineno"> 9170</span>&#160; {</div><div class="line"><a name="l09171"></a><span class="lineno"> 9171</span>&#160; result = <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a>(value_t::discarded);</div><div class="line"><a name="l09172"></a><span class="lineno"> 9172</span>&#160; }</div><div class="line"><a name="l09173"></a><span class="lineno"> 9173</span>&#160;</div><div class="line"><a name="l09174"></a><span class="lineno"> 9174</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l09175"></a><span class="lineno"> 9175</span>&#160; }</div><div class="line"><a name="l09176"></a><span class="lineno"> 9176</span>&#160;</div><div class="line"><a name="l09177"></a><span class="lineno"> 9177</span>&#160; <span class="keywordflow">case</span> lexer::token_type::literal_null:</div><div class="line"><a name="l09178"></a><span class="lineno"> 9178</span>&#160; {</div><div class="line"><a name="l09179"></a><span class="lineno"> 9179</span>&#160; get_token();</div><div class="line"><a name="l09180"></a><span class="lineno"> 9180</span>&#160; result.m_type = value_t::null;</div><div class="line"><a name="l09181"></a><span class="lineno"> 9181</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l09182"></a><span class="lineno"> 9182</span>&#160; }</div><div class="line"><a name="l09183"></a><span class="lineno"> 9183</span>&#160;</div><div class="line"><a name="l09184"></a><span class="lineno"> 9184</span>&#160; <span class="keywordflow">case</span> lexer::token_type::value_string:</div><div class="line"><a name="l09185"></a><span class="lineno"> 9185</span>&#160; {</div><div class="line"><a name="l09186"></a><span class="lineno"> 9186</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> s = m_lexer.get_string();</div><div class="line"><a name="l09187"></a><span class="lineno"> 9187</span>&#160; get_token();</div><div class="line"><a name="l09188"></a><span class="lineno"> 9188</span>&#160; result = <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a>(s);</div><div class="line"><a name="l09189"></a><span class="lineno"> 9189</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l09190"></a><span class="lineno"> 9190</span>&#160; }</div><div class="line"><a name="l09191"></a><span class="lineno"> 9191</span>&#160;</div><div class="line"><a name="l09192"></a><span class="lineno"> 9192</span>&#160; <span class="keywordflow">case</span> lexer::token_type::literal_true:</div><div class="line"><a name="l09193"></a><span class="lineno"> 9193</span>&#160; {</div><div class="line"><a name="l09194"></a><span class="lineno"> 9194</span>&#160; get_token();</div><div class="line"><a name="l09195"></a><span class="lineno"> 9195</span>&#160; result.m_type = value_t::boolean;</div><div class="line"><a name="l09196"></a><span class="lineno"> 9196</span>&#160; result.m_value = <span class="keyword">true</span>;</div><div class="line"><a name="l09197"></a><span class="lineno"> 9197</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l09198"></a><span class="lineno"> 9198</span>&#160; }</div><div class="line"><a name="l09199"></a><span class="lineno"> 9199</span>&#160;</div><div class="line"><a name="l09200"></a><span class="lineno"> 9200</span>&#160; <span class="keywordflow">case</span> lexer::token_type::literal_false:</div><div class="line"><a name="l09201"></a><span class="lineno"> 9201</span>&#160; {</div><div class="line"><a name="l09202"></a><span class="lineno"> 9202</span>&#160; get_token();</div><div class="line"><a name="l09203"></a><span class="lineno"> 9203</span>&#160; result.m_type = value_t::boolean;</div><div class="line"><a name="l09204"></a><span class="lineno"> 9204</span>&#160; result.m_value = <span class="keyword">false</span>;</div><div class="line"><a name="l09205"></a><span class="lineno"> 9205</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l09206"></a><span class="lineno"> 9206</span>&#160; }</div><div class="line"><a name="l09207"></a><span class="lineno"> 9207</span>&#160;</div><div class="line"><a name="l09208"></a><span class="lineno"> 9208</span>&#160; <span class="keywordflow">case</span> lexer::token_type::value_number:</div><div class="line"><a name="l09209"></a><span class="lineno"> 9209</span>&#160; {</div><div class="line"><a name="l09210"></a><span class="lineno"> 9210</span>&#160; m_lexer.get_number(result);</div><div class="line"><a name="l09211"></a><span class="lineno"> 9211</span>&#160; get_token();</div><div class="line"><a name="l09212"></a><span class="lineno"> 9212</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l09213"></a><span class="lineno"> 9213</span>&#160; }</div><div class="line"><a name="l09214"></a><span class="lineno"> 9214</span>&#160;</div><div class="line"><a name="l09215"></a><span class="lineno"> 9215</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l09216"></a><span class="lineno"> 9216</span>&#160; {</div><div class="line"><a name="l09217"></a><span class="lineno"> 9217</span>&#160; <span class="comment">// the last token was unexpected</span></div><div class="line"><a name="l09218"></a><span class="lineno"> 9218</span>&#160; unexpect(last_token);</div><div class="line"><a name="l09219"></a><span class="lineno"> 9219</span>&#160; }</div><div class="line"><a name="l09220"></a><span class="lineno"> 9220</span>&#160; }</div><div class="line"><a name="l09221"></a><span class="lineno"> 9221</span>&#160;</div><div class="line"><a name="l09222"></a><span class="lineno"> 9222</span>&#160; <span class="keywordflow">if</span> (keep and callback and not callback(depth, parse_event_t::value, result))</div><div class="line"><a name="l09223"></a><span class="lineno"> 9223</span>&#160; {</div><div class="line"><a name="l09224"></a><span class="lineno"> 9224</span>&#160; result = <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a>(value_t::discarded);</div><div class="line"><a name="l09225"></a><span class="lineno"> 9225</span>&#160; }</div><div class="line"><a name="l09226"></a><span class="lineno"> 9226</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l09227"></a><span class="lineno"> 9227</span>&#160; }</div><div class="line"><a name="l09228"></a><span class="lineno"> 9228</span>&#160;</div><div class="line"><a name="l09230"></a><span class="lineno"> 9230</span>&#160; <span class="keyword">typename</span> lexer::token_type get_token()</div><div class="line"><a name="l09231"></a><span class="lineno"> 9231</span>&#160; {</div><div class="line"><a name="l09232"></a><span class="lineno"> 9232</span>&#160; last_token = m_lexer.scan();</div><div class="line"><a name="l09233"></a><span class="lineno"> 9233</span>&#160; <span class="keywordflow">return</span> last_token;</div><div class="line"><a name="l09234"></a><span class="lineno"> 9234</span>&#160; }</div><div class="line"><a name="l09235"></a><span class="lineno"> 9235</span>&#160;</div><div class="line"><a name="l09236"></a><span class="lineno"> 9236</span>&#160; <span class="keywordtype">void</span> expect(<span class="keyword">typename</span> lexer::token_type t)<span class="keyword"> const</span></div><div class="line"><a name="l09237"></a><span class="lineno"> 9237</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l09238"></a><span class="lineno"> 9238</span>&#160; <span class="keywordflow">if</span> (t != last_token)</div><div class="line"><a name="l09239"></a><span class="lineno"> 9239</span>&#160; {</div><div class="line"><a name="l09240"></a><span class="lineno"> 9240</span>&#160; std::string error_msg = <span class="stringliteral">&quot;parse error - unexpected &quot;</span>;</div><div class="line"><a name="l09241"></a><span class="lineno"> 9241</span>&#160; error_msg += (last_token == lexer::token_type::parse_error ? (<span class="stringliteral">&quot;&#39;&quot;</span> + m_lexer.get_token_string() +</div><div class="line"><a name="l09242"></a><span class="lineno"> 9242</span>&#160; <span class="stringliteral">&quot;&#39;&quot;</span>) :</div><div class="line"><a name="l09243"></a><span class="lineno"> 9243</span>&#160; lexer::token_type_name(last_token));</div><div class="line"><a name="l09244"></a><span class="lineno"> 9244</span>&#160; error_msg += <span class="stringliteral">&quot;; expected &quot;</span> + lexer::token_type_name(t);</div><div class="line"><a name="l09245"></a><span class="lineno"> 9245</span>&#160; <span class="keywordflow">throw</span> std::invalid_argument(error_msg);</div><div class="line"><a name="l09246"></a><span class="lineno"> 9246</span>&#160; }</div><div class="line"><a name="l09247"></a><span class="lineno"> 9247</span>&#160; }</div><div class="line"><a name="l09248"></a><span class="lineno"> 9248</span>&#160;</div><div class="line"><a name="l09249"></a><span class="lineno"> 9249</span>&#160; <span class="keywordtype">void</span> unexpect(<span class="keyword">typename</span> lexer::token_type t)<span class="keyword"> const</span></div><div class="line"><a name="l09250"></a><span class="lineno"> 9250</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l09251"></a><span class="lineno"> 9251</span>&#160; <span class="keywordflow">if</span> (t == last_token)</div><div class="line"><a name="l09252"></a><span class="lineno"> 9252</span>&#160; {</div><div class="line"><a name="l09253"></a><span class="lineno"> 9253</span>&#160; std::string error_msg = <span class="stringliteral">&quot;parse error - unexpected &quot;</span>;</div><div class="line"><a name="l09254"></a><span class="lineno"> 9254</span>&#160; error_msg += (last_token == lexer::token_type::parse_error ? (<span class="stringliteral">&quot;&#39;&quot;</span> + m_lexer.get_token_string() +</div><div class="line"><a name="l09255"></a><span class="lineno"> 9255</span>&#160; <span class="stringliteral">&quot;&#39;&quot;</span>) :</div><div class="line"><a name="l09256"></a><span class="lineno"> 9256</span>&#160; lexer::token_type_name(last_token));</div><div class="line"><a name="l09257"></a><span class="lineno"> 9257</span>&#160; <span class="keywordflow">throw</span> std::invalid_argument(error_msg);</div><div class="line"><a name="l09258"></a><span class="lineno"> 9258</span>&#160; }</div><div class="line"><a name="l09259"></a><span class="lineno"> 9259</span>&#160; }</div><div class="line"><a name="l09260"></a><span class="lineno"> 9260</span>&#160;</div><div class="line"><a name="l09261"></a><span class="lineno"> 9261</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l09263"></a><span class="lineno"> 9263</span>&#160; <span class="keywordtype">int</span> depth = 0;</div><div class="line"><a name="l09265"></a><span class="lineno"> 9265</span>&#160; <span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_a9e35475e2027520a78e09f460dbe048a.html#a9e35475e2027520a78e09f460dbe048a">parser_callback_t</a> callback = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l09267"></a><span class="lineno"> 9267</span>&#160; <span class="keyword">typename</span> lexer::token_type last_token = lexer::token_type::uninitialized;</div><div class="line"><a name="l09269"></a><span class="lineno"> 9269</span>&#160; lexer m_lexer;</div><div class="line"><a name="l09270"></a><span class="lineno"> 9270</span>&#160; };</div><div class="line"><a name="l09271"></a><span class="lineno"> 9271</span>&#160;</div><div class="line"><a name="l09272"></a><span class="lineno"> 9272</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l09284"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1json__pointer.html"> 9284</a></span>&#160; <span class="keyword">class </span><a class="code" href="classnlohmann_1_1basic__json_1_1json__pointer.html">json_pointer</a></div><div class="line"><a name="l09285"></a><span class="lineno"> 9285</span>&#160; {</div><div class="line"><a name="l09287"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1json__pointer_ada3100cdb8700566051828f1355fa745.html#ada3100cdb8700566051828f1355fa745"> 9287</a></span>&#160; <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a>;</div><div class="line"><a name="l09288"></a><span class="lineno"> 9288</span>&#160;</div><div class="line"><a name="l09289"></a><span class="lineno"> 9289</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l09312"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1json__pointer_ae12db117a2742d826465080979d7c835.html#ae12db117a2742d826465080979d7c835"> 9312</a></span>&#160; <span class="keyword">explicit</span> <a class="code" href="classnlohmann_1_1basic__json_1_1json__pointer_ae12db117a2742d826465080979d7c835.html#ae12db117a2742d826465080979d7c835">json_pointer</a>(<span class="keyword">const</span> std::string&amp; s = <span class="stringliteral">&quot;&quot;</span>)</div><div class="line"><a name="l09313"></a><span class="lineno"> 9313</span>&#160; : reference_tokens(split(s))</div><div class="line"><a name="l09314"></a><span class="lineno"> 9314</span>&#160; {}</div><div class="line"><a name="l09315"></a><span class="lineno"> 9315</span>&#160;</div><div class="line"><a name="l09331"></a><span class="lineno"> 9331</span>&#160; std::string to_string() <span class="keyword">const</span> noexcept</div><div class="line"><a name="l09332"></a><span class="lineno"> 9332</span>&#160; {</div><div class="line"><a name="l09333"></a><span class="lineno"> 9333</span>&#160; <span class="keywordflow">return</span> std::accumulate(reference_tokens.begin(),</div><div class="line"><a name="l09334"></a><span class="lineno"> 9334</span>&#160; reference_tokens.end(), std::string{},</div><div class="line"><a name="l09335"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1json__pointer_a5670f575e57c3b1feb3e934a345d1aaa.html#a5670f575e57c3b1feb3e934a345d1aaa"> 9335</a></span>&#160; [](<span class="keyword">const</span> std::string &amp; a, <span class="keyword">const</span> std::string &amp; b)</div><div class="line"><a name="l09336"></a><span class="lineno"> 9336</span>&#160; {</div><div class="line"><a name="l09337"></a><span class="lineno"> 9337</span>&#160; <span class="keywordflow">return</span> a + <span class="stringliteral">&quot;/&quot;</span> + escape(b);</div><div class="line"><a name="l09338"></a><span class="lineno"> 9338</span>&#160; });</div><div class="line"><a name="l09339"></a><span class="lineno"> 9339</span>&#160; }</div><div class="line"><a name="l09340"></a><span class="lineno"> 9340</span>&#160;</div><div class="line"><a name="l09342"></a><span class="lineno"> 9342</span>&#160; <span class="keyword">operator</span> std::string()<span class="keyword"> const</span></div><div class="line"><a name="l09343"></a><span class="lineno"> 9343</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l09344"></a><span class="lineno"> 9344</span>&#160; <span class="keywordflow">return</span> to_string();</div><div class="line"><a name="l09345"></a><span class="lineno"> 9345</span>&#160; }</div><div class="line"><a name="l09346"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_1_1json__pointer_a319e945a9349ed49fe3a62bc023c8d23.html#a319e945a9349ed49fe3a62bc023c8d23"> 9346</a></span>&#160;</div><div class="line"><a name="l09347"></a><span class="lineno"> 9347</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l09349"></a><span class="lineno"> 9349</span>&#160; std::string pop_back()</div><div class="line"><a name="l09350"></a><span class="lineno"> 9350</span>&#160; {</div><div class="line"><a name="l09351"></a><span class="lineno"> 9351</span>&#160; <span class="keywordflow">if</span> (is_root())</div><div class="line"><a name="l09352"></a><span class="lineno"> 9352</span>&#160; {</div><div class="line"><a name="l09353"></a><span class="lineno"> 9353</span>&#160; <span class="keywordflow">throw</span> std::domain_error(<span class="stringliteral">&quot;JSON pointer has no parent&quot;</span>);</div><div class="line"><a name="l09354"></a><span class="lineno"> 9354</span>&#160; }</div><div class="line"><a name="l09355"></a><span class="lineno"> 9355</span>&#160;</div><div class="line"><a name="l09356"></a><span class="lineno"> 9356</span>&#160; <span class="keyword">auto</span> last = reference_tokens.back();</div><div class="line"><a name="l09357"></a><span class="lineno"> 9357</span>&#160; reference_tokens.pop_back();</div><div class="line"><a name="l09358"></a><span class="lineno"> 9358</span>&#160; <span class="keywordflow">return</span> last;</div><div class="line"><a name="l09359"></a><span class="lineno"> 9359</span>&#160; }</div><div class="line"><a name="l09360"></a><span class="lineno"> 9360</span>&#160;</div><div class="line"><a name="l09362"></a><span class="lineno"> 9362</span>&#160; <span class="keywordtype">bool</span> is_root()<span class="keyword"> const</span></div><div class="line"><a name="l09363"></a><span class="lineno"> 9363</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l09364"></a><span class="lineno"> 9364</span>&#160; <span class="keywordflow">return</span> reference_tokens.empty();</div><div class="line"><a name="l09365"></a><span class="lineno"> 9365</span>&#160; }</div><div class="line"><a name="l09366"></a><span class="lineno"> 9366</span>&#160;</div><div class="line"><a name="l09367"></a><span class="lineno"> 9367</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1json__pointer.html">json_pointer</a> top()<span class="keyword"> const</span></div><div class="line"><a name="l09368"></a><span class="lineno"> 9368</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l09369"></a><span class="lineno"> 9369</span>&#160; <span class="keywordflow">if</span> (is_root())</div><div class="line"><a name="l09370"></a><span class="lineno"> 9370</span>&#160; {</div><div class="line"><a name="l09371"></a><span class="lineno"> 9371</span>&#160; <span class="keywordflow">throw</span> std::domain_error(<span class="stringliteral">&quot;JSON pointer has no parent&quot;</span>);</div><div class="line"><a name="l09372"></a><span class="lineno"> 9372</span>&#160; }</div><div class="line"><a name="l09373"></a><span class="lineno"> 9373</span>&#160;</div><div class="line"><a name="l09374"></a><span class="lineno"> 9374</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1json__pointer.html">json_pointer</a> result = *<span class="keyword">this</span>;</div><div class="line"><a name="l09375"></a><span class="lineno"> 9375</span>&#160; result.reference_tokens = {reference_tokens[0]};</div><div class="line"><a name="l09376"></a><span class="lineno"> 9376</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l09377"></a><span class="lineno"> 9377</span>&#160; }</div><div class="line"><a name="l09378"></a><span class="lineno"> 9378</span>&#160;</div><div class="line"><a name="l09384"></a><span class="lineno"> 9384</span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">reference</a> get_and_create(<a class="code" href="classnlohmann_1_1basic__json.html">reference</a> j)<span class="keyword"> const</span></div><div class="line"><a name="l09385"></a><span class="lineno"> 9385</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l09386"></a><span class="lineno"> 9386</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_a9d1b58099dc64695fcf2847ab0b2a7c7.html#a9d1b58099dc64695fcf2847ab0b2a7c7">pointer</a> result = &amp;j;</div><div class="line"><a name="l09387"></a><span class="lineno"> 9387</span>&#160;</div><div class="line"><a name="l09388"></a><span class="lineno"> 9388</span>&#160; <span class="comment">// in case no reference tokens exist, return a reference to the</span></div><div class="line"><a name="l09389"></a><span class="lineno"> 9389</span>&#160; <span class="comment">// JSON value j which will be overwritten by a primitive value</span></div><div class="line"><a name="l09390"></a><span class="lineno"> 9390</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; reference_token : reference_tokens)</div><div class="line"><a name="l09391"></a><span class="lineno"> 9391</span>&#160; {</div><div class="line"><a name="l09392"></a><span class="lineno"> 9392</span>&#160; <span class="keywordflow">switch</span> (result-&gt;m_type)</div><div class="line"><a name="l09393"></a><span class="lineno"> 9393</span>&#160; {</div><div class="line"><a name="l09394"></a><span class="lineno"> 9394</span>&#160; <span class="keywordflow">case</span> value_t::null:</div><div class="line"><a name="l09395"></a><span class="lineno"> 9395</span>&#160; {</div><div class="line"><a name="l09396"></a><span class="lineno"> 9396</span>&#160; <span class="keywordflow">if</span> (reference_token == <span class="stringliteral">&quot;0&quot;</span>)</div><div class="line"><a name="l09397"></a><span class="lineno"> 9397</span>&#160; {</div><div class="line"><a name="l09398"></a><span class="lineno"> 9398</span>&#160; <span class="comment">// start a new array if reference token is 0</span></div><div class="line"><a name="l09399"></a><span class="lineno"> 9399</span>&#160; result = &amp;result-&gt;operator[](0);</div><div class="line"><a name="l09400"></a><span class="lineno"> 9400</span>&#160; }</div><div class="line"><a name="l09401"></a><span class="lineno"> 9401</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l09402"></a><span class="lineno"> 9402</span>&#160; {</div><div class="line"><a name="l09403"></a><span class="lineno"> 9403</span>&#160; <span class="comment">// start a new object otherwise</span></div><div class="line"><a name="l09404"></a><span class="lineno"> 9404</span>&#160; result = &amp;result-&gt;operator[](reference_token);</div><div class="line"><a name="l09405"></a><span class="lineno"> 9405</span>&#160; }</div><div class="line"><a name="l09406"></a><span class="lineno"> 9406</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l09407"></a><span class="lineno"> 9407</span>&#160; }</div><div class="line"><a name="l09408"></a><span class="lineno"> 9408</span>&#160;</div><div class="line"><a name="l09409"></a><span class="lineno"> 9409</span>&#160; <span class="keywordflow">case</span> value_t::object:</div><div class="line"><a name="l09410"></a><span class="lineno"> 9410</span>&#160; {</div><div class="line"><a name="l09411"></a><span class="lineno"> 9411</span>&#160; <span class="comment">// create an entry in the object</span></div><div class="line"><a name="l09412"></a><span class="lineno"> 9412</span>&#160; result = &amp;result-&gt;operator[](reference_token);</div><div class="line"><a name="l09413"></a><span class="lineno"> 9413</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l09414"></a><span class="lineno"> 9414</span>&#160; }</div><div class="line"><a name="l09415"></a><span class="lineno"> 9415</span>&#160;</div><div class="line"><a name="l09416"></a><span class="lineno"> 9416</span>&#160; <span class="keywordflow">case</span> value_t::array:</div><div class="line"><a name="l09417"></a><span class="lineno"> 9417</span>&#160; {</div><div class="line"><a name="l09418"></a><span class="lineno"> 9418</span>&#160; <span class="comment">// create an entry in the array</span></div><div class="line"><a name="l09419"></a><span class="lineno"> 9419</span>&#160; result = &amp;result-&gt;operator[](<span class="keyword">static_cast&lt;</span><a class="code" href="classnlohmann_1_1basic__json_a1579a8f72a230358d6cd1a6e8a62859b.html#a1579a8f72a230358d6cd1a6e8a62859b">size_type</a><span class="keyword">&gt;</span>(std::stoi(reference_token)));</div><div class="line"><a name="l09420"></a><span class="lineno"> 9420</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l09421"></a><span class="lineno"> 9421</span>&#160; }</div><div class="line"><a name="l09422"></a><span class="lineno"> 9422</span>&#160;</div><div class="line"><a name="l09423"></a><span class="lineno"> 9423</span>&#160; <span class="comment">/*</span></div><div class="line"><a name="l09424"></a><span class="lineno"> 9424</span>&#160;<span class="comment"> The following code is only reached if there exists a</span></div><div class="line"><a name="l09425"></a><span class="lineno"> 9425</span>&#160;<span class="comment"> reference token _and_ the current value is primitive. In</span></div><div class="line"><a name="l09426"></a><span class="lineno"> 9426</span>&#160;<span class="comment"> this case, we have an error situation, because primitive</span></div><div class="line"><a name="l09427"></a><span class="lineno"> 9427</span>&#160;<span class="comment"> values may only occur as single value; that is, with an</span></div><div class="line"><a name="l09428"></a><span class="lineno"> 9428</span>&#160;<span class="comment"> empty list of reference tokens.</span></div><div class="line"><a name="l09429"></a><span class="lineno"> 9429</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l09430"></a><span class="lineno"> 9430</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l09431"></a><span class="lineno"> 9431</span>&#160; {</div><div class="line"><a name="l09432"></a><span class="lineno"> 9432</span>&#160; <span class="keywordflow">throw</span> std::domain_error(<span class="stringliteral">&quot;invalid value to unflatten&quot;</span>);</div><div class="line"><a name="l09433"></a><span class="lineno"> 9433</span>&#160; }</div><div class="line"><a name="l09434"></a><span class="lineno"> 9434</span>&#160; }</div><div class="line"><a name="l09435"></a><span class="lineno"> 9435</span>&#160; }</div><div class="line"><a name="l09436"></a><span class="lineno"> 9436</span>&#160;</div><div class="line"><a name="l09437"></a><span class="lineno"> 9437</span>&#160; <span class="keywordflow">return</span> *result;</div><div class="line"><a name="l09438"></a><span class="lineno"> 9438</span>&#160; }</div><div class="line"><a name="l09439"></a><span class="lineno"> 9439</span>&#160;</div><div class="line"><a name="l09459"></a><span class="lineno"> 9459</span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">reference</a> get_unchecked(<a class="code" href="classnlohmann_1_1basic__json_a9d1b58099dc64695fcf2847ab0b2a7c7.html#a9d1b58099dc64695fcf2847ab0b2a7c7">pointer</a> ptr)<span class="keyword"> const</span></div><div class="line"><a name="l09460"></a><span class="lineno"> 9460</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l09461"></a><span class="lineno"> 9461</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; reference_token : reference_tokens)</div><div class="line"><a name="l09462"></a><span class="lineno"> 9462</span>&#160; {</div><div class="line"><a name="l09463"></a><span class="lineno"> 9463</span>&#160; <span class="comment">// convert null values to arrays or objects before continuing</span></div><div class="line"><a name="l09464"></a><span class="lineno"> 9464</span>&#160; <span class="keywordflow">if</span> (ptr-&gt;m_type == value_t::null)</div><div class="line"><a name="l09465"></a><span class="lineno"> 9465</span>&#160; {</div><div class="line"><a name="l09466"></a><span class="lineno"> 9466</span>&#160; <span class="comment">// check if reference token is a number</span></div><div class="line"><a name="l09467"></a><span class="lineno"> 9467</span>&#160; <span class="keyword">const</span> <span class="keywordtype">bool</span> nums = std::all_of(reference_token.begin(),</div><div class="line"><a name="l09468"></a><span class="lineno"> 9468</span>&#160; reference_token.end(),</div><div class="line"><a name="l09469"></a><span class="lineno"> 9469</span>&#160; [](<span class="keyword">const</span> <span class="keywordtype">char</span> x)</div><div class="line"><a name="l09470"></a><span class="lineno"> 9470</span>&#160; {</div><div class="line"><a name="l09471"></a><span class="lineno"> 9471</span>&#160; <span class="keywordflow">return</span> std::isdigit(x);</div><div class="line"><a name="l09472"></a><span class="lineno"> 9472</span>&#160; });</div><div class="line"><a name="l09473"></a><span class="lineno"> 9473</span>&#160;</div><div class="line"><a name="l09474"></a><span class="lineno"> 9474</span>&#160; <span class="comment">// change value to array for numbers or &quot;-&quot; or to object</span></div><div class="line"><a name="l09475"></a><span class="lineno"> 9475</span>&#160; <span class="comment">// otherwise</span></div><div class="line"><a name="l09476"></a><span class="lineno"> 9476</span>&#160; <span class="keywordflow">if</span> (nums or reference_token == <span class="stringliteral">&quot;-&quot;</span>)</div><div class="line"><a name="l09477"></a><span class="lineno"> 9477</span>&#160; {</div><div class="line"><a name="l09478"></a><span class="lineno"> 9478</span>&#160; *ptr = value_t::array;</div><div class="line"><a name="l09479"></a><span class="lineno"> 9479</span>&#160; }</div><div class="line"><a name="l09480"></a><span class="lineno"> 9480</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l09481"></a><span class="lineno"> 9481</span>&#160; {</div><div class="line"><a name="l09482"></a><span class="lineno"> 9482</span>&#160; *ptr = value_t::object;</div><div class="line"><a name="l09483"></a><span class="lineno"> 9483</span>&#160; }</div><div class="line"><a name="l09484"></a><span class="lineno"> 9484</span>&#160; }</div><div class="line"><a name="l09485"></a><span class="lineno"> 9485</span>&#160;</div><div class="line"><a name="l09486"></a><span class="lineno"> 9486</span>&#160; <span class="keywordflow">switch</span> (ptr-&gt;m_type)</div><div class="line"><a name="l09487"></a><span class="lineno"> 9487</span>&#160; {</div><div class="line"><a name="l09488"></a><span class="lineno"> 9488</span>&#160; <span class="keywordflow">case</span> value_t::object:</div><div class="line"><a name="l09489"></a><span class="lineno"> 9489</span>&#160; {</div><div class="line"><a name="l09490"></a><span class="lineno"> 9490</span>&#160; <span class="comment">// use unchecked object access</span></div><div class="line"><a name="l09491"></a><span class="lineno"> 9491</span>&#160; ptr = &amp;ptr-&gt;operator[](reference_token);</div><div class="line"><a name="l09492"></a><span class="lineno"> 9492</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l09493"></a><span class="lineno"> 9493</span>&#160; }</div><div class="line"><a name="l09494"></a><span class="lineno"> 9494</span>&#160;</div><div class="line"><a name="l09495"></a><span class="lineno"> 9495</span>&#160; <span class="keywordflow">case</span> value_t::array:</div><div class="line"><a name="l09496"></a><span class="lineno"> 9496</span>&#160; {</div><div class="line"><a name="l09497"></a><span class="lineno"> 9497</span>&#160; <span class="comment">// error condition (cf. RFC 6901, Sect. 4)</span></div><div class="line"><a name="l09498"></a><span class="lineno"> 9498</span>&#160; <span class="keywordflow">if</span> (reference_token.size() &gt; 1 and reference_token[0] == <span class="charliteral">&#39;0&#39;</span>)</div><div class="line"><a name="l09499"></a><span class="lineno"> 9499</span>&#160; {</div><div class="line"><a name="l09500"></a><span class="lineno"> 9500</span>&#160; <span class="keywordflow">throw</span> std::domain_error(<span class="stringliteral">&quot;array index must not begin with &#39;0&#39;&quot;</span>);</div><div class="line"><a name="l09501"></a><span class="lineno"> 9501</span>&#160; }</div><div class="line"><a name="l09502"></a><span class="lineno"> 9502</span>&#160;</div><div class="line"><a name="l09503"></a><span class="lineno"> 9503</span>&#160; <span class="keywordflow">if</span> (reference_token == <span class="stringliteral">&quot;-&quot;</span>)</div><div class="line"><a name="l09504"></a><span class="lineno"> 9504</span>&#160; {</div><div class="line"><a name="l09505"></a><span class="lineno"> 9505</span>&#160; <span class="comment">// explicityly treat &quot;-&quot; as index beyond the end</span></div><div class="line"><a name="l09506"></a><span class="lineno"> 9506</span>&#160; ptr = &amp;ptr-&gt;operator[](ptr-&gt;m_value.array-&gt;size());</div><div class="line"><a name="l09507"></a><span class="lineno"> 9507</span>&#160; }</div><div class="line"><a name="l09508"></a><span class="lineno"> 9508</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l09509"></a><span class="lineno"> 9509</span>&#160; {</div><div class="line"><a name="l09510"></a><span class="lineno"> 9510</span>&#160; <span class="comment">// convert array index to number; unchecked access</span></div><div class="line"><a name="l09511"></a><span class="lineno"> 9511</span>&#160; ptr = &amp;ptr-&gt;operator[](<span class="keyword">static_cast&lt;</span><a class="code" href="classnlohmann_1_1basic__json_a1579a8f72a230358d6cd1a6e8a62859b.html#a1579a8f72a230358d6cd1a6e8a62859b">size_type</a><span class="keyword">&gt;</span>(std::stoi(reference_token)));</div><div class="line"><a name="l09512"></a><span class="lineno"> 9512</span>&#160; }</div><div class="line"><a name="l09513"></a><span class="lineno"> 9513</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l09514"></a><span class="lineno"> 9514</span>&#160; }</div><div class="line"><a name="l09515"></a><span class="lineno"> 9515</span>&#160;</div><div class="line"><a name="l09516"></a><span class="lineno"> 9516</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l09517"></a><span class="lineno"> 9517</span>&#160; {</div><div class="line"><a name="l09518"></a><span class="lineno"> 9518</span>&#160; <span class="keywordflow">throw</span> std::out_of_range(<span class="stringliteral">&quot;unresolved reference token &#39;&quot;</span> + reference_token + <span class="stringliteral">&quot;&#39;&quot;</span>);</div><div class="line"><a name="l09519"></a><span class="lineno"> 9519</span>&#160; }</div><div class="line"><a name="l09520"></a><span class="lineno"> 9520</span>&#160; }</div><div class="line"><a name="l09521"></a><span class="lineno"> 9521</span>&#160; }</div><div class="line"><a name="l09522"></a><span class="lineno"> 9522</span>&#160;</div><div class="line"><a name="l09523"></a><span class="lineno"> 9523</span>&#160; <span class="keywordflow">return</span> *ptr;</div><div class="line"><a name="l09524"></a><span class="lineno"> 9524</span>&#160; }</div><div class="line"><a name="l09525"></a><span class="lineno"> 9525</span>&#160;</div><div class="line"><a name="l09526"></a><span class="lineno"> 9526</span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">reference</a> get_checked(<a class="code" href="classnlohmann_1_1basic__json_a9d1b58099dc64695fcf2847ab0b2a7c7.html#a9d1b58099dc64695fcf2847ab0b2a7c7">pointer</a> ptr)<span class="keyword"> const</span></div><div class="line"><a name="l09527"></a><span class="lineno"> 9527</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l09528"></a><span class="lineno"> 9528</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; reference_token : reference_tokens)</div><div class="line"><a name="l09529"></a><span class="lineno"> 9529</span>&#160; {</div><div class="line"><a name="l09530"></a><span class="lineno"> 9530</span>&#160; <span class="keywordflow">switch</span> (ptr-&gt;m_type)</div><div class="line"><a name="l09531"></a><span class="lineno"> 9531</span>&#160; {</div><div class="line"><a name="l09532"></a><span class="lineno"> 9532</span>&#160; <span class="keywordflow">case</span> value_t::object:</div><div class="line"><a name="l09533"></a><span class="lineno"> 9533</span>&#160; {</div><div class="line"><a name="l09534"></a><span class="lineno"> 9534</span>&#160; <span class="comment">// note: at performs range check</span></div><div class="line"><a name="l09535"></a><span class="lineno"> 9535</span>&#160; ptr = &amp;ptr-&gt;<a class="code" href="classnlohmann_1_1basic__json_a214a8c22d616fd3567b88932c07436c9.html#a214a8c22d616fd3567b88932c07436c9">at</a>(reference_token);</div><div class="line"><a name="l09536"></a><span class="lineno"> 9536</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l09537"></a><span class="lineno"> 9537</span>&#160; }</div><div class="line"><a name="l09538"></a><span class="lineno"> 9538</span>&#160;</div><div class="line"><a name="l09539"></a><span class="lineno"> 9539</span>&#160; <span class="keywordflow">case</span> value_t::array:</div><div class="line"><a name="l09540"></a><span class="lineno"> 9540</span>&#160; {</div><div class="line"><a name="l09541"></a><span class="lineno"> 9541</span>&#160; <span class="keywordflow">if</span> (reference_token == <span class="stringliteral">&quot;-&quot;</span>)</div><div class="line"><a name="l09542"></a><span class="lineno"> 9542</span>&#160; {</div><div class="line"><a name="l09543"></a><span class="lineno"> 9543</span>&#160; <span class="comment">// &quot;-&quot; always fails the range check</span></div><div class="line"><a name="l09544"></a><span class="lineno"> 9544</span>&#160; <span class="keywordflow">throw</span> std::out_of_range(<span class="stringliteral">&quot;array index &#39;-&#39; (&quot;</span> +</div><div class="line"><a name="l09545"></a><span class="lineno"> 9545</span>&#160; std::to_string(ptr-&gt;m_value.array-&gt;size()) +</div><div class="line"><a name="l09546"></a><span class="lineno"> 9546</span>&#160; <span class="stringliteral">&quot;) is out of range&quot;</span>);</div><div class="line"><a name="l09547"></a><span class="lineno"> 9547</span>&#160; }</div><div class="line"><a name="l09548"></a><span class="lineno"> 9548</span>&#160;</div><div class="line"><a name="l09549"></a><span class="lineno"> 9549</span>&#160; <span class="comment">// error condition (cf. RFC 6901, Sect. 4)</span></div><div class="line"><a name="l09550"></a><span class="lineno"> 9550</span>&#160; <span class="keywordflow">if</span> (reference_token.size() &gt; 1 and reference_token[0] == <span class="charliteral">&#39;0&#39;</span>)</div><div class="line"><a name="l09551"></a><span class="lineno"> 9551</span>&#160; {</div><div class="line"><a name="l09552"></a><span class="lineno"> 9552</span>&#160; <span class="keywordflow">throw</span> std::domain_error(<span class="stringliteral">&quot;array index must not begin with &#39;0&#39;&quot;</span>);</div><div class="line"><a name="l09553"></a><span class="lineno"> 9553</span>&#160; }</div><div class="line"><a name="l09554"></a><span class="lineno"> 9554</span>&#160;</div><div class="line"><a name="l09555"></a><span class="lineno"> 9555</span>&#160; <span class="comment">// note: at performs range check</span></div><div class="line"><a name="l09556"></a><span class="lineno"> 9556</span>&#160; ptr = &amp;ptr-&gt;at(static_cast&lt;size_type&gt;(std::stoi(reference_token)));</div><div class="line"><a name="l09557"></a><span class="lineno"> 9557</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l09558"></a><span class="lineno"> 9558</span>&#160; }</div><div class="line"><a name="l09559"></a><span class="lineno"> 9559</span>&#160;</div><div class="line"><a name="l09560"></a><span class="lineno"> 9560</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l09561"></a><span class="lineno"> 9561</span>&#160; {</div><div class="line"><a name="l09562"></a><span class="lineno"> 9562</span>&#160; <span class="keywordflow">throw</span> std::out_of_range(<span class="stringliteral">&quot;unresolved reference token &#39;&quot;</span> + reference_token + <span class="stringliteral">&quot;&#39;&quot;</span>);</div><div class="line"><a name="l09563"></a><span class="lineno"> 9563</span>&#160; }</div><div class="line"><a name="l09564"></a><span class="lineno"> 9564</span>&#160; }</div><div class="line"><a name="l09565"></a><span class="lineno"> 9565</span>&#160; }</div><div class="line"><a name="l09566"></a><span class="lineno"> 9566</span>&#160;</div><div class="line"><a name="l09567"></a><span class="lineno"> 9567</span>&#160; <span class="keywordflow">return</span> *ptr;</div><div class="line"><a name="l09568"></a><span class="lineno"> 9568</span>&#160; }</div><div class="line"><a name="l09569"></a><span class="lineno"> 9569</span>&#160;</div><div class="line"><a name="l09578"></a><span class="lineno"> 9578</span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">const_reference</a> get_unchecked(<a class="code" href="classnlohmann_1_1basic__json_a06efb200b69942eacd1ea22d0f6ccebb.html#a06efb200b69942eacd1ea22d0f6ccebb">const_pointer</a> ptr)<span class="keyword"> const</span></div><div class="line"><a name="l09579"></a><span class="lineno"> 9579</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l09580"></a><span class="lineno"> 9580</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; reference_token : reference_tokens)</div><div class="line"><a name="l09581"></a><span class="lineno"> 9581</span>&#160; {</div><div class="line"><a name="l09582"></a><span class="lineno"> 9582</span>&#160; <span class="keywordflow">switch</span> (ptr-&gt;m_type)</div><div class="line"><a name="l09583"></a><span class="lineno"> 9583</span>&#160; {</div><div class="line"><a name="l09584"></a><span class="lineno"> 9584</span>&#160; <span class="keywordflow">case</span> value_t::object:</div><div class="line"><a name="l09585"></a><span class="lineno"> 9585</span>&#160; {</div><div class="line"><a name="l09586"></a><span class="lineno"> 9586</span>&#160; <span class="comment">// use unchecked object access</span></div><div class="line"><a name="l09587"></a><span class="lineno"> 9587</span>&#160; ptr = &amp;ptr-&gt;operator[](reference_token);</div><div class="line"><a name="l09588"></a><span class="lineno"> 9588</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l09589"></a><span class="lineno"> 9589</span>&#160; }</div><div class="line"><a name="l09590"></a><span class="lineno"> 9590</span>&#160;</div><div class="line"><a name="l09591"></a><span class="lineno"> 9591</span>&#160; <span class="keywordflow">case</span> value_t::array:</div><div class="line"><a name="l09592"></a><span class="lineno"> 9592</span>&#160; {</div><div class="line"><a name="l09593"></a><span class="lineno"> 9593</span>&#160; <span class="keywordflow">if</span> (reference_token == <span class="stringliteral">&quot;-&quot;</span>)</div><div class="line"><a name="l09594"></a><span class="lineno"> 9594</span>&#160; {</div><div class="line"><a name="l09595"></a><span class="lineno"> 9595</span>&#160; <span class="comment">// &quot;-&quot; cannot be used for const access</span></div><div class="line"><a name="l09596"></a><span class="lineno"> 9596</span>&#160; <span class="keywordflow">throw</span> std::out_of_range(<span class="stringliteral">&quot;array index &#39;-&#39; (&quot;</span> +</div><div class="line"><a name="l09597"></a><span class="lineno"> 9597</span>&#160; std::to_string(ptr-&gt;m_value.array-&gt;size()) +</div><div class="line"><a name="l09598"></a><span class="lineno"> 9598</span>&#160; <span class="stringliteral">&quot;) is out of range&quot;</span>);</div><div class="line"><a name="l09599"></a><span class="lineno"> 9599</span>&#160; }</div><div class="line"><a name="l09600"></a><span class="lineno"> 9600</span>&#160;</div><div class="line"><a name="l09601"></a><span class="lineno"> 9601</span>&#160; <span class="comment">// error condition (cf. RFC 6901, Sect. 4)</span></div><div class="line"><a name="l09602"></a><span class="lineno"> 9602</span>&#160; <span class="keywordflow">if</span> (reference_token.size() &gt; 1 and reference_token[0] == <span class="charliteral">&#39;0&#39;</span>)</div><div class="line"><a name="l09603"></a><span class="lineno"> 9603</span>&#160; {</div><div class="line"><a name="l09604"></a><span class="lineno"> 9604</span>&#160; <span class="keywordflow">throw</span> std::domain_error(<span class="stringliteral">&quot;array index must not begin with &#39;0&#39;&quot;</span>);</div><div class="line"><a name="l09605"></a><span class="lineno"> 9605</span>&#160; }</div><div class="line"><a name="l09606"></a><span class="lineno"> 9606</span>&#160;</div><div class="line"><a name="l09607"></a><span class="lineno"> 9607</span>&#160; <span class="comment">// use unchecked array access</span></div><div class="line"><a name="l09608"></a><span class="lineno"> 9608</span>&#160; ptr = &amp;ptr-&gt;operator[](<span class="keyword">static_cast&lt;</span><a class="code" href="classnlohmann_1_1basic__json_a1579a8f72a230358d6cd1a6e8a62859b.html#a1579a8f72a230358d6cd1a6e8a62859b">size_type</a><span class="keyword">&gt;</span>(std::stoi(reference_token)));</div><div class="line"><a name="l09609"></a><span class="lineno"> 9609</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l09610"></a><span class="lineno"> 9610</span>&#160; }</div><div class="line"><a name="l09611"></a><span class="lineno"> 9611</span>&#160;</div><div class="line"><a name="l09612"></a><span class="lineno"> 9612</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l09613"></a><span class="lineno"> 9613</span>&#160; {</div><div class="line"><a name="l09614"></a><span class="lineno"> 9614</span>&#160; <span class="keywordflow">throw</span> std::out_of_range(<span class="stringliteral">&quot;unresolved reference token &#39;&quot;</span> + reference_token + <span class="stringliteral">&quot;&#39;&quot;</span>);</div><div class="line"><a name="l09615"></a><span class="lineno"> 9615</span>&#160; }</div><div class="line"><a name="l09616"></a><span class="lineno"> 9616</span>&#160; }</div><div class="line"><a name="l09617"></a><span class="lineno"> 9617</span>&#160; }</div><div class="line"><a name="l09618"></a><span class="lineno"> 9618</span>&#160;</div><div class="line"><a name="l09619"></a><span class="lineno"> 9619</span>&#160; <span class="keywordflow">return</span> *ptr;</div><div class="line"><a name="l09620"></a><span class="lineno"> 9620</span>&#160; }</div><div class="line"><a name="l09621"></a><span class="lineno"> 9621</span>&#160;</div><div class="line"><a name="l09622"></a><span class="lineno"> 9622</span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">const_reference</a> get_checked(<a class="code" href="classnlohmann_1_1basic__json_a06efb200b69942eacd1ea22d0f6ccebb.html#a06efb200b69942eacd1ea22d0f6ccebb">const_pointer</a> ptr)<span class="keyword"> const</span></div><div class="line"><a name="l09623"></a><span class="lineno"> 9623</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l09624"></a><span class="lineno"> 9624</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; reference_token : reference_tokens)</div><div class="line"><a name="l09625"></a><span class="lineno"> 9625</span>&#160; {</div><div class="line"><a name="l09626"></a><span class="lineno"> 9626</span>&#160; <span class="keywordflow">switch</span> (ptr-&gt;m_type)</div><div class="line"><a name="l09627"></a><span class="lineno"> 9627</span>&#160; {</div><div class="line"><a name="l09628"></a><span class="lineno"> 9628</span>&#160; <span class="keywordflow">case</span> value_t::object:</div><div class="line"><a name="l09629"></a><span class="lineno"> 9629</span>&#160; {</div><div class="line"><a name="l09630"></a><span class="lineno"> 9630</span>&#160; <span class="comment">// note: at performs range check</span></div><div class="line"><a name="l09631"></a><span class="lineno"> 9631</span>&#160; ptr = &amp;ptr-&gt;<a class="code" href="classnlohmann_1_1basic__json_a214a8c22d616fd3567b88932c07436c9.html#a214a8c22d616fd3567b88932c07436c9">at</a>(reference_token);</div><div class="line"><a name="l09632"></a><span class="lineno"> 9632</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l09633"></a><span class="lineno"> 9633</span>&#160; }</div><div class="line"><a name="l09634"></a><span class="lineno"> 9634</span>&#160;</div><div class="line"><a name="l09635"></a><span class="lineno"> 9635</span>&#160; <span class="keywordflow">case</span> value_t::array:</div><div class="line"><a name="l09636"></a><span class="lineno"> 9636</span>&#160; {</div><div class="line"><a name="l09637"></a><span class="lineno"> 9637</span>&#160; <span class="keywordflow">if</span> (reference_token == <span class="stringliteral">&quot;-&quot;</span>)</div><div class="line"><a name="l09638"></a><span class="lineno"> 9638</span>&#160; {</div><div class="line"><a name="l09639"></a><span class="lineno"> 9639</span>&#160; <span class="comment">// &quot;-&quot; always fails the range check</span></div><div class="line"><a name="l09640"></a><span class="lineno"> 9640</span>&#160; <span class="keywordflow">throw</span> std::out_of_range(<span class="stringliteral">&quot;array index &#39;-&#39; (&quot;</span> +</div><div class="line"><a name="l09641"></a><span class="lineno"> 9641</span>&#160; std::to_string(ptr-&gt;m_value.array-&gt;size()) +</div><div class="line"><a name="l09642"></a><span class="lineno"> 9642</span>&#160; <span class="stringliteral">&quot;) is out of range&quot;</span>);</div><div class="line"><a name="l09643"></a><span class="lineno"> 9643</span>&#160; }</div><div class="line"><a name="l09644"></a><span class="lineno"> 9644</span>&#160;</div><div class="line"><a name="l09645"></a><span class="lineno"> 9645</span>&#160; <span class="comment">// error condition (cf. RFC 6901, Sect. 4)</span></div><div class="line"><a name="l09646"></a><span class="lineno"> 9646</span>&#160; <span class="keywordflow">if</span> (reference_token.size() &gt; 1 and reference_token[0] == <span class="charliteral">&#39;0&#39;</span>)</div><div class="line"><a name="l09647"></a><span class="lineno"> 9647</span>&#160; {</div><div class="line"><a name="l09648"></a><span class="lineno"> 9648</span>&#160; <span class="keywordflow">throw</span> std::domain_error(<span class="stringliteral">&quot;array index must not begin with &#39;0&#39;&quot;</span>);</div><div class="line"><a name="l09649"></a><span class="lineno"> 9649</span>&#160; }</div><div class="line"><a name="l09650"></a><span class="lineno"> 9650</span>&#160;</div><div class="line"><a name="l09651"></a><span class="lineno"> 9651</span>&#160; <span class="comment">// note: at performs range check</span></div><div class="line"><a name="l09652"></a><span class="lineno"> 9652</span>&#160; ptr = &amp;ptr-&gt;at(static_cast&lt;size_type&gt;(std::stoi(reference_token)));</div><div class="line"><a name="l09653"></a><span class="lineno"> 9653</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l09654"></a><span class="lineno"> 9654</span>&#160; }</div><div class="line"><a name="l09655"></a><span class="lineno"> 9655</span>&#160;</div><div class="line"><a name="l09656"></a><span class="lineno"> 9656</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l09657"></a><span class="lineno"> 9657</span>&#160; {</div><div class="line"><a name="l09658"></a><span class="lineno"> 9658</span>&#160; <span class="keywordflow">throw</span> std::out_of_range(<span class="stringliteral">&quot;unresolved reference token &#39;&quot;</span> + reference_token + <span class="stringliteral">&quot;&#39;&quot;</span>);</div><div class="line"><a name="l09659"></a><span class="lineno"> 9659</span>&#160; }</div><div class="line"><a name="l09660"></a><span class="lineno"> 9660</span>&#160; }</div><div class="line"><a name="l09661"></a><span class="lineno"> 9661</span>&#160; }</div><div class="line"><a name="l09662"></a><span class="lineno"> 9662</span>&#160;</div><div class="line"><a name="l09663"></a><span class="lineno"> 9663</span>&#160; <span class="keywordflow">return</span> *ptr;</div><div class="line"><a name="l09664"></a><span class="lineno"> 9664</span>&#160; }</div><div class="line"><a name="l09665"></a><span class="lineno"> 9665</span>&#160;</div><div class="line"><a name="l09667"></a><span class="lineno"> 9667</span>&#160; <span class="keyword">static</span> std::vector&lt;std::string&gt; split(<span class="keyword">const</span> std::string&amp; reference_string)</div><div class="line"><a name="l09668"></a><span class="lineno"> 9668</span>&#160; {</div><div class="line"><a name="l09669"></a><span class="lineno"> 9669</span>&#160; std::vector&lt;std::string&gt; result;</div><div class="line"><a name="l09670"></a><span class="lineno"> 9670</span>&#160;</div><div class="line"><a name="l09671"></a><span class="lineno"> 9671</span>&#160; <span class="comment">// special case: empty reference string -&gt; no reference tokens</span></div><div class="line"><a name="l09672"></a><span class="lineno"> 9672</span>&#160; <span class="keywordflow">if</span> (reference_string.empty())</div><div class="line"><a name="l09673"></a><span class="lineno"> 9673</span>&#160; {</div><div class="line"><a name="l09674"></a><span class="lineno"> 9674</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l09675"></a><span class="lineno"> 9675</span>&#160; }</div><div class="line"><a name="l09676"></a><span class="lineno"> 9676</span>&#160;</div><div class="line"><a name="l09677"></a><span class="lineno"> 9677</span>&#160; <span class="comment">// check if nonempty reference string begins with slash</span></div><div class="line"><a name="l09678"></a><span class="lineno"> 9678</span>&#160; <span class="keywordflow">if</span> (reference_string[0] != <span class="charliteral">&#39;/&#39;</span>)</div><div class="line"><a name="l09679"></a><span class="lineno"> 9679</span>&#160; {</div><div class="line"><a name="l09680"></a><span class="lineno"> 9680</span>&#160; <span class="keywordflow">throw</span> std::domain_error(<span class="stringliteral">&quot;JSON pointer must be empty or begin with &#39;/&#39;&quot;</span>);</div><div class="line"><a name="l09681"></a><span class="lineno"> 9681</span>&#160; }</div><div class="line"><a name="l09682"></a><span class="lineno"> 9682</span>&#160;</div><div class="line"><a name="l09683"></a><span class="lineno"> 9683</span>&#160; <span class="comment">// extract the reference tokens:</span></div><div class="line"><a name="l09684"></a><span class="lineno"> 9684</span>&#160; <span class="comment">// - slash: position of the last read slash (or end of string)</span></div><div class="line"><a name="l09685"></a><span class="lineno"> 9685</span>&#160; <span class="comment">// - start: position after the previous slash</span></div><div class="line"><a name="l09686"></a><span class="lineno"> 9686</span>&#160; <span class="keywordflow">for</span> (</div><div class="line"><a name="l09687"></a><span class="lineno"> 9687</span>&#160; <span class="comment">// search for the first slash after the first character</span></div><div class="line"><a name="l09688"></a><span class="lineno"> 9688</span>&#160; <span class="keywordtype">size_t</span> slash = reference_string.find_first_of(<span class="stringliteral">&quot;/&quot;</span>, 1),</div><div class="line"><a name="l09689"></a><span class="lineno"> 9689</span>&#160; <span class="comment">// set the beginning of the first reference token</span></div><div class="line"><a name="l09690"></a><span class="lineno"> 9690</span>&#160; start = 1;</div><div class="line"><a name="l09691"></a><span class="lineno"> 9691</span>&#160; <span class="comment">// we can stop if start == string::npos+1 = 0</span></div><div class="line"><a name="l09692"></a><span class="lineno"> 9692</span>&#160; start != 0;</div><div class="line"><a name="l09693"></a><span class="lineno"> 9693</span>&#160; <span class="comment">// set the beginning of the next reference token</span></div><div class="line"><a name="l09694"></a><span class="lineno"> 9694</span>&#160; <span class="comment">// (will eventually be 0 if slash == std::string::npos)</span></div><div class="line"><a name="l09695"></a><span class="lineno"> 9695</span>&#160; start = slash + 1,</div><div class="line"><a name="l09696"></a><span class="lineno"> 9696</span>&#160; <span class="comment">// find next slash</span></div><div class="line"><a name="l09697"></a><span class="lineno"> 9697</span>&#160; slash = reference_string.find_first_of(<span class="stringliteral">&quot;/&quot;</span>, start))</div><div class="line"><a name="l09698"></a><span class="lineno"> 9698</span>&#160; {</div><div class="line"><a name="l09699"></a><span class="lineno"> 9699</span>&#160; <span class="comment">// use the text between the beginning of the reference token</span></div><div class="line"><a name="l09700"></a><span class="lineno"> 9700</span>&#160; <span class="comment">// (start) and the last slash (slash).</span></div><div class="line"><a name="l09701"></a><span class="lineno"> 9701</span>&#160; <span class="keyword">auto</span> reference_token = reference_string.substr(start, slash - start);</div><div class="line"><a name="l09702"></a><span class="lineno"> 9702</span>&#160;</div><div class="line"><a name="l09703"></a><span class="lineno"> 9703</span>&#160; <span class="comment">// check reference tokens are properly escaped</span></div><div class="line"><a name="l09704"></a><span class="lineno"> 9704</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> pos = reference_token.find_first_of(<span class="stringliteral">&quot;~&quot;</span>);</div><div class="line"><a name="l09705"></a><span class="lineno"> 9705</span>&#160; pos != std::string::npos;</div><div class="line"><a name="l09706"></a><span class="lineno"> 9706</span>&#160; pos = reference_token.find_first_of(<span class="stringliteral">&quot;~&quot;</span>, pos + 1))</div><div class="line"><a name="l09707"></a><span class="lineno"> 9707</span>&#160; {</div><div class="line"><a name="l09708"></a><span class="lineno"> 9708</span>&#160; assert(reference_token[pos] == <span class="charliteral">&#39;~&#39;</span>);</div><div class="line"><a name="l09709"></a><span class="lineno"> 9709</span>&#160;</div><div class="line"><a name="l09710"></a><span class="lineno"> 9710</span>&#160; <span class="comment">// ~ must be followed by 0 or 1</span></div><div class="line"><a name="l09711"></a><span class="lineno"> 9711</span>&#160; <span class="keywordflow">if</span> (pos == reference_token.size() - 1 or</div><div class="line"><a name="l09712"></a><span class="lineno"> 9712</span>&#160; (reference_token[pos + 1] != <span class="charliteral">&#39;0&#39;</span> and</div><div class="line"><a name="l09713"></a><span class="lineno"> 9713</span>&#160; reference_token[pos + 1] != <span class="charliteral">&#39;1&#39;</span>))</div><div class="line"><a name="l09714"></a><span class="lineno"> 9714</span>&#160; {</div><div class="line"><a name="l09715"></a><span class="lineno"> 9715</span>&#160; <span class="keywordflow">throw</span> std::domain_error(<span class="stringliteral">&quot;escape error: &#39;~&#39; must be followed with &#39;0&#39; or &#39;1&#39;&quot;</span>);</div><div class="line"><a name="l09716"></a><span class="lineno"> 9716</span>&#160; }</div><div class="line"><a name="l09717"></a><span class="lineno"> 9717</span>&#160; }</div><div class="line"><a name="l09718"></a><span class="lineno"> 9718</span>&#160;</div><div class="line"><a name="l09719"></a><span class="lineno"> 9719</span>&#160; <span class="comment">// finally, store the reference token</span></div><div class="line"><a name="l09720"></a><span class="lineno"> 9720</span>&#160; unescape(reference_token);</div><div class="line"><a name="l09721"></a><span class="lineno"> 9721</span>&#160; result.push_back(reference_token);</div><div class="line"><a name="l09722"></a><span class="lineno"> 9722</span>&#160; }</div><div class="line"><a name="l09723"></a><span class="lineno"> 9723</span>&#160;</div><div class="line"><a name="l09724"></a><span class="lineno"> 9724</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l09725"></a><span class="lineno"> 9725</span>&#160; }</div><div class="line"><a name="l09726"></a><span class="lineno"> 9726</span>&#160;</div><div class="line"><a name="l09727"></a><span class="lineno"> 9727</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l09742"></a><span class="lineno"> 9742</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> replace_substring(std::string&amp; s,</div><div class="line"><a name="l09743"></a><span class="lineno"> 9743</span>&#160; <span class="keyword">const</span> std::string&amp; f,</div><div class="line"><a name="l09744"></a><span class="lineno"> 9744</span>&#160; <span class="keyword">const</span> std::string&amp; t)</div><div class="line"><a name="l09745"></a><span class="lineno"> 9745</span>&#160; {</div><div class="line"><a name="l09746"></a><span class="lineno"> 9746</span>&#160; assert(not f.empty());</div><div class="line"><a name="l09747"></a><span class="lineno"> 9747</span>&#160;</div><div class="line"><a name="l09748"></a><span class="lineno"> 9748</span>&#160; <span class="keywordflow">for</span> (</div><div class="line"><a name="l09749"></a><span class="lineno"> 9749</span>&#160; <span class="keywordtype">size_t</span> pos = s.find(f); <span class="comment">// find first occurrence of f</span></div><div class="line"><a name="l09750"></a><span class="lineno"> 9750</span>&#160; pos != std::string::npos; <span class="comment">// make sure f was found</span></div><div class="line"><a name="l09751"></a><span class="lineno"> 9751</span>&#160; s.replace(pos, f.size(), t), <span class="comment">// replace with t</span></div><div class="line"><a name="l09752"></a><span class="lineno"> 9752</span>&#160; pos = s.find(f, pos + t.size()) <span class="comment">// find next occurrence of f</span></div><div class="line"><a name="l09753"></a><span class="lineno"> 9753</span>&#160; );</div><div class="line"><a name="l09754"></a><span class="lineno"> 9754</span>&#160; }</div><div class="line"><a name="l09755"></a><span class="lineno"> 9755</span>&#160;</div><div class="line"><a name="l09757"></a><span class="lineno"> 9757</span>&#160; <span class="keyword">static</span> std::string escape(std::string s)</div><div class="line"><a name="l09758"></a><span class="lineno"> 9758</span>&#160; {</div><div class="line"><a name="l09759"></a><span class="lineno"> 9759</span>&#160; <span class="comment">// escape &quot;~&quot;&quot; to &quot;~0&quot; and &quot;/&quot; to &quot;~1&quot;</span></div><div class="line"><a name="l09760"></a><span class="lineno"> 9760</span>&#160; replace_substring(s, <span class="stringliteral">&quot;~&quot;</span>, <span class="stringliteral">&quot;~0&quot;</span>);</div><div class="line"><a name="l09761"></a><span class="lineno"> 9761</span>&#160; replace_substring(s, <span class="stringliteral">&quot;/&quot;</span>, <span class="stringliteral">&quot;~1&quot;</span>);</div><div class="line"><a name="l09762"></a><span class="lineno"> 9762</span>&#160; <span class="keywordflow">return</span> s;</div><div class="line"><a name="l09763"></a><span class="lineno"> 9763</span>&#160; }</div><div class="line"><a name="l09764"></a><span class="lineno"> 9764</span>&#160;</div><div class="line"><a name="l09766"></a><span class="lineno"> 9766</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> unescape(std::string&amp; s)</div><div class="line"><a name="l09767"></a><span class="lineno"> 9767</span>&#160; {</div><div class="line"><a name="l09768"></a><span class="lineno"> 9768</span>&#160; <span class="comment">// first transform any occurrence of the sequence &#39;~1&#39; to &#39;/&#39;</span></div><div class="line"><a name="l09769"></a><span class="lineno"> 9769</span>&#160; replace_substring(s, <span class="stringliteral">&quot;~1&quot;</span>, <span class="stringliteral">&quot;/&quot;</span>);</div><div class="line"><a name="l09770"></a><span class="lineno"> 9770</span>&#160; <span class="comment">// then transform any occurrence of the sequence &#39;~0&#39; to &#39;~&#39;</span></div><div class="line"><a name="l09771"></a><span class="lineno"> 9771</span>&#160; replace_substring(s, <span class="stringliteral">&quot;~0&quot;</span>, <span class="stringliteral">&quot;~&quot;</span>);</div><div class="line"><a name="l09772"></a><span class="lineno"> 9772</span>&#160; }</div><div class="line"><a name="l09773"></a><span class="lineno"> 9773</span>&#160;</div><div class="line"><a name="l09781"></a><span class="lineno"> 9781</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> flatten(<span class="keyword">const</span> std::string&amp; reference_string,</div><div class="line"><a name="l09782"></a><span class="lineno"> 9782</span>&#160; <span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a>&amp; value,</div><div class="line"><a name="l09783"></a><span class="lineno"> 9783</span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a>&amp; result)</div><div class="line"><a name="l09784"></a><span class="lineno"> 9784</span>&#160; {</div><div class="line"><a name="l09785"></a><span class="lineno"> 9785</span>&#160; <span class="keywordflow">switch</span> (value.m_type)</div><div class="line"><a name="l09786"></a><span class="lineno"> 9786</span>&#160; {</div><div class="line"><a name="l09787"></a><span class="lineno"> 9787</span>&#160; <span class="keywordflow">case</span> value_t::array:</div><div class="line"><a name="l09788"></a><span class="lineno"> 9788</span>&#160; {</div><div class="line"><a name="l09789"></a><span class="lineno"> 9789</span>&#160; <span class="keywordflow">if</span> (value.m_value.array-&gt;empty())</div><div class="line"><a name="l09790"></a><span class="lineno"> 9790</span>&#160; {</div><div class="line"><a name="l09791"></a><span class="lineno"> 9791</span>&#160; <span class="comment">// flatten empty array as null</span></div><div class="line"><a name="l09792"></a><span class="lineno"> 9792</span>&#160; result[reference_string] = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l09793"></a><span class="lineno"> 9793</span>&#160; }</div><div class="line"><a name="l09794"></a><span class="lineno"> 9794</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l09795"></a><span class="lineno"> 9795</span>&#160; {</div><div class="line"><a name="l09796"></a><span class="lineno"> 9796</span>&#160; <span class="comment">// iterate array and use index as reference string</span></div><div class="line"><a name="l09797"></a><span class="lineno"> 9797</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; value.m_value.array-&gt;size(); ++i)</div><div class="line"><a name="l09798"></a><span class="lineno"> 9798</span>&#160; {</div><div class="line"><a name="l09799"></a><span class="lineno"> 9799</span>&#160; flatten(reference_string + <span class="stringliteral">&quot;/&quot;</span> + std::to_string(i),</div><div class="line"><a name="l09800"></a><span class="lineno"> 9800</span>&#160; value.m_value.array-&gt;operator[](i), result);</div><div class="line"><a name="l09801"></a><span class="lineno"> 9801</span>&#160; }</div><div class="line"><a name="l09802"></a><span class="lineno"> 9802</span>&#160; }</div><div class="line"><a name="l09803"></a><span class="lineno"> 9803</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l09804"></a><span class="lineno"> 9804</span>&#160; }</div><div class="line"><a name="l09805"></a><span class="lineno"> 9805</span>&#160;</div><div class="line"><a name="l09806"></a><span class="lineno"> 9806</span>&#160; <span class="keywordflow">case</span> value_t::object:</div><div class="line"><a name="l09807"></a><span class="lineno"> 9807</span>&#160; {</div><div class="line"><a name="l09808"></a><span class="lineno"> 9808</span>&#160; <span class="keywordflow">if</span> (value.m_value.object-&gt;empty())</div><div class="line"><a name="l09809"></a><span class="lineno"> 9809</span>&#160; {</div><div class="line"><a name="l09810"></a><span class="lineno"> 9810</span>&#160; <span class="comment">// flatten empty object as null</span></div><div class="line"><a name="l09811"></a><span class="lineno"> 9811</span>&#160; result[reference_string] = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l09812"></a><span class="lineno"> 9812</span>&#160; }</div><div class="line"><a name="l09813"></a><span class="lineno"> 9813</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l09814"></a><span class="lineno"> 9814</span>&#160; {</div><div class="line"><a name="l09815"></a><span class="lineno"> 9815</span>&#160; <span class="comment">// iterate object and use keys as reference string</span></div><div class="line"><a name="l09816"></a><span class="lineno"> 9816</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; element : *value.m_value.object)</div><div class="line"><a name="l09817"></a><span class="lineno"> 9817</span>&#160; {</div><div class="line"><a name="l09818"></a><span class="lineno"> 9818</span>&#160; flatten(reference_string + <span class="stringliteral">&quot;/&quot;</span> + escape(element.first),</div><div class="line"><a name="l09819"></a><span class="lineno"> 9819</span>&#160; element.second, result);</div><div class="line"><a name="l09820"></a><span class="lineno"> 9820</span>&#160; }</div><div class="line"><a name="l09821"></a><span class="lineno"> 9821</span>&#160; }</div><div class="line"><a name="l09822"></a><span class="lineno"> 9822</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l09823"></a><span class="lineno"> 9823</span>&#160; }</div><div class="line"><a name="l09824"></a><span class="lineno"> 9824</span>&#160;</div><div class="line"><a name="l09825"></a><span class="lineno"> 9825</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l09826"></a><span class="lineno"> 9826</span>&#160; {</div><div class="line"><a name="l09827"></a><span class="lineno"> 9827</span>&#160; <span class="comment">// add primitive value with its reference string</span></div><div class="line"><a name="l09828"></a><span class="lineno"> 9828</span>&#160; result[reference_string] = value;</div><div class="line"><a name="l09829"></a><span class="lineno"> 9829</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l09830"></a><span class="lineno"> 9830</span>&#160; }</div><div class="line"><a name="l09831"></a><span class="lineno"> 9831</span>&#160; }</div><div class="line"><a name="l09832"></a><span class="lineno"> 9832</span>&#160; }</div><div class="line"><a name="l09833"></a><span class="lineno"> 9833</span>&#160;</div><div class="line"><a name="l09839"></a><span class="lineno"> 9839</span>&#160; <span class="keyword">static</span> <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a> unflatten(<span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a>&amp; value)</div><div class="line"><a name="l09840"></a><span class="lineno"> 9840</span>&#160; {</div><div class="line"><a name="l09841"></a><span class="lineno"> 9841</span>&#160; <span class="keywordflow">if</span> (not value.<a class="code" href="classnlohmann_1_1basic__json_a94ba313c00f1713fa4be85de64083754.html#a94ba313c00f1713fa4be85de64083754">is_object</a>())</div><div class="line"><a name="l09842"></a><span class="lineno"> 9842</span>&#160; {</div><div class="line"><a name="l09843"></a><span class="lineno"> 9843</span>&#160; <span class="keywordflow">throw</span> std::domain_error(<span class="stringliteral">&quot;only objects can be unflattened&quot;</span>);</div><div class="line"><a name="l09844"></a><span class="lineno"> 9844</span>&#160; }</div><div class="line"><a name="l09845"></a><span class="lineno"> 9845</span>&#160;</div><div class="line"><a name="l09846"></a><span class="lineno"> 9846</span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a> result;</div><div class="line"><a name="l09847"></a><span class="lineno"> 9847</span>&#160;</div><div class="line"><a name="l09848"></a><span class="lineno"> 9848</span>&#160; <span class="comment">// iterate the JSON object values</span></div><div class="line"><a name="l09849"></a><span class="lineno"> 9849</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; element : *value.m_value.object)</div><div class="line"><a name="l09850"></a><span class="lineno"> 9850</span>&#160; {</div><div class="line"><a name="l09851"></a><span class="lineno"> 9851</span>&#160; <span class="keywordflow">if</span> (not element.second.is_primitive())</div><div class="line"><a name="l09852"></a><span class="lineno"> 9852</span>&#160; {</div><div class="line"><a name="l09853"></a><span class="lineno"> 9853</span>&#160; <span class="keywordflow">throw</span> std::domain_error(<span class="stringliteral">&quot;values in object must be primitive&quot;</span>);</div><div class="line"><a name="l09854"></a><span class="lineno"> 9854</span>&#160; }</div><div class="line"><a name="l09855"></a><span class="lineno"> 9855</span>&#160;</div><div class="line"><a name="l09856"></a><span class="lineno"> 9856</span>&#160; <span class="comment">// assign value to reference pointed to by JSON pointer; Note</span></div><div class="line"><a name="l09857"></a><span class="lineno"> 9857</span>&#160; <span class="comment">// that if the JSON pointer is &quot;&quot; (i.e., points to the whole</span></div><div class="line"><a name="l09858"></a><span class="lineno"> 9858</span>&#160; <span class="comment">// value), function get_and_create returns a reference to</span></div><div class="line"><a name="l09859"></a><span class="lineno"> 9859</span>&#160; <span class="comment">// result itself. An assignment will then create a primitive</span></div><div class="line"><a name="l09860"></a><span class="lineno"> 9860</span>&#160; <span class="comment">// value.</span></div><div class="line"><a name="l09861"></a><span class="lineno"> 9861</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1json__pointer.html">json_pointer</a>(element.first).get_and_create(result) = element.second;</div><div class="line"><a name="l09862"></a><span class="lineno"> 9862</span>&#160; }</div><div class="line"><a name="l09863"></a><span class="lineno"> 9863</span>&#160;</div><div class="line"><a name="l09864"></a><span class="lineno"> 9864</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l09865"></a><span class="lineno"> 9865</span>&#160; }</div><div class="line"><a name="l09866"></a><span class="lineno"> 9866</span>&#160;</div><div class="line"><a name="l09867"></a><span class="lineno"> 9867</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l09869"></a><span class="lineno"> 9869</span>&#160; std::vector&lt;std::string&gt; reference_tokens {};</div><div class="line"><a name="l09870"></a><span class="lineno"> 9870</span>&#160; };</div><div class="line"><a name="l09871"></a><span class="lineno"> 9871</span>&#160;</div><div class="line"><a name="l09873"></a><span class="lineno"> 9873</span>&#160; <span class="comment">// JSON Pointer support //</span></div><div class="line"><a name="l09875"></a><span class="lineno"> 9875</span>&#160;<span class="comment"></span></div><div class="line"><a name="l09878"></a><span class="lineno"> 9878</span>&#160;</div><div class="line"><a name="l09912"></a><span class="lineno"> 9912</span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">reference</a> operator[](<span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_1_1json__pointer.html">json_pointer</a>&amp; ptr)</div><div class="line"><a name="l09913"></a><span class="lineno"> 9913</span>&#160; {</div><div class="line"><a name="l09914"></a><span class="lineno"> 9914</span>&#160; <span class="keywordflow">return</span> ptr.get_unchecked(<span class="keyword">this</span>);</div><div class="line"><a name="l09915"></a><span class="lineno"> 9915</span>&#160; }</div><div class="line"><a name="l09916"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a7605b20debcc12fc44bd9f2075122a87.html#a7605b20debcc12fc44bd9f2075122a87"> 9916</a></span>&#160;</div><div class="line"><a name="l09939"></a><span class="lineno"> 9939</span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">const_reference</a> operator[](<span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_1_1json__pointer.html">json_pointer</a>&amp; ptr)<span class="keyword"> const</span></div><div class="line"><a name="l09940"></a><span class="lineno"> 9940</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l09941"></a><span class="lineno"> 9941</span>&#160; <span class="keywordflow">return</span> ptr.get_unchecked(<span class="keyword">this</span>);</div><div class="line"><a name="l09942"></a><span class="lineno"> 9942</span>&#160; }</div><div class="line"><a name="l09943"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a1eb1a32bfce21629e64a510d945e01c5.html#a1eb1a32bfce21629e64a510d945e01c5"> 9943</a></span>&#160;</div><div class="line"><a name="l09964"></a><span class="lineno"> 9964</span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">reference</a> at(<span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_1_1json__pointer.html">json_pointer</a>&amp; ptr)</div><div class="line"><a name="l09965"></a><span class="lineno"> 9965</span>&#160; {</div><div class="line"><a name="l09966"></a><span class="lineno"> 9966</span>&#160; <span class="keywordflow">return</span> ptr.get_checked(<span class="keyword">this</span>);</div><div class="line"><a name="l09967"></a><span class="lineno"> 9967</span>&#160; }</div><div class="line"><a name="l09968"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a649aef71e5d952499da7ad3b8e7c9236.html#a649aef71e5d952499da7ad3b8e7c9236"> 9968</a></span>&#160;</div><div class="line"><a name="l09989"></a><span class="lineno"> 9989</span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">const_reference</a> at(<span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_1_1json__pointer.html">json_pointer</a>&amp; ptr)<span class="keyword"> const</span></div><div class="line"><a name="l09990"></a><span class="lineno"> 9990</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l09991"></a><span class="lineno"> 9991</span>&#160; <span class="keywordflow">return</span> ptr.get_checked(<span class="keyword">this</span>);</div><div class="line"><a name="l09992"></a><span class="lineno"> 9992</span>&#160; }</div><div class="line"><a name="l09993"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a8faa955d51ec1f63b9ea9a7cc1eb93e8.html#a8faa955d51ec1f63b9ea9a7cc1eb93e8"> 9993</a></span>&#160;</div><div class="line"><a name="l10016"></a><span class="lineno">10016</span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a> flatten()<span class="keyword"> const</span></div><div class="line"><a name="l10017"></a><span class="lineno">10017</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l10018"></a><span class="lineno">10018</span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a> result(value_t::object);</div><div class="line"><a name="l10019"></a><span class="lineno">10019</span>&#160; json_pointer::flatten(<span class="stringliteral">&quot;&quot;</span>, *<span class="keyword">this</span>, result);</div><div class="line"><a name="l10020"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a54d58e56e8a67aaf0c2f3a3a05a76bba.html#a54d58e56e8a67aaf0c2f3a3a05a76bba">10020</a></span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l10021"></a><span class="lineno">10021</span>&#160; }</div><div class="line"><a name="l10022"></a><span class="lineno">10022</span>&#160;</div><div class="line"><a name="l10050"></a><span class="lineno">10050</span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a> unflatten()<span class="keyword"> const</span></div><div class="line"><a name="l10051"></a><span class="lineno">10051</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l10052"></a><span class="lineno">10052</span>&#160; <span class="keywordflow">return</span> json_pointer::unflatten(*<span class="keyword">this</span>);</div><div class="line"><a name="l10053"></a><span class="lineno">10053</span>&#160; }</div><div class="line"><a name="l10054"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_abc459edfac71c4ecc9347731f722026b.html#abc459edfac71c4ecc9347731f722026b">10054</a></span>&#160;</div><div class="line"><a name="l10056"></a><span class="lineno">10056</span>&#160;</div><div class="line"><a name="l10058"></a><span class="lineno">10058</span>&#160; <span class="comment">// JSON Patch functions //</span></div><div class="line"><a name="l10060"></a><span class="lineno">10060</span>&#160;<span class="comment"></span></div><div class="line"><a name="l10063"></a><span class="lineno">10063</span>&#160;</div><div class="line"><a name="l10100"></a><span class="lineno">10100</span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a> patch(<span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a>&amp; json_patch)<span class="keyword"> const</span></div><div class="line"><a name="l10101"></a><span class="lineno">10101</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l10102"></a><span class="lineno">10102</span>&#160; <span class="comment">// make a working copy to apply the patch to</span></div><div class="line"><a name="l10103"></a><span class="lineno">10103</span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a> result = *<span class="keyword">this</span>;</div><div class="line"><a name="l10104"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_aff9d131320db407da31304fb2b5cb7a5.html#aff9d131320db407da31304fb2b5cb7a5">10104</a></span>&#160;</div><div class="line"><a name="l10105"></a><span class="lineno">10105</span>&#160; <span class="comment">// the valid JSON Patch operations</span></div><div class="line"><a name="l10106"></a><span class="lineno">10106</span>&#160; <span class="keyword">enum class</span> patch_operations {add, <span class="keyword">remove</span>, replace, move, copy, test, invalid};</div><div class="line"><a name="l10107"></a><span class="lineno">10107</span>&#160;</div><div class="line"><a name="l10108"></a><span class="lineno">10108</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> get_op = [](<span class="keyword">const</span> std::string op)</div><div class="line"><a name="l10109"></a><span class="lineno">10109</span>&#160; {</div><div class="line"><a name="l10110"></a><span class="lineno">10110</span>&#160; <span class="keywordflow">if</span> (op == <span class="stringliteral">&quot;add&quot;</span>)</div><div class="line"><a name="l10111"></a><span class="lineno">10111</span>&#160; {</div><div class="line"><a name="l10112"></a><span class="lineno">10112</span>&#160; <span class="keywordflow">return</span> patch_operations::add;</div><div class="line"><a name="l10113"></a><span class="lineno">10113</span>&#160; }</div><div class="line"><a name="l10114"></a><span class="lineno">10114</span>&#160; <span class="keywordflow">if</span> (op == <span class="stringliteral">&quot;remove&quot;</span>)</div><div class="line"><a name="l10115"></a><span class="lineno">10115</span>&#160; {</div><div class="line"><a name="l10116"></a><span class="lineno">10116</span>&#160; <span class="keywordflow">return</span> patch_operations::remove;</div><div class="line"><a name="l10117"></a><span class="lineno">10117</span>&#160; }</div><div class="line"><a name="l10118"></a><span class="lineno">10118</span>&#160; <span class="keywordflow">if</span> (op == <span class="stringliteral">&quot;replace&quot;</span>)</div><div class="line"><a name="l10119"></a><span class="lineno">10119</span>&#160; {</div><div class="line"><a name="l10120"></a><span class="lineno">10120</span>&#160; <span class="keywordflow">return</span> patch_operations::replace;</div><div class="line"><a name="l10121"></a><span class="lineno">10121</span>&#160; }</div><div class="line"><a name="l10122"></a><span class="lineno">10122</span>&#160; <span class="keywordflow">if</span> (op == <span class="stringliteral">&quot;move&quot;</span>)</div><div class="line"><a name="l10123"></a><span class="lineno">10123</span>&#160; {</div><div class="line"><a name="l10124"></a><span class="lineno">10124</span>&#160; <span class="keywordflow">return</span> patch_operations::move;</div><div class="line"><a name="l10125"></a><span class="lineno">10125</span>&#160; }</div><div class="line"><a name="l10126"></a><span class="lineno">10126</span>&#160; <span class="keywordflow">if</span> (op == <span class="stringliteral">&quot;copy&quot;</span>)</div><div class="line"><a name="l10127"></a><span class="lineno">10127</span>&#160; {</div><div class="line"><a name="l10128"></a><span class="lineno">10128</span>&#160; <span class="keywordflow">return</span> patch_operations::copy;</div><div class="line"><a name="l10129"></a><span class="lineno">10129</span>&#160; }</div><div class="line"><a name="l10130"></a><span class="lineno">10130</span>&#160; <span class="keywordflow">if</span> (op == <span class="stringliteral">&quot;test&quot;</span>)</div><div class="line"><a name="l10131"></a><span class="lineno">10131</span>&#160; {</div><div class="line"><a name="l10132"></a><span class="lineno">10132</span>&#160; <span class="keywordflow">return</span> patch_operations::test;</div><div class="line"><a name="l10133"></a><span class="lineno">10133</span>&#160; }</div><div class="line"><a name="l10134"></a><span class="lineno">10134</span>&#160;</div><div class="line"><a name="l10135"></a><span class="lineno">10135</span>&#160; <span class="keywordflow">return</span> patch_operations::invalid;</div><div class="line"><a name="l10136"></a><span class="lineno">10136</span>&#160; };</div><div class="line"><a name="l10137"></a><span class="lineno">10137</span>&#160;</div><div class="line"><a name="l10138"></a><span class="lineno">10138</span>&#160; <span class="comment">// wrapper for &quot;add&quot; operation; add value at ptr</span></div><div class="line"><a name="l10139"></a><span class="lineno">10139</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> operation_add = [&amp;result](<a class="code" href="classnlohmann_1_1basic__json_1_1json__pointer.html">json_pointer</a> &amp; ptr, <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a> val)</div><div class="line"><a name="l10140"></a><span class="lineno">10140</span>&#160; {</div><div class="line"><a name="l10141"></a><span class="lineno">10141</span>&#160; <span class="comment">// adding to the root of the target document means replacing it</span></div><div class="line"><a name="l10142"></a><span class="lineno">10142</span>&#160; <span class="keywordflow">if</span> (ptr.is_root())</div><div class="line"><a name="l10143"></a><span class="lineno">10143</span>&#160; {</div><div class="line"><a name="l10144"></a><span class="lineno">10144</span>&#160; result = val;</div><div class="line"><a name="l10145"></a><span class="lineno">10145</span>&#160; }</div><div class="line"><a name="l10146"></a><span class="lineno">10146</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l10147"></a><span class="lineno">10147</span>&#160; {</div><div class="line"><a name="l10148"></a><span class="lineno">10148</span>&#160; <span class="comment">// make sure the top element of the pointer exists</span></div><div class="line"><a name="l10149"></a><span class="lineno">10149</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1json__pointer.html">json_pointer</a> top_pointer = ptr.top();</div><div class="line"><a name="l10150"></a><span class="lineno">10150</span>&#160; <span class="keywordflow">if</span> (top_pointer != ptr)</div><div class="line"><a name="l10151"></a><span class="lineno">10151</span>&#160; {</div><div class="line"><a name="l10152"></a><span class="lineno">10152</span>&#160; result.<a class="code" href="classnlohmann_1_1basic__json_a214a8c22d616fd3567b88932c07436c9.html#a214a8c22d616fd3567b88932c07436c9">at</a>(top_pointer);</div><div class="line"><a name="l10153"></a><span class="lineno">10153</span>&#160; }</div><div class="line"><a name="l10154"></a><span class="lineno">10154</span>&#160;</div><div class="line"><a name="l10155"></a><span class="lineno">10155</span>&#160; <span class="comment">// get reference to parent of JSON pointer ptr</span></div><div class="line"><a name="l10156"></a><span class="lineno">10156</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> last_path = ptr.pop_back();</div><div class="line"><a name="l10157"></a><span class="lineno">10157</span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a>&amp; parent = result[ptr];</div><div class="line"><a name="l10158"></a><span class="lineno">10158</span>&#160;</div><div class="line"><a name="l10159"></a><span class="lineno">10159</span>&#160; <span class="keywordflow">switch</span> (parent.m_type)</div><div class="line"><a name="l10160"></a><span class="lineno">10160</span>&#160; {</div><div class="line"><a name="l10161"></a><span class="lineno">10161</span>&#160; <span class="keywordflow">case</span> value_t::null:</div><div class="line"><a name="l10162"></a><span class="lineno">10162</span>&#160; <span class="keywordflow">case</span> value_t::object:</div><div class="line"><a name="l10163"></a><span class="lineno">10163</span>&#160; {</div><div class="line"><a name="l10164"></a><span class="lineno">10164</span>&#160; <span class="comment">// use operator[] to add value</span></div><div class="line"><a name="l10165"></a><span class="lineno">10165</span>&#160; parent[last_path] = val;</div><div class="line"><a name="l10166"></a><span class="lineno">10166</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l10167"></a><span class="lineno">10167</span>&#160; }</div><div class="line"><a name="l10168"></a><span class="lineno">10168</span>&#160;</div><div class="line"><a name="l10169"></a><span class="lineno">10169</span>&#160; <span class="keywordflow">case</span> value_t::array:</div><div class="line"><a name="l10170"></a><span class="lineno">10170</span>&#160; {</div><div class="line"><a name="l10171"></a><span class="lineno">10171</span>&#160; <span class="keywordflow">if</span> (last_path == <span class="stringliteral">&quot;-&quot;</span>)</div><div class="line"><a name="l10172"></a><span class="lineno">10172</span>&#160; {</div><div class="line"><a name="l10173"></a><span class="lineno">10173</span>&#160; <span class="comment">// special case: append to back</span></div><div class="line"><a name="l10174"></a><span class="lineno">10174</span>&#160; parent.<a class="code" href="classnlohmann_1_1basic__json_a486b96adbf4886c38e38c952394a220f.html#a486b96adbf4886c38e38c952394a220f">push_back</a>(val);</div><div class="line"><a name="l10175"></a><span class="lineno">10175</span>&#160; }</div><div class="line"><a name="l10176"></a><span class="lineno">10176</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l10177"></a><span class="lineno">10177</span>&#160; {</div><div class="line"><a name="l10178"></a><span class="lineno">10178</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> idx = std::stoi(last_path);</div><div class="line"><a name="l10179"></a><span class="lineno">10179</span>&#160; <span class="keywordflow">if</span> (static_cast&lt;size_type&gt;(idx) &gt; parent.<a class="code" href="classnlohmann_1_1basic__json_a0ea8a1ecca4b3cb0ba09ad7552c364b6.html#a0ea8a1ecca4b3cb0ba09ad7552c364b6">size</a>())</div><div class="line"><a name="l10180"></a><span class="lineno">10180</span>&#160; {</div><div class="line"><a name="l10181"></a><span class="lineno">10181</span>&#160; <span class="comment">// avoid undefined behavior</span></div><div class="line"><a name="l10182"></a><span class="lineno">10182</span>&#160; <span class="keywordflow">throw</span> std::out_of_range(<span class="stringliteral">&quot;array index &quot;</span> + std::to_string(idx) + <span class="stringliteral">&quot; is out of range&quot;</span>);</div><div class="line"><a name="l10183"></a><span class="lineno">10183</span>&#160; }</div><div class="line"><a name="l10184"></a><span class="lineno">10184</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l10185"></a><span class="lineno">10185</span>&#160; {</div><div class="line"><a name="l10186"></a><span class="lineno">10186</span>&#160; <span class="comment">// default case: insert add offset</span></div><div class="line"><a name="l10187"></a><span class="lineno">10187</span>&#160; parent.<a class="code" href="classnlohmann_1_1basic__json_a7f7bbb3a9efef2e2442f538a24c1c47b.html#a7f7bbb3a9efef2e2442f538a24c1c47b">insert</a>(parent.<a class="code" href="classnlohmann_1_1basic__json_ad4e381c54039607be08d7af41a1f6ad1.html#ad4e381c54039607be08d7af41a1f6ad1">begin</a>() + <span class="keyword">static_cast&lt;</span><a class="code" href="classnlohmann_1_1basic__json_aec316934a555dd1acdd3600e5d4a4cdf.html#aec316934a555dd1acdd3600e5d4a4cdf">difference_type</a><span class="keyword">&gt;</span>(idx), val);</div><div class="line"><a name="l10188"></a><span class="lineno">10188</span>&#160; }</div><div class="line"><a name="l10189"></a><span class="lineno">10189</span>&#160; }</div><div class="line"><a name="l10190"></a><span class="lineno">10190</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l10191"></a><span class="lineno">10191</span>&#160; }</div><div class="line"><a name="l10192"></a><span class="lineno">10192</span>&#160;</div><div class="line"><a name="l10193"></a><span class="lineno">10193</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l10194"></a><span class="lineno">10194</span>&#160; {</div><div class="line"><a name="l10195"></a><span class="lineno">10195</span>&#160; <span class="comment">// if there exists a parent it cannot be primitive</span></div><div class="line"><a name="l10196"></a><span class="lineno">10196</span>&#160; assert(<span class="keyword">false</span>); <span class="comment">// LCOV_EXCL_LINE</span></div><div class="line"><a name="l10197"></a><span class="lineno">10197</span>&#160; }</div><div class="line"><a name="l10198"></a><span class="lineno">10198</span>&#160; }</div><div class="line"><a name="l10199"></a><span class="lineno">10199</span>&#160; }</div><div class="line"><a name="l10200"></a><span class="lineno">10200</span>&#160; };</div><div class="line"><a name="l10201"></a><span class="lineno">10201</span>&#160;</div><div class="line"><a name="l10202"></a><span class="lineno">10202</span>&#160; <span class="comment">// wrapper for &quot;remove&quot; operation; remove value at ptr</span></div><div class="line"><a name="l10203"></a><span class="lineno">10203</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> operation_remove = [&amp;result](<a class="code" href="classnlohmann_1_1basic__json_1_1json__pointer.html">json_pointer</a> &amp; ptr)</div><div class="line"><a name="l10204"></a><span class="lineno">10204</span>&#160; {</div><div class="line"><a name="l10205"></a><span class="lineno">10205</span>&#160; <span class="comment">// get reference to parent of JSON pointer ptr</span></div><div class="line"><a name="l10206"></a><span class="lineno">10206</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> last_path = ptr.pop_back();</div><div class="line"><a name="l10207"></a><span class="lineno">10207</span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a>&amp; parent = result.<a class="code" href="classnlohmann_1_1basic__json_a214a8c22d616fd3567b88932c07436c9.html#a214a8c22d616fd3567b88932c07436c9">at</a>(ptr);</div><div class="line"><a name="l10208"></a><span class="lineno">10208</span>&#160;</div><div class="line"><a name="l10209"></a><span class="lineno">10209</span>&#160; <span class="comment">// remove child</span></div><div class="line"><a name="l10210"></a><span class="lineno">10210</span>&#160; <span class="keywordflow">if</span> (parent.<a class="code" href="classnlohmann_1_1basic__json_a94ba313c00f1713fa4be85de64083754.html#a94ba313c00f1713fa4be85de64083754">is_object</a>())</div><div class="line"><a name="l10211"></a><span class="lineno">10211</span>&#160; {</div><div class="line"><a name="l10212"></a><span class="lineno">10212</span>&#160; <span class="comment">// perform range check</span></div><div class="line"><a name="l10213"></a><span class="lineno">10213</span>&#160; <span class="keyword">auto</span> it = parent.<a class="code" href="classnlohmann_1_1basic__json_affe7e160e7bb06eed83c8b437af4692f.html#affe7e160e7bb06eed83c8b437af4692f">find</a>(last_path);</div><div class="line"><a name="l10214"></a><span class="lineno">10214</span>&#160; <span class="keywordflow">if</span> (it != parent.<a class="code" href="classnlohmann_1_1basic__json_a12ccf14d39ddae52f6c7e126105a230b.html#a12ccf14d39ddae52f6c7e126105a230b">end</a>())</div><div class="line"><a name="l10215"></a><span class="lineno">10215</span>&#160; {</div><div class="line"><a name="l10216"></a><span class="lineno">10216</span>&#160; parent.<a class="code" href="classnlohmann_1_1basic__json_ab9f8c9a02d6bb794ee26801a232ca4f4.html#ab9f8c9a02d6bb794ee26801a232ca4f4">erase</a>(it);</div><div class="line"><a name="l10217"></a><span class="lineno">10217</span>&#160; }</div><div class="line"><a name="l10218"></a><span class="lineno">10218</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l10219"></a><span class="lineno">10219</span>&#160; {</div><div class="line"><a name="l10220"></a><span class="lineno">10220</span>&#160; <span class="keywordflow">throw</span> std::out_of_range(<span class="stringliteral">&quot;key &#39;&quot;</span> + last_path + <span class="stringliteral">&quot;&#39; not found&quot;</span>);</div><div class="line"><a name="l10221"></a><span class="lineno">10221</span>&#160; }</div><div class="line"><a name="l10222"></a><span class="lineno">10222</span>&#160; }</div><div class="line"><a name="l10223"></a><span class="lineno">10223</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (parent.<a class="code" href="classnlohmann_1_1basic__json_a256a4cef002023acab3c9d75b569f54a.html#a256a4cef002023acab3c9d75b569f54a">is_array</a>())</div><div class="line"><a name="l10224"></a><span class="lineno">10224</span>&#160; {</div><div class="line"><a name="l10225"></a><span class="lineno">10225</span>&#160; <span class="comment">// note erase performs range check</span></div><div class="line"><a name="l10226"></a><span class="lineno">10226</span>&#160; parent.<a class="code" href="classnlohmann_1_1basic__json_ab9f8c9a02d6bb794ee26801a232ca4f4.html#ab9f8c9a02d6bb794ee26801a232ca4f4">erase</a>(static_cast&lt;size_type&gt;(std::stoi(last_path)));</div><div class="line"><a name="l10227"></a><span class="lineno">10227</span>&#160; }</div><div class="line"><a name="l10228"></a><span class="lineno">10228</span>&#160; };</div><div class="line"><a name="l10229"></a><span class="lineno">10229</span>&#160;</div><div class="line"><a name="l10230"></a><span class="lineno">10230</span>&#160; <span class="comment">// type check</span></div><div class="line"><a name="l10231"></a><span class="lineno">10231</span>&#160; <span class="keywordflow">if</span> (not json_patch.<a class="code" href="classnlohmann_1_1basic__json_a256a4cef002023acab3c9d75b569f54a.html#a256a4cef002023acab3c9d75b569f54a">is_array</a>())</div><div class="line"><a name="l10232"></a><span class="lineno">10232</span>&#160; {</div><div class="line"><a name="l10233"></a><span class="lineno">10233</span>&#160; <span class="comment">// a JSON patch must be an array of objects</span></div><div class="line"><a name="l10234"></a><span class="lineno">10234</span>&#160; <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;JSON patch must be an array of objects&quot;</span>);</div><div class="line"><a name="l10235"></a><span class="lineno">10235</span>&#160; }</div><div class="line"><a name="l10236"></a><span class="lineno">10236</span>&#160;</div><div class="line"><a name="l10237"></a><span class="lineno">10237</span>&#160; <span class="comment">// iterate and apply th eoperations</span></div><div class="line"><a name="l10238"></a><span class="lineno">10238</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; val : json_patch)</div><div class="line"><a name="l10239"></a><span class="lineno">10239</span>&#160; {</div><div class="line"><a name="l10240"></a><span class="lineno">10240</span>&#160; <span class="comment">// wrapper to get a value for an operation</span></div><div class="line"><a name="l10241"></a><span class="lineno">10241</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> get_value = [&amp;val](<span class="keyword">const</span> std::string &amp; op,</div><div class="line"><a name="l10242"></a><span class="lineno">10242</span>&#160; <span class="keyword">const</span> std::string &amp; member,</div><div class="line"><a name="l10243"></a><span class="lineno">10243</span>&#160; <span class="keywordtype">bool</span> string_type) -&gt; <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a>&amp;</div><div class="line"><a name="l10244"></a><span class="lineno">10244</span>&#160; {</div><div class="line"><a name="l10245"></a><span class="lineno">10245</span>&#160; <span class="comment">// find value</span></div><div class="line"><a name="l10246"></a><span class="lineno">10246</span>&#160; <span class="keyword">auto</span> it = val.m_value.object-&gt;find(member);</div><div class="line"><a name="l10247"></a><span class="lineno">10247</span>&#160;</div><div class="line"><a name="l10248"></a><span class="lineno">10248</span>&#160; <span class="comment">// context-sensitive error message</span></div><div class="line"><a name="l10249"></a><span class="lineno">10249</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> error_msg = (op == <span class="stringliteral">&quot;op&quot;</span>) ? <span class="stringliteral">&quot;operation&quot;</span> : <span class="stringliteral">&quot;operation &#39;&quot;</span> + op + <span class="stringliteral">&quot;&#39;&quot;</span>;</div><div class="line"><a name="l10250"></a><span class="lineno">10250</span>&#160;</div><div class="line"><a name="l10251"></a><span class="lineno">10251</span>&#160; <span class="comment">// check if desired value is present</span></div><div class="line"><a name="l10252"></a><span class="lineno">10252</span>&#160; <span class="keywordflow">if</span> (it == val.m_value.object-&gt;end())</div><div class="line"><a name="l10253"></a><span class="lineno">10253</span>&#160; {</div><div class="line"><a name="l10254"></a><span class="lineno">10254</span>&#160; <span class="keywordflow">throw</span> std::invalid_argument(error_msg + <span class="stringliteral">&quot; must have member &#39;&quot;</span> + member + <span class="stringliteral">&quot;&#39;&quot;</span>);</div><div class="line"><a name="l10255"></a><span class="lineno">10255</span>&#160; }</div><div class="line"><a name="l10256"></a><span class="lineno">10256</span>&#160;</div><div class="line"><a name="l10257"></a><span class="lineno">10257</span>&#160; <span class="comment">// check if result is of type string</span></div><div class="line"><a name="l10258"></a><span class="lineno">10258</span>&#160; <span class="keywordflow">if</span> (string_type and not it-&gt;second.is_string())</div><div class="line"><a name="l10259"></a><span class="lineno">10259</span>&#160; {</div><div class="line"><a name="l10260"></a><span class="lineno">10260</span>&#160; <span class="keywordflow">throw</span> std::invalid_argument(error_msg + <span class="stringliteral">&quot; must have string member &#39;&quot;</span> + member + <span class="stringliteral">&quot;&#39;&quot;</span>);</div><div class="line"><a name="l10261"></a><span class="lineno">10261</span>&#160; }</div><div class="line"><a name="l10262"></a><span class="lineno">10262</span>&#160;</div><div class="line"><a name="l10263"></a><span class="lineno">10263</span>&#160; <span class="comment">// no error: return value</span></div><div class="line"><a name="l10264"></a><span class="lineno">10264</span>&#160; <span class="keywordflow">return</span> it-&gt;second;</div><div class="line"><a name="l10265"></a><span class="lineno">10265</span>&#160; };</div><div class="line"><a name="l10266"></a><span class="lineno">10266</span>&#160;</div><div class="line"><a name="l10267"></a><span class="lineno">10267</span>&#160; <span class="comment">// type check</span></div><div class="line"><a name="l10268"></a><span class="lineno">10268</span>&#160; <span class="keywordflow">if</span> (not val.is_object())</div><div class="line"><a name="l10269"></a><span class="lineno">10269</span>&#160; {</div><div class="line"><a name="l10270"></a><span class="lineno">10270</span>&#160; <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;JSON patch must be an array of objects&quot;</span>);</div><div class="line"><a name="l10271"></a><span class="lineno">10271</span>&#160; }</div><div class="line"><a name="l10272"></a><span class="lineno">10272</span>&#160;</div><div class="line"><a name="l10273"></a><span class="lineno">10273</span>&#160; <span class="comment">// collect mandatory members</span></div><div class="line"><a name="l10274"></a><span class="lineno">10274</span>&#160; <span class="keyword">const</span> std::string op = get_value(<span class="stringliteral">&quot;op&quot;</span>, <span class="stringliteral">&quot;op&quot;</span>, <span class="keyword">true</span>);</div><div class="line"><a name="l10275"></a><span class="lineno">10275</span>&#160; <span class="keyword">const</span> std::string path = get_value(op, <span class="stringliteral">&quot;path&quot;</span>, <span class="keyword">true</span>);</div><div class="line"><a name="l10276"></a><span class="lineno">10276</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1json__pointer.html">json_pointer</a> ptr(path);</div><div class="line"><a name="l10277"></a><span class="lineno">10277</span>&#160;</div><div class="line"><a name="l10278"></a><span class="lineno">10278</span>&#160; <span class="keywordflow">switch</span> (get_op(op))</div><div class="line"><a name="l10279"></a><span class="lineno">10279</span>&#160; {</div><div class="line"><a name="l10280"></a><span class="lineno">10280</span>&#160; <span class="keywordflow">case</span> patch_operations::add:</div><div class="line"><a name="l10281"></a><span class="lineno">10281</span>&#160; {</div><div class="line"><a name="l10282"></a><span class="lineno">10282</span>&#160; operation_add(ptr, get_value(<span class="stringliteral">&quot;add&quot;</span>, <span class="stringliteral">&quot;value&quot;</span>, <span class="keyword">false</span>));</div><div class="line"><a name="l10283"></a><span class="lineno">10283</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l10284"></a><span class="lineno">10284</span>&#160; }</div><div class="line"><a name="l10285"></a><span class="lineno">10285</span>&#160;</div><div class="line"><a name="l10286"></a><span class="lineno">10286</span>&#160; <span class="keywordflow">case</span> patch_operations::remove:</div><div class="line"><a name="l10287"></a><span class="lineno">10287</span>&#160; {</div><div class="line"><a name="l10288"></a><span class="lineno">10288</span>&#160; operation_remove(ptr);</div><div class="line"><a name="l10289"></a><span class="lineno">10289</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l10290"></a><span class="lineno">10290</span>&#160; }</div><div class="line"><a name="l10291"></a><span class="lineno">10291</span>&#160;</div><div class="line"><a name="l10292"></a><span class="lineno">10292</span>&#160; <span class="keywordflow">case</span> patch_operations::replace:</div><div class="line"><a name="l10293"></a><span class="lineno">10293</span>&#160; {</div><div class="line"><a name="l10294"></a><span class="lineno">10294</span>&#160; <span class="comment">// the &quot;path&quot; location must exist - use at()</span></div><div class="line"><a name="l10295"></a><span class="lineno">10295</span>&#160; result.<a class="code" href="classnlohmann_1_1basic__json_a214a8c22d616fd3567b88932c07436c9.html#a214a8c22d616fd3567b88932c07436c9">at</a>(ptr) = get_value(<span class="stringliteral">&quot;replace&quot;</span>, <span class="stringliteral">&quot;value&quot;</span>, <span class="keyword">false</span>);</div><div class="line"><a name="l10296"></a><span class="lineno">10296</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l10297"></a><span class="lineno">10297</span>&#160; }</div><div class="line"><a name="l10298"></a><span class="lineno">10298</span>&#160;</div><div class="line"><a name="l10299"></a><span class="lineno">10299</span>&#160; <span class="keywordflow">case</span> patch_operations::move:</div><div class="line"><a name="l10300"></a><span class="lineno">10300</span>&#160; {</div><div class="line"><a name="l10301"></a><span class="lineno">10301</span>&#160; <span class="keyword">const</span> std::string from_path = get_value(<span class="stringliteral">&quot;move&quot;</span>, <span class="stringliteral">&quot;from&quot;</span>, <span class="keyword">true</span>);</div><div class="line"><a name="l10302"></a><span class="lineno">10302</span>&#160; <a class="code" href="classnlohmann_1_1basic__json_1_1json__pointer.html">json_pointer</a> from_ptr(from_path);</div><div class="line"><a name="l10303"></a><span class="lineno">10303</span>&#160;</div><div class="line"><a name="l10304"></a><span class="lineno">10304</span>&#160; <span class="comment">// the &quot;from&quot; location must exist - use at()</span></div><div class="line"><a name="l10305"></a><span class="lineno">10305</span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a> v = result.<a class="code" href="classnlohmann_1_1basic__json_a214a8c22d616fd3567b88932c07436c9.html#a214a8c22d616fd3567b88932c07436c9">at</a>(from_ptr);</div><div class="line"><a name="l10306"></a><span class="lineno">10306</span>&#160;</div><div class="line"><a name="l10307"></a><span class="lineno">10307</span>&#160; <span class="comment">// The move operation is functionally identical to a</span></div><div class="line"><a name="l10308"></a><span class="lineno">10308</span>&#160; <span class="comment">// &quot;remove&quot; operation on the &quot;from&quot; location, followed</span></div><div class="line"><a name="l10309"></a><span class="lineno">10309</span>&#160; <span class="comment">// immediately by an &quot;add&quot; operation at the target</span></div><div class="line"><a name="l10310"></a><span class="lineno">10310</span>&#160; <span class="comment">// location with the value that was just removed.</span></div><div class="line"><a name="l10311"></a><span class="lineno">10311</span>&#160; operation_remove(from_ptr);</div><div class="line"><a name="l10312"></a><span class="lineno">10312</span>&#160; operation_add(ptr, v);</div><div class="line"><a name="l10313"></a><span class="lineno">10313</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l10314"></a><span class="lineno">10314</span>&#160; }</div><div class="line"><a name="l10315"></a><span class="lineno">10315</span>&#160;</div><div class="line"><a name="l10316"></a><span class="lineno">10316</span>&#160; <span class="keywordflow">case</span> patch_operations::copy:</div><div class="line"><a name="l10317"></a><span class="lineno">10317</span>&#160; {</div><div class="line"><a name="l10318"></a><span class="lineno">10318</span>&#160; <span class="keyword">const</span> std::string from_path = get_value(<span class="stringliteral">&quot;copy&quot;</span>, <span class="stringliteral">&quot;from&quot;</span>, <span class="keyword">true</span>);;</div><div class="line"><a name="l10319"></a><span class="lineno">10319</span>&#160; <span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json_1_1json__pointer.html">json_pointer</a> from_ptr(from_path);</div><div class="line"><a name="l10320"></a><span class="lineno">10320</span>&#160;</div><div class="line"><a name="l10321"></a><span class="lineno">10321</span>&#160; <span class="comment">// the &quot;from&quot; location must exist - use at()</span></div><div class="line"><a name="l10322"></a><span class="lineno">10322</span>&#160; result[ptr] = result.<a class="code" href="classnlohmann_1_1basic__json_a214a8c22d616fd3567b88932c07436c9.html#a214a8c22d616fd3567b88932c07436c9">at</a>(from_ptr);</div><div class="line"><a name="l10323"></a><span class="lineno">10323</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l10324"></a><span class="lineno">10324</span>&#160; }</div><div class="line"><a name="l10325"></a><span class="lineno">10325</span>&#160;</div><div class="line"><a name="l10326"></a><span class="lineno">10326</span>&#160; <span class="keywordflow">case</span> patch_operations::test:</div><div class="line"><a name="l10327"></a><span class="lineno">10327</span>&#160; {</div><div class="line"><a name="l10328"></a><span class="lineno">10328</span>&#160; <span class="keywordtype">bool</span> success = <span class="keyword">false</span>;</div><div class="line"><a name="l10329"></a><span class="lineno">10329</span>&#160; <span class="keywordflow">try</span></div><div class="line"><a name="l10330"></a><span class="lineno">10330</span>&#160; {</div><div class="line"><a name="l10331"></a><span class="lineno">10331</span>&#160; <span class="comment">// check if &quot;value&quot; matches the one at &quot;path&quot;</span></div><div class="line"><a name="l10332"></a><span class="lineno">10332</span>&#160; <span class="comment">// the &quot;path&quot; location must exist - use at()</span></div><div class="line"><a name="l10333"></a><span class="lineno">10333</span>&#160; success = (result.<a class="code" href="classnlohmann_1_1basic__json_a214a8c22d616fd3567b88932c07436c9.html#a214a8c22d616fd3567b88932c07436c9">at</a>(ptr) == get_value(<span class="stringliteral">&quot;test&quot;</span>, <span class="stringliteral">&quot;value&quot;</span>, <span class="keyword">false</span>));</div><div class="line"><a name="l10334"></a><span class="lineno">10334</span>&#160; }</div><div class="line"><a name="l10335"></a><span class="lineno">10335</span>&#160; <span class="keywordflow">catch</span> (std::out_of_range&amp;)</div><div class="line"><a name="l10336"></a><span class="lineno">10336</span>&#160; {</div><div class="line"><a name="l10337"></a><span class="lineno">10337</span>&#160; <span class="comment">// ignore out of range errors: success remains false</span></div><div class="line"><a name="l10338"></a><span class="lineno">10338</span>&#160; }</div><div class="line"><a name="l10339"></a><span class="lineno">10339</span>&#160;</div><div class="line"><a name="l10340"></a><span class="lineno">10340</span>&#160; <span class="comment">// throw an exception if test fails</span></div><div class="line"><a name="l10341"></a><span class="lineno">10341</span>&#160; <span class="keywordflow">if</span> (not success)</div><div class="line"><a name="l10342"></a><span class="lineno">10342</span>&#160; {</div><div class="line"><a name="l10343"></a><span class="lineno">10343</span>&#160; <span class="keywordflow">throw</span> std::domain_error(<span class="stringliteral">&quot;unsuccessful: &quot;</span> + val.dump());</div><div class="line"><a name="l10344"></a><span class="lineno">10344</span>&#160; }</div><div class="line"><a name="l10345"></a><span class="lineno">10345</span>&#160;</div><div class="line"><a name="l10346"></a><span class="lineno">10346</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l10347"></a><span class="lineno">10347</span>&#160; }</div><div class="line"><a name="l10348"></a><span class="lineno">10348</span>&#160;</div><div class="line"><a name="l10349"></a><span class="lineno">10349</span>&#160; <span class="keywordflow">case</span> patch_operations::invalid:</div><div class="line"><a name="l10350"></a><span class="lineno">10350</span>&#160; {</div><div class="line"><a name="l10351"></a><span class="lineno">10351</span>&#160; <span class="comment">// op must be &quot;add&quot;, &quot;remove&quot;, &quot;replace&quot;, &quot;move&quot;, &quot;copy&quot;, or</span></div><div class="line"><a name="l10352"></a><span class="lineno">10352</span>&#160; <span class="comment">// &quot;test&quot;</span></div><div class="line"><a name="l10353"></a><span class="lineno">10353</span>&#160; <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;operation value &#39;&quot;</span> + op + <span class="stringliteral">&quot;&#39; is invalid&quot;</span>);</div><div class="line"><a name="l10354"></a><span class="lineno">10354</span>&#160; }</div><div class="line"><a name="l10355"></a><span class="lineno">10355</span>&#160; }</div><div class="line"><a name="l10356"></a><span class="lineno">10356</span>&#160; }</div><div class="line"><a name="l10357"></a><span class="lineno">10357</span>&#160;</div><div class="line"><a name="l10358"></a><span class="lineno">10358</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l10359"></a><span class="lineno">10359</span>&#160; }</div><div class="line"><a name="l10360"></a><span class="lineno">10360</span>&#160;</div><div class="line"><a name="l10393"></a><span class="lineno">10393</span>&#160; <span class="keyword">static</span> <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a> diff(<span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a>&amp; source,</div><div class="line"><a name="l10394"></a><span class="lineno">10394</span>&#160; <span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a>&amp; target,</div><div class="line"><a name="l10395"></a><span class="lineno">10395</span>&#160; <span class="keyword">const</span> std::string&amp; path = <span class="stringliteral">&quot;&quot;</span>)</div><div class="line"><a name="l10396"></a><span class="lineno">10396</span>&#160; {</div><div class="line"><a name="l10397"></a><span class="lineno"><a class="line" href="classnlohmann_1_1basic__json_a5ef1934868b90452a4a34695489c60cd.html#a5ef1934868b90452a4a34695489c60cd">10397</a></span>&#160; <span class="comment">// the patch</span></div><div class="line"><a name="l10398"></a><span class="lineno">10398</span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">basic_json</a> result(value_t::array);</div><div class="line"><a name="l10399"></a><span class="lineno">10399</span>&#160;</div><div class="line"><a name="l10400"></a><span class="lineno">10400</span>&#160; <span class="comment">// if the values are the same, return empty patch</span></div><div class="line"><a name="l10401"></a><span class="lineno">10401</span>&#160; <span class="keywordflow">if</span> (source == target)</div><div class="line"><a name="l10402"></a><span class="lineno">10402</span>&#160; {</div><div class="line"><a name="l10403"></a><span class="lineno">10403</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l10404"></a><span class="lineno">10404</span>&#160; }</div><div class="line"><a name="l10405"></a><span class="lineno">10405</span>&#160;</div><div class="line"><a name="l10406"></a><span class="lineno">10406</span>&#160; <span class="keywordflow">if</span> (source.<a class="code" href="classnlohmann_1_1basic__json_a5d466b240d0ba9f648d7fd4ff42359f5.html#a5d466b240d0ba9f648d7fd4ff42359f5">type</a>() != target.<a class="code" href="classnlohmann_1_1basic__json_a5d466b240d0ba9f648d7fd4ff42359f5.html#a5d466b240d0ba9f648d7fd4ff42359f5">type</a>())</div><div class="line"><a name="l10407"></a><span class="lineno">10407</span>&#160; {</div><div class="line"><a name="l10408"></a><span class="lineno">10408</span>&#160; <span class="comment">// different types: replace value</span></div><div class="line"><a name="l10409"></a><span class="lineno">10409</span>&#160; result.push_back(</div><div class="line"><a name="l10410"></a><span class="lineno">10410</span>&#160; {</div><div class="line"><a name="l10411"></a><span class="lineno">10411</span>&#160; {<span class="stringliteral">&quot;op&quot;</span>, <span class="stringliteral">&quot;replace&quot;</span>},</div><div class="line"><a name="l10412"></a><span class="lineno">10412</span>&#160; {<span class="stringliteral">&quot;path&quot;</span>, path},</div><div class="line"><a name="l10413"></a><span class="lineno">10413</span>&#160; {<span class="stringliteral">&quot;value&quot;</span>, target}</div><div class="line"><a name="l10414"></a><span class="lineno">10414</span>&#160; });</div><div class="line"><a name="l10415"></a><span class="lineno">10415</span>&#160; }</div><div class="line"><a name="l10416"></a><span class="lineno">10416</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l10417"></a><span class="lineno">10417</span>&#160; {</div><div class="line"><a name="l10418"></a><span class="lineno">10418</span>&#160; <span class="keywordflow">switch</span> (source.<a class="code" href="classnlohmann_1_1basic__json_a5d466b240d0ba9f648d7fd4ff42359f5.html#a5d466b240d0ba9f648d7fd4ff42359f5">type</a>())</div><div class="line"><a name="l10419"></a><span class="lineno">10419</span>&#160; {</div><div class="line"><a name="l10420"></a><span class="lineno">10420</span>&#160; <span class="keywordflow">case</span> value_t::array:</div><div class="line"><a name="l10421"></a><span class="lineno">10421</span>&#160; {</div><div class="line"><a name="l10422"></a><span class="lineno">10422</span>&#160; <span class="comment">// first pass: traverse common elements</span></div><div class="line"><a name="l10423"></a><span class="lineno">10423</span>&#160; <span class="keywordtype">size_t</span> i = 0;</div><div class="line"><a name="l10424"></a><span class="lineno">10424</span>&#160; <span class="keywordflow">while</span> (i &lt; source.<a class="code" href="classnlohmann_1_1basic__json_a0ea8a1ecca4b3cb0ba09ad7552c364b6.html#a0ea8a1ecca4b3cb0ba09ad7552c364b6">size</a>() and i &lt; target.<a class="code" href="classnlohmann_1_1basic__json_a0ea8a1ecca4b3cb0ba09ad7552c364b6.html#a0ea8a1ecca4b3cb0ba09ad7552c364b6">size</a>())</div><div class="line"><a name="l10425"></a><span class="lineno">10425</span>&#160; {</div><div class="line"><a name="l10426"></a><span class="lineno">10426</span>&#160; <span class="comment">// recursive call to compare array values at index i</span></div><div class="line"><a name="l10427"></a><span class="lineno">10427</span>&#160; <span class="keyword">auto</span> temp_diff = diff(source[i], target[i], path + <span class="stringliteral">&quot;/&quot;</span> + std::to_string(i));</div><div class="line"><a name="l10428"></a><span class="lineno">10428</span>&#160; result.insert(result.end(), temp_diff.begin(), temp_diff.end());</div><div class="line"><a name="l10429"></a><span class="lineno">10429</span>&#160; ++i;</div><div class="line"><a name="l10430"></a><span class="lineno">10430</span>&#160; }</div><div class="line"><a name="l10431"></a><span class="lineno">10431</span>&#160;</div><div class="line"><a name="l10432"></a><span class="lineno">10432</span>&#160; <span class="comment">// i now reached the end of at least one array</span></div><div class="line"><a name="l10433"></a><span class="lineno">10433</span>&#160; <span class="comment">// in a second pass, traverse the remaining elements</span></div><div class="line"><a name="l10434"></a><span class="lineno">10434</span>&#160;</div><div class="line"><a name="l10435"></a><span class="lineno">10435</span>&#160; <span class="comment">// remove my remaining elements</span></div><div class="line"><a name="l10436"></a><span class="lineno">10436</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> end_index = <span class="keyword">static_cast&lt;</span><a class="code" href="classnlohmann_1_1basic__json_aec316934a555dd1acdd3600e5d4a4cdf.html#aec316934a555dd1acdd3600e5d4a4cdf">difference_type</a><span class="keyword">&gt;</span>(result.size());</div><div class="line"><a name="l10437"></a><span class="lineno">10437</span>&#160; <span class="keywordflow">while</span> (i &lt; source.<a class="code" href="classnlohmann_1_1basic__json_a0ea8a1ecca4b3cb0ba09ad7552c364b6.html#a0ea8a1ecca4b3cb0ba09ad7552c364b6">size</a>())</div><div class="line"><a name="l10438"></a><span class="lineno">10438</span>&#160; {</div><div class="line"><a name="l10439"></a><span class="lineno">10439</span>&#160; <span class="comment">// add operations in reverse order to avoid invalid</span></div><div class="line"><a name="l10440"></a><span class="lineno">10440</span>&#160; <span class="comment">// indices</span></div><div class="line"><a name="l10441"></a><span class="lineno">10441</span>&#160; result.insert(result.begin() + end_index, object(</div><div class="line"><a name="l10442"></a><span class="lineno">10442</span>&#160; {</div><div class="line"><a name="l10443"></a><span class="lineno">10443</span>&#160; {<span class="stringliteral">&quot;op&quot;</span>, <span class="stringliteral">&quot;remove&quot;</span>},</div><div class="line"><a name="l10444"></a><span class="lineno">10444</span>&#160; {<span class="stringliteral">&quot;path&quot;</span>, path + <span class="stringliteral">&quot;/&quot;</span> + std::to_string(i)}</div><div class="line"><a name="l10445"></a><span class="lineno">10445</span>&#160; }));</div><div class="line"><a name="l10446"></a><span class="lineno">10446</span>&#160; ++i;</div><div class="line"><a name="l10447"></a><span class="lineno">10447</span>&#160; }</div><div class="line"><a name="l10448"></a><span class="lineno">10448</span>&#160;</div><div class="line"><a name="l10449"></a><span class="lineno">10449</span>&#160; <span class="comment">// add other remaining elements</span></div><div class="line"><a name="l10450"></a><span class="lineno">10450</span>&#160; <span class="keywordflow">while</span> (i &lt; target.<a class="code" href="classnlohmann_1_1basic__json_a0ea8a1ecca4b3cb0ba09ad7552c364b6.html#a0ea8a1ecca4b3cb0ba09ad7552c364b6">size</a>())</div><div class="line"><a name="l10451"></a><span class="lineno">10451</span>&#160; {</div><div class="line"><a name="l10452"></a><span class="lineno">10452</span>&#160; result.push_back(</div><div class="line"><a name="l10453"></a><span class="lineno">10453</span>&#160; {</div><div class="line"><a name="l10454"></a><span class="lineno">10454</span>&#160; {<span class="stringliteral">&quot;op&quot;</span>, <span class="stringliteral">&quot;add&quot;</span>},</div><div class="line"><a name="l10455"></a><span class="lineno">10455</span>&#160; {<span class="stringliteral">&quot;path&quot;</span>, path + <span class="stringliteral">&quot;/&quot;</span> + std::to_string(i)},</div><div class="line"><a name="l10456"></a><span class="lineno">10456</span>&#160; {<span class="stringliteral">&quot;value&quot;</span>, target[i]}</div><div class="line"><a name="l10457"></a><span class="lineno">10457</span>&#160; });</div><div class="line"><a name="l10458"></a><span class="lineno">10458</span>&#160; ++i;</div><div class="line"><a name="l10459"></a><span class="lineno">10459</span>&#160; }</div><div class="line"><a name="l10460"></a><span class="lineno">10460</span>&#160;</div><div class="line"><a name="l10461"></a><span class="lineno">10461</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l10462"></a><span class="lineno">10462</span>&#160; }</div><div class="line"><a name="l10463"></a><span class="lineno">10463</span>&#160;</div><div class="line"><a name="l10464"></a><span class="lineno">10464</span>&#160; <span class="keywordflow">case</span> value_t::object:</div><div class="line"><a name="l10465"></a><span class="lineno">10465</span>&#160; {</div><div class="line"><a name="l10466"></a><span class="lineno">10466</span>&#160; <span class="comment">// first pass: traverse this object&#39;s elements</span></div><div class="line"><a name="l10467"></a><span class="lineno">10467</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = source.<a class="code" href="classnlohmann_1_1basic__json_ad4e381c54039607be08d7af41a1f6ad1.html#ad4e381c54039607be08d7af41a1f6ad1">begin</a>(); it != source.<a class="code" href="classnlohmann_1_1basic__json_a12ccf14d39ddae52f6c7e126105a230b.html#a12ccf14d39ddae52f6c7e126105a230b">end</a>(); ++it)</div><div class="line"><a name="l10468"></a><span class="lineno">10468</span>&#160; {</div><div class="line"><a name="l10469"></a><span class="lineno">10469</span>&#160; <span class="comment">// escape the key name to be used in a JSON patch</span></div><div class="line"><a name="l10470"></a><span class="lineno">10470</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> key = json_pointer::escape(it.key());</div><div class="line"><a name="l10471"></a><span class="lineno">10471</span>&#160;</div><div class="line"><a name="l10472"></a><span class="lineno">10472</span>&#160; <span class="keywordflow">if</span> (target.<a class="code" href="classnlohmann_1_1basic__json_affe7e160e7bb06eed83c8b437af4692f.html#affe7e160e7bb06eed83c8b437af4692f">find</a>(it.key()) != target.<a class="code" href="classnlohmann_1_1basic__json_a12ccf14d39ddae52f6c7e126105a230b.html#a12ccf14d39ddae52f6c7e126105a230b">end</a>())</div><div class="line"><a name="l10473"></a><span class="lineno">10473</span>&#160; {</div><div class="line"><a name="l10474"></a><span class="lineno">10474</span>&#160; <span class="comment">// recursive call to compare object values at key it</span></div><div class="line"><a name="l10475"></a><span class="lineno">10475</span>&#160; <span class="keyword">auto</span> temp_diff = diff(it.value(), target[it.key()], path + <span class="stringliteral">&quot;/&quot;</span> + key);</div><div class="line"><a name="l10476"></a><span class="lineno">10476</span>&#160; result.insert(result.end(), temp_diff.begin(), temp_diff.end());</div><div class="line"><a name="l10477"></a><span class="lineno">10477</span>&#160; }</div><div class="line"><a name="l10478"></a><span class="lineno">10478</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l10479"></a><span class="lineno">10479</span>&#160; {</div><div class="line"><a name="l10480"></a><span class="lineno">10480</span>&#160; <span class="comment">// found a key that is not in o -&gt; remove it</span></div><div class="line"><a name="l10481"></a><span class="lineno">10481</span>&#160; result.push_back(<span class="keywordtype">object</span>(</div><div class="line"><a name="l10482"></a><span class="lineno">10482</span>&#160; {</div><div class="line"><a name="l10483"></a><span class="lineno">10483</span>&#160; {<span class="stringliteral">&quot;op&quot;</span>, <span class="stringliteral">&quot;remove&quot;</span>},</div><div class="line"><a name="l10484"></a><span class="lineno">10484</span>&#160; {<span class="stringliteral">&quot;path&quot;</span>, path + <span class="stringliteral">&quot;/&quot;</span> + key}</div><div class="line"><a name="l10485"></a><span class="lineno">10485</span>&#160; }));</div><div class="line"><a name="l10486"></a><span class="lineno">10486</span>&#160; }</div><div class="line"><a name="l10487"></a><span class="lineno">10487</span>&#160; }</div><div class="line"><a name="l10488"></a><span class="lineno">10488</span>&#160;</div><div class="line"><a name="l10489"></a><span class="lineno">10489</span>&#160; <span class="comment">// second pass: traverse other object&#39;s elements</span></div><div class="line"><a name="l10490"></a><span class="lineno">10490</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = target.<a class="code" href="classnlohmann_1_1basic__json_ad4e381c54039607be08d7af41a1f6ad1.html#ad4e381c54039607be08d7af41a1f6ad1">begin</a>(); it != target.<a class="code" href="classnlohmann_1_1basic__json_a12ccf14d39ddae52f6c7e126105a230b.html#a12ccf14d39ddae52f6c7e126105a230b">end</a>(); ++it)</div><div class="line"><a name="l10491"></a><span class="lineno">10491</span>&#160; {</div><div class="line"><a name="l10492"></a><span class="lineno">10492</span>&#160; <span class="keywordflow">if</span> (source.<a class="code" href="classnlohmann_1_1basic__json_affe7e160e7bb06eed83c8b437af4692f.html#affe7e160e7bb06eed83c8b437af4692f">find</a>(it.key()) == source.<a class="code" href="classnlohmann_1_1basic__json_a12ccf14d39ddae52f6c7e126105a230b.html#a12ccf14d39ddae52f6c7e126105a230b">end</a>())</div><div class="line"><a name="l10493"></a><span class="lineno">10493</span>&#160; {</div><div class="line"><a name="l10494"></a><span class="lineno">10494</span>&#160; <span class="comment">// found a key that is not in this -&gt; add it</span></div><div class="line"><a name="l10495"></a><span class="lineno">10495</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> key = json_pointer::escape(it.key());</div><div class="line"><a name="l10496"></a><span class="lineno">10496</span>&#160; result.push_back(</div><div class="line"><a name="l10497"></a><span class="lineno">10497</span>&#160; {</div><div class="line"><a name="l10498"></a><span class="lineno">10498</span>&#160; {<span class="stringliteral">&quot;op&quot;</span>, <span class="stringliteral">&quot;add&quot;</span>},</div><div class="line"><a name="l10499"></a><span class="lineno">10499</span>&#160; {<span class="stringliteral">&quot;path&quot;</span>, path + <span class="stringliteral">&quot;/&quot;</span> + key},</div><div class="line"><a name="l10500"></a><span class="lineno">10500</span>&#160; {<span class="stringliteral">&quot;value&quot;</span>, it.value()}</div><div class="line"><a name="l10501"></a><span class="lineno">10501</span>&#160; });</div><div class="line"><a name="l10502"></a><span class="lineno">10502</span>&#160; }</div><div class="line"><a name="l10503"></a><span class="lineno">10503</span>&#160; }</div><div class="line"><a name="l10504"></a><span class="lineno">10504</span>&#160;</div><div class="line"><a name="l10505"></a><span class="lineno">10505</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l10506"></a><span class="lineno">10506</span>&#160; }</div><div class="line"><a name="l10507"></a><span class="lineno">10507</span>&#160;</div><div class="line"><a name="l10508"></a><span class="lineno">10508</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l10509"></a><span class="lineno">10509</span>&#160; {</div><div class="line"><a name="l10510"></a><span class="lineno">10510</span>&#160; <span class="comment">// both primitive type: replace value</span></div><div class="line"><a name="l10511"></a><span class="lineno">10511</span>&#160; result.push_back(</div><div class="line"><a name="l10512"></a><span class="lineno">10512</span>&#160; {</div><div class="line"><a name="l10513"></a><span class="lineno">10513</span>&#160; {<span class="stringliteral">&quot;op&quot;</span>, <span class="stringliteral">&quot;replace&quot;</span>},</div><div class="line"><a name="l10514"></a><span class="lineno">10514</span>&#160; {<span class="stringliteral">&quot;path&quot;</span>, path},</div><div class="line"><a name="l10515"></a><span class="lineno">10515</span>&#160; {<span class="stringliteral">&quot;value&quot;</span>, target}</div><div class="line"><a name="l10516"></a><span class="lineno">10516</span>&#160; });</div><div class="line"><a name="l10517"></a><span class="lineno">10517</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l10518"></a><span class="lineno">10518</span>&#160; }</div><div class="line"><a name="l10519"></a><span class="lineno">10519</span>&#160; }</div><div class="line"><a name="l10520"></a><span class="lineno">10520</span>&#160; }</div><div class="line"><a name="l10521"></a><span class="lineno">10521</span>&#160;</div><div class="line"><a name="l10522"></a><span class="lineno">10522</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l10523"></a><span class="lineno">10523</span>&#160; }</div><div class="line"><a name="l10524"></a><span class="lineno">10524</span>&#160;</div><div class="line"><a name="l10526"></a><span class="lineno">10526</span>&#160;};</div><div class="line"><a name="l10527"></a><span class="lineno">10527</span>&#160;</div><div class="line"><a name="l10528"></a><span class="lineno">10528</span>&#160;</div><div class="line"><a name="l10530"></a><span class="lineno">10530</span>&#160;<span class="comment">// presets //</span></div><div class="line"><a name="l10532"></a><span class="lineno">10532</span>&#160;<span class="comment"></span></div><div class="line"><a name="l10541"></a><span class="lineno">10541</span>&#160;<span class="keyword">using</span> <a class="code" href="classnlohmann_1_1basic__json.html">json</a> = <a class="code" href="classnlohmann_1_1basic__json.html">basic_json&lt;&gt;</a>;</div><div class="line"><a name="l10542"></a><span class="lineno">10542</span>&#160;}</div><div class="line"><a name="l10543"></a><span class="lineno">10543</span>&#160;</div><div class="line"><a name="l10544"></a><span class="lineno">10544</span>&#160;</div><div class="line"><a name="l10546"></a><span class="lineno">10546</span>&#160;<span class="comment">// nonmember support //</span></div><div class="line"><a name="l10548"></a><span class="lineno">10548</span>&#160;<span class="comment"></span></div><div class="line"><a name="l10549"></a><span class="lineno">10549</span>&#160;<span class="comment">// specialization of std::swap, and std::hash</span></div><div class="line"><a name="l10550"></a><span class="lineno">10550</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacestd.html">std</a></div><div class="line"><a name="l10551"></a><span class="lineno">10551</span>&#160;{</div><div class="line"><a name="l10557"></a><span class="lineno">10557</span>&#160;<span class="keyword">template</span>&lt;&gt;</div><div class="line"><a name="l10558"></a><span class="lineno">10558</span>&#160;<span class="keyword">inline</span> <span class="keywordtype">void</span> swap(<a class="code" href="classnlohmann_1_1basic__json.html">nlohmann::json</a>&amp; j1,</div><div class="line"><a name="l10559"></a><span class="lineno">10559</span>&#160; <a class="code" href="classnlohmann_1_1basic__json.html">nlohmann::json</a>&amp; j2) noexcept(</div><div class="line"><a name="l10560"></a><span class="lineno">10560</span>&#160; is_nothrow_move_constructible&lt;nlohmann::json&gt;::value and</div><div class="line"><a name="l10561"></a><span class="lineno">10561</span>&#160; is_nothrow_move_assignable&lt;nlohmann::json&gt;::value</div><div class="line"><a name="l10562"></a><span class="lineno">10562</span>&#160; )</div><div class="line"><a name="l10563"></a><span class="lineno">10563</span>&#160;{</div><div class="line"><a name="l10564"></a><span class="lineno">10564</span>&#160; j1.swap(j2);</div><div class="line"><a name="l10565"></a><span class="lineno">10565</span>&#160;}</div><div class="line"><a name="l10566"></a><span class="lineno">10566</span>&#160;</div><div class="line"><a name="l10568"></a><span class="lineno">10568</span>&#160;<span class="keyword">template</span>&lt;&gt;</div><div class="line"><a name="l10569"></a><span class="lineno">10569</span>&#160;<span class="keyword">struct </span>hash&lt;<a class="code" href="namespacenlohmann.html">nlohmann</a>::<a class="code" href="classnlohmann_1_1basic__json.html">json</a>&gt;</div><div class="line"><a name="l10570"></a><span class="lineno">10570</span>&#160;{</div><div class="line"><a name="l10576"></a><span class="lineno">10576</span>&#160; std::size_t operator()(<span class="keyword">const</span> <a class="code" href="classnlohmann_1_1basic__json.html">nlohmann::json</a>&amp; j)<span class="keyword"> const</span></div><div class="line"><a name="l10577"></a><span class="lineno">10577</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l10578"></a><span class="lineno">10578</span>&#160; <span class="comment">// a naive hashing via the string representation</span></div><div class="line"><a name="l10579"></a><span class="lineno">10579</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span>&amp; h = hash&lt;nlohmann::json::string_t&gt;();</div><div class="line"><a name="l10580"></a><span class="lineno"><a class="line" href="structstd_1_1hash_3_01nlohmann_1_1json_01_4_aec1567d1fa47dbe5b77954dce3a55b64.html#aec1567d1fa47dbe5b77954dce3a55b64">10580</a></span>&#160; <span class="keywordflow">return</span> h(j.<a class="code" href="classnlohmann_1_1basic__json_afd4b7d7bcadc62da7c582fa36ba6805f.html#afd4b7d7bcadc62da7c582fa36ba6805f">dump</a>());</div><div class="line"><a name="l10581"></a><span class="lineno">10581</span>&#160; }</div><div class="line"><a name="l10582"></a><span class="lineno">10582</span>&#160;};</div><div class="line"><a name="l10583"></a><span class="lineno">10583</span>&#160;}</div><div class="line"><a name="l10584"></a><span class="lineno">10584</span>&#160;</div><div class="line"><a name="l10597"></a><span class="lineno">10597</span>&#160;<span class="keyword">inline</span> <a class="code" href="classnlohmann_1_1basic__json.html">nlohmann::json</a> <span class="keyword">operator</span> <span class="stringliteral">&quot;&quot;</span> _json(<span class="keyword">const</span> <span class="keywordtype">char</span>* s, std::size_t)</div><div class="line"><a name="l10598"></a><span class="lineno">10598</span>&#160;{</div><div class="line"><a name="l10599"></a><span class="lineno">10599</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classnlohmann_1_1basic__json_ace63ac4eb1dd7251a259d32e397461a3.html#ace63ac4eb1dd7251a259d32e397461a3">nlohmann::json::parse</a>(s);</div><div class="line"><a name="l10600"></a><span class="lineno">10600</span>&#160;}</div><div class="line"><a name="l10601"></a><span class="lineno">10601</span>&#160;</div><div class="line"><a name="l10614"></a><span class="lineno">10614</span>&#160;<span class="keyword">inline</span> <a class="code" href="classnlohmann_1_1basic__json_1_1json__pointer.html">nlohmann::json::json_pointer</a> <span class="keyword">operator</span> <span class="stringliteral">&quot;&quot;</span> _json_pointer(<span class="keyword">const</span> <span class="keywordtype">char</span>* s, std::size_t)</div><div class="line"><a name="l10615"></a><span class="lineno">10615</span>&#160;{</div><div class="line"><a name="l10616"></a><span class="lineno">10616</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classnlohmann_1_1basic__json_1_1json__pointer.html">nlohmann::json::json_pointer</a>(s);</div><div class="line"><a name="l10617"></a><span class="lineno">10617</span>&#160;}</div><div class="line"><a name="l10618"></a><span class="lineno">10618</span>&#160;</div><div class="line"><a name="l10619"></a><span class="lineno">10619</span>&#160;<span class="comment">// restore GCC/clang diagnostic settings</span></div><div class="line"><a name="l10620"></a><span class="lineno">10620</span>&#160;<span class="preprocessor">#if defined(__clang__) || defined(__GNUC__) || defined(__GNUG__)</span></div><div class="line"><a name="l10621"></a><span class="lineno">10621</span>&#160;<span class="preprocessor"> #pragma GCC diagnostic pop</span></div><div class="line"><a name="l10622"></a><span class="lineno">10622</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l10623"></a><span class="lineno">10623</span>&#160;</div><div class="line"><a name="l10624"></a><span class="lineno">10624</span>&#160;<span class="preprocessor">#endif</span></div><div class="ttc" id="classnlohmann_1_1basic__json_1_1const__iterator_a23de834b11bd895209aa65c100ab9ceb_html_a23de834b11bd895209aa65c100ab9ceb"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1const__iterator_a23de834b11bd895209aa65c100ab9ceb.html#a23de834b11bd895209aa65c100ab9ceb">nlohmann::basic_json::const_iterator::const_iterator</a></div><div class="ttdeci">const_iterator(pointer object) noexcept</div><div class="ttdoc">constructor for a given JSON instance </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l06741">json.hpp:6741</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a7936417b875b7ec737f77ef84bbf7871_html_a7936417b875b7ec737f77ef84bbf7871"><div class="ttname"><a href="classnlohmann_1_1basic__json_a7936417b875b7ec737f77ef84bbf7871.html#a7936417b875b7ec737f77ef84bbf7871">nlohmann::basic_json::max_size</a></div><div class="ttdeci">size_type max_size() const noexcept</div><div class="ttdoc">returns the maximum possible number of elements </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l04760">json.hpp:4760</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a5c8bb5200f5eac10d31e26be46e5b1ac_html_a5c8bb5200f5eac10d31e26be46e5b1ac"><div class="ttname"><a href="classnlohmann_1_1basic__json_a5c8bb5200f5eac10d31e26be46e5b1ac.html#a5c8bb5200f5eac10d31e26be46e5b1ac">nlohmann::basic_json::operator&lt;=</a></div><div class="ttdeci">friend bool operator&lt;=(const_reference lhs, const_reference rhs) noexcept</div><div class="ttdoc">comparison: less than or equal </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l05737">json.hpp:5737</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a5d466b240d0ba9f648d7fd4ff42359f5_html_a5d466b240d0ba9f648d7fd4ff42359f5"><div class="ttname"><a href="classnlohmann_1_1basic__json_a5d466b240d0ba9f648d7fd4ff42359f5.html#a5d466b240d0ba9f648d7fd4ff42359f5">nlohmann::basic_json::type</a></div><div class="ttdeci">constexpr value_t type() const noexcept</div><div class="ttdoc">return the type of the JSON value (explicit) </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l02243">json.hpp:2243</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a256a4cef002023acab3c9d75b569f54a_html_a256a4cef002023acab3c9d75b569f54a"><div class="ttname"><a href="classnlohmann_1_1basic__json_a256a4cef002023acab3c9d75b569f54a.html#a256a4cef002023acab3c9d75b569f54a">nlohmann::basic_json::is_array</a></div><div class="ttdeci">constexpr bool is_array() const noexcept</div><div class="ttdoc">return whether value is an array </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l02503">json.hpp:2503</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a2ec9378f9545adf4b79099aa8f8a1673_html_a2ec9378f9545adf4b79099aa8f8a1673"><div class="ttname"><a href="classnlohmann_1_1basic__json_a2ec9378f9545adf4b79099aa8f8a1673.html#a2ec9378f9545adf4b79099aa8f8a1673">nlohmann::basic_json::at</a></div><div class="ttdeci">const_reference at(const typename object_t::key_type &amp;key) const</div><div class="ttdoc">access specified object element with bounds checking </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l03288">json.hpp:3288</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a8f77085bd98c97a983d9ba12efbf6148_html_a8f77085bd98c97a983d9ba12efbf6148"><div class="ttname"><a href="classnlohmann_1_1basic__json_a8f77085bd98c97a983d9ba12efbf6148.html#a8f77085bd98c97a983d9ba12efbf6148">nlohmann::basic_json::basic_json</a></div><div class="ttdeci">basic_json(const value_t value_type)</div><div class="ttdoc">create an empty value with a given type </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l01067">json.hpp:1067</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a3aaf41d385f0d9a93deb92f9b14ae0cf_html_a3aaf41d385f0d9a93deb92f9b14ae0cf"><div class="ttname"><a href="classnlohmann_1_1basic__json_a3aaf41d385f0d9a93deb92f9b14ae0cf.html#a3aaf41d385f0d9a93deb92f9b14ae0cf">nlohmann::basic_json::basic_json</a></div><div class="ttdeci">basic_json(const array_t &amp;val)</div><div class="ttdoc">create an array (explicit) </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l01179">json.hpp:1179</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1json__reverse__iterator_af1c8b1f3be60159ae0829938a4e674fa_html_af1c8b1f3be60159ae0829938a4e674fa"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_af1c8b1f3be60159ae0829938a4e674fa.html#af1c8b1f3be60159ae0829938a4e674fa">nlohmann::basic_json::json_reverse_iterator::value</a></div><div class="ttdeci">reference value() const</div><div class="ttdoc">return the value of an iterator </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l07563">json.hpp:7563</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_abd7e95159740e94160c13392b1536eb1_html_abd7e95159740e94160c13392b1536eb1"><div class="ttname"><a href="classnlohmann_1_1basic__json_abd7e95159740e94160c13392b1536eb1.html#abd7e95159740e94160c13392b1536eb1">nlohmann::basic_json::end</a></div><div class="ttdeci">const_iterator end() const noexcept</div><div class="ttdoc">returns a const iterator to one past the last element </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l04382">json.hpp:4382</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_adcd6086bac286854d5cc8b7f84d74a49_html_adcd6086bac286854d5cc8b7f84d74a49"><div class="ttname"><a href="classnlohmann_1_1basic__json_adcd6086bac286854d5cc8b7f84d74a49.html#adcd6086bac286854d5cc8b7f84d74a49">nlohmann::basic_json::is_primitive</a></div><div class="ttdeci">constexpr bool is_primitive() const noexcept</div><div class="ttdoc">return whether type is primitive </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l02273">json.hpp:2273</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a8abdfc0d6e051f6fa29d49da57bce631_html_a8abdfc0d6e051f6fa29d49da57bce631"><div class="ttname"><a href="classnlohmann_1_1basic__json_a8abdfc0d6e051f6fa29d49da57bce631.html#a8abdfc0d6e051f6fa29d49da57bce631">nlohmann::basic_json::is_null</a></div><div class="ttdeci">constexpr bool is_null() const noexcept</div><div class="ttdoc">return whether value is null </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l02322">json.hpp:2322</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_aba0695744dbcdad65825f91768a8f04f_html_aba0695744dbcdad65825f91768a8f04f"><div class="ttname"><a href="classnlohmann_1_1basic__json_aba0695744dbcdad65825f91768a8f04f.html#aba0695744dbcdad65825f91768a8f04f">nlohmann::basic_json::get</a></div><div class="ttdeci">ValueType get() const</div><div class="ttdoc">get a value (explicit) </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l02901">json.hpp:2901</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a36fda9749be288cac96cfd846cb62561_html_a36fda9749be288cac96cfd846cb62561"><div class="ttname"><a href="classnlohmann_1_1basic__json_a36fda9749be288cac96cfd846cb62561.html#a36fda9749be288cac96cfd846cb62561">nlohmann::basic_json::rend</a></div><div class="ttdeci">const_reverse_iterator rend() const noexcept</div><div class="ttdoc">returns a const reverse iterator to one before the first </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l04487">json.hpp:4487</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a873f4bff2f2a83f68fc1b5341ebdd446_html_a873f4bff2f2a83f68fc1b5341ebdd446"><div class="ttname"><a href="classnlohmann_1_1basic__json_a873f4bff2f2a83f68fc1b5341ebdd446.html#a873f4bff2f2a83f68fc1b5341ebdd446">nlohmann::basic_json::is_structured</a></div><div class="ttdeci">constexpr bool is_structured() const noexcept</div><div class="ttdoc">return whether type is structured </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l02300">json.hpp:2300</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1json__reverse__iterator_a563a7bd281e9919798d18396107fb05c_html_a563a7bd281e9919798d18396107fb05c"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_a563a7bd281e9919798d18396107fb05c.html#a563a7bd281e9919798d18396107fb05c">nlohmann::basic_json::json_reverse_iterator::operator--</a></div><div class="ttdeci">json_reverse_iterator &amp; operator--()</div><div class="ttdoc">pre-decrement (it) </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l07514">json.hpp:7514</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_ad6e51670e9c0052856f3fee01df5c44f_html_ad6e51670e9c0052856f3fee01df5c44f"><div class="ttname"><a href="classnlohmann_1_1basic__json_ad6e51670e9c0052856f3fee01df5c44f.html#ad6e51670e9c0052856f3fee01df5c44f">nlohmann::basic_json::clear</a></div><div class="ttdeci">void clear() noexcept</div><div class="ttdoc">clears the contents </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l04819">json.hpp:4819</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a2dea7491d9fa709311459f87201e25aa_html_a2dea7491d9fa709311459f87201e25aa"><div class="ttname"><a href="classnlohmann_1_1basic__json_a2dea7491d9fa709311459f87201e25aa.html#a2dea7491d9fa709311459f87201e25aa">nlohmann::basic_json::operator[]</a></div><div class="ttdeci">const_reference operator[](size_type idx) const</div><div class="ttdoc">access specified array element </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l03382">json.hpp:3382</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a90f05d55d9d0702c075cd281fd0d85ae_html_a90f05d55d9d0702c075cd281fd0d85ae"><div class="ttname"><a href="classnlohmann_1_1basic__json_a90f05d55d9d0702c075cd281fd0d85ae.html#a90f05d55d9d0702c075cd281fd0d85ae">nlohmann::basic_json::parse</a></div><div class="ttdeci">static basic_json parse(const CharPT s, const parser_callback_t cb=nullptr)</div><div class="ttdoc">deserialize from string literal </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l05935">json.hpp:5935</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1json__reverse__iterator_a693439bffe56a9a8cf53bc4a06b911ff_html_a693439bffe56a9a8cf53bc4a06b911ff"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_a693439bffe56a9a8cf53bc4a06b911ff.html#a693439bffe56a9a8cf53bc4a06b911ff">nlohmann::basic_json::json_reverse_iterator::operator--</a></div><div class="ttdeci">json_reverse_iterator operator--(int)</div><div class="ttdoc">post-decrement (it) </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l07508">json.hpp:7508</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a140b8251f82e99ad279dcad5c977e26b_html_a140b8251f82e99ad279dcad5c977e26b"><div class="ttname"><a href="classnlohmann_1_1basic__json_a140b8251f82e99ad279dcad5c977e26b.html#a140b8251f82e99ad279dcad5c977e26b">nlohmann::basic_json::operator[]</a></div><div class="ttdeci">reference operator[](T *(&amp;key)[n])</div><div class="ttdoc">access specified object element </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l03515">json.hpp:3515</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_aaf363408931d76472ded14017e59c9e8_html_aaf363408931d76472ded14017e59c9e8"><div class="ttname"><a href="classnlohmann_1_1basic__json_aaf363408931d76472ded14017e59c9e8.html#aaf363408931d76472ded14017e59c9e8">nlohmann::basic_json::operator&gt;&gt;</a></div><div class="ttdeci">friend std::istream &amp; operator&gt;&gt;(std::istream &amp;i, basic_json &amp;j)</div><div class="ttdoc">deserialize from stream </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l06137">json.hpp:6137</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1iterator_ae0c848dbc0af1cde15771d45d775b27c_html_ae0c848dbc0af1cde15771d45d775b27c"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1iterator_ae0c848dbc0af1cde15771d45d775b27c.html#ae0c848dbc0af1cde15771d45d775b27c">nlohmann::basic_json::iterator::operator+=</a></div><div class="ttdeci">iterator &amp; operator+=(difference_type i)</div><div class="ttdoc">add to iterator </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l07410">json.hpp:7410</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_ad25b2f8c21e241e2d63455537a9294ff_html_ad25b2f8c21e241e2d63455537a9294ff"><div class="ttname"><a href="classnlohmann_1_1basic__json_ad25b2f8c21e241e2d63455537a9294ff.html#ad25b2f8c21e241e2d63455537a9294ff">nlohmann::basic_json::object</a></div><div class="ttdeci">static basic_json object(std::initializer_list&lt; basic_json &gt; init=std::initializer_list&lt; basic_json &gt;())</div><div class="ttdoc">explicitly create an object from an initializer list </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l01760">json.hpp:1760</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a20d85eb83c2c0cfa0918f630b192635c_html_a20d85eb83c2c0cfa0918f630b192635c"><div class="ttname"><a href="classnlohmann_1_1basic__json_a20d85eb83c2c0cfa0918f630b192635c.html#a20d85eb83c2c0cfa0918f630b192635c">nlohmann::basic_json::count</a></div><div class="ttdeci">size_type count(typename object_t::key_type key) const</div><div class="ttdoc">returns the number of occurrences of a key in a JSON object </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l04261">json.hpp:4261</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_aa8dca2e91a6301c36890f844e64f0023_html_aa8dca2e91a6301c36890f844e64f0023"><div class="ttname"><a href="classnlohmann_1_1basic__json_aa8dca2e91a6301c36890f844e64f0023.html#aa8dca2e91a6301c36890f844e64f0023">nlohmann::basic_json::parse</a></div><div class="ttdeci">static basic_json parse(IteratorType first, IteratorType last, const parser_callback_t cb=nullptr)</div><div class="ttdoc">deserialize from an iterator range with contiguous storage </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l06025">json.hpp:6025</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_aa388dc101bc285a98122a38fd2e3a9db_html_aa388dc101bc285a98122a38fd2e3a9db"><div class="ttname"><a href="classnlohmann_1_1basic__json_aa388dc101bc285a98122a38fd2e3a9db.html#aa388dc101bc285a98122a38fd2e3a9db">nlohmann::basic_json::is_number_unsigned</a></div><div class="ttdeci">constexpr bool is_number_unsigned() const noexcept</div><div class="ttdoc">return whether value is an unsigned integer number </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l02431">json.hpp:2431</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1const__iterator_abc4552ba2fe39e7901a83dd6d4dec151_html_abc4552ba2fe39e7901a83dd6d4dec151"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1const__iterator_abc4552ba2fe39e7901a83dd6d4dec151.html#abc4552ba2fe39e7901a83dd6d4dec151">nlohmann::basic_json::const_iterator::operator-</a></div><div class="ttdeci">const_iterator operator-(difference_type i)</div><div class="ttdoc">subtract from iterator </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l07216">json.hpp:7216</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_af3bc3e83aa162d7ba4df16a949872723_html_af3bc3e83aa162d7ba4df16a949872723"><div class="ttname"><a href="classnlohmann_1_1basic__json_af3bc3e83aa162d7ba4df16a949872723.html#af3bc3e83aa162d7ba4df16a949872723">nlohmann::basic_json::boolean_t</a></div><div class="ttdeci">BooleanType boolean_t</div><div class="ttdoc">a type for a boolean </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l00514">json.hpp:514</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a9486a272e034c0548305d7a12f3045e6_html_a9486a272e034c0548305d7a12f3045e6"><div class="ttname"><a href="classnlohmann_1_1basic__json_a9486a272e034c0548305d7a12f3045e6.html#a9486a272e034c0548305d7a12f3045e6">nlohmann::basic_json::operator+=</a></div><div class="ttdeci">reference operator+=(const typename object_t::value_type &amp;val)</div><div class="ttdoc">add an object to an object </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l05002">json.hpp:5002</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a3654da9a84deaf61899c4eee5b93c2c5_html_a3654da9a84deaf61899c4eee5b93c2c5"><div class="ttname"><a href="classnlohmann_1_1basic__json_a3654da9a84deaf61899c4eee5b93c2c5.html#a3654da9a84deaf61899c4eee5b93c2c5">nlohmann::basic_json::basic_json</a></div><div class="ttdeci">basic_json(const typename string_t::value_type *val)</div><div class="ttdoc">create a string (explicit) </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l01275">json.hpp:1275</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1const__iterator_a0e717ab658d27f646a3c8602cac91d83_html_a0e717ab658d27f646a3c8602cac91d83"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1const__iterator_a0e717ab658d27f646a3c8602cac91d83.html#a0e717ab658d27f646a3c8602cac91d83">nlohmann::basic_json::const_iterator::key</a></div><div class="ttdeci">object_t::key_type key() const</div><div class="ttdoc">return the key of an object iterator </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l07293">json.hpp:7293</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_affe7e160e7bb06eed83c8b437af4692f_html_affe7e160e7bb06eed83c8b437af4692f"><div class="ttname"><a href="classnlohmann_1_1basic__json_affe7e160e7bb06eed83c8b437af4692f.html#affe7e160e7bb06eed83c8b437af4692f">nlohmann::basic_json::find</a></div><div class="ttdeci">iterator find(typename object_t::key_type key)</div><div class="ttdoc">find an element in a JSON object </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l04215">json.hpp:4215</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a6e2e21da48f5d9471716cd868a068327_html_a6e2e21da48f5d9471716cd868a068327"><div class="ttname"><a href="classnlohmann_1_1basic__json_a6e2e21da48f5d9471716cd868a068327.html#a6e2e21da48f5d9471716cd868a068327">nlohmann::basic_json::operator!=</a></div><div class="ttdeci">friend bool operator!=(const_reference lhs, const_reference rhs) noexcept</div><div class="ttdoc">comparison: not equal </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l05581">json.hpp:5581</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_ab8b43d92a042dde96c28aeea81dd52de_html_ab8b43d92a042dde96c28aeea81dd52de"><div class="ttname"><a href="classnlohmann_1_1basic__json_ab8b43d92a042dde96c28aeea81dd52de.html#ab8b43d92a042dde96c28aeea81dd52de">nlohmann::basic_json::basic_json</a></div><div class="ttdeci">basic_json(const string_t &amp;val)</div><div class="ttdoc">create a string (explicit) </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l01249">json.hpp:1249</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1iterator_a1af28ba60302eb48edf4fdbc88e75903_html_a1af28ba60302eb48edf4fdbc88e75903"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1iterator_a1af28ba60302eb48edf4fdbc88e75903.html#a1af28ba60302eb48edf4fdbc88e75903">nlohmann::basic_json::iterator::operator*</a></div><div class="ttdeci">reference operator*() const</div><div class="ttdoc">return a reference to the value pointed to by the iterator </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l07368">json.hpp:7368</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a6f3dfd3e83a1e907d7946b47fcd7ceba_html_a6f3dfd3e83a1e907d7946b47fcd7ceba"><div class="ttname"><a href="classnlohmann_1_1basic__json_a6f3dfd3e83a1e907d7946b47fcd7ceba.html#a6f3dfd3e83a1e907d7946b47fcd7ceba">nlohmann::basic_json::push_back</a></div><div class="ttdeci">void push_back(const basic_json &amp;val)</div><div class="ttdoc">add an object to an array </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l04928">json.hpp:4928</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a3da254c422ede5495f2815c5e48c00c5_html_a3da254c422ede5495f2815c5e48c00c5"><div class="ttname"><a href="classnlohmann_1_1basic__json_a3da254c422ede5495f2815c5e48c00c5.html#a3da254c422ede5495f2815c5e48c00c5">nlohmann::basic_json::erase</a></div><div class="ttdeci">void erase(const size_type idx)</div><div class="ttdoc">remove element from a JSON array given an index </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l04169">json.hpp:4169</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_ab00b882d39306d663c23dab110f5cae0_html_ab00b882d39306d663c23dab110f5cae0"><div class="ttname"><a href="classnlohmann_1_1basic__json_ab00b882d39306d663c23dab110f5cae0.html#ab00b882d39306d663c23dab110f5cae0">nlohmann::basic_json::array_t</a></div><div class="ttdeci">ArrayType&lt; basic_json, AllocatorType&lt; basic_json &gt;&gt; array_t</div><div class="ttdoc">a type for an array </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l00441">json.hpp:441</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_aa45753034bea87f9d2c0c42ace9ff75c_html_aa45753034bea87f9d2c0c42ace9ff75c"><div class="ttname"><a href="classnlohmann_1_1basic__json_aa45753034bea87f9d2c0c42ace9ff75c.html#aa45753034bea87f9d2c0c42ace9ff75c">nlohmann::basic_json::front</a></div><div class="ttdeci">reference front()</div><div class="ttdoc">access the first element </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l03828">json.hpp:3828</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a38ee0f09a318d003add75e0787040794_html_a38ee0f09a318d003add75e0787040794"><div class="ttname"><a href="classnlohmann_1_1basic__json_a38ee0f09a318d003add75e0787040794.html#a38ee0f09a318d003add75e0787040794">nlohmann::basic_json::swap</a></div><div class="ttdeci">void swap(object_t &amp;other)</div><div class="ttdoc">exchanges the values </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l05345">json.hpp:5345</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1const__iterator_a0d5820d1dda9dea3bbeb029cacf68522_html_a0d5820d1dda9dea3bbeb029cacf68522"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1const__iterator_a0d5820d1dda9dea3bbeb029cacf68522.html#a0d5820d1dda9dea3bbeb029cacf68522">nlohmann::basic_json::const_iterator::operator+=</a></div><div class="ttdeci">const_iterator &amp; operator+=(difference_type i)</div><div class="ttdoc">add to iterator </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l07165">json.hpp:7165</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_html"><div class="ttname"><a href="classnlohmann_1_1basic__json.html">nlohmann::basic_json</a></div><div class="ttdoc">a class to store JSON values </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l00235">json.hpp:235</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a70ae1f0747f5b7a89979512866474f1a_html_a70ae1f0747f5b7a89979512866474f1a"><div class="ttname"><a href="classnlohmann_1_1basic__json_a70ae1f0747f5b7a89979512866474f1a.html#a70ae1f0747f5b7a89979512866474f1a">nlohmann::basic_json::basic_json</a></div><div class="ttdeci">basic_json(const int val) noexcept</div><div class="ttdoc">create an integer number from an enum type (explicit) </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l01389">json.hpp:1389</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_ace63ac4eb1dd7251a259d32e397461a3_html_ace63ac4eb1dd7251a259d32e397461a3"><div class="ttname"><a href="classnlohmann_1_1basic__json_ace63ac4eb1dd7251a259d32e397461a3.html#ace63ac4eb1dd7251a259d32e397461a3">nlohmann::basic_json::parse</a></div><div class="ttdeci">static basic_json parse(T(&amp;array)[N], const parser_callback_t cb=nullptr)</div><div class="ttdoc">deserialize from an array </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l05897">json.hpp:5897</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a94ba313c00f1713fa4be85de64083754_html_a94ba313c00f1713fa4be85de64083754"><div class="ttname"><a href="classnlohmann_1_1basic__json_a94ba313c00f1713fa4be85de64083754.html#a94ba313c00f1713fa4be85de64083754">nlohmann::basic_json::is_object</a></div><div class="ttdeci">constexpr bool is_object() const noexcept</div><div class="ttdoc">return whether value is an object </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l02481">json.hpp:2481</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a98e05a2c9b8f74bd60442772cddeee52_html_a98e05a2c9b8f74bd60442772cddeee52"><div class="ttname"><a href="classnlohmann_1_1basic__json_a98e05a2c9b8f74bd60442772cddeee52.html#a98e05a2c9b8f74bd60442772cddeee52">nlohmann::basic_json::operator==</a></div><div class="ttdeci">friend bool operator==(std::nullptr_t, const_reference v) noexcept</div><div class="ttdoc">comparison: equal </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l05560">json.hpp:5560</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a0491b6739b54dcf83d5e10c4f604ca8f_html_a0491b6739b54dcf83d5e10c4f604ca8f"><div class="ttname"><a href="classnlohmann_1_1basic__json_a0491b6739b54dcf83d5e10c4f604ca8f.html#a0491b6739b54dcf83d5e10c4f604ca8f">nlohmann::basic_json::value</a></div><div class="ttdeci">string_t value(const typename object_t::key_type &amp;key, const char *default_value) const</div><div class="ttdoc">overload for a default value of type const char* </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l03725">json.hpp:3725</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_ac4b10b2364f26ce47bdb9a413ff04a59_html_ac4b10b2364f26ce47bdb9a413ff04a59"><div class="ttname"><a href="classnlohmann_1_1basic__json_ac4b10b2364f26ce47bdb9a413ff04a59.html#ac4b10b2364f26ce47bdb9a413ff04a59">nlohmann::basic_json::number_integer_t</a></div><div class="ttdeci">NumberIntegerType number_integer_t</div><div class="ttdoc">a type for a number (integer) </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l00586">json.hpp:586</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a624025acfcf64364d98424402b837bc6_html_a624025acfcf64364d98424402b837bc6"><div class="ttname"><a href="classnlohmann_1_1basic__json_a624025acfcf64364d98424402b837bc6.html#a624025acfcf64364d98424402b837bc6">nlohmann::basic_json::insert</a></div><div class="ttdeci">iterator insert(const_iterator pos, size_type cnt, const basic_json &amp;val)</div><div class="ttdoc">inserts elements </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l05133">json.hpp:5133</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1const__iterator_a7a80257f2303210b0a5d056fc0b30b40_html_a7a80257f2303210b0a5d056fc0b30b40"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1const__iterator_a7a80257f2303210b0a5d056fc0b30b40.html#a7a80257f2303210b0a5d056fc0b30b40">nlohmann::basic_json::const_iterator::operator+</a></div><div class="ttdeci">const_iterator operator+(difference_type i)</div><div class="ttdoc">add to iterator </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l07205">json.hpp:7205</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1iterator_html"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1iterator.html">nlohmann::basic_json::iterator</a></div><div class="ttdoc">a mutable random access iterator for the basic_json class </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l07335">json.hpp:7335</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1const__iterator_a8dbaec5bf8ccba3225520356629061cb_html_a8dbaec5bf8ccba3225520356629061cb"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1const__iterator_a8dbaec5bf8ccba3225520356629061cb.html#a8dbaec5bf8ccba3225520356629061cb">nlohmann::basic_json::const_iterator::operator++</a></div><div class="ttdeci">const_iterator operator++(int)</div><div class="ttdoc">post-increment (it++) </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l06977">json.hpp:6977</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a435c93d06ef28f8003c31f62ffe4aed1_html_a435c93d06ef28f8003c31f62ffe4aed1"><div class="ttname"><a href="classnlohmann_1_1basic__json_a435c93d06ef28f8003c31f62ffe4aed1.html#a435c93d06ef28f8003c31f62ffe4aed1">nlohmann::basic_json::is_number_integer</a></div><div class="ttdeci">constexpr bool is_number_integer() const noexcept</div><div class="ttdoc">return whether value is an integer number </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l02403">json.hpp:2403</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a0ac9894c9de8dc551cf2e5f1c605537f_html_a0ac9894c9de8dc551cf2e5f1c605537f"><div class="ttname"><a href="classnlohmann_1_1basic__json_a0ac9894c9de8dc551cf2e5f1c605537f.html#a0ac9894c9de8dc551cf2e5f1c605537f">nlohmann::basic_json::object_t</a></div><div class="ttdeci">ObjectType&lt; StringType, basic_json, std::less&lt; StringType &gt;, AllocatorType&lt; std::pair&lt; const StringType, basic_json &gt;&gt;&gt; object_t</div><div class="ttdoc">a type for an object </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l00395">json.hpp:395</a></div></div>
<div class="ttc" id="namespacestd_html"><div class="ttname"><a href="namespacestd.html">std</a></div><div class="ttdoc">STL namespace. </div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a60a04166c122072ab11eaf9845d9cd1d_html_a60a04166c122072ab11eaf9845d9cd1d"><div class="ttname"><a href="classnlohmann_1_1basic__json_a60a04166c122072ab11eaf9845d9cd1d.html#a60a04166c122072ab11eaf9845d9cd1d">nlohmann::basic_json::number_unsigned_t</a></div><div class="ttdeci">NumberUnsignedType number_unsigned_t</div><div class="ttdoc">a type for a number (unsigned) </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l00657">json.hpp:657</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1json__reverse__iterator_ad51b38d5428a79fd6ef4fa221b242dcf_html_ad51b38d5428a79fd6ef4fa221b242dcf"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_ad51b38d5428a79fd6ef4fa221b242dcf.html#ad51b38d5428a79fd6ef4fa221b242dcf">nlohmann::basic_json::json_reverse_iterator::operator-</a></div><div class="ttdeci">json_reverse_iterator operator-(difference_type i) const</div><div class="ttdoc">subtract from iterator </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l07536">json.hpp:7536</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a06efb200b69942eacd1ea22d0f6ccebb_html_a06efb200b69942eacd1ea22d0f6ccebb"><div class="ttname"><a href="classnlohmann_1_1basic__json_a06efb200b69942eacd1ea22d0f6ccebb.html#a06efb200b69942eacd1ea22d0f6ccebb">nlohmann::basic_json::const_pointer</a></div><div class="ttdeci">typename std::allocator_traits&lt; allocator_type &gt;::const_pointer const_pointer</div><div class="ttdoc">the type of an element const pointer </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l00276">json.hpp:276</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a959bc32fc72a76cd5a1bd6977926f787_html_a959bc32fc72a76cd5a1bd6977926f787"><div class="ttname"><a href="classnlohmann_1_1basic__json_a959bc32fc72a76cd5a1bd6977926f787.html#a959bc32fc72a76cd5a1bd6977926f787">nlohmann::basic_json::parse</a></div><div class="ttdeci">static basic_json parse(std::istream &amp;&amp;i, const parser_callback_t cb=nullptr)</div><div class="ttdoc">deserialize from stream </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l05974">json.hpp:5974</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1iterator_a12c7f8236ffa08a5dd27cbd9888b74be_html_a12c7f8236ffa08a5dd27cbd9888b74be"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1iterator_a12c7f8236ffa08a5dd27cbd9888b74be.html#a12c7f8236ffa08a5dd27cbd9888b74be">nlohmann::basic_json::iterator::operator-&gt;</a></div><div class="ttdeci">pointer operator-&gt;() const</div><div class="ttdoc">dereference the iterator </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l07374">json.hpp:7374</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1const__iterator_a1ed92c14d88b802345bd15417a417a5d_html_a1ed92c14d88b802345bd15417a417a5d"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1const__iterator_a1ed92c14d88b802345bd15417a417a5d.html#a1ed92c14d88b802345bd15417a417a5d">nlohmann::basic_json::const_iterator::operator&gt;=</a></div><div class="ttdeci">bool operator&gt;=(const const_iterator &amp;other) const</div><div class="ttdoc">comparison: greater than or equal </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l07156">json.hpp:7156</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a0d838bc7ffca6017f51167e0a8ffd9b6_html_a0d838bc7ffca6017f51167e0a8ffd9b6"><div class="ttname"><a href="classnlohmann_1_1basic__json_a0d838bc7ffca6017f51167e0a8ffd9b6.html#a0d838bc7ffca6017f51167e0a8ffd9b6">nlohmann::basic_json::basic_json</a></div><div class="ttdeci">basic_json(const number_integer_t val) noexcept</div><div class="ttdoc">create an integer number (explicit) </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l01358">json.hpp:1358</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a5685815624b086caa532f41e853d4b0f_html_a5685815624b086caa532f41e853d4b0f"><div class="ttname"><a href="classnlohmann_1_1basic__json_a5685815624b086caa532f41e853d4b0f.html#a5685815624b086caa532f41e853d4b0f">nlohmann::basic_json::array</a></div><div class="ttdeci">static basic_json array(std::initializer_list&lt; basic_json &gt; init=std::initializer_list&lt; basic_json &gt;())</div><div class="ttdoc">explicitly create an array from an initializer list </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l01720">json.hpp:1720</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_af148cdab12df5bf86119fac735ccaac5_html_af148cdab12df5bf86119fac735ccaac5"><div class="ttname"><a href="classnlohmann_1_1basic__json_af148cdab12df5bf86119fac735ccaac5.html#af148cdab12df5bf86119fac735ccaac5">nlohmann::basic_json::iterator_wrapper</a></div><div class="ttdeci">static iteration_proxy&lt; const_iterator &gt; iterator_wrapper(const_reference cont)</div><div class="ttdoc">wrapper to access iterator member functions in range-based for </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l04574">json.hpp:4574</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a2256d4912473af915739ddde259c7ca8_html_a2256d4912473af915739ddde259c7ca8"><div class="ttname"><a href="classnlohmann_1_1basic__json_a2256d4912473af915739ddde259c7ca8.html#a2256d4912473af915739ddde259c7ca8">nlohmann::basic_json::front</a></div><div class="ttdeci">const_reference front() const</div><div class="ttdoc">access the first element </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l03836">json.hpp:3836</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1const__iterator_a9ea0497199b1e96ce9cadd1f202ec343_html_a9ea0497199b1e96ce9cadd1f202ec343"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1const__iterator_a9ea0497199b1e96ce9cadd1f202ec343.html#a9ea0497199b1e96ce9cadd1f202ec343">nlohmann::basic_json::const_iterator::value_type</a></div><div class="ttdeci">typename basic_json::value_type value_type</div><div class="ttdoc">the type of the values when the iterator is dereferenced </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l06722">json.hpp:6722</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1json__reverse__iterator_a86c97bbb8ebe19aef4656cf796e30e99_html_a86c97bbb8ebe19aef4656cf796e30e99"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_a86c97bbb8ebe19aef4656cf796e30e99.html#a86c97bbb8ebe19aef4656cf796e30e99">nlohmann::basic_json::json_reverse_iterator::json_reverse_iterator</a></div><div class="ttdeci">json_reverse_iterator(const typename base_iterator::iterator_type &amp;it) noexcept</div><div class="ttdoc">create reverse iterator from iterator </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l07485">json.hpp:7485</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a7ab11375ed2e29c2fcb6119386851445_html_a7ab11375ed2e29c2fcb6119386851445"><div class="ttname"><a href="classnlohmann_1_1basic__json_a7ab11375ed2e29c2fcb6119386851445.html#a7ab11375ed2e29c2fcb6119386851445">nlohmann::basic_json::get_ptr</a></div><div class="ttdeci">PointerType get_ptr() noexcept</div><div class="ttdoc">get a pointer value (implicit) </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l02981">json.hpp:2981</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a7355a41b0033ff8a27d58550544d5a59_html_a7355a41b0033ff8a27d58550544d5a59"><div class="ttname"><a href="classnlohmann_1_1basic__json_a7355a41b0033ff8a27d58550544d5a59.html#a7355a41b0033ff8a27d58550544d5a59">nlohmann::basic_json::cbegin</a></div><div class="ttdeci">const_iterator cbegin() const noexcept</div><div class="ttdoc">returns a const iterator to the first element </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l04341">json.hpp:4341</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a71b1d38ef402dfee58fba1fe01fa67f5_html_a71b1d38ef402dfee58fba1fe01fa67f5"><div class="ttname"><a href="classnlohmann_1_1basic__json_a71b1d38ef402dfee58fba1fe01fa67f5.html#a71b1d38ef402dfee58fba1fe01fa67f5">nlohmann::basic_json::back</a></div><div class="ttdeci">reference back()</div><div class="ttdoc">access the last element </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l03871">json.hpp:3871</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_af677a29b0e66edc9f66e5167e4667071_html_af677a29b0e66edc9f66e5167e4667071"><div class="ttname"><a href="classnlohmann_1_1basic__json_af677a29b0e66edc9f66e5167e4667071.html#af677a29b0e66edc9f66e5167e4667071">nlohmann::basic_json::const_reference</a></div><div class="ttdeci">const value_type &amp; const_reference</div><div class="ttdoc">the type of an element const reference </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l00263">json.hpp:263</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1const__iterator_a1da96fc3054d547e7706d3a2f073f389_html_a1da96fc3054d547e7706d3a2f073f389"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1const__iterator_a1da96fc3054d547e7706d3a2f073f389.html#a1da96fc3054d547e7706d3a2f073f389">nlohmann::basic_json::const_iterator::pointer</a></div><div class="ttdeci">typename basic_json::const_pointer pointer</div><div class="ttdoc">defines a pointer to the type iterated over (value_type) </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l06726">json.hpp:6726</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_aa8996e3f8cd3e5113dcc3cb34bef7c0a_html_aa8996e3f8cd3e5113dcc3cb34bef7c0a"><div class="ttname"><a href="classnlohmann_1_1basic__json_aa8996e3f8cd3e5113dcc3cb34bef7c0a.html#aa8996e3f8cd3e5113dcc3cb34bef7c0a">nlohmann::basic_json::erase</a></div><div class="ttdeci">IteratorType erase(IteratorType first, IteratorType last)</div><div class="ttdoc">remove elements given an iterator range </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l04044">json.hpp:4044</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a5212588544f6d2266384c3be9bfda0c5_html_a5212588544f6d2266384c3be9bfda0c5"><div class="ttname"><a href="classnlohmann_1_1basic__json_a5212588544f6d2266384c3be9bfda0c5.html#a5212588544f6d2266384c3be9bfda0c5">nlohmann::basic_json::push_back</a></div><div class="ttdeci">void push_back(const typename object_t::value_type &amp;val)</div><div class="ttdoc">add an object to an object </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l04978">json.hpp:4978</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_ae3fe0423252e171973cdd5786d036e30_html_ae3fe0423252e171973cdd5786d036e30"><div class="ttname"><a href="classnlohmann_1_1basic__json_ae3fe0423252e171973cdd5786d036e30.html#ae3fe0423252e171973cdd5786d036e30">nlohmann::basic_json::empty</a></div><div class="ttdeci">bool empty() const noexcept</div><div class="ttdoc">checks whether the container is empty </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l04626">json.hpp:4626</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a9c9b4932b26a9630e1a3f25ea42a2c43_html_a9c9b4932b26a9630e1a3f25ea42a2c43"><div class="ttname"><a href="classnlohmann_1_1basic__json_a9c9b4932b26a9630e1a3f25ea42a2c43.html#a9c9b4932b26a9630e1a3f25ea42a2c43">nlohmann::basic_json::push_back</a></div><div class="ttdeci">void push_back(std::initializer_list&lt; basic_json &gt; init)</div><div class="ttdoc">add an object to an object </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l05033">json.hpp:5033</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1json__pointer_ae12db117a2742d826465080979d7c835_html_ae12db117a2742d826465080979d7c835"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1json__pointer_ae12db117a2742d826465080979d7c835.html#ae12db117a2742d826465080979d7c835">nlohmann::basic_json::json_pointer::json_pointer</a></div><div class="ttdeci">json_pointer(const std::string &amp;s=&quot;&quot;)</div><div class="ttdoc">create JSON pointer </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l09312">json.hpp:9312</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_aeaa0644fd6b99af364e772092268dfd6_html_aeaa0644fd6b99af364e772092268dfd6"><div class="ttname"><a href="classnlohmann_1_1basic__json_aeaa0644fd6b99af364e772092268dfd6.html#aeaa0644fd6b99af364e772092268dfd6">nlohmann::basic_json::insert</a></div><div class="ttdeci">iterator insert(const_iterator pos, const_iterator first, const_iterator last)</div><div class="ttdoc">inserts elements </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l05185">json.hpp:5185</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a9780ea9bb66b6191cb087b14396972c1_html_a9780ea9bb66b6191cb087b14396972c1"><div class="ttname"><a href="classnlohmann_1_1basic__json_a9780ea9bb66b6191cb087b14396972c1.html#a9780ea9bb66b6191cb087b14396972c1">nlohmann::basic_json::get_ptr</a></div><div class="ttdeci">constexpr const PointerType get_ptr() const noexcept</div><div class="ttdoc">get a pointer value (implicit) </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l03009">json.hpp:3009</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a7641371be8a347f3c1e05ac089a74c36_html_a7641371be8a347f3c1e05ac089a74c36"><div class="ttname"><a href="classnlohmann_1_1basic__json_a7641371be8a347f3c1e05ac089a74c36.html#a7641371be8a347f3c1e05ac089a74c36">nlohmann::basic_json::is_number_float</a></div><div class="ttdeci">constexpr bool is_number_float() const noexcept</div><div class="ttdoc">return whether value is a floating-point number </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l02459">json.hpp:2459</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_af7acf3838a79363356f24538941a559c_html_af7acf3838a79363356f24538941a559c"><div class="ttname"><a href="classnlohmann_1_1basic__json_af7acf3838a79363356f24538941a559c.html#af7acf3838a79363356f24538941a559c">nlohmann::basic_json::basic_json</a></div><div class="ttdeci">basic_json(InputIT first, InputIT last)</div><div class="ttdoc">construct a JSON container given an iterator range </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l01831">json.hpp:1831</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_aa7ad0ebda83e54c22ba8b3d954ef1293_html_aa7ad0ebda83e54c22ba8b3d954ef1293"><div class="ttname"><a href="classnlohmann_1_1basic__json_aa7ad0ebda83e54c22ba8b3d954ef1293.html#aa7ad0ebda83e54c22ba8b3d954ef1293">nlohmann::basic_json::basic_json</a></div><div class="ttdeci">basic_json(std::nullptr_t=nullptr) noexcept</div><div class="ttdoc">create a null object </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l01091">json.hpp:1091</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_ab9f8c9a02d6bb794ee26801a232ca4f4_html_ab9f8c9a02d6bb794ee26801a232ca4f4"><div class="ttname"><a href="classnlohmann_1_1basic__json_ab9f8c9a02d6bb794ee26801a232ca4f4.html#ab9f8c9a02d6bb794ee26801a232ca4f4">nlohmann::basic_json::erase</a></div><div class="ttdeci">IteratorType erase(IteratorType pos)</div><div class="ttdoc">remove element given an iterator </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l03937">json.hpp:3937</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a1a446a48beed4ea564addfd12d235793_html_a1a446a48beed4ea564addfd12d235793"><div class="ttname"><a href="classnlohmann_1_1basic__json_a1a446a48beed4ea564addfd12d235793.html#a1a446a48beed4ea564addfd12d235793">nlohmann::basic_json::get_allocator</a></div><div class="ttdeci">static allocator_type get_allocator()</div><div class="ttdoc">returns the allocator associated with the container </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l00293">json.hpp:293</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1json__reverse__iterator_a405fe504aa2a804c9df1c22a1ebd1283_html_a405fe504aa2a804c9df1c22a1ebd1283"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_a405fe504aa2a804c9df1c22a1ebd1283.html#a405fe504aa2a804c9df1c22a1ebd1283">nlohmann::basic_json::json_reverse_iterator::operator+</a></div><div class="ttdeci">json_reverse_iterator operator+(difference_type i) const</div><div class="ttdoc">add to iterator </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l07528">json.hpp:7528</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_afd4b7d7bcadc62da7c582fa36ba6805f_html_afd4b7d7bcadc62da7c582fa36ba6805f"><div class="ttname"><a href="classnlohmann_1_1basic__json_afd4b7d7bcadc62da7c582fa36ba6805f.html#afd4b7d7bcadc62da7c582fa36ba6805f">nlohmann::basic_json::dump</a></div><div class="ttdeci">string_t dump(const int indent=-1) const</div><div class="ttdoc">serialization </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l02200">json.hpp:2200</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_ae08fa64b9f0a5b5c878cbbabb7a296ee_html_ae08fa64b9f0a5b5c878cbbabb7a296ee"><div class="ttname"><a href="classnlohmann_1_1basic__json_ae08fa64b9f0a5b5c878cbbabb7a296ee.html#ae08fa64b9f0a5b5c878cbbabb7a296ee">nlohmann::basic_json::operator=</a></div><div class="ttdeci">reference &amp; operator=(basic_json other) noexcept(std::is_nothrow_move_constructible&lt; value_t &gt;::value and std::is_nothrow_move_assignable&lt; value_t &gt;::value and std::is_nothrow_move_constructible&lt; json_value &gt;::value and std::is_nothrow_move_assignable&lt; json_value &gt;::value)</div><div class="ttdoc">copy assignment </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l02095">json.hpp:2095</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a2f774129440c427253dc97406e2d9010_html_a2f774129440c427253dc97406e2d9010"><div class="ttname"><a href="classnlohmann_1_1basic__json_a2f774129440c427253dc97406e2d9010.html#a2f774129440c427253dc97406e2d9010">nlohmann::basic_json::swap</a></div><div class="ttdeci">void swap(reference other) noexcept(std::is_nothrow_move_constructible&lt; value_t &gt;::value and std::is_nothrow_move_assignable&lt; value_t &gt;::value and std::is_nothrow_move_constructible&lt; json_value &gt;::value and std::is_nothrow_move_assignable&lt; json_value &gt;::value)</div><div class="ttdoc">exchanges the values </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l05280">json.hpp:5280</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a1579a8f72a230358d6cd1a6e8a62859b_html_a1579a8f72a230358d6cd1a6e8a62859b"><div class="ttname"><a href="classnlohmann_1_1basic__json_a1579a8f72a230358d6cd1a6e8a62859b.html#a1579a8f72a230358d6cd1a6e8a62859b">nlohmann::basic_json::size_type</a></div><div class="ttdeci">std::size_t size_type</div><div class="ttdoc">a type to represent container sizes </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l00268">json.hpp:268</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a32350263eb105764844c5a85e156a255_html_a32350263eb105764844c5a85e156a255"><div class="ttname"><a href="classnlohmann_1_1basic__json_a32350263eb105764844c5a85e156a255.html#a32350263eb105764844c5a85e156a255">nlohmann::basic_json::basic_json</a></div><div class="ttdeci">JSON_DEPRECATED basic_json(std::istream &amp;i, const parser_callback_t cb=nullptr)</div><div class="ttdoc">construct a JSON value given an input stream </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l01949">json.hpp:1949</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1const__iterator_a6b950c6bc081ac1ec1540ec05ceb2603_html_a6b950c6bc081ac1ec1540ec05ceb2603"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1const__iterator_a6b950c6bc081ac1ec1540ec05ceb2603.html#a6b950c6bc081ac1ec1540ec05ceb2603">nlohmann::basic_json::const_iterator::const_iterator</a></div><div class="ttdeci">const_iterator(const iterator &amp;other) noexcept</div><div class="ttdoc">copy constructor given a non-const iterator </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l06773">json.hpp:6773</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a81aaaab0f3b326afda2d226daab4f1e1_html_a81aaaab0f3b326afda2d226daab4f1e1"><div class="ttname"><a href="classnlohmann_1_1basic__json_a81aaaab0f3b326afda2d226daab4f1e1.html#a81aaaab0f3b326afda2d226daab4f1e1">nlohmann::basic_json::basic_json</a></div><div class="ttdeci">basic_json(const CompatibleArrayType &amp;val)</div><div class="ttdoc">create an array (implicit) </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l01219">json.hpp:1219</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a112a2d8e76345ea64f71e2985fee4c52_html_a112a2d8e76345ea64f71e2985fee4c52"><div class="ttname"><a href="classnlohmann_1_1basic__json_a112a2d8e76345ea64f71e2985fee4c52.html#a112a2d8e76345ea64f71e2985fee4c52">nlohmann::basic_json::basic_json</a></div><div class="ttdeci">basic_json(size_type cnt, const basic_json &amp;val)</div><div class="ttdoc">construct an array with count copies of given value </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l01784">json.hpp:1784</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1json__reverse__iterator_a9ebc4c99e6fc90c965af0f39ad2ca70e_html_a9ebc4c99e6fc90c965af0f39ad2ca70e"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_a9ebc4c99e6fc90c965af0f39ad2ca70e.html#a9ebc4c99e6fc90c965af0f39ad2ca70e">nlohmann::basic_json::json_reverse_iterator::base_iterator</a></div><div class="ttdeci">std::reverse_iterator&lt; Base &gt; base_iterator</div><div class="ttdoc">shortcut to the reverse iterator adaptor </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l07480">json.hpp:7480</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1json__reverse__iterator_a2f5d8a81d607f9222d1ade23f24cc093_html_a2f5d8a81d607f9222d1ade23f24cc093"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_a2f5d8a81d607f9222d1ade23f24cc093.html#a2f5d8a81d607f9222d1ade23f24cc093">nlohmann::basic_json::json_reverse_iterator::key</a></div><div class="ttdeci">object_t::key_type key() const</div><div class="ttdoc">return the key of an object iterator </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l07556">json.hpp:7556</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_aadb4e5be88221e5e28cdb752332f3d13_html_aadb4e5be88221e5e28cdb752332f3d13"><div class="ttname"><a href="classnlohmann_1_1basic__json_aadb4e5be88221e5e28cdb752332f3d13.html#aadb4e5be88221e5e28cdb752332f3d13">nlohmann::basic_json::insert</a></div><div class="ttdeci">iterator insert(const_iterator pos, std::initializer_list&lt; basic_json &gt; ilist)</div><div class="ttdoc">inserts elements </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l05243">json.hpp:5243</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a9d1b58099dc64695fcf2847ab0b2a7c7_html_a9d1b58099dc64695fcf2847ab0b2a7c7"><div class="ttname"><a href="classnlohmann_1_1basic__json_a9d1b58099dc64695fcf2847ab0b2a7c7.html#a9d1b58099dc64695fcf2847ab0b2a7c7">nlohmann::basic_json::pointer</a></div><div class="ttdeci">typename std::allocator_traits&lt; allocator_type &gt;::pointer pointer</div><div class="ttdoc">the type of an element pointer </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l00274">json.hpp:274</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a7f7bbb3a9efef2e2442f538a24c1c47b_html_a7f7bbb3a9efef2e2442f538a24c1c47b"><div class="ttname"><a href="classnlohmann_1_1basic__json_a7f7bbb3a9efef2e2442f538a24c1c47b.html#a7f7bbb3a9efef2e2442f538a24c1c47b">nlohmann::basic_json::insert</a></div><div class="ttdeci">iterator insert(const_iterator pos, const basic_json &amp;val)</div><div class="ttdoc">inserts element </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l05078">json.hpp:5078</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a74a943800c7f103d0990d7eef82c6453_html_a74a943800c7f103d0990d7eef82c6453"><div class="ttname"><a href="classnlohmann_1_1basic__json_a74a943800c7f103d0990d7eef82c6453.html#a74a943800c7f103d0990d7eef82c6453">nlohmann::basic_json::operator&gt;=</a></div><div class="ttdeci">friend bool operator&gt;=(const_reference lhs, const_reference rhs) noexcept</div><div class="ttdoc">comparison: greater than or equal </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l05781">json.hpp:5781</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_aacd442b66140c764c594ac8ad7dfd5b3_html_aacd442b66140c764c594ac8ad7dfd5b3"><div class="ttname"><a href="classnlohmann_1_1basic__json_aacd442b66140c764c594ac8ad7dfd5b3.html#aacd442b66140c764c594ac8ad7dfd5b3">nlohmann::basic_json::operator&lt;</a></div><div class="ttdeci">friend bool operator&lt;(const_reference lhs, const_reference rhs) noexcept</div><div class="ttdoc">comparison: less than </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l05642">json.hpp:5642</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1iterator_a050b7fa21051ea57e5b0cc03668b5d4a_html_a050b7fa21051ea57e5b0cc03668b5d4a"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1iterator_a050b7fa21051ea57e5b0cc03668b5d4a.html#a050b7fa21051ea57e5b0cc03668b5d4a">nlohmann::basic_json::iterator::operator++</a></div><div class="ttdeci">iterator &amp; operator++()</div><div class="ttdoc">pre-increment (++it) </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l07388">json.hpp:7388</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1iterator_a2943e49b3d88e6ee5793c5923ab2ede9_html_a2943e49b3d88e6ee5793c5923ab2ede9"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1iterator_a2943e49b3d88e6ee5793c5923ab2ede9.html#a2943e49b3d88e6ee5793c5923ab2ede9">nlohmann::basic_json::iterator::operator++</a></div><div class="ttdeci">iterator operator++(int)</div><div class="ttdoc">post-increment (it++) </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l07380">json.hpp:7380</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a15e70a44e2a8db929694819fed256653_html_a15e70a44e2a8db929694819fed256653"><div class="ttname"><a href="classnlohmann_1_1basic__json_a15e70a44e2a8db929694819fed256653.html#a15e70a44e2a8db929694819fed256653">nlohmann::basic_json::rbegin</a></div><div class="ttdeci">const_reverse_iterator rbegin() const noexcept</div><div class="ttdoc">returns a const reverse iterator to the last element </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l04450">json.hpp:4450</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a73e150cbcba5643cb89de8f515eb64e2_html_a73e150cbcba5643cb89de8f515eb64e2"><div class="ttname"><a href="classnlohmann_1_1basic__json_a73e150cbcba5643cb89de8f515eb64e2.html#a73e150cbcba5643cb89de8f515eb64e2">nlohmann::basic_json::basic_json</a></div><div class="ttdeci">basic_json(basic_json &amp;&amp;other) noexcept</div><div class="ttdoc">move constructor </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l02058">json.hpp:2058</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1const__iterator_a6cab1c2ed7e2a014980e2a5717f43a64_html_a6cab1c2ed7e2a014980e2a5717f43a64"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1const__iterator_a6cab1c2ed7e2a014980e2a5717f43a64.html#a6cab1c2ed7e2a014980e2a5717f43a64">nlohmann::basic_json::const_iterator::operator--</a></div><div class="ttdeci">const_iterator operator--(int)</div><div class="ttdoc">post-decrement (it) </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l07020">json.hpp:7020</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a7ed92d56cb313b243c1917696ffdf074_html_a7ed92d56cb313b243c1917696ffdf074"><div class="ttname"><a href="classnlohmann_1_1basic__json_a7ed92d56cb313b243c1917696ffdf074.html#a7ed92d56cb313b243c1917696ffdf074">nlohmann::basic_json::at</a></div><div class="ttdeci">reference at(const typename object_t::key_type &amp;key)</div><div class="ttdoc">access specified object element with bounds checking </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l03241">json.hpp:3241</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a231b02148577b69a154b2ce2c87a5522_html_a231b02148577b69a154b2ce2c87a5522aa8cfde6331bd59eb2ac96f8911c4b666"><div class="ttname"><a href="classnlohmann_1_1basic__json_a231b02148577b69a154b2ce2c87a5522.html#a231b02148577b69a154b2ce2c87a5522aa8cfde6331bd59eb2ac96f8911c4b666">nlohmann::basic_json::value_t::object</a></div><div class="ttdoc">object (unordered set of name/value pairs) </div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a947b5b2a832e490858dbdddfe7085831_html_a947b5b2a832e490858dbdddfe7085831"><div class="ttname"><a href="classnlohmann_1_1basic__json_a947b5b2a832e490858dbdddfe7085831.html#a947b5b2a832e490858dbdddfe7085831">nlohmann::basic_json::~basic_json</a></div><div class="ttdeci">~basic_json()</div><div class="ttdoc">destructor </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l02128">json.hpp:2128</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1iterator_ab4f238aa5fcf452b1884b748b0395b1f_html_ab4f238aa5fcf452b1884b748b0395b1f"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1iterator_ab4f238aa5fcf452b1884b748b0395b1f.html#ab4f238aa5fcf452b1884b748b0395b1f">nlohmann::basic_json::iterator::operator--</a></div><div class="ttdeci">iterator operator--(int)</div><div class="ttdoc">post-decrement (it) </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l07395">json.hpp:7395</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1iterator_a790f550ff168095c83c2e459c575916c_html_a790f550ff168095c83c2e459c575916c"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1iterator_a790f550ff168095c83c2e459c575916c.html#a790f550ff168095c83c2e459c575916c">nlohmann::basic_json::iterator::operator-</a></div><div class="ttdeci">iterator operator-(difference_type i)</div><div class="ttdoc">subtract from iterator </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l07432">json.hpp:7432</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1const__iterator_adeb2ff3fdf3cc301b72db109934c9199_html_adeb2ff3fdf3cc301b72db109934c9199"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1const__iterator_adeb2ff3fdf3cc301b72db109934c9199.html#adeb2ff3fdf3cc301b72db109934c9199">nlohmann::basic_json::const_iterator::operator--</a></div><div class="ttdeci">const_iterator &amp; operator--()</div><div class="ttdoc">pre-decrement (it) </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l07031">json.hpp:7031</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_ac8d45b57874b4a6e9c07f7d3b5daa1f9_html_ac8d45b57874b4a6e9c07f7d3b5daa1f9"><div class="ttname"><a href="classnlohmann_1_1basic__json_ac8d45b57874b4a6e9c07f7d3b5daa1f9.html#ac8d45b57874b4a6e9c07f7d3b5daa1f9">nlohmann::basic_json::value_type</a></div><div class="ttdeci">basic_json value_type</div><div class="ttdoc">the type of elements in a basic_json container </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l00258">json.hpp:258</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a9e35475e2027520a78e09f460dbe048a_html_a9e35475e2027520a78e09f460dbe048a"><div class="ttname"><a href="classnlohmann_1_1basic__json_a9e35475e2027520a78e09f460dbe048a.html#a9e35475e2027520a78e09f460dbe048a">nlohmann::basic_json::parser_callback_t</a></div><div class="ttdeci">std::function&lt; bool(int depth, parse_event_t event, basic_json &amp;parsed)&gt; parser_callback_t</div><div class="ttdoc">per-element parser callback type </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l01016">json.hpp:1016</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_aa44ce84b9ac506b905b8fb56c9a0989d_html_aa44ce84b9ac506b905b8fb56c9a0989d"><div class="ttname"><a href="classnlohmann_1_1basic__json_aa44ce84b9ac506b905b8fb56c9a0989d.html#aa44ce84b9ac506b905b8fb56c9a0989d">nlohmann::basic_json::allocator_type</a></div><div class="ttdeci">AllocatorType&lt; basic_json &gt; allocator_type</div><div class="ttdoc">the allocator type </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l00271">json.hpp:271</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_ab63e618bbb0371042b1bec17f5891f42_html_ab63e618bbb0371042b1bec17f5891f42"><div class="ttname"><a href="classnlohmann_1_1basic__json_ab63e618bbb0371042b1bec17f5891f42.html#ab63e618bbb0371042b1bec17f5891f42">nlohmann::basic_json::string_t</a></div><div class="ttdeci">StringType string_t</div><div class="ttdoc">a type for a string </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l00488">json.hpp:488</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a80c21170db6b5ffd9274b3f351cebadc_html_a80c21170db6b5ffd9274b3f351cebadc"><div class="ttname"><a href="classnlohmann_1_1basic__json_a80c21170db6b5ffd9274b3f351cebadc.html#a80c21170db6b5ffd9274b3f351cebadc">nlohmann::basic_json::operator+=</a></div><div class="ttdeci">reference operator+=(const basic_json &amp;val)</div><div class="ttdoc">add an object to an array </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l04952">json.hpp:4952</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1const__iterator_a2b6561a7b39b9aa3a220aa3b6e2d9589_html_a2b6561a7b39b9aa3a220aa3b6e2d9589"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1const__iterator_a2b6561a7b39b9aa3a220aa3b6e2d9589.html#a2b6561a7b39b9aa3a220aa3b6e2d9589">nlohmann::basic_json::const_iterator::operator=</a></div><div class="ttdeci">const_iterator &amp; operator=(const_iterator other) noexcept(std::is_nothrow_move_constructible&lt; pointer &gt;::value and std::is_nothrow_move_assignable&lt; pointer &gt;::value and std::is_nothrow_move_constructible&lt; internal_iterator &gt;::value and std::is_nothrow_move_assignable&lt; internal_iterator &gt;::value)</div><div class="ttdoc">copy assignment </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l06815">json.hpp:6815</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_aeffd70f622f8f2a51fd3d95af64b63a7_html_aeffd70f622f8f2a51fd3d95af64b63a7"><div class="ttname"><a href="classnlohmann_1_1basic__json_aeffd70f622f8f2a51fd3d95af64b63a7.html#aeffd70f622f8f2a51fd3d95af64b63a7">nlohmann::basic_json::parse</a></div><div class="ttdeci">static basic_json parse(const ContiguousContainer &amp;c, const parser_callback_t cb=nullptr)</div><div class="ttdoc">deserialize from a container with contiguous storage </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l06097">json.hpp:6097</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_aa0033766b4d3134b9bb57d81762d75a2_html_aa0033766b4d3134b9bb57d81762d75a2"><div class="ttname"><a href="classnlohmann_1_1basic__json_aa0033766b4d3134b9bb57d81762d75a2.html#aa0033766b4d3134b9bb57d81762d75a2">nlohmann::basic_json::operator+=</a></div><div class="ttdeci">reference operator+=(std::initializer_list&lt; basic_json &gt; init)</div><div class="ttdoc">add an object to an object </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l05050">json.hpp:5050</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a3ec8e17be8732fe436e9d6733f52b7a3_html_a3ec8e17be8732fe436e9d6733f52b7a3"><div class="ttname"><a href="classnlohmann_1_1basic__json_a3ec8e17be8732fe436e9d6733f52b7a3.html#a3ec8e17be8732fe436e9d6733f52b7a3">nlohmann::basic_json::reference</a></div><div class="ttdeci">value_type &amp; reference</div><div class="ttdoc">the type of an element reference </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l00261">json.hpp:261</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1const__iterator_abae808b09a822cc3da4cef0efb89115d_html_abae808b09a822cc3da4cef0efb89115d"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1const__iterator_abae808b09a822cc3da4cef0efb89115d.html#abae808b09a822cc3da4cef0efb89115d">nlohmann::basic_json::const_iterator::operator-&gt;</a></div><div class="ttdeci">pointer operator-&gt;() const</div><div class="ttdoc">dereference the iterator </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l06941">json.hpp:6941</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_ab5386a09a24b341435172f43962a43f2_html_ab5386a09a24b341435172f43962a43f2"><div class="ttname"><a href="classnlohmann_1_1basic__json_ab5386a09a24b341435172f43962a43f2.html#ab5386a09a24b341435172f43962a43f2">nlohmann::basic_json::get_ref</a></div><div class="ttdeci">ReferenceType get_ref() const</div><div class="ttdoc">get a reference value (implicit) </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l03071">json.hpp:3071</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1iterator_ac688806417f3b4e17c4eb1b661b522f1_html_ac688806417f3b4e17c4eb1b661b522f1"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1iterator_ac688806417f3b4e17c4eb1b661b522f1.html#ac688806417f3b4e17c4eb1b661b522f1">nlohmann::basic_json::iterator::value</a></div><div class="ttdeci">reference value() const</div><div class="ttdoc">return the value of an iterator </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l07452">json.hpp:7452</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a34d6a60dd99e9f33b8273a1c8db5669b_html_a34d6a60dd99e9f33b8273a1c8db5669b"><div class="ttname"><a href="classnlohmann_1_1basic__json_a34d6a60dd99e9f33b8273a1c8db5669b.html#a34d6a60dd99e9f33b8273a1c8db5669b">nlohmann::basic_json::operator&gt;&gt;</a></div><div class="ttdeci">friend std::ostream &amp; operator&gt;&gt;(const basic_json &amp;j, std::ostream &amp;o)</div><div class="ttdoc">serialize to stream </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l05854">json.hpp:5854</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a0ea8a1ecca4b3cb0ba09ad7552c364b6_html_a0ea8a1ecca4b3cb0ba09ad7552c364b6"><div class="ttname"><a href="classnlohmann_1_1basic__json_a0ea8a1ecca4b3cb0ba09ad7552c364b6.html#a0ea8a1ecca4b3cb0ba09ad7552c364b6">nlohmann::basic_json::size</a></div><div class="ttdeci">size_type size() const noexcept</div><div class="ttdoc">returns the number of elements </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l04694">json.hpp:4694</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1iterator_a1de0975e812c83e74d118b3e1063f335_html_a1de0975e812c83e74d118b3e1063f335"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1iterator_a1de0975e812c83e74d118b3e1063f335.html#a1de0975e812c83e74d118b3e1063f335">nlohmann::basic_json::iterator::iterator</a></div><div class="ttdeci">iterator(const iterator &amp;other) noexcept</div><div class="ttdoc">copy constructor </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l07351">json.hpp:7351</a></div></div>
<div class="ttc" id="namespacenlohmann_html"><div class="ttname"><a href="namespacenlohmann.html">nlohmann</a></div><div class="ttdoc">namespace for Niels Lohmann </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l00092">json.hpp:92</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1const__iterator_a49d7c3e9ef3280df03052cce988b792f_html_a49d7c3e9ef3280df03052cce988b792f"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1const__iterator_a49d7c3e9ef3280df03052cce988b792f.html#a49d7c3e9ef3280df03052cce988b792f">nlohmann::basic_json::const_iterator::difference_type</a></div><div class="ttdeci">typename basic_json::difference_type difference_type</div><div class="ttdoc">a type to represent differences between iterators </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l06724">json.hpp:6724</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a409e854d754f5684b2cce74ee20dbc3b_html_a409e854d754f5684b2cce74ee20dbc3b"><div class="ttname"><a href="classnlohmann_1_1basic__json_a409e854d754f5684b2cce74ee20dbc3b.html#a409e854d754f5684b2cce74ee20dbc3b">nlohmann::basic_json::is_string</a></div><div class="ttdeci">constexpr bool is_string() const noexcept</div><div class="ttdoc">return whether value is a string </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l02525">json.hpp:2525</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a86089c703a2e563b9f760c2f8408efa7_html_a86089c703a2e563b9f760c2f8408efa7"><div class="ttname"><a href="classnlohmann_1_1basic__json_a86089c703a2e563b9f760c2f8408efa7.html#a86089c703a2e563b9f760c2f8408efa7">nlohmann::basic_json::swap</a></div><div class="ttdeci">void swap(string_t &amp;other)</div><div class="ttdoc">exchanges the values </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l05378">json.hpp:5378</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1json__reverse__iterator_a3697e7d404d29c4ecc142b531e80da1e_html_a3697e7d404d29c4ecc142b531e80da1e"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_a3697e7d404d29c4ecc142b531e80da1e.html#a3697e7d404d29c4ecc142b531e80da1e">nlohmann::basic_json::json_reverse_iterator::operator[]</a></div><div class="ttdeci">reference operator[](difference_type n) const</div><div class="ttdoc">access to successor </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l07550">json.hpp:7550</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_ad2eddc2c13ab084f067eaba65d381ad2_html_ad2eddc2c13ab084f067eaba65d381ad2"><div class="ttname"><a href="classnlohmann_1_1basic__json_ad2eddc2c13ab084f067eaba65d381ad2.html#ad2eddc2c13ab084f067eaba65d381ad2">nlohmann::basic_json::basic_json</a></div><div class="ttdeci">basic_json(const CompatibleNumberIntegerType val) noexcept</div><div class="ttdoc">create an integer number (implicit) </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l01426">json.hpp:1426</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a3f7029fe6d929cf2fa48df1233ccd761_html_a3f7029fe6d929cf2fa48df1233ccd761"><div class="ttname"><a href="classnlohmann_1_1basic__json_a3f7029fe6d929cf2fa48df1233ccd761.html#a3f7029fe6d929cf2fa48df1233ccd761">nlohmann::basic_json::at</a></div><div class="ttdeci">const_reference at(size_type idx) const</div><div class="ttdoc">access specified array element with bounds checking </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l03194">json.hpp:3194</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1const__iterator_a0f42e99f14ac0a46456cf96fb384f290_html_a0f42e99f14ac0a46456cf96fb384f290"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1const__iterator_a0f42e99f14ac0a46456cf96fb384f290.html#a0f42e99f14ac0a46456cf96fb384f290">nlohmann::basic_json::const_iterator::value</a></div><div class="ttdeci">reference value() const</div><div class="ttdoc">return the value of an iterator </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l07311">json.hpp:7311</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a407e73a037e6e3067ef7aa2c25a79f39_html_a407e73a037e6e3067ef7aa2c25a79f39"><div class="ttname"><a href="classnlohmann_1_1basic__json_a407e73a037e6e3067ef7aa2c25a79f39.html#a407e73a037e6e3067ef7aa2c25a79f39">nlohmann::basic_json::value</a></div><div class="ttdeci">ValueType value(const typename object_t::key_type &amp;key, ValueType default_value) const</div><div class="ttdoc">access specified object element with default value </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l03699">json.hpp:3699</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a95d9c6a59674193aa55798968d1a9de6_html_a95d9c6a59674193aa55798968d1a9de6"><div class="ttname"><a href="classnlohmann_1_1basic__json_a95d9c6a59674193aa55798968d1a9de6.html#a95d9c6a59674193aa55798968d1a9de6">nlohmann::basic_json::operator[]</a></div><div class="ttdeci">const_reference operator[](T *key) const</div><div class="ttdoc">read-only access specified object element </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l03635">json.hpp:3635</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1json__pointer_html"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1json__pointer.html">nlohmann::basic_json::json_pointer</a></div><div class="ttdoc">JSON Pointer. </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l09284">json.hpp:9284</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a74a0013e847fdc574b48f931f0e757e1_html_a74a0013e847fdc574b48f931f0e757e1"><div class="ttname"><a href="classnlohmann_1_1basic__json_a74a0013e847fdc574b48f931f0e757e1.html#a74a0013e847fdc574b48f931f0e757e1">nlohmann::basic_json::number_float_t</a></div><div class="ttdeci">NumberFloatType number_float_t</div><div class="ttdoc">a type for a number (floating-point) </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l00725">json.hpp:725</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a231b02148577b69a154b2ce2c87a5522_html_a231b02148577b69a154b2ce2c87a5522"><div class="ttname"><a href="classnlohmann_1_1basic__json_a231b02148577b69a154b2ce2c87a5522.html#a231b02148577b69a154b2ce2c87a5522">nlohmann::basic_json::value_t</a></div><div class="ttdeci">value_t</div><div class="ttdoc">the JSON type enumeration </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l00756">json.hpp:756</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a62ccf5b9b3674aec2403fbc02da03db8_html_a62ccf5b9b3674aec2403fbc02da03db8"><div class="ttname"><a href="classnlohmann_1_1basic__json_a62ccf5b9b3674aec2403fbc02da03db8.html#a62ccf5b9b3674aec2403fbc02da03db8">nlohmann::basic_json::rbegin</a></div><div class="ttdeci">reverse_iterator rbegin() noexcept</div><div class="ttdoc">returns an iterator to the reverse-beginning </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l04442">json.hpp:4442</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_aec316934a555dd1acdd3600e5d4a4cdf_html_aec316934a555dd1acdd3600e5d4a4cdf"><div class="ttname"><a href="classnlohmann_1_1basic__json_aec316934a555dd1acdd3600e5d4a4cdf.html#aec316934a555dd1acdd3600e5d4a4cdf">nlohmann::basic_json::difference_type</a></div><div class="ttdeci">std::ptrdiff_t difference_type</div><div class="ttdoc">a type to represent differences between iterators </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l00266">json.hpp:266</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1const__iterator_af3ef241a9e26398ea0cf45026287c2ed_html_af3ef241a9e26398ea0cf45026287c2ed"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1const__iterator_af3ef241a9e26398ea0cf45026287c2ed.html#af3ef241a9e26398ea0cf45026287c2ed">nlohmann::basic_json::const_iterator::operator-</a></div><div class="ttdeci">difference_type operator-(const const_iterator &amp;other) const</div><div class="ttdoc">return difference </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l07227">json.hpp:7227</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a8209621de6184d9eabe136b7c8f61935_html_a8209621de6184d9eabe136b7c8f61935"><div class="ttname"><a href="classnlohmann_1_1basic__json_a8209621de6184d9eabe136b7c8f61935.html#a8209621de6184d9eabe136b7c8f61935">nlohmann::basic_json::swap</a></div><div class="ttdeci">void swap(array_t &amp;other)</div><div class="ttdoc">exchanges the values </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l05312">json.hpp:5312</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1iterator_a72ce0abec8c72610925d83a9b309f3e4_html_a72ce0abec8c72610925d83a9b309f3e4"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1iterator_a72ce0abec8c72610925d83a9b309f3e4.html#a72ce0abec8c72610925d83a9b309f3e4">nlohmann::basic_json::iterator::operator[]</a></div><div class="ttdeci">reference operator[](difference_type n) const</div><div class="ttdoc">access to successor </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l07446">json.hpp:7446</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1json__reverse__iterator_a7265535f39299824f9712a2ca15013c3_html_a7265535f39299824f9712a2ca15013c3"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_a7265535f39299824f9712a2ca15013c3.html#a7265535f39299824f9712a2ca15013c3">nlohmann::basic_json::json_reverse_iterator::reference</a></div><div class="ttdeci">typename Base::reference reference</div><div class="ttdoc">the reference type for the pointed-to element </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l07482">json.hpp:7482</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a486b96adbf4886c38e38c952394a220f_html_a486b96adbf4886c38e38c952394a220f"><div class="ttname"><a href="classnlohmann_1_1basic__json_a486b96adbf4886c38e38c952394a220f.html#a486b96adbf4886c38e38c952394a220f">nlohmann::basic_json::push_back</a></div><div class="ttdeci">void push_back(basic_json &amp;&amp;val)</div><div class="ttdoc">add an object to an array </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l04892">json.hpp:4892</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a231b02148577b69a154b2ce2c87a5522_html_a231b02148577b69a154b2ce2c87a5522af1f713c9e000f5d3f280adbd124df4f5"><div class="ttname"><a href="classnlohmann_1_1basic__json_a231b02148577b69a154b2ce2c87a5522.html#a231b02148577b69a154b2ce2c87a5522af1f713c9e000f5d3f280adbd124df4f5">nlohmann::basic_json::value_t::array</a></div><div class="ttdoc">array (ordered collection of values) </div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1json__reverse__iterator_a4aede52d6ee253a510897518b59e09c0_html_a4aede52d6ee253a510897518b59e09c0"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_a4aede52d6ee253a510897518b59e09c0.html#a4aede52d6ee253a510897518b59e09c0">nlohmann::basic_json::json_reverse_iterator::operator++</a></div><div class="ttdeci">json_reverse_iterator &amp; operator++()</div><div class="ttdoc">pre-increment (++it) </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l07501">json.hpp:7501</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1iterator_a381124603cecc478e8746dcf4e11728c_html_a381124603cecc478e8746dcf4e11728c"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1iterator_a381124603cecc478e8746dcf4e11728c.html#a381124603cecc478e8746dcf4e11728c">nlohmann::basic_json::iterator::operator-</a></div><div class="ttdeci">difference_type operator-(const iterator &amp;other) const</div><div class="ttdoc">return difference </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l07440">json.hpp:7440</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a122640e7e2db1814fc7bbb3c122ec76e_html_a122640e7e2db1814fc7bbb3c122ec76e"><div class="ttname"><a href="classnlohmann_1_1basic__json_a122640e7e2db1814fc7bbb3c122ec76e.html#a122640e7e2db1814fc7bbb3c122ec76e">nlohmann::basic_json::operator==</a></div><div class="ttdeci">friend bool operator==(const_reference lhs, const_reference rhs) noexcept</div><div class="ttdoc">comparison: equal </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l05458">json.hpp:5458</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1iterator_a51b0ed345317cfd1b2386f481d774477_html_a51b0ed345317cfd1b2386f481d774477"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1iterator_a51b0ed345317cfd1b2386f481d774477.html#a51b0ed345317cfd1b2386f481d774477">nlohmann::basic_json::iterator::operator=</a></div><div class="ttdeci">iterator &amp; operator=(iterator other) noexcept(std::is_nothrow_move_constructible&lt; pointer &gt;::value and std::is_nothrow_move_assignable&lt; pointer &gt;::value and std::is_nothrow_move_constructible&lt; internal_iterator &gt;::value and std::is_nothrow_move_assignable&lt; internal_iterator &gt;::value)</div><div class="ttdoc">copy assignment </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l07356">json.hpp:7356</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a0923f9749409345a21f8cb15ee95fc0d_html_a0923f9749409345a21f8cb15ee95fc0d"><div class="ttname"><a href="classnlohmann_1_1basic__json_a0923f9749409345a21f8cb15ee95fc0d.html#a0923f9749409345a21f8cb15ee95fc0d">nlohmann::basic_json::parse</a></div><div class="ttdeci">static basic_json parse(std::istream &amp;i, const parser_callback_t cb=nullptr)</div><div class="ttdoc">deserialize from stream </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l05965">json.hpp:5965</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a576ca17f297a7a43200088c24b8437e6_html_a576ca17f297a7a43200088c24b8437e6"><div class="ttname"><a href="classnlohmann_1_1basic__json_a576ca17f297a7a43200088c24b8437e6.html#a576ca17f297a7a43200088c24b8437e6">nlohmann::basic_json::value</a></div><div class="ttdeci">ValueType value(const json_pointer &amp;ptr, ValueType default_value) const</div><div class="ttdoc">access specified object element via JSON Pointer with default value </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l03773">json.hpp:3773</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a6eb50ec247cc53bdd46fb13e38e0de04_html_a6eb50ec247cc53bdd46fb13e38e0de04"><div class="ttname"><a href="classnlohmann_1_1basic__json_a6eb50ec247cc53bdd46fb13e38e0de04.html#a6eb50ec247cc53bdd46fb13e38e0de04">nlohmann::basic_json::operator[]</a></div><div class="ttdeci">const_reference operator[](const typename object_t::key_type &amp;key) const</div><div class="ttdoc">read-only access specified object element </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l03473">json.hpp:3473</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1const__iterator_a2defc155f17e8325747d2f884bb60eab_html_a2defc155f17e8325747d2f884bb60eab"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1const__iterator_a2defc155f17e8325747d2f884bb60eab.html#a2defc155f17e8325747d2f884bb60eab">nlohmann::basic_json::const_iterator::operator!=</a></div><div class="ttdeci">bool operator!=(const const_iterator &amp;other) const</div><div class="ttdoc">comparison: not equal </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l07096">json.hpp:7096</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a68a5f34b164a07b8ced13fcf2b7ec834_html_a68a5f34b164a07b8ced13fcf2b7ec834"><div class="ttname"><a href="classnlohmann_1_1basic__json_a68a5f34b164a07b8ced13fcf2b7ec834.html#a68a5f34b164a07b8ced13fcf2b7ec834">nlohmann::basic_json::basic_json</a></div><div class="ttdeci">basic_json(const CompatibleNumberUnsignedType val) noexcept</div><div class="ttdoc">create an unsigned number (implicit) </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l01484">json.hpp:1484</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_adade77415e7f7bf08a9b5150c742714d_html_adade77415e7f7bf08a9b5150c742714d"><div class="ttname"><a href="classnlohmann_1_1basic__json_adade77415e7f7bf08a9b5150c742714d.html#adade77415e7f7bf08a9b5150c742714d">nlohmann::basic_json::is_boolean</a></div><div class="ttdeci">constexpr bool is_boolean() const noexcept</div><div class="ttdoc">return whether value is a boolean </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l02344">json.hpp:2344</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1const__iterator_acf1fcb73ff770117446670cefc927dd2_html_acf1fcb73ff770117446670cefc927dd2"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1const__iterator_acf1fcb73ff770117446670cefc927dd2.html#acf1fcb73ff770117446670cefc927dd2">nlohmann::basic_json::const_iterator::operator==</a></div><div class="ttdeci">bool operator==(const const_iterator &amp;other) const</div><div class="ttdoc">comparison: equal </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l07063">json.hpp:7063</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1const__iterator_ab31ede5b25ad5e8a3bb06f6eadb50923_html_ab31ede5b25ad5e8a3bb06f6eadb50923"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1const__iterator_ab31ede5b25ad5e8a3bb06f6eadb50923.html#ab31ede5b25ad5e8a3bb06f6eadb50923">nlohmann::basic_json::const_iterator::operator&lt;=</a></div><div class="ttdeci">bool operator&lt;=(const const_iterator &amp;other) const</div><div class="ttdoc">comparison: less than or equal </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l07138">json.hpp:7138</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a060b33f8f255986088652625f9d50681_html_a060b33f8f255986088652625f9d50681"><div class="ttname"><a href="classnlohmann_1_1basic__json_a060b33f8f255986088652625f9d50681.html#a060b33f8f255986088652625f9d50681">nlohmann::basic_json::crbegin</a></div><div class="ttdeci">const_reverse_iterator crbegin() const noexcept</div><div class="ttdoc">returns a const reverse iterator to the last element </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l04516">json.hpp:4516</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a2dff00633c2e914fa464f23b4bce6bcb_html_a2dff00633c2e914fa464f23b4bce6bcb"><div class="ttname"><a href="classnlohmann_1_1basic__json_a2dff00633c2e914fa464f23b4bce6bcb.html#a2dff00633c2e914fa464f23b4bce6bcb">nlohmann::basic_json::value</a></div><div class="ttdeci">string_t value(const json_pointer &amp;ptr, const char *default_value) const</div><div class="ttdoc">overload for a default value of type const char* </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l03798">json.hpp:3798</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1const__iterator_ada3100cdb8700566051828f1355fa745_html_ada3100cdb8700566051828f1355fa745"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1const__iterator_ada3100cdb8700566051828f1355fa745.html#ada3100cdb8700566051828f1355fa745">nlohmann::basic_json::const_iterator::basic_json</a></div><div class="ttdeci">friend class basic_json</div><div class="ttdoc">allow basic_json to access private members </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l06718">json.hpp:6718</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1const__iterator_a70caca372e345c9c700ab849c3d9463b_html_a70caca372e345c9c700ab849c3d9463b"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1const__iterator_a70caca372e345c9c700ab849c3d9463b.html#a70caca372e345c9c700ab849c3d9463b">nlohmann::basic_json::const_iterator::operator[]</a></div><div class="ttdeci">reference operator[](difference_type n) const</div><div class="ttdoc">access to successor </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l07254">json.hpp:7254</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a231b02148577b69a154b2ce2c87a5522_html_a231b02148577b69a154b2ce2c87a5522a37a6259cc0c1dae299a7866489dff0bd"><div class="ttname"><a href="classnlohmann_1_1basic__json_a231b02148577b69a154b2ce2c87a5522.html#a231b02148577b69a154b2ce2c87a5522a37a6259cc0c1dae299a7866489dff0bd">nlohmann::basic_json::value_t::null</a></div><div class="ttdoc">null value </div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a24d7df0b5b41319dbab2713d3641faf7_html_a24d7df0b5b41319dbab2713d3641faf7"><div class="ttname"><a href="classnlohmann_1_1basic__json_a24d7df0b5b41319dbab2713d3641faf7.html#a24d7df0b5b41319dbab2713d3641faf7">nlohmann::basic_json::operator&lt;</a></div><div class="ttdeci">friend bool operator&lt;(const value_t lhs, const value_t rhs) noexcept</div><div class="ttdoc">comparison operator for JSON types </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l05411">json.hpp:5411</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a2badcf191deabf579abcf8d3654da26f_html_a2badcf191deabf579abcf8d3654da26f"><div class="ttname"><a href="classnlohmann_1_1basic__json_a2badcf191deabf579abcf8d3654da26f.html#a2badcf191deabf579abcf8d3654da26f">nlohmann::basic_json::basic_json</a></div><div class="ttdeci">basic_json(const number_float_t val) noexcept</div><div class="ttdoc">create a floating-point number (explicit) </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l01515">json.hpp:1515</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_ae347859ec88176ef76a0cbe5b4514fcf_html_ae347859ec88176ef76a0cbe5b4514fcf"><div class="ttname"><a href="classnlohmann_1_1basic__json_ae347859ec88176ef76a0cbe5b4514fcf.html#ae347859ec88176ef76a0cbe5b4514fcf">nlohmann::basic_json::operator!=</a></div><div class="ttdeci">friend bool operator!=(const_reference v, std::nullptr_t) noexcept</div><div class="ttdoc">comparison: not equal </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l05604">json.hpp:5604</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1iterator_a56952f8d5702541f0d88e6a764d2ae36_html_a56952f8d5702541f0d88e6a764d2ae36"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1iterator_a56952f8d5702541f0d88e6a764d2ae36.html#a56952f8d5702541f0d88e6a764d2ae36">nlohmann::basic_json::iterator::operator+</a></div><div class="ttdeci">iterator operator+(difference_type i)</div><div class="ttdoc">add to iterator </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l07424">json.hpp:7424</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a4bbdfd6dd8d2e6fc9ac5d81ef61ba3fe_html_a4bbdfd6dd8d2e6fc9ac5d81ef61ba3fe"><div class="ttname"><a href="classnlohmann_1_1basic__json_a4bbdfd6dd8d2e6fc9ac5d81ef61ba3fe.html#a4bbdfd6dd8d2e6fc9ac5d81ef61ba3fe">nlohmann::basic_json::basic_json</a></div><div class="ttdeci">basic_json(const CompatibleNumberFloatType val) noexcept</div><div class="ttdoc">create an floating-point number (implicit) </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l01562">json.hpp:1562</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_afeb998aec45296bc2050bd1c41ef41eb_html_afeb998aec45296bc2050bd1c41ef41eb"><div class="ttname"><a href="classnlohmann_1_1basic__json_afeb998aec45296bc2050bd1c41ef41eb.html#afeb998aec45296bc2050bd1c41ef41eb">nlohmann::basic_json::basic_json</a></div><div class="ttdeci">basic_json(std::initializer_list&lt; basic_json &gt; init, bool type_deduction=true, value_t manual_type=value_t::array)</div><div class="ttdoc">create a container (array or object) from an initializer list </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l01637">json.hpp:1637</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1iterator_a085fe0d8cf459b5b1ae7b518b933ae7d_html_a085fe0d8cf459b5b1ae7b518b933ae7d"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1iterator_a085fe0d8cf459b5b1ae7b518b933ae7d.html#a085fe0d8cf459b5b1ae7b518b933ae7d">nlohmann::basic_json::iterator::iterator</a></div><div class="ttdeci">iterator(pointer object) noexcept</div><div class="ttdoc">constructor for a given JSON instance </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l07346">json.hpp:7346</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a7f97a91ad8f1d5cf0b9213bd24f247c4_html_a7f97a91ad8f1d5cf0b9213bd24f247c4"><div class="ttname"><a href="classnlohmann_1_1basic__json_a7f97a91ad8f1d5cf0b9213bd24f247c4.html#a7f97a91ad8f1d5cf0b9213bd24f247c4">nlohmann::basic_json::operator!=</a></div><div class="ttdeci">friend bool operator!=(std::nullptr_t, const_reference v) noexcept</div><div class="ttdoc">comparison: not equal </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l05613">json.hpp:5613</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1json__reverse__iterator_acdfece338718749f2d0b19f77b867036_html_acdfece338718749f2d0b19f77b867036"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_acdfece338718749f2d0b19f77b867036.html#acdfece338718749f2d0b19f77b867036">nlohmann::basic_json::json_reverse_iterator::operator-</a></div><div class="ttdeci">difference_type operator-(const json_reverse_iterator &amp;other) const</div><div class="ttdoc">return difference </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l07544">json.hpp:7544</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a5b3bd4f3fc1458835770c5a22cb74de1_html_a5b3bd4f3fc1458835770c5a22cb74de1"><div class="ttname"><a href="classnlohmann_1_1basic__json_a5b3bd4f3fc1458835770c5a22cb74de1.html#a5b3bd4f3fc1458835770c5a22cb74de1">nlohmann::basic_json::back</a></div><div class="ttdeci">const_reference back() const</div><div class="ttdoc">access the last element </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l03881">json.hpp:3881</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1const__iterator_a8fbb15efd97599209a7def77af8e748e_html_a8fbb15efd97599209a7def77af8e748e"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1const__iterator_a8fbb15efd97599209a7def77af8e748e.html#a8fbb15efd97599209a7def77af8e748e">nlohmann::basic_json::const_iterator::operator++</a></div><div class="ttdeci">const_iterator &amp; operator++()</div><div class="ttdoc">pre-increment (++it) </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l06988">json.hpp:6988</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a957eb9594c7f0ca93212c30f3a400873_html_a957eb9594c7f0ca93212c30f3a400873"><div class="ttname"><a href="classnlohmann_1_1basic__json_a957eb9594c7f0ca93212c30f3a400873.html#a957eb9594c7f0ca93212c30f3a400873">nlohmann::basic_json::is_number</a></div><div class="ttdeci">constexpr bool is_number() const noexcept</div><div class="ttdoc">return whether value is a number </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l02374">json.hpp:2374</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a41aa8439842493e0595928a3e2cb7106_html_a41aa8439842493e0595928a3e2cb7106"><div class="ttname"><a href="classnlohmann_1_1basic__json_a41aa8439842493e0595928a3e2cb7106.html#a41aa8439842493e0595928a3e2cb7106">nlohmann::basic_json::find</a></div><div class="ttdeci">const_iterator find(typename object_t::key_type key) const</div><div class="ttdoc">find an element in a JSON object </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l04231">json.hpp:4231</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_af9587bc58ebfac62b2c6b08799f57c2f_html_af9587bc58ebfac62b2c6b08799f57c2f"><div class="ttname"><a href="classnlohmann_1_1basic__json_af9587bc58ebfac62b2c6b08799f57c2f.html#af9587bc58ebfac62b2c6b08799f57c2f">nlohmann::basic_json::begin</a></div><div class="ttdeci">const_iterator begin() const noexcept</div><div class="ttdoc">returns a const iterator to the first element </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l04311">json.hpp:4311</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1const__iterator_a3a7ed729e72bc7c1d0b75ed8cc2bd830_html_a3a7ed729e72bc7c1d0b75ed8cc2bd830"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1const__iterator_a3a7ed729e72bc7c1d0b75ed8cc2bd830.html#a3a7ed729e72bc7c1d0b75ed8cc2bd830">nlohmann::basic_json::const_iterator::operator&gt;</a></div><div class="ttdeci">bool operator&gt;(const const_iterator &amp;other) const</div><div class="ttdoc">comparison: greater than </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l07147">json.hpp:7147</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1const__iterator_a821560d64f50525162097f19b1392e7f_html_a821560d64f50525162097f19b1392e7f"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1const__iterator_a821560d64f50525162097f19b1392e7f.html#a821560d64f50525162097f19b1392e7f">nlohmann::basic_json::const_iterator::iterator_category</a></div><div class="ttdeci">std::bidirectional_iterator_tag iterator_category</div><div class="ttdoc">the category of the iterator </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l06730">json.hpp:6730</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_aac36af84d907b5c3e469af889661620a_html_aac36af84d907b5c3e469af889661620a"><div class="ttname"><a href="classnlohmann_1_1basic__json_aac36af84d907b5c3e469af889661620a.html#aac36af84d907b5c3e469af889661620a">nlohmann::basic_json::basic_json</a></div><div class="ttdeci">basic_json(boolean_t val) noexcept</div><div class="ttdoc">create a boolean (explicit) </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l01326">json.hpp:1326</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a12ccf14d39ddae52f6c7e126105a230b_html_a12ccf14d39ddae52f6c7e126105a230b"><div class="ttname"><a href="classnlohmann_1_1basic__json_a12ccf14d39ddae52f6c7e126105a230b.html#a12ccf14d39ddae52f6c7e126105a230b">nlohmann::basic_json::end</a></div><div class="ttdeci">iterator end() noexcept</div><div class="ttdoc">returns an iterator to one past the last element </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l04372">json.hpp:4372</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_aaa160a960dd3dd90856a72b1d8dbe707_html_aaa160a960dd3dd90856a72b1d8dbe707"><div class="ttname"><a href="classnlohmann_1_1basic__json_aaa160a960dd3dd90856a72b1d8dbe707.html#aaa160a960dd3dd90856a72b1d8dbe707">nlohmann::basic_json::rend</a></div><div class="ttdeci">reverse_iterator rend() noexcept</div><div class="ttdoc">returns an iterator to the reverse-end </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l04479">json.hpp:4479</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_ad4e381c54039607be08d7af41a1f6ad1_html_ad4e381c54039607be08d7af41a1f6ad1"><div class="ttname"><a href="classnlohmann_1_1basic__json_ad4e381c54039607be08d7af41a1f6ad1.html#ad4e381c54039607be08d7af41a1f6ad1">nlohmann::basic_json::begin</a></div><div class="ttdeci">iterator begin() noexcept</div><div class="ttdoc">returns an iterator to the first element </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l04301">json.hpp:4301</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_aa730d68d55ccc48d2cd4835ff46d2a0f_html_aa730d68d55ccc48d2cd4835ff46d2a0f"><div class="ttname"><a href="classnlohmann_1_1basic__json_aa730d68d55ccc48d2cd4835ff46d2a0f.html#aa730d68d55ccc48d2cd4835ff46d2a0f">nlohmann::basic_json::cend</a></div><div class="ttdeci">const_iterator cend() const noexcept</div><div class="ttdoc">returns a const iterator to one past the last element </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l04412">json.hpp:4412</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_ab7be2bc58ae0c2c2c30d40f15d6399f8_html_ab7be2bc58ae0c2c2c30d40f15d6399f8"><div class="ttname"><a href="classnlohmann_1_1basic__json_ab7be2bc58ae0c2c2c30d40f15d6399f8.html#ab7be2bc58ae0c2c2c30d40f15d6399f8">nlohmann::basic_json::basic_json</a></div><div class="ttdeci">basic_json(const CompatibleObjectType &amp;val)</div><div class="ttdoc">create an object (implicit) </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l01151">json.hpp:1151</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a87db51b6b936fb2ea293cdbc8702dcb8_html_a87db51b6b936fb2ea293cdbc8702dcb8"><div class="ttname"><a href="classnlohmann_1_1basic__json_a87db51b6b936fb2ea293cdbc8702dcb8.html#a87db51b6b936fb2ea293cdbc8702dcb8">nlohmann::basic_json::operator&gt;</a></div><div class="ttdeci">friend bool operator&gt;(const_reference lhs, const_reference rhs) noexcept</div><div class="ttdoc">comparison: greater than </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l05759">json.hpp:5759</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_aa36e72ffc3241b960fe9186d19e03bc3_html_aa36e72ffc3241b960fe9186d19e03bc3"><div class="ttname"><a href="classnlohmann_1_1basic__json_aa36e72ffc3241b960fe9186d19e03bc3.html#aa36e72ffc3241b960fe9186d19e03bc3">nlohmann::basic_json::erase</a></div><div class="ttdeci">size_type erase(const typename object_t::key_type &amp;key)</div><div class="ttdoc">remove element from a JSON object given a key </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l04132">json.hpp:4132</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a92fbb711a36b5ce78ee228b26787c034_html_a92fbb711a36b5ce78ee228b26787c034"><div class="ttname"><a href="classnlohmann_1_1basic__json_a92fbb711a36b5ce78ee228b26787c034.html#a92fbb711a36b5ce78ee228b26787c034">nlohmann::basic_json::operator[]</a></div><div class="ttdeci">reference operator[](const typename object_t::key_type &amp;key)</div><div class="ttdoc">access specified object element </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l03422">json.hpp:3422</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a1c1aa2d148a3e4ce0d4e50cf5b894f41_html_a1c1aa2d148a3e4ce0d4e50cf5b894f41"><div class="ttname"><a href="classnlohmann_1_1basic__json_a1c1aa2d148a3e4ce0d4e50cf5b894f41.html#a1c1aa2d148a3e4ce0d4e50cf5b894f41">nlohmann::basic_json::operator+=</a></div><div class="ttdeci">reference operator+=(basic_json &amp;&amp;val)</div><div class="ttdoc">add an object to an array </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l04918">json.hpp:4918</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1const__iterator_html"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1const__iterator.html">nlohmann::basic_json::const_iterator</a></div><div class="ttdoc">a const random access iterator for the basic_json class </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l06715">json.hpp:6715</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1json__reverse__iterator_html"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1json__reverse__iterator.html">nlohmann::basic_json::json_reverse_iterator</a></div><div class="ttdoc">a template for a reverse iterator class </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l00245">json.hpp:245</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1const__iterator_aefd248cac6493eed1e6ff53ba6a63eb2_html_aefd248cac6493eed1e6ff53ba6a63eb2"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1const__iterator_aefd248cac6493eed1e6ff53ba6a63eb2.html#aefd248cac6493eed1e6ff53ba6a63eb2">nlohmann::basic_json::const_iterator::reference</a></div><div class="ttdeci">typename basic_json::const_reference reference</div><div class="ttdoc">defines a reference to the type iterated over (value_type) </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l06728">json.hpp:6728</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1json__reverse__iterator_a545a8204cfd6836eb85abc3113a0bb28_html_a545a8204cfd6836eb85abc3113a0bb28"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_a545a8204cfd6836eb85abc3113a0bb28.html#a545a8204cfd6836eb85abc3113a0bb28">nlohmann::basic_json::json_reverse_iterator::operator++</a></div><div class="ttdeci">json_reverse_iterator operator++(int)</div><div class="ttdoc">post-increment (it++) </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l07495">json.hpp:7495</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a9730b9f7bc2150e641fe20198d4477c7_html_a9730b9f7bc2150e641fe20198d4477c7"><div class="ttname"><a href="classnlohmann_1_1basic__json_a9730b9f7bc2150e641fe20198d4477c7.html#a9730b9f7bc2150e641fe20198d4477c7">nlohmann::basic_json::operator==</a></div><div class="ttdeci">friend bool operator==(const_reference v, std::nullptr_t) noexcept</div><div class="ttdoc">comparison: equal </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l05551">json.hpp:5551</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a59732a1de287a7301cca19a7a7748159_html_a59732a1de287a7301cca19a7a7748159"><div class="ttname"><a href="classnlohmann_1_1basic__json_a59732a1de287a7301cca19a7a7748159.html#a59732a1de287a7301cca19a7a7748159">nlohmann::basic_json::operator[]</a></div><div class="ttdeci">reference operator[](size_type idx)</div><div class="ttdoc">access specified array element </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l03334">json.hpp:3334</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1json__reverse__iterator_a9accc9dd9f9033f50c0ab6bcf337ffe0_html_a9accc9dd9f9033f50c0ab6bcf337ffe0"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_a9accc9dd9f9033f50c0ab6bcf337ffe0.html#a9accc9dd9f9033f50c0ab6bcf337ffe0">nlohmann::basic_json::json_reverse_iterator::operator+=</a></div><div class="ttdeci">json_reverse_iterator &amp; operator+=(difference_type i)</div><div class="ttdoc">add to iterator </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l07521">json.hpp:7521</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a214a8c22d616fd3567b88932c07436c9_html_a214a8c22d616fd3567b88932c07436c9"><div class="ttname"><a href="classnlohmann_1_1basic__json_a214a8c22d616fd3567b88932c07436c9.html#a214a8c22d616fd3567b88932c07436c9">nlohmann::basic_json::at</a></div><div class="ttdeci">reference at(size_type idx)</div><div class="ttdoc">access specified array element with bounds checking </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l03151">json.hpp:3151</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_ab936779c70bec68343ef440ed13251e5_html_ab936779c70bec68343ef440ed13251e5"><div class="ttname"><a href="classnlohmann_1_1basic__json_ab936779c70bec68343ef440ed13251e5.html#ab936779c70bec68343ef440ed13251e5">nlohmann::basic_json::iterator_wrapper</a></div><div class="ttdeci">static iteration_proxy&lt; iterator &gt; iterator_wrapper(reference cont)</div><div class="ttdoc">wrapper to access iterator member functions in range-based for </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l04566">json.hpp:4566</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a1002d187e05b5323bda5de124cbe95a8_html_a1002d187e05b5323bda5de124cbe95a8"><div class="ttname"><a href="classnlohmann_1_1basic__json_a1002d187e05b5323bda5de124cbe95a8.html#a1002d187e05b5323bda5de124cbe95a8">nlohmann::basic_json::is_discarded</a></div><div class="ttdeci">constexpr bool is_discarded() const noexcept</div><div class="ttdoc">return whether value is discarded </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l02552">json.hpp:2552</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_aa7084e62b93ef0236698b246a58bb2da_html_aa7084e62b93ef0236698b246a58bb2da"><div class="ttname"><a href="classnlohmann_1_1basic__json_aa7084e62b93ef0236698b246a58bb2da.html#aa7084e62b93ef0236698b246a58bb2da">nlohmann::basic_json::crend</a></div><div class="ttdeci">const_reverse_iterator crend() const noexcept</div><div class="ttdoc">returns a const reverse iterator to one before the first </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l04545">json.hpp:4545</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1iterator_afe86d48d3e4e5ebdaaec162b3cf0e95c_html_afe86d48d3e4e5ebdaaec162b3cf0e95c"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1iterator_afe86d48d3e4e5ebdaaec162b3cf0e95c.html#afe86d48d3e4e5ebdaaec162b3cf0e95c">nlohmann::basic_json::iterator::operator-=</a></div><div class="ttdeci">iterator &amp; operator-=(difference_type i)</div><div class="ttdoc">subtract from iterator </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l07417">json.hpp:7417</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a9af5ea68c88f423ddf35216aff7f1813_html_a9af5ea68c88f423ddf35216aff7f1813"><div class="ttname"><a href="classnlohmann_1_1basic__json_a9af5ea68c88f423ddf35216aff7f1813.html#a9af5ea68c88f423ddf35216aff7f1813">nlohmann::basic_json::basic_json</a></div><div class="ttdeci">basic_json(const object_t &amp;val)</div><div class="ttdoc">create an object (explicit) </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l01116">json.hpp:1116</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a85b09b03916d3d1e73373f49cdd4136d_html_a85b09b03916d3d1e73373f49cdd4136d"><div class="ttname"><a href="classnlohmann_1_1basic__json_a85b09b03916d3d1e73373f49cdd4136d.html#a85b09b03916d3d1e73373f49cdd4136d">nlohmann::basic_json::basic_json</a></div><div class="ttdeci">basic_json(const number_unsigned_t val) noexcept</div><div class="ttdoc">create an unsigned integer number (explicit) </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l01453">json.hpp:1453</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a60ca396028b8d9714c6e10efbf475af6_html_a60ca396028b8d9714c6e10efbf475af6"><div class="ttname"><a href="classnlohmann_1_1basic__json_a60ca396028b8d9714c6e10efbf475af6.html#a60ca396028b8d9714c6e10efbf475af6">nlohmann::basic_json::operator&lt;&lt;</a></div><div class="ttdeci">friend std::istream &amp; operator&lt;&lt;(basic_json &amp;j, std::istream &amp;i)</div><div class="ttdoc">deserialize from stream </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l06127">json.hpp:6127</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1json__reverse__iterator_a530f042e2ab1c83dddfc344931b0375a_html_a530f042e2ab1c83dddfc344931b0375a"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1json__reverse__iterator_a530f042e2ab1c83dddfc344931b0375a.html#a530f042e2ab1c83dddfc344931b0375a">nlohmann::basic_json::json_reverse_iterator::json_reverse_iterator</a></div><div class="ttdeci">json_reverse_iterator(const base_iterator &amp;it) noexcept</div><div class="ttdoc">create reverse iterator from base class </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l07490">json.hpp:7490</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_ad797fbde8b35ce96549d4bee5d42b234_html_ad797fbde8b35ce96549d4bee5d42b234"><div class="ttname"><a href="classnlohmann_1_1basic__json_ad797fbde8b35ce96549d4bee5d42b234.html#ad797fbde8b35ce96549d4bee5d42b234">nlohmann::basic_json::operator[]</a></div><div class="ttdeci">const_reference operator[](T *(&amp;key)[n]) const</div><div class="ttdoc">read-only access specified object element </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l03550">json.hpp:3550</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a5e34c5435e557d0bf666bd7311211405_html_a5e34c5435e557d0bf666bd7311211405"><div class="ttname"><a href="classnlohmann_1_1basic__json_a5e34c5435e557d0bf666bd7311211405.html#a5e34c5435e557d0bf666bd7311211405">nlohmann::basic_json::operator&lt;&lt;</a></div><div class="ttdeci">friend std::ostream &amp; operator&lt;&lt;(std::ostream &amp;o, const basic_json &amp;j)</div><div class="ttdoc">serialize to stream </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l05822">json.hpp:5822</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1const__iterator_a18c35a6735d3da96b4fc026421c05dd8_html_a18c35a6735d3da96b4fc026421c05dd8"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1const__iterator_a18c35a6735d3da96b4fc026421c05dd8.html#a18c35a6735d3da96b4fc026421c05dd8">nlohmann::basic_json::const_iterator::const_iterator</a></div><div class="ttdeci">const_iterator(const const_iterator &amp;other) noexcept</div><div class="ttdoc">copy constructor </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l06806">json.hpp:6806</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1iterator_ab3679dc63b3a59edb98b1c2b96d8683c_html_ab3679dc63b3a59edb98b1c2b96d8683c"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1iterator_ab3679dc63b3a59edb98b1c2b96d8683c.html#ab3679dc63b3a59edb98b1c2b96d8683c">nlohmann::basic_json::iterator::operator--</a></div><div class="ttdeci">iterator &amp; operator--()</div><div class="ttdoc">pre-decrement (it) </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l07403">json.hpp:7403</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1const__iterator_acfc918b6350449111ca58af5eb3da999_html_acfc918b6350449111ca58af5eb3da999"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1const__iterator_acfc918b6350449111ca58af5eb3da999.html#acfc918b6350449111ca58af5eb3da999">nlohmann::basic_json::const_iterator::operator*</a></div><div class="ttdeci">reference operator*() const</div><div class="ttdoc">return a reference to the value pointed to by the iterator </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l06900">json.hpp:6900</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a8468efcfcd95db15f46887b29924ed5c_html_a8468efcfcd95db15f46887b29924ed5c"><div class="ttname"><a href="classnlohmann_1_1basic__json_a8468efcfcd95db15f46887b29924ed5c.html#a8468efcfcd95db15f46887b29924ed5c">nlohmann::basic_json::insert</a></div><div class="ttdeci">iterator insert(const_iterator pos, basic_json &amp;&amp;val)</div><div class="ttdoc">inserts element </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l05104">json.hpp:5104</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a4f332e90f3cae562d0c3fa6ba48f74f9_html_a4f332e90f3cae562d0c3fa6ba48f74f9"><div class="ttname"><a href="classnlohmann_1_1basic__json_a4f332e90f3cae562d0c3fa6ba48f74f9.html#a4f332e90f3cae562d0c3fa6ba48f74f9">nlohmann::basic_json::get_ref</a></div><div class="ttdeci">ReferenceType get_ref()</div><div class="ttdoc">get a reference value (implicit) </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l03058">json.hpp:3058</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1const__iterator_aefac8f3e390ac917f021761f4a8f8e71_html_aefac8f3e390ac917f021761f4a8f8e71"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1const__iterator_aefac8f3e390ac917f021761f4a8f8e71.html#aefac8f3e390ac917f021761f4a8f8e71">nlohmann::basic_json::const_iterator::operator-=</a></div><div class="ttdeci">const_iterator &amp; operator-=(difference_type i)</div><div class="ttdoc">subtract from iterator </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l07196">json.hpp:7196</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_ae85d91b0620650bcd9993e09d0e287d9_html_ae85d91b0620650bcd9993e09d0e287d9"><div class="ttname"><a href="classnlohmann_1_1basic__json_ae85d91b0620650bcd9993e09d0e287d9.html#ae85d91b0620650bcd9993e09d0e287d9">nlohmann::basic_json::basic_json</a></div><div class="ttdeci">basic_json(const CompatibleStringType &amp;val)</div><div class="ttdoc">create a string (implicit) </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l01306">json.hpp:1306</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_a4ab93491f82545342562c7ee7e3166c7_html_a4ab93491f82545342562c7ee7e3166c7"><div class="ttname"><a href="classnlohmann_1_1basic__json_a4ab93491f82545342562c7ee7e3166c7.html#a4ab93491f82545342562c7ee7e3166c7">nlohmann::basic_json::basic_json</a></div><div class="ttdeci">basic_json(const basic_json &amp;other)</div><div class="ttdoc">copy constructor </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l01981">json.hpp:1981</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_1_1const__iterator_ae0f996eef6a970b2e654c4f6d33d6f9a_html_ae0f996eef6a970b2e654c4f6d33d6f9a"><div class="ttname"><a href="classnlohmann_1_1basic__json_1_1const__iterator_ae0f996eef6a970b2e654c4f6d33d6f9a.html#ae0f996eef6a970b2e654c4f6d33d6f9a">nlohmann::basic_json::const_iterator::operator&lt;</a></div><div class="ttdeci">bool operator&lt;(const const_iterator &amp;other) const</div><div class="ttdoc">comparison: smaller </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l07105">json.hpp:7105</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_ac7c006e2345a76859c4802db7d130e0e_html_ac7c006e2345a76859c4802db7d130e0e"><div class="ttname"><a href="classnlohmann_1_1basic__json_ac7c006e2345a76859c4802db7d130e0e.html#ac7c006e2345a76859c4802db7d130e0e">nlohmann::basic_json::operator[]</a></div><div class="ttdeci">reference operator[](T *key)</div><div class="ttdoc">access specified object element </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l03583">json.hpp:3583</a></div></div>
<div class="ttc" id="classnlohmann_1_1basic__json_aea1c863b719b4ca5b77188c171bbfafe_html_aea1c863b719b4ca5b77188c171bbfafe"><div class="ttname"><a href="classnlohmann_1_1basic__json_aea1c863b719b4ca5b77188c171bbfafe.html#aea1c863b719b4ca5b77188c171bbfafe">nlohmann::basic_json::parse_event_t</a></div><div class="ttdeci">parse_event_t</div><div class="ttdoc">JSON callback events. </div><div class="ttdef"><b>Definition:</b> <a href="json_8hpp_source.html#l00946">json.hpp:946</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sat Oct 15 2016 16:41:34 for JSON for Modern C++ by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.12
</small></address>
</body>
</html>